[Scummvm-git-logs] scummvm master -> e69d636329c199d20241b48e34a60b94698d774b
aquadran
aquadran at gmail.com
Sat Mar 13 16:34:09 UTC 2021
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
e69d636329 ICB: Reworked some global constructors
Commit: e69d636329c199d20241b48e34a60b94698d774b
https://github.com/scummvm/scummvm/commit/e69d636329c199d20241b48e34a60b94698d774b
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2021-03-13T17:34:02+01:00
Commit Message:
ICB: Reworked some global constructors
Changed paths:
engines/icb/actor_view_pc.cpp
engines/icb/common/px_capri_maths.cpp
engines/icb/common/px_capri_maths.h
engines/icb/common/px_capri_maths_pc.cpp
engines/icb/common/px_capri_maths_pc.h
engines/icb/drawpoly_pc.cpp
engines/icb/fn_movie_pc.cpp
engines/icb/function.cpp
engines/icb/game_script.cpp
engines/icb/global_objects.cpp
engines/icb/global_objects.h
engines/icb/global_objects_psx.cpp
engines/icb/global_objects_psx.h
engines/icb/global_vars.cpp
engines/icb/main_menu_pc.cpp
engines/icb/options_manager_pc.cpp
engines/icb/p4_pc.cpp
engines/icb/session.cpp
engines/icb/sound/fx_manager.cpp
diff --git a/engines/icb/actor_view_pc.cpp b/engines/icb/actor_view_pc.cpp
index b78a29e862..d1088a8f34 100644
--- a/engines/icb/actor_view_pc.cpp
+++ b/engines/icb/actor_view_pc.cpp
@@ -64,15 +64,11 @@ extern int32 texturesUsedThisCycle;
uint32 auto_anim = 2;
// Camera and animation structures
-psxCamera camera;
PXanim *pxanim;
SVECTOR rot; // Actor rotation
SVECTOR _crot; // Camera rotation
int32 uvframe = 0;
-// Actor structure
-psxActor av_actor;
-
// Global filename stuff
char cluster_name[32];
uint32 cluster_name_hash;
@@ -92,7 +88,6 @@ int32 g_repeats;
bool8 g_av_userControlled = FALSE8;
// Lighting structure and coordinates, colour components
-PSXLamp av_Light;
int16 av_LightX;
int16 av_LightY;
int16 av_LightZ;
@@ -368,7 +363,7 @@ void DrawFrame(const int32 frame) {
PSXShadeList the_shades;
the_lights.n = 1;
the_lights.states[0] = 0;
- the_lights.lamps[0] = (PSXLamp *)(&av_Light);
+ the_lights.lamps[0] = g_av_Light;
the_shades.n = 0;
// Open the animation file
@@ -385,11 +380,11 @@ void DrawFrame(const int32 frame) {
PXFrameEnOfAnim(framenum, pxanim)->markers[ORG_POS];
// Make the actors orientation matrix
- av_actor.rot = rot;
- av_actor.rot.vy = (int16)(av_actor.rot.vy);
+ g_av_actor->rot = rot;
+ g_av_actor->rot.vy = (int16)(g_av_actor->rot.vy);
// Make the root local-world matrix
- RotMatrix_gte(&av_actor.rot, &av_actor.lw);
+ RotMatrix_gte(&g_av_actor->rot, &g_av_actor->lw);
// Need to use marker to get correct actor height (making crouch look correct)
PXframe *frm = PXFrameEnOfAnim(framenum, pxanim);
@@ -398,15 +393,15 @@ void DrawFrame(const int32 frame) {
marker.GetXYZ(&mposx, &mposy, &mposz);
int32 dy = (int32)mposy;
- av_actor.lw.t[0] = 0;
- av_actor.lw.t[1] = dy - 112;
- av_actor.lw.t[2] = 0;
+ g_av_actor->lw.t[0] = 0;
+ g_av_actor->lw.t[1] = dy - 112;
+ g_av_actor->lw.t[2] = 0;
// Set the true rotation & position values from the ORG marker
- av_actor.truePos.x = 0;
- av_actor.truePos.y = dy - 112;
- av_actor.truePos.z = 0;
- av_actor.trueRot = av_actor.rot;
+ g_av_actor->truePos.x = 0;
+ g_av_actor->truePos.y = dy - 112;
+ g_av_actor->truePos.z = 0;
+ g_av_actor->trueRot = g_av_actor->rot;
sprintf(pose_name, "%s\\pose.rap", weapon_name);
sprintf(bone_name, "%s\\%s.rab", weapon_name, anim_name);
@@ -474,35 +469,35 @@ void DrawFrame(const int32 frame) {
MATRIXPC local2screen; // not really bothered about this...
// Drawing finally
- DrawActor4PC(&av_actor, &camera, bone_frame, mesh, pose, smesh, &ambient, &the_lights, &the_shades, nShadows, p_n, p_d, debug, uvframe, myBones, &brightness,
+ DrawActor4PC(g_av_actor, g_camera, bone_frame, mesh, pose, smesh, &ambient, &the_lights, &the_shades, nShadows, p_n, p_d, debug, uvframe, myBones, &brightness,
&local2screen);
uvframe++;
}
void MakeCameraView() {
- RotMatrix_gte(&_crot, &camera.view);
+ RotMatrix_gte(&_crot, &g_camera->view);
// Include the x,y,z scalings
- camera.view.m[0][0] = (int16)(camera.view.m[0][0] * 1);
- camera.view.m[0][1] = (int16)(camera.view.m[0][1] * 1);
- camera.view.m[0][2] = (int16)(camera.view.m[0][2] * 1);
- camera.view.m[1][0] = (int16)(camera.view.m[1][0] * 1);
- camera.view.m[1][1] = (int16)(camera.view.m[1][1] * 1);
- camera.view.m[1][2] = (int16)(camera.view.m[1][2] * 1);
- camera.view.m[2][0] = (int16)(camera.view.m[2][0] * 4);
- camera.view.m[2][1] = (int16)(camera.view.m[2][1] * 4);
- camera.view.m[2][2] = (int16)(camera.view.m[2][2] * 4);
+ g_camera->view.m[0][0] = (int16)(g_camera->view.m[0][0] * 1);
+ g_camera->view.m[0][1] = (int16)(g_camera->view.m[0][1] * 1);
+ g_camera->view.m[0][2] = (int16)(g_camera->view.m[0][2] * 1);
+ g_camera->view.m[1][0] = (int16)(g_camera->view.m[1][0] * 1);
+ g_camera->view.m[1][1] = (int16)(g_camera->view.m[1][1] * 1);
+ g_camera->view.m[1][2] = (int16)(g_camera->view.m[1][2] * 1);
+ g_camera->view.m[2][0] = (int16)(g_camera->view.m[2][0] * 4);
+ g_camera->view.m[2][1] = (int16)(g_camera->view.m[2][1] * 4);
+ g_camera->view.m[2][2] = (int16)(g_camera->view.m[2][2] * 4);
}
void ResetCamera() {
_crot.vx = (4096 * 180) / 360;
_crot.vy = (4096 * -30) / 360;
_crot.vz = 0;
- camera.view.t[0] = 170 + av_x;
- camera.view.t[1] = 0 + av_y;
- camera.view.t[2] = 1800 + av_z;
- camera.focLen = 619 * 4;
+ g_camera->view.t[0] = 170 + av_x;
+ g_camera->view.t[1] = 0 + av_y;
+ g_camera->view.t[2] = 1800 + av_z;
+ g_camera->focLen = 619 * 4;
MakeCameraView();
}
@@ -514,25 +509,25 @@ void ResetActor() {
}
void InitLight() {
- av_Light.nStates = 1; // One state
- av_Light.w = 0; // Zero width
- av_Light.b = 0; // Zero bounce
- av_Light.anu = 0; // Don't use it
- av_Light.type = OMNI_LIGHT; // OMNI
- av_Light.ba = 0; // Means nothing for an OMNI
- av_Light.bs = 0; // Means nothing for an OMNI
+ g_av_Light->nStates = 1; // One state
+ g_av_Light->w = 0; // Zero width
+ g_av_Light->b = 0; // Zero bounce
+ g_av_Light->anu = 0; // Don't use it
+ g_av_Light->type = OMNI_LIGHT; // OMNI
+ g_av_Light->ba = 0; // Means nothing for an OMNI
+ g_av_Light->bs = 0; // Means nothing for an OMNI
// Don't think these things are used...
- av_Light.states[0].ans2 = 0;
- av_Light.states[0].ane2 = (100 * 1) * (100 * 1);
+ g_av_Light->states[0].ans2 = 0;
+ g_av_Light->states[0].ane2 = (100 * 1) * (100 * 1);
// No shade...
- av_Light.states[0].m = 128;
+ g_av_Light->states[0].m = 128;
// Direction doesn't matter; it's an OMNI light
- av_Light.states[0].vx = 4096; // Ignored for an OMNI light
- av_Light.states[0].vy = 0; // Ignored for an OMNI light
- av_Light.states[0].vz = 0; // Ignored for an OMNI light
+ g_av_Light->states[0].vx = 4096; // Ignored for an OMNI light
+ g_av_Light->states[0].vy = 0; // Ignored for an OMNI light
+ g_av_Light->states[0].vz = 0; // Ignored for an OMNI light
// Initial angle
av_LightA = 0;
@@ -642,33 +637,33 @@ void SetLight(int32 falloff) {
Fatal_error("ActorView light rgb %d,%d,%d out of range (0-255)", av_LightR, av_LightG, av_LightB);
// Set colours (scale 0-255 to 0-4095)
- av_Light.states[0].c.r = (int16)((av_LightR * 4096) / 256);
- av_Light.states[0].c.g = (int16)((av_LightG * 4096) / 256);
- av_Light.states[0].c.b = (int16)((av_LightB * 4096) / 256);
+ g_av_Light->states[0].c.r = (int16)((av_LightR * 4096) / 256);
+ g_av_Light->states[0].c.g = (int16)((av_LightG * 4096) / 256);
+ g_av_Light->states[0].c.b = (int16)((av_LightB * 4096) / 256);
// Set the v field of colour to be the maximum of r,g,b
- av_Light.states[0].c.v = av_Light.states[0].c.r; // Start at red
- if (av_Light.states[0].c.g > av_Light.states[0].c.v) // If green bigger
- av_Light.states[0].c.v = av_Light.states[0].c.g; // Set to green
- if (av_Light.states[0].c.b > av_Light.states[0].c.v) // If blue bigger
- av_Light.states[0].c.v = av_Light.states[0].c.b; // Set to blue
+ g_av_Light->states[0].c.v = g_av_Light->states[0].c.r; // Start at red
+ if (g_av_Light->states[0].c.g > g_av_Light->states[0].c.v) // If green bigger
+ g_av_Light->states[0].c.v = g_av_Light->states[0].c.g; // Set to green
+ if (g_av_Light->states[0].c.b > g_av_Light->states[0].c.v) // If blue bigger
+ g_av_Light->states[0].c.v = g_av_Light->states[0].c.b; // Set to blue
- av_Light.states[0].pos.vx = (int32)av_LightX;
- av_Light.states[0].pos.vy = (int32)av_LightY;
- av_Light.states[0].pos.vz = (int32)av_LightZ;
+ g_av_Light->states[0].pos.vx = (int32)av_LightX;
+ g_av_Light->states[0].pos.vy = (int32)av_LightY;
+ g_av_Light->states[0].pos.vz = (int32)av_LightZ;
// And add the players position
- av_Light.states[0].pos.vx += (int32)av_actor.truePos.x;
- av_Light.states[0].pos.vy += (int32)av_actor.truePos.y;
- av_Light.states[0].pos.vz += (int32)av_actor.truePos.z;
+ g_av_Light->states[0].pos.vx += (int32)g_av_actor->truePos.x;
+ g_av_Light->states[0].pos.vy += (int32)g_av_actor->truePos.y;
+ g_av_Light->states[0].pos.vz += (int32)g_av_actor->truePos.z;
// Falloff
if (falloff == 0) {
- av_Light.afu = 0; // Don't use it
+ g_av_Light->afu = 0; // Don't use it
} else {
- av_Light.states[0].afs2 = (falloff * falloff) / 100; // (d/10)^2 = (d*d)/100
- av_Light.states[0].afe2 = falloff * falloff; // d^2 = (d*d)
- av_Light.afu = 1; // Use it
+ g_av_Light->states[0].afs2 = (falloff * falloff) / 100; // (d/10)^2 = (d*d)/100
+ g_av_Light->states[0].afe2 = falloff * falloff; // d^2 = (d*d)
+ g_av_Light->afu = 1; // Use it
}
}
diff --git a/engines/icb/common/px_capri_maths.cpp b/engines/icb/common/px_capri_maths.cpp
index e05aebce0a..b9c9c4f24b 100644
--- a/engines/icb/common/px_capri_maths.cpp
+++ b/engines/icb/common/px_capri_maths.cpp
@@ -33,10 +33,10 @@
namespace ICB {
-MATRIX gterot;
-MATRIX gtetrans;
-MATRIX gtecolour;
-MATRIX gtelight;
+MATRIX *gterot;
+MATRIX *gtetrans;
+MATRIX *gtecolour;
+MATRIX *gtelight;
short gteback[3];
int32 gtegeomscrn;
uint8 dcache[1024];
diff --git a/engines/icb/common/px_capri_maths.h b/engines/icb/common/px_capri_maths.h
index 7b672a84b9..a2ae884b5d 100644
--- a/engines/icb/common/px_capri_maths.h
+++ b/engines/icb/common/px_capri_maths.h
@@ -97,10 +97,10 @@ inline int32 myNINT(float f) {
#define gte_NormalClip mygte_NormalClip
#define gte_AverageZ3 mygte_AverageZ3
-extern MATRIX gterot;
-extern MATRIX gtetrans;
-extern MATRIX gtecolour;
-extern MATRIX gtelight;
+extern MATRIX *gterot;
+extern MATRIX *gtetrans;
+extern MATRIX *gtecolour;
+extern MATRIX *gtelight;
extern int16 gteback[3];
extern int32 gtegeomscrn;
extern uint8 dcache[1024];
@@ -189,21 +189,21 @@ inline void mygte_MulMatrix0(MATRIX *m1, MATRIX *m2, MATRIX *out) {
}
}
-inline void mygte_SetRotMatrix(MATRIX *m) { gterot = *m; }
+inline void mygte_SetRotMatrix(MATRIX *m) { *gterot = *m; }
-inline void mygte_SetTransMatrix(MATRIX *m) { gtetrans = *m; }
+inline void mygte_SetTransMatrix(MATRIX *m) { *gtetrans = *m; }
inline void mygte_ApplyRotMatrix(SVECTOR *invec, VECTOR *outvec) {
- outvec->vx = (((int)gterot.m[0][0] * (int)invec->vx + (int)gterot.m[0][1] * (int)invec->vy + (int)gterot.m[0][2] * (int)invec->vz) / 4096);
- outvec->vy = (((int)gterot.m[1][0] * (int)invec->vx + (int)gterot.m[1][1] * (int)invec->vy + (int)gterot.m[1][2] * (int)invec->vz) / 4096);
- outvec->vz = (((int)gterot.m[2][0] * (int)invec->vx + (int)gterot.m[2][1] * (int)invec->vy + (int)gterot.m[2][2] * (int)invec->vz) / 4096);
+ outvec->vx = (((int)gterot->m[0][0] * (int)invec->vx + (int)gterot->m[0][1] * (int)invec->vy + (int)gterot->m[0][2] * (int)invec->vz) / 4096);
+ outvec->vy = (((int)gterot->m[1][0] * (int)invec->vx + (int)gterot->m[1][1] * (int)invec->vy + (int)gterot->m[1][2] * (int)invec->vz) / 4096);
+ outvec->vz = (((int)gterot->m[2][0] * (int)invec->vx + (int)gterot->m[2][1] * (int)invec->vy + (int)gterot->m[2][2] * (int)invec->vz) / 4096);
}
inline void mygte_RotTrans(SVECTOR *in0, VECTOR *out0, int32 *flag) {
mygte_ApplyRotMatrix(in0, out0);
- out0->vx += gtetrans.t[0];
- out0->vy += gtetrans.t[1];
- out0->vz += gtetrans.t[2];
+ out0->vx += gtetrans->t[0];
+ out0->vy += gtetrans->t[1];
+ out0->vz += gtetrans->t[2];
// What GTE flags should we set ?
*flag = 0;
@@ -314,16 +314,16 @@ inline void mygte_SetBackColor(int32 r, int32 g, int32 b) {
gteback[2] = (int16)b;
}
-inline void mygte_SetColorMatrix(MATRIX *m) { gtecolour = *m; }
+inline void mygte_SetColorMatrix(MATRIX *m) { *gtecolour = *m; }
-inline void mygte_SetLightMatrix(MATRIX *m) { gtelight = *m; }
+inline void mygte_SetLightMatrix(MATRIX *m) { *gtelight = *m; }
inline void mygte_SetGeomScreen(int32 h) { gtegeomscrn = h; }
inline void mygte_NormalColorCol(SVECTOR *v0, CVECTOR *in0, CVECTOR *out0) {
SVECTOR lightEffect;
// Normal line vector(local) -> light source effect
- ApplyMatrixSV(>elight, v0, &lightEffect);
+ ApplyMatrixSV(gtelight, v0, &lightEffect);
if (lightEffect.vx < 0)
lightEffect.vx = 0;
if (lightEffect.vy < 0)
@@ -333,7 +333,7 @@ inline void mygte_NormalColorCol(SVECTOR *v0, CVECTOR *in0, CVECTOR *out0) {
// Light source effect -> Colour effect(local colour matrix+back colour)
SVECTOR colourEffect;
- ApplyMatrixSV(>ecolour, &lightEffect, &colourEffect);
+ ApplyMatrixSV(gtecolour, &lightEffect, &colourEffect);
if (colourEffect.vx < 0)
colourEffect.vx = 0;
if (colourEffect.vy < 0)
diff --git a/engines/icb/common/px_capri_maths_pc.cpp b/engines/icb/common/px_capri_maths_pc.cpp
index 1fba731b3c..0e540827e7 100644
--- a/engines/icb/common/px_capri_maths_pc.cpp
+++ b/engines/icb/common/px_capri_maths_pc.cpp
@@ -33,10 +33,10 @@
namespace ICB {
-MATRIXPC gterot_pc;
-MATRIXPC gtetrans_pc;
-MATRIXPC gtecolour_pc;
-MATRIXPC gtelight_pc;
+MATRIXPC *gterot_pc;
+MATRIXPC *gtetrans_pc;
+MATRIXPC *gtecolour_pc;
+MATRIXPC *gtelight_pc;
int32 gteback_pc[3];
int32 gtegeomscrn_pc;
int32 gtescreenscaleshift_pc = 0;
diff --git a/engines/icb/common/px_capri_maths_pc.h b/engines/icb/common/px_capri_maths_pc.h
index f0803aaa41..336be71fa3 100644
--- a/engines/icb/common/px_capri_maths_pc.h
+++ b/engines/icb/common/px_capri_maths_pc.h
@@ -105,10 +105,10 @@ inline int32 myNINT_PC(float f) {
//------------------------------------------------------------------------
-extern MATRIXPC gterot_pc;
-extern MATRIXPC gtetrans_pc;
-extern MATRIXPC gtecolour_pc;
-extern MATRIXPC gtelight_pc;
+extern MATRIXPC *gterot_pc;
+extern MATRIXPC *gtetrans_pc;
+extern MATRIXPC *gtecolour_pc;
+extern MATRIXPC *gtelight_pc;
extern int32 gteback_pc[3];
extern int32 gtegeomscrn_pc;
extern int32 gtescreenscaleshift_pc;
@@ -219,27 +219,27 @@ inline void mygte_MulMatrix0_pc(MATRIXPC *m1, MATRIXPC *m2, MATRIXPC *out) {
//------------------------------------------------------------------------
-inline void mygte_SetRotMatrix_pc(MATRIXPC *m) { gterot_pc = *m; }
+inline void mygte_SetRotMatrix_pc(MATRIXPC *m) { *gterot_pc = *m; }
//------------------------------------------------------------------------
-inline void mygte_SetTransMatrix_pc(MATRIXPC *m) { gtetrans_pc = *m; }
+inline void mygte_SetTransMatrix_pc(MATRIXPC *m) { *gtetrans_pc = *m; }
//------------------------------------------------------------------------
inline void mygte_ApplyRotMatrix_pc(SVECTORPC *invec, VECTOR *outvec) {
- outvec->vx = ((gterot_pc.m[0][0] * invec->vx + gterot_pc.m[0][1] * invec->vy + gterot_pc.m[0][2] * invec->vz) / ONE_PC);
- outvec->vy = ((gterot_pc.m[1][0] * invec->vx + gterot_pc.m[1][1] * invec->vy + gterot_pc.m[1][2] * invec->vz) / ONE_PC);
- outvec->vz = ((gterot_pc.m[2][0] * invec->vx + gterot_pc.m[2][1] * invec->vy + gterot_pc.m[2][2] * invec->vz) / ONE_PC);
+ outvec->vx = ((gterot_pc->m[0][0] * invec->vx + gterot_pc->m[0][1] * invec->vy + gterot_pc->m[0][2] * invec->vz) / ONE_PC);
+ outvec->vy = ((gterot_pc->m[1][0] * invec->vx + gterot_pc->m[1][1] * invec->vy + gterot_pc->m[1][2] * invec->vz) / ONE_PC);
+ outvec->vz = ((gterot_pc->m[2][0] * invec->vx + gterot_pc->m[2][1] * invec->vy + gterot_pc->m[2][2] * invec->vz) / ONE_PC);
}
//------------------------------------------------------------------------
inline void mygte_RotTrans_pc(SVECTORPC *in0, VECTOR *out0, int32 *flag) {
mygte_ApplyRotMatrix_pc(in0, out0);
- out0->vx += gtetrans_pc.t[0];
- out0->vy += gtetrans_pc.t[1];
- out0->vz += gtetrans_pc.t[2];
+ out0->vx += gtetrans_pc->t[0];
+ out0->vy += gtetrans_pc->t[1];
+ out0->vz += gtetrans_pc->t[2];
// What GTE flags should we set ?
*flag = 0;
@@ -255,9 +255,9 @@ inline void mygte_RotTrans_pc(SVECTOR *in0, VECTOR *out0, int32 *flag) {
mygte_ApplyRotMatrix_pc(&sv_pc, out0);
- out0->vx += gtetrans_pc.t[0];
- out0->vy += gtetrans_pc.t[1];
- out0->vz += gtetrans_pc.t[2];
+ out0->vx += gtetrans_pc->t[0];
+ out0->vy += gtetrans_pc->t[1];
+ out0->vz += gtetrans_pc->t[2];
// What GTE flags should we set ?
*flag = 0;
@@ -267,12 +267,12 @@ inline void mygte_RotTrans_pc(SVECTOR *in0, VECTOR *out0, int32 *flag) {
inline void mygte_RotTransPers_pc(SVECTORPC *in0, SVECTORPC *sxy0, int32 * /* p */, int32 *flag, int32 *z) {
VECTOR cam;
- cam.vx = ((gterot_pc.m[0][0] * in0->vx + gterot_pc.m[0][1] * in0->vy + gterot_pc.m[0][2] * in0->vz) / ONE_PC);
- cam.vy = ((gterot_pc.m[1][0] * in0->vx + gterot_pc.m[1][1] * in0->vy + gterot_pc.m[1][2] * in0->vz) / ONE_PC);
- cam.vz = ((gterot_pc.m[2][0] * in0->vx + gterot_pc.m[2][1] * in0->vy + gterot_pc.m[2][2] * in0->vz) / ONE_PC);
- cam.vx += (gtetrans_pc.t[0] << gtescreenscaleshift_pc);
- cam.vy += (gtetrans_pc.t[1] << gtescreenscaleshift_pc);
- cam.vz += (gtetrans_pc.t[2] << gtescreenscaleshift_pc);
+ cam.vx = ((gterot_pc->m[0][0] * in0->vx + gterot_pc->m[0][1] * in0->vy + gterot_pc->m[0][2] * in0->vz) / ONE_PC);
+ cam.vy = ((gterot_pc->m[1][0] * in0->vx + gterot_pc->m[1][1] * in0->vy + gterot_pc->m[1][2] * in0->vz) / ONE_PC);
+ cam.vz = ((gterot_pc->m[2][0] * in0->vx + gterot_pc->m[2][1] * in0->vy + gterot_pc->m[2][2] * in0->vz) / ONE_PC);
+ cam.vx += (gtetrans_pc->t[0] << gtescreenscaleshift_pc);
+ cam.vy += (gtetrans_pc->t[1] << gtescreenscaleshift_pc);
+ cam.vz += (gtetrans_pc->t[2] << gtescreenscaleshift_pc);
*flag = 0;
@@ -302,12 +302,12 @@ inline void mygte_RotTransPers_pc(SVECTORPC *in0, SVECTORPC *sxy0, int32 * /* p
inline void mygte_RotTransPers_pc(SVECTOR *in0, SVECTORPC *sxy0, int32 * /* p */, int32 *flag, int32 *z) {
VECTOR cam;
- cam.vx = ((gterot_pc.m[0][0] * (int)in0->vx + gterot_pc.m[0][1] * (int)in0->vy + gterot_pc.m[0][2] * (int)in0->vz) / ONE_PC);
- cam.vy = ((gterot_pc.m[1][0] * (int)in0->vx + gterot_pc.m[1][1] * (int)in0->vy + gterot_pc.m[1][2] * (int)in0->vz) / ONE_PC);
- cam.vz = ((gterot_pc.m[2][0] * (int)in0->vx + gterot_pc.m[2][1] * (int)in0->vy + gterot_pc.m[2][2] * (int)in0->vz) / ONE_PC);
- cam.vx += (gtetrans_pc.t[0] << gtescreenscaleshift_pc);
- cam.vy += (gtetrans_pc.t[1] << gtescreenscaleshift_pc);
- cam.vz += (gtetrans_pc.t[2] << gtescreenscaleshift_pc);
+ cam.vx = ((gterot_pc->m[0][0] * (int)in0->vx + gterot_pc->m[0][1] * (int)in0->vy + gterot_pc->m[0][2] * (int)in0->vz) / ONE_PC);
+ cam.vy = ((gterot_pc->m[1][0] * (int)in0->vx + gterot_pc->m[1][1] * (int)in0->vy + gterot_pc->m[1][2] * (int)in0->vz) / ONE_PC);
+ cam.vz = ((gterot_pc->m[2][0] * (int)in0->vx + gterot_pc->m[2][1] * (int)in0->vy + gterot_pc->m[2][2] * (int)in0->vz) / ONE_PC);
+ cam.vx += (gtetrans_pc->t[0] << gtescreenscaleshift_pc);
+ cam.vy += (gtetrans_pc->t[1] << gtescreenscaleshift_pc);
+ cam.vz += (gtetrans_pc->t[2] << gtescreenscaleshift_pc);
*flag = 0;
@@ -416,11 +416,11 @@ inline void mygte_SetBackColor_pc(int32 r, int32 g, int32 b) {
//------------------------------------------------------------------------
-inline void mygte_SetColorMatrix_pc(MATRIXPC *m) { gtecolour_pc = *m; }
+inline void mygte_SetColorMatrix_pc(MATRIXPC *m) { *gtecolour_pc = *m; }
//------------------------------------------------------------------------
-inline void mygte_SetLightMatrix_pc(MATRIXPC *m) { gtelight_pc = *m; }
+inline void mygte_SetLightMatrix_pc(MATRIXPC *m) { *gtelight_pc = *m; }
//------------------------------------------------------------------------
@@ -431,7 +431,7 @@ inline void mygte_SetGeomScreen_pc(int32 h) { gtegeomscrn_pc = h; }
inline void mygte_NormalColorCol_pc(SVECTOR *v0, CVECTOR *in0, CVECTOR *out0) {
SVECTORPC lightEffect;
// Normal line vector(local) -> light source effect
- ApplyMatrixSV_pc(>elight_pc, v0, &lightEffect);
+ ApplyMatrixSV_pc(gtelight_pc, v0, &lightEffect);
if (lightEffect.vx < 0)
lightEffect.vx = 0;
if (lightEffect.vy < 0)
@@ -441,7 +441,7 @@ inline void mygte_NormalColorCol_pc(SVECTOR *v0, CVECTOR *in0, CVECTOR *out0) {
// Light source effect -> Colour effect(local colour matrix+back colour)
SVECTORPC colourEffect;
- ApplyMatrixSV_pc(>ecolour_pc, &lightEffect, &colourEffect);
+ ApplyMatrixSV_pc(gtecolour_pc, &lightEffect, &colourEffect);
if (colourEffect.vx < 0)
colourEffect.vx = 0;
if (colourEffect.vy < 0)
diff --git a/engines/icb/drawpoly_pc.cpp b/engines/icb/drawpoly_pc.cpp
index b44b3c48ee..e79be9b443 100644
--- a/engines/icb/drawpoly_pc.cpp
+++ b/engines/icb/drawpoly_pc.cpp
@@ -79,7 +79,7 @@ uint8 selPAlpha = 0;
inline void LightPolygon(SVECTOR *n0, CVECTOR *rgbIn, CVECTOR *rgb0) {
SVECTORPC lightEffect;
// Normal line vector(local) -> light source effect
- ApplyMatrixSV_pc(>elight_pc, n0, &lightEffect);
+ ApplyMatrixSV_pc(gtelight_pc, n0, &lightEffect);
if (useLampWidth) {
lightEffect.vx = (int16)(lightEffect.vx + lampWidth[0]);
@@ -113,7 +113,7 @@ inline void LightPolygon(SVECTOR *n0, CVECTOR *rgbIn, CVECTOR *rgb0) {
// Light source effect -> Colour effect(local colour matrix+back colour)
SVECTORPC colourEffect;
- ApplyMatrixSV_pc(>ecolour_pc, &lightEffect, &colourEffect);
+ ApplyMatrixSV_pc(gtecolour_pc, &lightEffect, &colourEffect);
if (colourEffect.vx < 0)
colourEffect.vx = 0;
if (colourEffect.vy < 0)
diff --git a/engines/icb/fn_movie_pc.cpp b/engines/icb/fn_movie_pc.cpp
index 451de7cba8..5f2c0b45c2 100644
--- a/engines/icb/fn_movie_pc.cpp
+++ b/engines/icb/fn_movie_pc.cpp
@@ -155,7 +155,7 @@ void Init_play_movie(const char *param0, bool8 param1) {
// Bink is now active and playing
// Successfully opened a bink sequence so set the engine to play and display it
- stub.Push_stub_mode(__sequence);
+ g_stub->Push_stub_mode(__sequence);
} else {
Fatal_error(pxVString("Couldn't register the movie: %s", (const char *)fullname));
}
diff --git a/engines/icb/function.cpp b/engines/icb/function.cpp
index 0f7c12f9c5..2123d0cf00 100644
--- a/engines/icb/function.cpp
+++ b/engines/icb/function.cpp
@@ -337,7 +337,7 @@ mcodeFunctionReturnCodes _game_session::fn_create_mega(int32 &, int32 *) {
Zdebug("FN_create_mega");
// assign _mega object
- logic_structs[cur_id]->mega = &megas[num_megas];
+ logic_structs[cur_id]->mega = g_megas[num_megas];
logic_structs[cur_id]->mega->___init();
@@ -434,7 +434,7 @@ mcodeFunctionReturnCodes _game_session::fn_set_voxel_image_path(int32 &, int32 *
// create _vox_image object
if (!logic_structs[cur_id]->voxel_info) {
// assign a struct
- logic_structs[cur_id]->voxel_info = &vox_images[num_vox_images];
+ logic_structs[cur_id]->voxel_info = g_vox_images[num_vox_images];
num_vox_images++;
}
diff --git a/engines/icb/game_script.cpp b/engines/icb/game_script.cpp
index d40eeb2ee1..d08ff4b702 100644
--- a/engines/icb/game_script.cpp
+++ b/engines/icb/game_script.cpp
@@ -164,7 +164,7 @@ void _game_script::Process_game_script() {
case 'X': // yes, its the amazing X mode - t h e m a i n m e n u -
Fetch_next_line();
- stub.Push_stub_mode(__toe_on_door);
+ g_stub->Push_stub_mode(__toe_on_door);
break;
case 'W':
@@ -182,7 +182,7 @@ void _game_script::Process_game_script() {
if (Setup_new_mission(p1, p2)) { // mission_name, session_name
// only do actor relative on pc
MS->player.Set_control_mode(ACTOR_RELATIVE);
- stub.Push_stub_mode(__mission_and_console);
+ g_stub->Push_stub_mode(__mission_and_console);
} else {
Fatal_error("no such mission-session [%s][%s]", p1, p2);
}
@@ -208,7 +208,7 @@ void _game_script::Process_game_script() {
case 'P':
Fetch_next_line();
MS->player.Set_control_mode(ACTOR_RELATIVE);
- stub.Push_stub_mode(__mission_and_console);
+ g_stub->Push_stub_mode(__mission_and_console);
break;
case 'T':
@@ -222,7 +222,7 @@ void _game_script::Process_game_script() {
warning("text scrolly %s over movie/screen %s starting frame %d", p1, p2, atoi(p3));
InitisliaseScrollingText(p1, p2, atoi(p3));
- stub.Push_stub_mode(__scrolling_text);
+ g_stub->Push_stub_mode(__scrolling_text);
break;
case 'G':
diff --git a/engines/icb/global_objects.cpp b/engines/icb/global_objects.cpp
index 46b50edac5..64cc3ca9cc 100644
--- a/engines/icb/global_objects.cpp
+++ b/engines/icb/global_objects.cpp
@@ -83,12 +83,12 @@ _game_session *g_icb_session;
// session objects
_barrier_handler g_icb_session_barriers;
_floor_world *g_icb_session_floors;
-_logic logics[MAX_session_objects];
-_mega megas[MAX_voxel_list];
-_vox_image vox_images[MAX_voxel_list];
+_logic *g_logics[MAX_session_objects];
+_mega *g_megas[MAX_voxel_list];
+_vox_image *g_vox_images[MAX_voxel_list];
// master modes
-_stub stub;
+_stub *g_stub;
// game script manager
_game_script gs;
diff --git a/engines/icb/global_objects.h b/engines/icb/global_objects.h
index f29931f9ef..e468a70711 100644
--- a/engines/icb/global_objects.h
+++ b/engines/icb/global_objects.h
@@ -68,7 +68,7 @@ class _mission;
// holds info about current mission
extern _mission *g_mission;
-extern _stub stub;
+extern _stub *g_stub;
// game script manager
extern _game_script gs;
@@ -79,9 +79,9 @@ extern _game_session *g_icb_session;
// session objects
extern _barrier_handler g_icb_session_barriers;
extern _floor_world *g_icb_session_floors;
-extern _logic logics[MAX_session_objects];
-extern _mega megas[MAX_voxel_list];
-extern _vox_image vox_images[MAX_voxel_list];
+extern _logic *g_logics[MAX_session_objects];
+extern _mega *g_megas[MAX_voxel_list];
+extern _vox_image *g_vox_images[MAX_voxel_list];
// For choosing different sessions & missions
#define NUMBER_OF_MISSIONS (11)
diff --git a/engines/icb/global_objects_psx.cpp b/engines/icb/global_objects_psx.cpp
index 4fccdf3a9a..9c8e5dd816 100644
--- a/engines/icb/global_objects_psx.cpp
+++ b/engines/icb/global_objects_psx.cpp
@@ -37,6 +37,15 @@ TextureManager *tman;
// The 3 directional lights and the ambient light
psxLight Lights[4];
+// Camera and animation structures
+psxCamera *g_camera;
+
+// Actor structure
+psxActor *g_av_actor;
+
+// Lighting structure and coordinates, colour components
+PSXLamp *g_av_Light;
+
#if CD_BUILD == 0
// Colour of the z-fragments outlines
int32 zfragRed = 255;
diff --git a/engines/icb/global_objects_psx.h b/engines/icb/global_objects_psx.h
index 75551d782d..385c6d7d08 100644
--- a/engines/icb/global_objects_psx.h
+++ b/engines/icb/global_objects_psx.h
@@ -32,6 +32,9 @@
#include "engines/icb/surface_manager.h"
#include "engines/icb/gfx/psx_light.h"
#include "engines/icb/gfx/psx_tman.h"
+#include "engines/icb/gfx/psx_camera.h"
+#include "engines/icb/gfx/psx_pxactor.h"
+#include "engines/icb/gfx/rlp_api.h"
namespace ICB {
@@ -41,6 +44,15 @@ extern TextureManager *tman;
// The 3 directional lights and the ambient light
extern psxLight Lights[4];
+// Camera and animation structures
+extern psxCamera *g_camera;
+
+// Actor structure
+extern psxActor *g_av_actor;
+
+// Lighting structure and coordinates, colour components
+extern PSXLamp *g_av_Light;
+
// Colour of the actors bounding box
extern int32 bboxRed;
extern int32 bboxGreen;
diff --git a/engines/icb/global_vars.cpp b/engines/icb/global_vars.cpp
index e644f7e34c..60d09a3da2 100644
--- a/engines/icb/global_vars.cpp
+++ b/engines/icb/global_vars.cpp
@@ -33,6 +33,7 @@
#include "engines/icb/mission.h"
#include "engines/icb/object_structs.h"
#include "engines/icb/global_objects.h"
+#include "engines/icb/global_objects_psx.h"
#include "engines/icb/debug.h"
#include "engines/icb/res_man.h"
#include "engines/icb/movie_pc.h"
@@ -41,6 +42,11 @@
#include "engines/icb/options_manager_pc.h"
#include "engines/icb/floors.h"
#include "engines/icb/remora.h"
+#include "engines/icb/gfx/psx_camera.h"
+#include "engines/icb/gfx/psx_pxactor.h"
+#include "engines/icb/gfx/rlp_api.h"
+#include "engines/icb/common/px_capri_maths_pc.h"
+#include "engines/icb/common/px_capri_maths.h"
namespace ICB {
@@ -137,6 +143,25 @@ void CreateGlobalObjects() {
g_icb_session_floors = new _floor_world;
g_text_bloc1 = new text_sprite;
g_text_bloc2 = new text_sprite;
+ g_av_actor = new psxActor;
+ g_camera = new psxCamera;
+ g_av_Light = new PSXLamp;
+ for (int i = 0; i < MAX_voxel_list; i++) {
+ g_megas[i] = new _mega;
+ g_vox_images[i] = new _vox_image;
+ }
+ for (int i = 0; i < MAX_session_objects; i++)
+ g_logics[i] = new _logic;
+ g_stub = new _stub;
+ gterot_pc = new MATRIXPC;
+ gtetrans_pc = new MATRIXPC;
+ gtecolour_pc = new MATRIXPC;
+ gtelight_pc = new MATRIXPC;
+ gterot = new MATRIX;
+ gtetrans = new MATRIX;
+ gtecolour = new MATRIX;
+ gtelight = new MATRIX;
+
// The order of creation matters:
g_oEventManager = new _event_manager;
g_oLineOfSight = new _line_of_sight;
@@ -157,6 +182,25 @@ void DestroyGlobalObjects() {
delete g_icb_session_floors;
delete g_text_bloc1;
delete g_text_bloc2;
+ delete g_camera;
+ delete g_av_actor;
+ delete g_av_Light;
+ for (int i = 0; i < MAX_voxel_list; i++) {
+ delete g_megas[i];
+ delete g_vox_images[i];
+ }
+ for (int i = 0; i < MAX_session_objects; i++)
+ delete g_logics[i];
+ delete g_stub;
+ delete gterot_pc;
+ delete gtetrans_pc;
+ delete gtecolour_pc;
+ delete gtelight_pc;
+ delete gterot;
+ delete gtetrans;
+ delete gtecolour;
+ delete gtelight;
+
delete g_oEventManager;
delete g_oLineOfSight;
delete g_oIconMenu;
diff --git a/engines/icb/main_menu_pc.cpp b/engines/icb/main_menu_pc.cpp
index 2f350c4837..f6488fb2b9 100644
--- a/engines/icb/main_menu_pc.cpp
+++ b/engines/icb/main_menu_pc.cpp
@@ -42,7 +42,7 @@ void Main_menu() {
} else {
// OptionsManager is in control
g_theOptionsManager->CycleLogic();
- stub.Update_screen();
+ g_stub->Update_screen();
}
}
@@ -52,13 +52,13 @@ void Pause_menu() {
g_theOptionsManager->ForceInGameScreenRefresh();
g_theOptionsManager->CycleLogic();
- stub.Update_screen();
+ g_stub->Update_screen();
}
void Credits() {
uint32 t = GetMicroTimer();
g_theOptionsManager->DoCredits();
- stub.Update_screen();
+ g_stub->Update_screen();
t = GetMicroTimer() - t;
// As the DoCredits() function takes a variable time this timing code
@@ -135,7 +135,7 @@ void InitisliaseScrollingText(const char *textFileName, const char *movieFileNam
void ScrollingText() {
uint32 t = GetMicroTimer();
g_theOptionsManager->DoScrollingText();
- stub.Update_screen();
+ g_stub->Update_screen();
t = GetMicroTimer() - t;
#ifdef PC_DEMO
@@ -161,7 +161,7 @@ void Gameover_menu() {
g_theOptionsManager->ForceInGameScreenRefresh();
g_theOptionsManager->CycleLogic();
- stub.Update_screen();
+ g_stub->Update_screen();
}
}
diff --git a/engines/icb/options_manager_pc.cpp b/engines/icb/options_manager_pc.cpp
index d075896c16..468d4a3cbb 100644
--- a/engines/icb/options_manager_pc.cpp
+++ b/engines/icb/options_manager_pc.cpp
@@ -598,7 +598,7 @@ void OptionsManager::KillAllSurfii() {
void OptionsManager::StartInGameOptions() {
// Pauses the game and presents the in game options
- stub.Push_stub_mode(__pause_menu);
+ g_stub->Push_stub_mode(__pause_menu);
if (g_theSpeechManager)
g_theSpeechManager->PauseSpeech();
@@ -756,7 +756,7 @@ void OptionsManager::CycleInGameOptionsLogic() {
if ((m_thatsEnoughTa) && (m_autoAnimating < 0)) {
// Refresh entire screen
surface_manager->Clear_surface(working_buffer_id);
- stub.Update_screen();
+ g_stub->Update_screen();
// Free up any resources we have used
KillAllSurfii();
@@ -766,7 +766,7 @@ void OptionsManager::CycleInGameOptionsLogic() {
// An extra pop needed to return control to gamescript
if (g_resetToTitleScreen) {
g_resetToTitleScreen = FALSE8;
- stub.Pop_stub_mode();
+ g_stub->Pop_stub_mode();
} else {
// Resume the engines sounds
UnpauseSounds();
@@ -774,7 +774,7 @@ void OptionsManager::CycleInGameOptionsLogic() {
}
// Then quit
- stub.Pop_stub_mode();
+ g_stub->Pop_stub_mode();
m_haveControl = FALSE8;
return;
@@ -807,11 +807,11 @@ void OptionsManager::CycleGameOverLogic() {
// An extra pop needed to return control to gamescript
if (g_resetToTitleScreen) {
g_resetToTitleScreen = FALSE8;
- stub.Pop_stub_mode();
+ g_stub->Pop_stub_mode();
}
// Then quit
- stub.Pop_stub_mode();
+ g_stub->Pop_stub_mode();
m_haveControl = FALSE8;
// Specifically for the Restart Mission command but can't hurt anyway
@@ -1750,10 +1750,10 @@ void OptionsManager::CycleMainOptionsLogic() {
if (!g_mainMenuLoadPlease) {
// If we want a new game then just pop to gamescript
- stub.Pop_stub_mode();
+ g_stub->Pop_stub_mode();
} else {
// When loading a game this sets the right gamescript position
- stub.Set_current_stub_mode(__mission_and_console);
+ g_stub->Set_current_stub_mode(__mission_and_console);
}
UnpauseSounds();
@@ -2407,15 +2407,15 @@ void OptionsManager::AlterSelected(bool8 _right_) {
case FRAMELIMITER:
if (_right_) {
- if (stub.cycle_speed < 200)
- stub.cycle_speed += 10;
- else if (stub.cycle_speed < 951)
- stub.cycle_speed += 50;
+ if (g_stub->cycle_speed < 200)
+ g_stub->cycle_speed += 10;
+ else if (g_stub->cycle_speed < 951)
+ g_stub->cycle_speed += 50;
} else {
- if (stub.cycle_speed > 200)
- stub.cycle_speed -= 50;
- else if (stub.cycle_speed > 10)
- stub.cycle_speed -= 10;
+ if (g_stub->cycle_speed > 200)
+ g_stub->cycle_speed -= 50;
+ else if (g_stub->cycle_speed > 10)
+ g_stub->cycle_speed -= 10;
}
PlayChosenFX();
Poll_Sound_Engine();
@@ -2743,7 +2743,7 @@ void OptionsManager::DoChoice() {
m_M_PROFILES_selected = CORD;
break;
case CREDITS:
- stub.Push_stub_mode(__credits);
+ g_stub->Push_stub_mode(__credits);
break;
case ALLDONE:
m_warpDirection = FALSE8;
@@ -4773,7 +4773,7 @@ void OptionsManager::DrawVideoSettings() {
temp = CalculateStringWidth(msg);
DisplayText(ad, pitch, msg, halfScreen - temp - 10, hite, (m_VIDEO_selected == FRAMELIMITER) ? SELECTEDFONT : NORMALFONT, FALSE8);
char msg2[6];
- sprintf(msg2, "%d%%", stub.cycle_speed);
+ sprintf(msg2, "%d%%", g_stub->cycle_speed);
DisplayText(ad, pitch, msg2, halfScreen, hite, NORMALFONT, FALSE8);
}
@@ -5983,7 +5983,7 @@ void OptionsManager::DoCredits() {
// Reinstate the title screen movie
LoadTitleScreenMovie();
m_creditControl = FALSE8;
- stub.Pop_stub_mode();
+ g_stub->Pop_stub_mode();
}
}
}
@@ -6007,7 +6007,7 @@ void OptionsManager::InitialiseScrollingText(const char *textFileName, const cha
void OptionsManager::DoScrollingText() {
if (m_crediter.DoScreen() == 0) {
m_creditControl = FALSE8;
- stub.Pop_stub_mode();
+ g_stub->Pop_stub_mode();
}
}
diff --git a/engines/icb/p4_pc.cpp b/engines/icb/p4_pc.cpp
index 6ae2d85202..e304d44d20 100644
--- a/engines/icb/p4_pc.cpp
+++ b/engines/icb/p4_pc.cpp
@@ -246,9 +246,9 @@ void InitEngine(const char *lpCmdLine) {
// unless there is a console.icb file we dont allow debugging
// set base mode of stub to gameScript processor
- stub.Set_current_stub_mode(__game_script);
+ g_stub->Set_current_stub_mode(__game_script);
} else
- stub.Set_current_stub_mode(__mission_and_console);
+ g_stub->Set_current_stub_mode(__mission_and_console);
// Initialise the runtime cluster manager
g_theClusterManager->Initialise();
@@ -337,7 +337,7 @@ bool mainLoopIteration() {
}
}
// Used to be triggered by else if(gotTheFocus).
- stub.Process_stub();
+ g_stub->Process_stub();
g_system->delayMillis(1);
return true;
@@ -362,7 +362,7 @@ void Mission_and_console() {
int32 ret = ob->GetVariable("state");
if (ob->GetIntegerVariable(ret)) {
// Return to avoid deleting the mission
- stub.Push_stub_mode(__gameover_menu);
+ g_stub->Push_stub_mode(__gameover_menu);
return;
}
@@ -372,7 +372,7 @@ void Mission_and_console() {
Fatal_error("Thank you for playing In Cold Blood");
else
- stub.Pop_stub_mode(); // back to game script server
+ g_stub->Pop_stub_mode(); // back to game script server
} else
g_mission->Create_display();
}
diff --git a/engines/icb/session.cpp b/engines/icb/session.cpp
index a2d60cf7ca..43bd4bca85 100644
--- a/engines/icb/session.cpp
+++ b/engines/icb/session.cpp
@@ -672,7 +672,7 @@ void _game_session::Pre_initialise_objects() {
object = (c_game_object *)objects->Fetch_item_by_number(j);
- logic_structs[j] = &logics[j];
+ logic_structs[j] = g_logics[j];
logic_structs[j]->___init((const char *)object->GetName());
}
diff --git a/engines/icb/sound/fx_manager.cpp b/engines/icb/sound/fx_manager.cpp
index 22052ded53..10fc08bccc 100644
--- a/engines/icb/sound/fx_manager.cpp
+++ b/engines/icb/sound/fx_manager.cpp
@@ -30,6 +30,7 @@
#include "engines/icb/res_man_pc.h"
#include "engines/icb/sound/sound_common.h"
#include "engines/icb/icb.h"
+#include "engines/icb/global_objects.h"
#include "common/textconsole.h"
@@ -80,7 +81,7 @@ bool8 FxManager::Poll() {
g_icb->_mixer->setChannelVolume(m_effects[id]._handle, m_effects[id].volume * volumeConversion);
g_icb->_mixer->setChannelBalance(m_effects[id]._handle, m_effects[id].pan);
- frequency = (m_effects[id].pitch * stub.cycle_speed) / 100;
+ frequency = (m_effects[id].pitch * g_stub->cycle_speed) / 100;
// FIXME correct pitch control
//m_effects[id].buffer->SetFrequency( frequency ) ;
//alSourcef(m_effects[id].alStream.source, AL_PITCH, 1.0f);
@@ -103,7 +104,7 @@ bool8 FxManager::Poll() {
case Effect::QUEUED: {
// Apply current settings
- frequency = (m_effects[id].pitch * stub.cycle_speed) / 100;
+ frequency = (m_effects[id].pitch * g_stub->cycle_speed) / 100;
// FIXME corrent pitch control
//m_effects[id].buffer->SetFrequency( frequency ) ;
//alSourcef(m_effects[id].alStream.source, AL_PITCH, 1.0f);
More information about the Scummvm-git-logs
mailing list