aboutsummaryrefslogtreecommitdiff
path: root/saga
diff options
context:
space:
mode:
authorEugene Sandulenko2004-08-04 20:28:57 +0000
committerEugene Sandulenko2004-08-04 20:28:57 +0000
commit51b5acfc9c30cf656d6ac380cc6cce7a1a9938ff (patch)
tree36f4ff2e5df7a51460701fda7f3597a3da307d99 /saga
parent11078570dcd3a5be520cdc84223674411a08f088 (diff)
downloadscummvm-rg350-51b5acfc9c30cf656d6ac380cc6cce7a1a9938ff.tar.gz
scummvm-rg350-51b5acfc9c30cf656d6ac380cc6cce7a1a9938ff.tar.bz2
scummvm-rg350-51b5acfc9c30cf656d6ac380cc6cce7a1a9938ff.zip
Move SCENE_* to class.
svn-id: r14463
Diffstat (limited to 'saga')
-rw-r--r--saga/events.cpp14
-rw-r--r--saga/ihnm_introproc.cpp12
-rw-r--r--saga/ihnm_introproc.h6
-rw-r--r--saga/input.cpp4
-rw-r--r--saga/ite_introproc.cpp95
-rw-r--r--saga/ite_introproc.h2
-rw-r--r--saga/render.cpp8
-rw-r--r--saga/saga.cpp11
-rw-r--r--saga/saga.h2
-rw-r--r--saga/scene.cpp638
-rw-r--r--saga/scene.h147
-rw-r--r--saga/scene_mod.h81
-rw-r--r--saga/sdebug.cpp4
-rw-r--r--saga/sprite.cpp8
14 files changed, 516 insertions, 516 deletions
diff --git a/saga/events.cpp b/saga/events.cpp
index 47957fd2aa..ffa3f132a8 100644
--- a/saga/events.cpp
+++ b/saga/events.cpp
@@ -31,7 +31,7 @@
#include "saga/animation.h"
#include "saga/console_mod.h"
-#include "saga/scene_mod.h"
+#include "saga/scene.h"
#include "saga/interface_mod.h"
#include "saga/text.h"
#include "saga/palanim_mod.h"
@@ -174,7 +174,7 @@ int HandleContinuous(R_EVENT *event) {
switch (event->op) {
case EVENT_DISSOLVE:
_vm->_render->getBufferInfo(&buf_info);
- SCENE_GetBGInfo(&bg_info);
+ _vm->_scene->getBGInfo(&bg_info);
TRANSITION_Dissolve(buf_info.r_bg_buf, buf_info.r_bg_buf_w, buf_info.r_bg_buf_h,
buf_info.r_bg_buf_w, bg_info.bg_buf, bg_info.bg_p, 0, event_pc);
break;
@@ -226,7 +226,7 @@ static int HandleOneShot(R_EVENT *event) {
case EVENT_REMOVE:
{
R_SCENE_INFO scene_info;
- SCENE_GetInfo(&scene_info);
+ _vm->_scene->getInfo(&scene_info);
_vm->textDeleteEntry(scene_info.text_list, (R_TEXTLIST_ENTRY *)event->data);
}
break;
@@ -246,12 +246,12 @@ static int HandleOneShot(R_EVENT *event) {
R_BUFFER_INFO rbuf_info;
R_POINT bg_pt;
- if (SCENE_GetMode() == R_SCENE_MODE_NORMAL) {
+ if (_vm->_scene->getMode() == R_SCENE_MODE_NORMAL) {
back_buf = _vm->_gfx->getBackBuffer();
_vm->_render->getBufferInfo(&rbuf_info);
- SCENE_GetBGInfo(&bginfo);
+ _vm->_scene->getBGInfo(&bginfo);
bg_pt.x = bginfo.bg_x;
bg_pt.y = bginfo.bg_y;
@@ -260,7 +260,7 @@ static int HandleOneShot(R_EVENT *event) {
bginfo.bg_buf, bginfo.bg_w, bginfo.bg_h, NULL, &bg_pt);
if (event->param == SET_PALETTE) {
PALENTRY *pal_p;
- SCENE_GetBGPal(&pal_p);
+ _vm->_scene->getBGPal(&pal_p);
_vm->_gfx->setPalette(back_buf, pal_p);
}
}
@@ -278,7 +278,7 @@ static int HandleOneShot(R_EVENT *event) {
case R_SCENE_EVENT:
switch (event->op) {
case EVENT_END:
- SCENE_Next();
+ _vm->_scene->nextScene();
return R_EVENT_BREAK;
break;
default:
diff --git a/saga/ihnm_introproc.cpp b/saga/ihnm_introproc.cpp
index a630de0b02..025084e574 100644
--- a/saga/ihnm_introproc.cpp
+++ b/saga/ihnm_introproc.cpp
@@ -31,7 +31,6 @@
#include "saga/cvar_mod.h"
#include "saga/events_mod.h"
#include "saga/rscfile_mod.h"
-#include "saga/scene_mod.h"
#include "saga/palanim_mod.h"
#include "saga/scene.h"
@@ -39,6 +38,11 @@
namespace Saga {
+int IHNM_IntroMovieProc1(int param, R_SCENE_INFO *scene_info);
+int IHNM_IntroMovieProc2(int param, R_SCENE_INFO *scene_info);
+int IHNM_IntroMovieProc3(int param, R_SCENE_INFO *scene_info);
+int IHNM_HateProc(int param, R_SCENE_INFO *scene_info);
+
R_SCENE_RESLIST IHNM_IntroMovie1RL[] = {
{30, SAGA_BG_IMAGE, 0, 0} ,
{31, SAGA_ANIM_1, 0, 0}
@@ -97,7 +101,7 @@ int IHNM_StartProc() {
n_introscenes = ARRAYSIZE(IHNM_IntroList);
for (i = 0; i < n_introscenes; i++) {
- SCENE_Queue(&IHNM_IntroList[i]);
+ _vm->_scene->queueScene(&IHNM_IntroList[i]);
}
return R_SUCCESS;
@@ -159,7 +163,7 @@ int IHNM_IntroMovieProc2(int param, R_SCENE_INFO *scene_info) {
q_event = EVENT_Chain(q_event, &event);
// Fade in from black to the scene background palette
- SCENE_GetBGPal(&pal);
+ _vm->_scene->getBGPal(&pal);
event.type = R_CONTINUOUS_EVENT;
event.code = R_PAL_EVENT;
@@ -219,7 +223,7 @@ int IHNM_IntroMovieProc3(int param, R_SCENE_INFO *scene_info) {
q_event = EVENT_Chain(q_event, &event);
// Fade in from black to the scene background palette
- SCENE_GetBGPal(&pal);
+ _vm->_scene->getBGPal(&pal);
event.type = R_CONTINUOUS_EVENT;
event.code = R_PAL_EVENT;
diff --git a/saga/ihnm_introproc.h b/saga/ihnm_introproc.h
index 64a997a2f6..55962b8f06 100644
--- a/saga/ihnm_introproc.h
+++ b/saga/ihnm_introproc.h
@@ -23,8 +23,8 @@
// Intro sequence scene procedures header file
-#ifndef SAGA_ITE_INTRO_H_
-#define SAGA_ITE_INTRO_H_
+#ifndef SAGA_IHNM_INTRO_H_
+#define SAGA_IHNM_INTRO_H_
namespace Saga {
@@ -33,6 +33,8 @@ namespace Saga {
#define R_IHNM_DGLOGO_TIME 8000
#define R_IHNM_TITLE_TIME 16000
+int IHNM_StartProc();
+
} // End of namespace Saga
#endif
diff --git a/saga/input.cpp b/saga/input.cpp
index fb79972478..0bcb114e8b 100644
--- a/saga/input.cpp
+++ b/saga/input.cpp
@@ -27,7 +27,7 @@
#include "saga/console_mod.h"
#include "saga/interface_mod.h"
#include "saga/render.h"
-#include "saga/scene_mod.h"
+#include "saga/scene.h"
#include "saga/script_mod.h"
namespace Saga {
@@ -106,7 +106,7 @@ int SYSINPUT_ProcessInput() {
break;
case 27: // Esc
// Skip to next scene skip target
- SCENE_Skip();
+ _vm->_scene->skipScene();
break;
default:
break;
diff --git a/saga/ite_introproc.cpp b/saga/ite_introproc.cpp
index 22b1351106..fe383a0c4b 100644
--- a/saga/ite_introproc.cpp
+++ b/saga/ite_introproc.cpp
@@ -34,7 +34,6 @@
#include "saga/font.h"
#include "saga/game_mod.h"
#include "saga/rscfile_mod.h"
-#include "saga/scene_mod.h"
#include "saga/sndres.h"
#include "saga/text.h"
#include "saga/palanim_mod.h"
@@ -45,6 +44,17 @@
namespace Saga {
+int ITE_IntroAnimProc(int param, R_SCENE_INFO *scene_info);
+int ITE_IntroCave1Proc(int param, R_SCENE_INFO *scene_info);
+int ITE_IntroCave2Proc(int param, R_SCENE_INFO *scene_info);
+int ITE_IntroCave3Proc(int param, R_SCENE_INFO *scene_info);
+int ITE_IntroCave4Proc(int param, R_SCENE_INFO *scene_info);
+int ITE_IntroValleyProc(int param, R_SCENE_INFO *scene_info);
+int ITE_IntroTreeHouseProc(int param, R_SCENE_INFO *scene_info);
+int ITE_IntroFairePathProc(int param, R_SCENE_INFO *scene_info);
+int ITE_IntroFaireTentProc(int param, R_SCENE_INFO *scene_info);
+int initialScene(int param, R_SCENE_INFO *scene_info);
+
static R_INTRO_DIALOGUE IntroDiag[] = {
{
CAVE_VOICE_0, "intro1a",
@@ -135,7 +145,7 @@ int ITE_StartProc() {
n_introscenes = ARRAYSIZE(ITE_IntroList);
for (i = 0; i < n_introscenes; i++) {
- SCENE_Queue(&ITE_IntroList[i]);
+ _vm->_scene->queueScene(&ITE_IntroList[i]);
}
GAME_GetSceneInfo(&gs_desc);
@@ -145,7 +155,7 @@ int ITE_StartProc() {
first_scene.scene_skiptarget = 1;
first_scene.scene_proc = initialScene;
- SCENE_Queue(&first_scene);
+ _vm->_scene->queueScene(&first_scene);
return R_SUCCESS;
}
@@ -258,7 +268,7 @@ int ITE_IntroCave1Proc(int param, R_SCENE_INFO *scene_info) {
q_event = EVENT_Chain(q_event, &event);
// Fade in from black to the scene background palette
- SCENE_GetBGPal(&pal);
+ _vm->_scene->getBGPal(&pal);
event.type = R_CONTINUOUS_EVENT;
event.code = R_PAL_EVENT;
event.op = EVENT_BLACKTOPAL;
@@ -987,4 +997,81 @@ int ITE_IntroFaireTentProc(int param, R_SCENE_INFO *scene_info) {
return 0;
}
+int initialScene(int param, R_SCENE_INFO *scene_info) {
+ R_EVENT event;
+ R_EVENT *q_event;
+ int delay_time = 0;
+ static PALENTRY current_pal[R_PAL_ENTRIES];
+ PALENTRY *pal;
+
+ switch (param) {
+ case SCENE_BEGIN:
+ _vm->_music->stop();
+ _vm->_sound->stopVoice();
+
+ // Fade palette to black from intro scene
+ _vm->_gfx->getCurrentPal(current_pal);
+
+ event.type = R_CONTINUOUS_EVENT;
+ event.code = R_PAL_EVENT;
+ event.op = EVENT_PALTOBLACK;
+ event.time = 0;
+ event.duration = PALETTE_FADE_DURATION;
+ event.data = current_pal;
+
+ delay_time += PALETTE_FADE_DURATION;
+
+ q_event = EVENT_Queue(&event);
+
+ // Activate user interface
+ event.type = R_ONESHOT_EVENT;
+ event.code = R_INTERFACE_EVENT;
+ event.op = EVENT_ACTIVATE;
+ event.time = 0;
+
+ q_event = EVENT_Chain(q_event, &event);
+
+ // Set first scene background w/o changing palette
+ event.type = R_ONESHOT_EVENT;
+ event.code = R_BG_EVENT;
+ event.op = EVENT_DISPLAY;
+ event.param = NO_SET_PALETTE;
+ event.time = 0;
+
+ q_event = EVENT_Chain(q_event, &event);
+
+ // Fade in to first scene background palette
+ _vm->_scene->getBGPal(&pal);
+
+ event.type = R_CONTINUOUS_EVENT;
+ event.code = R_PAL_EVENT;
+ event.op = EVENT_BLACKTOPAL;
+ event.time = delay_time;
+ event.duration = PALETTE_FADE_DURATION;
+ event.data = pal;
+
+ q_event = EVENT_Chain(q_event, &event);
+
+ event.code = R_PALANIM_EVENT;
+ event.op = EVENT_CYCLESTART;
+ event.time = 0;
+
+ q_event = EVENT_Chain(q_event, &event);
+
+ _vm->_anim->setFlag(0, ANIM_LOOP);
+ _vm->_anim->play(0, delay_time);
+
+ debug(0, "Scene started");
+ break;
+ case SCENE_END:
+ break;
+ default:
+ warning("Scene::initialScene(): Illegal scene procedure parameter");
+ break;
+ }
+
+ return 0;
+}
+
+
} // End of namespace Saga
diff --git a/saga/ite_introproc.h b/saga/ite_introproc.h
index be259a633a..d919d91ced 100644
--- a/saga/ite_introproc.h
+++ b/saga/ite_introproc.h
@@ -75,6 +75,8 @@ struct INTRO_CREDIT {
int font_id;
};
+int ITE_StartProc();
+
} // End of namespace Saga
#endif /* SAGA_ITE_INTRO_H_ */
diff --git a/saga/render.cpp b/saga/render.cpp
index 182698de59..2a5c88d4d5 100644
--- a/saga/render.cpp
+++ b/saga/render.cpp
@@ -31,7 +31,7 @@
#include "saga/font.h"
#include "saga/game_mod.h"
#include "saga/interface_mod.h"
-#include "saga/scene_mod.h"
+#include "saga/scene.h"
#include "saga/text.h"
#include "saga/actionmap.h"
@@ -126,13 +126,13 @@ int Render::drawScene() {
// Get mouse coordinates
mouse_pt = SYSINPUT_GetMousePos();
- SCENE_GetBGInfo(&bg_info);
+ _vm->_scene->getBGInfo(&bg_info);
GAME_GetDisplayInfo(&disp_info);
bg_pt.x = 0;
bg_pt.y = 0;
// Display scene background
- SCENE_Draw(backbuf_surface);
+ _vm->_scene->draw(backbuf_surface);
// Display scene maps, if applicable
if (getFlags() & RF_OBJECTMAP_TEST) {
@@ -144,7 +144,7 @@ int Render::drawScene() {
_vm->_actor->drawList();
// Draw queued text strings
- SCENE_GetInfo(&scene_info);
+ _vm->_scene->getInfo(&scene_info);
_vm->textDrawList(scene_info.text_list, backbuf_surface);
diff --git a/saga/saga.cpp b/saga/saga.cpp
index a8f196e215..5d5c019c19 100644
--- a/saga/saga.cpp
+++ b/saga/saga.cpp
@@ -48,7 +48,7 @@
#include "saga/isomap.h"
#include "saga/script.h"
#include "saga/script_mod.h"
-#include "saga/scene_mod.h"
+#include "saga/scene.h"
#include "saga/sdata.h"
#include "saga/sndres.h"
#include "saga/sprite.h"
@@ -109,7 +109,6 @@ void SagaEngine::go() {
CON_Register(); // Register console cvars first
GAME_Register();
- SCENE_Register();
_soundEnabled = 1;
_musicEnabled = 1;
@@ -148,8 +147,9 @@ void SagaEngine::go() {
_sdata = new SData();
INTERFACE_Init(); // requires script module
_actor = new Actor(this);
+ _scene = new Scene(this);
- if (SCENE_Init() != R_SUCCESS) {
+ if (!_scene->initialized()) {
warning("Couldn't initialize scene module");
return;
}
@@ -194,6 +194,7 @@ void SagaEngine::go() {
debug(0, "Sound disabled.");
}
+ _scene->reg();
_actor->reg();
_script->reg();
_render->reg();
@@ -205,7 +206,7 @@ void SagaEngine::go() {
// Begin Main Engine Loop
- SCENE_Start();
+ _scene->startScene();
uint32 currentTicks;
for (;;) {
@@ -235,7 +236,7 @@ void SagaEngine::go() {
}
void SagaEngine::shutdown() {
- SCENE_Shutdown();
+ delete _scene;
delete _actor;
delete _script;
delete _sprite;
diff --git a/saga/saga.h b/saga/saga.h
index ab26f0a1c5..4f163f0d07 100644
--- a/saga/saga.h
+++ b/saga/saga.h
@@ -54,6 +54,7 @@ class Script;
class Actor;
class Font;
class Sprite;
+class Scene;
using Common::MemoryReadStream;
@@ -110,6 +111,7 @@ public:
Actor *_actor;
Font *_font;
Sprite *_sprite;
+ Scene *_scene;
private:
int decodeBGImageRLE(const byte *inbuf, size_t inbuf_len, byte *outbuf, size_t outbuf_len);
diff --git a/saga/scene.cpp b/saga/scene.cpp
index 4f52096e19..3cf7d9675e 100644
--- a/saga/scene.cpp
+++ b/saga/scene.cpp
@@ -43,22 +43,27 @@
#include "saga/sound.h"
#include "saga/music.h"
-#include "saga/scene_mod.h"
#include "saga/scene.h"
+#include "saga/ite_introproc.h"
+#include "saga/ihnm_introproc.h"
namespace Saga {
-static R_SCENE_MODULE SceneModule;
+static void CF_scenechange(int argc, char *argv[], void *refCon);
+static void CF_sceneinfo(int argc, char *argv[], void *refCon);
-int SCENE_Register() {
- CVAR_Register_I(&SceneModule.scene_number, "scene", NULL, R_CVAR_READONLY, 0, 0);
- CVAR_RegisterFunc(CF_scenechange, "scene_change", "<Scene number>", R_CVAR_NONE, 1, 1, NULL);
- CVAR_RegisterFunc(CF_sceneinfo, "scene_info", NULL, R_CVAR_NONE, 0, 0, NULL);
+int defaultScene(int param, R_SCENE_INFO *scene_info);
+
+
+int Scene::reg() {
+ CVAR_Register_I(&_sceneNumber, "scene", NULL, R_CVAR_READONLY, 0, 0);
+ CVAR_RegisterFunc(CF_scenechange, "scene_change", "<Scene number>", R_CVAR_NONE, 1, 1, this);
+ CVAR_RegisterFunc(CF_sceneinfo, "scene_info", NULL, R_CVAR_NONE, 0, 0, this);
return R_SUCCESS;
}
-int SCENE_Init() {
+Scene::Scene(SagaEngine *vm) : _vm(vm), _initialized(false) {
R_GAME_SCENEDESC gs_desc;
byte *scene_lut_p;
size_t scene_lut_len;
@@ -69,102 +74,113 @@ int SCENE_Init() {
GAME_GetSceneInfo(&gs_desc);
// Load scene module resource context
- result = GAME_GetFileContext(&SceneModule.scene_ctxt, R_GAME_RESOURCEFILE, 0);
+ result = GAME_GetFileContext(&_sceneContext, R_GAME_RESOURCEFILE, 0);
if (result != R_SUCCESS) {
- warning("Couldn't load scene resource context");
- return R_FAILURE;
+ warning("Scene::Scene(): Couldn't load scene resource context");
+ return;
}
// Initialize scene queue
- SceneModule.scene_queue = ys_dll_create();
- if (SceneModule.scene_queue == NULL) {
- return R_FAILURE;
+ _sceneQueue = ys_dll_create();
+ if (_sceneQueue == NULL) {
+ return;
}
// Load scene lookup table
- debug(0, "SCENE_Init(): Loading scene LUT from resource %u.", gs_desc.scene_lut_rn);
- result = RSC_LoadResource(SceneModule.scene_ctxt, gs_desc.scene_lut_rn, &scene_lut_p, &scene_lut_len);
+ debug(0, "Loading scene LUT from resource %u.", gs_desc.scene_lut_rn);
+ result = RSC_LoadResource(_sceneContext, gs_desc.scene_lut_rn, &scene_lut_p, &scene_lut_len);
if (result != R_SUCCESS) {
- warning("Error: couldn't load scene LUT");
- return R_FAILURE;
+ warning("Scene::Scene(): Error: couldn't load scene LUT");
+ return;
}
- SceneModule.scene_count = scene_lut_len / 2;
- SceneModule.scene_max = SceneModule.scene_count - 1;
- SceneModule.scene_lut = (int *)malloc(SceneModule.scene_max * sizeof *SceneModule.scene_lut);
- if (SceneModule.scene_lut == NULL) {
- warning("SCENE_Init(): Memory allocation failed");
- return R_MEM;
+ _sceneCount = scene_lut_len / 2;
+ _sceneMax = _sceneCount - 1;
+ _sceneLUT = (int *)malloc(_sceneMax * sizeof *_sceneLUT);
+ if (_sceneLUT == NULL) {
+ warning("Scene::Scene(): Memory allocation failed");
+ return;
}
MemoryReadStream readS(scene_lut_p, scene_lut_len);
- for (i = 0; i < SceneModule.scene_max; i++) {
- SceneModule.scene_lut[i] = readS.readUint16LE();
+ for (i = 0; i < _sceneMax; i++) {
+ _sceneLUT[i] = readS.readUint16LE();
}
free(scene_lut_p);
if (gs_desc.first_scene != 0) {
- SceneModule.first_scene = gs_desc.first_scene;
+ _firstScene = gs_desc.first_scene;
}
- debug(0, "SCENE_Init(): First scene set to %d.", SceneModule.first_scene);
+ debug(0, "First scene set to %d.", _firstScene);
- debug(0, "SCENE_Init(): LUT has %d entries.", SceneModule.scene_max);
+ debug(0, "LUT has %d entries.", _sceneMax);
// Create scene module text list
- SceneModule.text_list = _vm->textCreateList();
+ _textList = _vm->textCreateList();
- if (SceneModule.text_list == NULL) {
- warning("Error: Couldn't create scene text list");
- return R_FAILURE;
+ if (_textList == NULL) {
+ warning("Scene::Scene(): Error: Couldn't create scene text list");
+ return;
}
- SceneModule.init = 1;
-
- return R_SUCCESS;
+ _sceneLoaded = false;
+ _sceneMode = 0;
+ _sceneNumber = 0;
+ _sceneResNum = 0;
+ _inGame = false;
+ _loadDesc = false;
+ memset(&_desc, 0, sizeof(_desc));
+ _resListEntries = 0;
+ _resList = NULL;
+ _animEntries = 0;
+ _animList = NULL;
+ _sceneProc = NULL;
+ memset(&_bg, 0, sizeof(_bg));
+ memset(&_bgMask, 0, sizeof(_bgMask));
+
+ _initialized = true;
}
-int SCENE_Shutdown() {
- if (SceneModule.init) {
- SCENE_End();
- free(SceneModule.scene_lut);
+Scene::~Scene() {
+ if (_initialized) {
+ endScene();
+ free(_sceneLUT);
}
-
- return R_SUCCESS;
}
-int SCENE_Queue(R_SCENE_QUEUE *scene_queue) {
- assert(SceneModule.init);
+int Scene::queueScene(R_SCENE_QUEUE *scene_queue) {
+ assert(_initialized);
assert(scene_queue != NULL);
- ys_dll_add_tail(SceneModule.scene_queue, scene_queue, sizeof *scene_queue);
+ ys_dll_add_tail(_sceneQueue, scene_queue, sizeof *scene_queue);
return R_SUCCESS;
}
-int SCENE_ClearQueue() {
- assert(SceneModule.init);
+int Scene::clearSceneQueue() {
+ assert(_initialized);
- ys_dll_delete_all(SceneModule.scene_queue);
+ ys_dll_delete_all(_sceneQueue);
return R_SUCCESS;
}
-int SCENE_Start() {
+int Scene::startScene() {
YS_DL_NODE *node;
R_SCENE_QUEUE *scene_qdat;
- assert(SceneModule.init);
+ assert(_initialized);
- if (SceneModule.scene_loaded) {
- warning("Error: Can't start game...scene already loaded");
+ if (_sceneLoaded) {
+ warning("Scene::start(): Error: Can't start game...scene already loaded");
return R_FAILURE;
}
- if (SceneModule.in_game) {
- warning("Error: Can't start game...game already started");
+ if (_inGame) {
+ warning("Scene::start(): Error: Can't start game...game already started");
return R_FAILURE;
}
@@ -176,12 +192,12 @@ int SCENE_Start() {
IHNM_StartProc();
break;
default:
- warning("Error: Can't start game... gametype not supported");
+ warning("Scene::start(): Error: Can't start game... gametype not supported");
break;
}
// Load the head node in scene queue
- node = ys_dll_head(SceneModule.scene_queue);
+ node = ys_dll_head(_sceneQueue);
if (node == NULL) {
return R_SUCCESS;
}
@@ -189,31 +205,31 @@ int SCENE_Start() {
scene_qdat = (R_SCENE_QUEUE *)ys_dll_get_data(node);
assert(scene_qdat != NULL);
- SCENE_Load(scene_qdat->scene_n, scene_qdat->load_flag, scene_qdat->scene_proc, scene_qdat->scene_desc);
+ loadScene(scene_qdat->scene_n, scene_qdat->load_flag, scene_qdat->scene_proc, scene_qdat->scene_desc);
return R_SUCCESS;
}
-int SCENE_Next() {
+int Scene::nextScene() {
YS_DL_NODE *node;
R_SCENE_QUEUE *scene_qdat;
- assert(SceneModule.init);
+ assert(_initialized);
- if (!SceneModule.scene_loaded) {
- warning("Error: Can't advance scene...no scene loaded");
+ if (!_sceneLoaded) {
+ warning("Scene::next(): Error: Can't advance scene...no scene loaded");
return R_FAILURE;
}
- if (SceneModule.in_game) {
- warning("Error: Can't advance scene...game already started");
+ if (_inGame) {
+ warning("Scene::next(): Error: Can't advance scene...game already started");
return R_FAILURE;
}
- SCENE_End();
+ endScene();
// Delete the current head node in scene queue
- node = ys_dll_head(SceneModule.scene_queue);
+ node = ys_dll_head(_sceneQueue);
if (node == NULL) {
return R_SUCCESS;
}
@@ -221,7 +237,7 @@ int SCENE_Next() {
ys_dll_delete(node);
// Load the head node in scene queue
- node = ys_dll_head(SceneModule.scene_queue);
+ node = ys_dll_head(_sceneQueue);
if (node == NULL) {
return R_SUCCESS;
}
@@ -229,12 +245,12 @@ int SCENE_Next() {
scene_qdat = (R_SCENE_QUEUE *)ys_dll_get_data(node);
assert(scene_qdat != NULL);
- SCENE_Load(scene_qdat->scene_n, scene_qdat->load_flag, scene_qdat->scene_proc, scene_qdat->scene_desc);
+ loadScene(scene_qdat->scene_n, scene_qdat->load_flag, scene_qdat->scene_proc, scene_qdat->scene_desc);
return R_SUCCESS;
}
-int SCENE_Skip() {
+int Scene::skipScene() {
YS_DL_NODE *node;
YS_DL_NODE *prev_node;
YS_DL_NODE *skip_node = NULL;
@@ -242,22 +258,22 @@ int SCENE_Skip() {
R_SCENE_QUEUE *scene_qdat = NULL;
R_SCENE_QUEUE *skip_qdat = NULL;
- assert(SceneModule.init);
+ assert(_initialized);
- if (!SceneModule.scene_loaded) {
- warning("Error: Can't skip scene...no scene loaded");
+ if (!_sceneLoaded) {
+ warning("Scene::skip(): Error: Can't skip scene...no scene loaded");
return R_FAILURE;
}
- if (SceneModule.in_game) {
- warning("Error: Can't skip scene...game already started");
+ if (_inGame) {
+ warning("Scene::skip(): Error: Can't skip scene...game already started");
return R_FAILURE;
}
// Walk down scene queue and try to find a skip target
- node = ys_dll_head(SceneModule.scene_queue);
+ node = ys_dll_head(_sceneQueue);
if (node == NULL) {
- warning("Error: Can't skip scene...no scenes in queue");
+ warning("Scene::skip(): Error: Can't skip scene...no scenes in queue");
return R_FAILURE;
}
@@ -278,75 +294,75 @@ int SCENE_Skip() {
prev_node = ys_dll_prev(node);
ys_dll_delete(node);
}
- SCENE_End();
- SCENE_Load(skip_qdat->scene_n, skip_qdat->load_flag, skip_qdat->scene_proc, skip_qdat->scene_desc);
+ endScene();
+ loadScene(skip_qdat->scene_n, skip_qdat->load_flag, skip_qdat->scene_proc, skip_qdat->scene_desc);
}
// Search for a scene to skip to
return R_SUCCESS;
}
-int SCENE_Change(int scene_num) {
- assert(SceneModule.init);
+int Scene::changeScene(int scene_num) {
+ assert(_initialized);
- if (!SceneModule.scene_loaded) {
- warning("Error: Can't change scene. No scene currently loaded. Game in invalid state");
+ if (!_sceneLoaded) {
+ warning("Scene::changeScene(): Error: Can't change scene. No scene currently loaded. Game in invalid state");
return R_FAILURE;
}
- if ((scene_num < 0) || (scene_num > SceneModule.scene_max)) {
- warning("Error: Can't change scene. Invalid scene number");
+ if ((scene_num < 0) || (scene_num > _sceneMax)) {
+ warning("Scene::changeScene(): Error: Can't change scene. Invalid scene number");
return R_FAILURE;
}
- if (SceneModule.scene_lut[scene_num] == 0) {
- warning("Error: Can't change scene; invalid scene descriptor resource number (0)");
+ if (_sceneLUT[scene_num] == 0) {
+ warning("Scene::changeScene(): Error: Can't change scene; invalid scene descriptor resource number (0)");
return R_FAILURE;
}
- SCENE_End();
- SCENE_Load(scene_num, BY_SCENE, defaultScene, NULL);
+ endScene();
+ loadScene(scene_num, BY_SCENE, defaultScene, NULL);
return R_SUCCESS;
}
-int SCENE_GetMode() {
- assert(SceneModule.init);
+int Scene::getMode() {
+ assert(_initialized);
- return SceneModule.scene_mode;
+ return _sceneMode;
}
-int SCENE_GetZInfo(SCENE_ZINFO *zinfo) {
- assert(SceneModule.init);
+int Scene::getZInfo(SCENE_ZINFO *zinfo) {
+ assert(_initialized);
- zinfo->begin_slope = SceneModule.desc.begin_slope;
- zinfo->end_slope = SceneModule.desc.end_slope;
+ zinfo->begin_slope = _desc.begin_slope;
+ zinfo->end_slope = _desc.end_slope;
return R_SUCCESS;
}
-int SCENE_GetBGInfo(SCENE_BGINFO *bginfo) {
+int Scene::getBGInfo(SCENE_BGINFO *bginfo) {
R_GAME_DISPLAYINFO di;
int x, y;
- assert(SceneModule.init);
+ assert(_initialized);
- bginfo->bg_buf = SceneModule.bg.buf;
- bginfo->bg_buflen = SceneModule.bg.buf_len;
- bginfo->bg_w = SceneModule.bg.w;
- bginfo->bg_h = SceneModule.bg.h;
- bginfo->bg_p = SceneModule.bg.p;
+ bginfo->bg_buf = _bg.buf;
+ bginfo->bg_buflen = _bg.buf_len;
+ bginfo->bg_w = _bg.w;
+ bginfo->bg_h = _bg.h;
+ bginfo->bg_p = _bg.p;
GAME_GetDisplayInfo(&di);
x = 0;
y = 0;
- if (SceneModule.bg.w < di.logical_w) {
- x = (di.logical_w - SceneModule.bg.w) / 2;
+ if (_bg.w < di.logical_w) {
+ x = (di.logical_w - _bg.w) / 2;
}
- if (SceneModule.bg.h < di.scene_h) {
- y = (di.scene_h - SceneModule.bg.h) / 2;
+ if (_bg.h < di.scene_h) {
+ y = (di.scene_h - _bg.h) / 2;
}
bginfo->bg_x = x;
@@ -355,97 +371,97 @@ int SCENE_GetBGInfo(SCENE_BGINFO *bginfo) {
return R_SUCCESS;
}
-int SCENE_GetBGPal(PALENTRY **pal) {
- assert(SceneModule.init);
- *pal = SceneModule.bg.pal;
+int Scene::getBGPal(PALENTRY **pal) {
+ assert(_initialized);
+ *pal = _bg.pal;
return R_SUCCESS;
}
-int SCENE_GetBGMaskInfo(int *w, int *h, byte **buf, size_t *buf_len) {
- assert(SceneModule.init);
+int Scene::getBGMaskInfo(int *w, int *h, byte **buf, size_t *buf_len) {
+ assert(_initialized);
- if (!SceneModule.bg_mask.loaded) {
+ if (!_bgMask.loaded) {
return R_FAILURE;
}
- *w = SceneModule.bg_mask.w;
- *h = SceneModule.bg_mask.h;
- *buf = SceneModule.bg_mask.buf;
- *buf_len = SceneModule.bg_mask.buf_len;
+ *w = _bgMask.w;
+ *h = _bgMask.h;
+ *buf = _bgMask.buf;
+ *buf_len = _bgMask.buf_len;
return R_SUCCESS;
}
-int SCENE_IsBGMaskPresent() {
- assert(SceneModule.init);
+int Scene::isBGMaskPresent() {
+ assert(_initialized);
- return SceneModule.bg_mask.loaded;
+ return _bgMask.loaded;
}
-int SCENE_GetInfo(R_SCENE_INFO *si) {
- assert(SceneModule.init);
+int Scene::getInfo(R_SCENE_INFO *si) {
+ assert(_initialized);
assert(si != NULL);
- si->text_list = SceneModule.text_list;
+ si->text_list = _textList;
return R_SUCCESS;
}
-int SCENE_Load(int scene_num, int load_flag, R_SCENE_PROC scene_proc, R_SCENE_DESC *scene_desc_param) {
+int Scene::loadScene(int scene_num, int load_flag, R_SCENE_PROC scene_proc, R_SCENE_DESC *scene_desc_param) {
R_SCENE_INFO scene_info;
uint32 res_number = 0;
int result;
int i;
- assert(SceneModule.init);
+ assert(_initialized);
- if (SceneModule.scene_loaded == 1) {
- warning("Error, a scene is already loaded");
+ if (_sceneLoaded) {
+ warning("Scene::loadScene(): Error, a scene is already loaded");
return R_FAILURE;
}
- SceneModule.anim_list = ys_dll_create();
- SceneModule.scene_mode = 0;
- SceneModule.load_desc = 1;
+ _animList = ys_dll_create();
+ _sceneMode = 0;
+ _loadDesc = true;
switch (load_flag) {
case BY_RESOURCE:
res_number = scene_num;
break;
case BY_SCENE:
- assert((scene_num > 0) && (scene_num < SceneModule.scene_max));
- res_number = SceneModule.scene_lut[scene_num];
- SceneModule.scene_number = scene_num;
+ assert((scene_num > 0) && (scene_num < _sceneMax));
+ res_number = _sceneLUT[scene_num];
+ _sceneNumber = scene_num;
break;
case BY_DESC:
assert(scene_desc_param != NULL);
assert(scene_desc_param->res_list != NULL);
- SceneModule.load_desc = 0;
- SceneModule.desc = *scene_desc_param;
- SceneModule.reslist = scene_desc_param->res_list;
- SceneModule.reslist_entries = scene_desc_param->res_list_ct;
+ _loadDesc = false;
+ _desc = *scene_desc_param;
+ _resList = scene_desc_param->res_list;
+ _resListEntries = scene_desc_param->res_list_ct;
break;
default:
- warning("Error: Invalid scene load flag");
+ warning("Scene::loadScene(): Error: Invalid scene load flag");
return R_FAILURE;
break;
}
// Load scene descriptor and resource list resources
- if (SceneModule.load_desc) {
+ if (_loadDesc) {
- SceneModule.scene_rn = res_number;
- assert(SceneModule.scene_rn != 0);
+ _sceneResNum = res_number;
+ assert(_sceneResNum != 0);
debug(0, "Loading scene resource %u:", res_number);
- if (LoadSceneDescriptor(res_number) != R_SUCCESS) {
- warning("Error reading scene descriptor");
+ if (loadSceneDescriptor(res_number) != R_SUCCESS) {
+ warning("Scene::loadScene(): Error reading scene descriptor");
return R_FAILURE;
}
- if (LoadSceneResourceList(SceneModule.desc.res_list_rn) != R_SUCCESS) {
- warning("Error reading scene resource list");
+ if (loadSceneResourceList(_desc.res_list_rn) != R_SUCCESS) {
+ warning("Scene::loadScene(): Error reading scene resource list");
return R_FAILURE;
}
} else {
@@ -453,98 +469,98 @@ int SCENE_Load(int scene_num, int load_flag, R_SCENE_PROC scene_proc, R_SCENE_DE
}
// Load resources from scene resource list
- for (i = 0; i < SceneModule.reslist_entries; i++) {
- result = RSC_LoadResource(SceneModule.scene_ctxt, SceneModule.reslist[i].res_number,
- &SceneModule.reslist[i].res_data, &SceneModule.reslist[i].res_data_len);
+ for (i = 0; i < _resListEntries; i++) {
+ result = RSC_LoadResource(_sceneContext, _resList[i].res_number,
+ &_resList[i].res_data, &_resList[i].res_data_len);
if (result != R_SUCCESS) {
- warning("Error: Allocation failure loading scene resource list");
+ warning("Scene::loadScene(): Error: Allocation failure loading scene resource list");
return R_FAILURE;
}
}
// Process resources from scene resource list
- if (ProcessSceneResources() != R_SUCCESS) {
- warning("Error loading scene resources");
+ if (processSceneResources() != R_SUCCESS) {
+ warning("Scene::loadScene(): Error loading scene resources");
return R_FAILURE;
}
// Load scene script data
- if (SceneModule.desc.script_num > 0) {
- if (_vm->_script->loadScript(SceneModule.desc.script_num) != R_SUCCESS) {
- warning("Error loading scene script");
+ if (_desc.script_num > 0) {
+ if (_vm->_script->loadScript(_desc.script_num) != R_SUCCESS) {
+ warning("Scene::loadScene(): Error loading scene script");
return R_FAILURE;
}
}
- SceneModule.scene_loaded = 1;
+ _sceneLoaded = true;
if (scene_proc == NULL) {
- SceneModule.scene_proc = defaultScene;
+ _sceneProc = defaultScene;
} else {
- SceneModule.scene_proc = scene_proc;
+ _sceneProc = scene_proc;
}
- SCENE_GetInfo(&scene_info);
+ getInfo(&scene_info);
- SceneModule.scene_proc(SCENE_BEGIN, &scene_info);
+ _sceneProc(SCENE_BEGIN, &scene_info);
return R_SUCCESS;
}
-int LoadSceneDescriptor(uint32 res_number) {
+int Scene::loadSceneDescriptor(uint32 res_number) {
byte *scene_desc_data;
size_t scene_desc_len;
int result;
- result = RSC_LoadResource(SceneModule.scene_ctxt, res_number, &scene_desc_data, &scene_desc_len);
+ result = RSC_LoadResource(_sceneContext, res_number, &scene_desc_data, &scene_desc_len);
if (result != R_SUCCESS) {
- warning("Error: couldn't load scene descriptor");
+ warning("Scene::loadSceneDescriptor(): Error: couldn't load scene descriptor");
return R_FAILURE;
}
if (scene_desc_len != SAGA_SCENE_DESC_LEN) {
- warning("Error: scene descriptor length invalid");
+ warning("Scene::loadSceneDescriptor(): Error: scene descriptor length invalid");
return R_FAILURE;
}
MemoryReadStream readS(scene_desc_data, scene_desc_len);
- SceneModule.desc.unknown0 = readS.readUint16LE();
- SceneModule.desc.res_list_rn = readS.readUint16LE();
- SceneModule.desc.end_slope = readS.readUint16LE();
- SceneModule.desc.begin_slope = readS.readUint16LE();
- SceneModule.desc.script_num = readS.readUint16LE();
- SceneModule.desc.scene_scriptnum = readS.readUint16LE();
- SceneModule.desc.start_scriptnum = readS.readUint16LE();
- SceneModule.desc.music_rn = readS.readSint16LE();
+ _desc.unknown0 = readS.readUint16LE();
+ _desc.res_list_rn = readS.readUint16LE();
+ _desc.end_slope = readS.readUint16LE();
+ _desc.begin_slope = readS.readUint16LE();
+ _desc.script_num = readS.readUint16LE();
+ _desc.scene_scriptnum = readS.readUint16LE();
+ _desc.start_scriptnum = readS.readUint16LE();
+ _desc.music_rn = readS.readSint16LE();
RSC_FreeResource(scene_desc_data);
return R_SUCCESS;
}
-int LoadSceneResourceList(uint32 reslist_rn) {
+int Scene::loadSceneResourceList(uint32 reslist_rn) {
byte *resource_list;
size_t resource_list_len;
int result;
int i;
// Load the scene resource table
- result = RSC_LoadResource(SceneModule.scene_ctxt, reslist_rn, &resource_list, &resource_list_len);
+ result = RSC_LoadResource(_sceneContext, reslist_rn, &resource_list, &resource_list_len);
if (result != R_SUCCESS) {
- warning("Error: couldn't load scene resource list");
+ warning("Scene::loadSceneResourceList(): Error: couldn't load scene resource list");
return R_FAILURE;
}
MemoryReadStream readS(resource_list, resource_list_len);
// Allocate memory for scene resource list
- SceneModule.reslist_entries = resource_list_len / SAGA_RESLIST_ENTRY_LEN;
- debug(0, "Scene resource list contains %d entries.", SceneModule.reslist_entries);
- SceneModule.reslist = (R_SCENE_RESLIST *)calloc(SceneModule.reslist_entries, sizeof *SceneModule.reslist);
+ _resListEntries = resource_list_len / SAGA_RESLIST_ENTRY_LEN;
+ debug(0, "Scene resource list contains %d entries.", _resListEntries);
+ _resList = (R_SCENE_RESLIST *)calloc(_resListEntries, sizeof *_resList);
- if (SceneModule.reslist == NULL) {
- warning("Error: Memory allocation failed");
+ if (_resList == NULL) {
+ warning("Scene::loadSceneResourceList(): Error: Memory allocation failed");
return R_MEM;
}
@@ -552,9 +568,9 @@ int LoadSceneResourceList(uint32 reslist_rn) {
// resource table
debug(0, "Loading scene resource list...");
- for (i = 0; i < SceneModule.reslist_entries; i++) {
- SceneModule.reslist[i].res_number = readS.readUint16LE();
- SceneModule.reslist[i].res_type = readS.readUint16LE();
+ for (i = 0; i < _resListEntries; i++) {
+ _resList[i].res_number = readS.readUint16LE();
+ _resList[i].res_type = readS.readUint16LE();
}
RSC_FreeResource(resource_list);
@@ -562,116 +578,116 @@ int LoadSceneResourceList(uint32 reslist_rn) {
return R_SUCCESS;
}
-int ProcessSceneResources() {
+int Scene::processSceneResources() {
const byte *res_data;
size_t res_data_len;
const byte *pal_p;
int i;
// Process the scene resource list
- for (i = 0; i < SceneModule.reslist_entries; i++) {
- res_data = SceneModule.reslist[i].res_data;
- res_data_len = SceneModule.reslist[i].res_data_len;
- switch (SceneModule.reslist[i].res_type) {
+ for (i = 0; i < _resListEntries; i++) {
+ res_data = _resList[i].res_data;
+ res_data_len = _resList[i].res_data_len;
+ switch (_resList[i].res_type) {
case SAGA_BG_IMAGE: // Scene background resource
- if (SceneModule.bg.loaded) {
- warning("ProcessSceneResources: Multiple background resources encountered");
+ if (_bg.loaded) {
+ warning("Scene::processSceneResources(): Multiple background resources encountered");
return R_FAILURE;
}
debug(0, "Loading background resource.");
- SceneModule.bg.res_buf = SceneModule.reslist[i].res_data;
- SceneModule.bg.res_len = SceneModule.reslist[i].res_data_len;
- SceneModule.bg.loaded = 1;
-
- if (_vm->decodeBGImage(SceneModule.bg.res_buf,
- SceneModule.bg.res_len,
- &SceneModule.bg.buf,
- &SceneModule.bg.buf_len,
- &SceneModule.bg.w,
- &SceneModule.bg.h) != R_SUCCESS) {
- warning("ProcessSceneResources: Error loading background resource: %u", SceneModule.reslist[i].res_number);
+ _bg.res_buf = _resList[i].res_data;
+ _bg.res_len = _resList[i].res_data_len;
+ _bg.loaded = 1;
+
+ if (_vm->decodeBGImage(_bg.res_buf,
+ _bg.res_len,
+ &_bg.buf,
+ &_bg.buf_len,
+ &_bg.w,
+ &_bg.h) != R_SUCCESS) {
+ warning("Scene::ProcessSceneResources(): Error loading background resource: %u", _resList[i].res_number);
return R_FAILURE;
}
- pal_p = _vm->getImagePal(SceneModule.bg.res_buf, SceneModule.bg.res_len);
- memcpy(SceneModule.bg.pal, pal_p, sizeof SceneModule.bg.pal);
- SceneModule.scene_mode = R_SCENE_MODE_NORMAL;
+ pal_p = _vm->getImagePal(_bg.res_buf, _bg.res_len);
+ memcpy(_bg.pal, pal_p, sizeof _bg.pal);
+ _sceneMode = R_SCENE_MODE_NORMAL;
break;
case SAGA_BG_MASK: // Scene background mask resource
- if (SceneModule.bg_mask.loaded) {
- warning("ProcessSceneResources: Duplicate background mask resource encountered");
+ if (_bgMask.loaded) {
+ warning("Scene::ProcessSceneResources(): Duplicate background mask resource encountered");
}
debug(0, "Loading BACKGROUND MASK resource.");
- SceneModule.bg_mask.res_buf = SceneModule.reslist[i].res_data;
- SceneModule.bg_mask.res_len = SceneModule.reslist[i].res_data_len;
- SceneModule.bg_mask.loaded = 1;
- _vm->decodeBGImage(SceneModule.bg_mask.res_buf, SceneModule.bg_mask.res_len, &SceneModule.bg_mask.buf,
- &SceneModule.bg_mask.buf_len, &SceneModule.bg_mask.w, &SceneModule.bg_mask.h);
+ _bgMask.res_buf = _resList[i].res_data;
+ _bgMask.res_len = _resList[i].res_data_len;
+ _bgMask.loaded = 1;
+ _vm->decodeBGImage(_bgMask.res_buf, _bgMask.res_len, &_bgMask.buf,
+ &_bgMask.buf_len, &_bgMask.w, &_bgMask.h);
break;
case SAGA_OBJECT_NAME_LIST:
debug(0, "Loading object name list resource...");
- _vm->_objectMap->loadNames(SceneModule.reslist[i].res_data, SceneModule.reslist[i].res_data_len);
+ _vm->_objectMap->loadNames(_resList[i].res_data, _resList[i].res_data_len);
break;
case SAGA_OBJECT_MAP:
debug(0, "Loading object map resource...");
if (_vm->_objectMap->load(res_data,
res_data_len) != R_SUCCESS) {
- warning("Error loading object map resource");
+ warning("Scene::ProcessSceneResources(): Error loading object map resource");
return R_FAILURE;
}
break;
case SAGA_ACTION_MAP:
debug(0, "Loading exit map resource...");
if (_vm->_actionMap->loadMap(res_data, res_data_len) != R_SUCCESS) {
- warning("ProcessSceneResources: Error loading exit map resource");
+ warning("Scene::ProcessSceneResources(): Error loading exit map resource");
return R_FAILURE;
}
break;
case SAGA_ISO_TILESET:
- if (SceneModule.scene_mode == R_SCENE_MODE_NORMAL) {
- warning("ProcessSceneResources: Isometric tileset incompatible with normal scene mode");
+ if (_sceneMode == R_SCENE_MODE_NORMAL) {
+ warning("Scene::ProcessSceneResources(): Isometric tileset incompatible with normal scene mode");
return R_FAILURE;
}
debug(0, "Loading isometric tileset resource.");
if (_vm->_isoMap->loadTileset(res_data, res_data_len) != R_SUCCESS) {
- warning("ProcessSceneResources: Error loading isometric tileset resource");
+ warning("Scene::ProcessSceneResources(): Error loading isometric tileset resource");
return R_FAILURE;
}
- SceneModule.scene_mode = R_SCENE_MODE_ISO;
+ _sceneMode = R_SCENE_MODE_ISO;
break;
case SAGA_ISO_METAMAP:
- if (SceneModule.scene_mode == R_SCENE_MODE_NORMAL) {
- warning("ProcessSceneResources: Isometric metamap incompatible with normal scene mode");
+ if (_sceneMode == R_SCENE_MODE_NORMAL) {
+ warning("Scene::ProcessSceneResources(): Isometric metamap incompatible with normal scene mode");
return R_FAILURE;
}
debug(0, "Loading isometric metamap resource.");
if (_vm->_isoMap->loadMetamap(res_data, res_data_len) != R_SUCCESS) {
- warning("ProcessSceneResources: Error loading isometric metamap resource");
+ warning("Scene::ProcessSceneResources(): Error loading isometric metamap resource");
return R_FAILURE;
}
- SceneModule.scene_mode = R_SCENE_MODE_ISO;
+ _sceneMode = R_SCENE_MODE_ISO;
break;
case SAGA_ISO_METATILESET:
- if (SceneModule.scene_mode == R_SCENE_MODE_NORMAL) {
- warning("ProcessSceneResources: Isometric metatileset incompatible with normal scene mode");
+ if (_sceneMode == R_SCENE_MODE_NORMAL) {
+ warning("Scene::ProcessSceneResources(): Isometric metatileset incompatible with normal scene mode");
return R_FAILURE;
}
debug(0, "Loading isometric metatileset resource.");
if (_vm->_isoMap->loadMetaTileset(res_data, res_data_len) != R_SUCCESS) {
- warning("ProcessSceneResources: Error loading isometric tileset resource");
+ warning("Scene::ProcessSceneResources(): Error loading isometric tileset resource");
return R_FAILURE;
}
- SceneModule.scene_mode = R_SCENE_MODE_ISO;
+ _sceneMode = R_SCENE_MODE_ISO;
break;
case SAGA_ANIM_1:
case SAGA_ANIM_2:
@@ -688,40 +704,40 @@ int ProcessSceneResources() {
new_animinfo = (SCENE_ANIMINFO *)malloc(sizeof *new_animinfo);
if (new_animinfo == NULL) {
- warning("ProcessSceneResources: Memory allocation error");
+ warning("Scene::ProcessSceneResources(): Memory allocation error");
return R_MEM;
}
- if (_vm->_anim->load(SceneModule.reslist[i].res_data,
- SceneModule.reslist[i].res_data_len, &new_anim_id) != R_SUCCESS) {
- warning("ProcessSceneResources: Error loading animation resource");
+ if (_vm->_anim->load(_resList[i].res_data,
+ _resList[i].res_data_len, &new_anim_id) != R_SUCCESS) {
+ warning("Scene::ProcessSceneResources(): Error loading animation resource");
return R_FAILURE;
}
new_animinfo->anim_handle = new_anim_id;
- new_animinfo->anim_res_number = SceneModule.reslist[i].res_number;
- ys_dll_add_tail(SceneModule.anim_list, new_animinfo, sizeof *new_animinfo);
- SceneModule.anim_entries++;
+ new_animinfo->anim_res_number = _resList[i].res_number;
+ ys_dll_add_tail(_animList, new_animinfo, sizeof *new_animinfo);
+ _animEntries++;
}
break;
case SAGA_PAL_ANIM:
debug(0, "Loading palette animation resource.");
- PALANIM_Load(SceneModule.reslist[i].res_data, SceneModule.reslist[i].res_data_len);
+ PALANIM_Load(_resList[i].res_data, _resList[i].res_data_len);
break;
default:
- warning("ProcessSceneResources: Encountered unknown resource type: %d", SceneModule.reslist[i].res_type);
+ warning("Scene::ProcessSceneResources(): Encountered unknown resource type: %d", _resList[i].res_type);
break;
}
}
return R_SUCCESS;
}
-int SCENE_Draw(R_SURFACE *dst_s) {
+int Scene::draw(R_SURFACE *dst_s) {
R_GAME_DISPLAYINFO disp_info;
R_BUFFER_INFO buf_info;
R_POINT bg_pt;
- assert(SceneModule.init);
+ assert(_initialized);
_vm->_render->getBufferInfo(&buf_info);
GAME_GetDisplayInfo(&disp_info);
@@ -729,11 +745,11 @@ int SCENE_Draw(R_SURFACE *dst_s) {
bg_pt.x = 0;
bg_pt.y = 0;
- switch (SceneModule.scene_mode) {
+ switch (_sceneMode) {
case R_SCENE_MODE_NORMAL:
_vm->_gfx->bufToSurface(dst_s, buf_info.r_bg_buf, disp_info.logical_w,
- MAX(disp_info.scene_h, SceneModule.bg.h), NULL, &bg_pt);
+ MAX(disp_info.scene_h, _bg.h), NULL, &bg_pt);
break;
case R_SCENE_MODE_ISO:
_vm->_isoMap->draw(dst_s);
@@ -747,42 +763,42 @@ int SCENE_Draw(R_SURFACE *dst_s) {
return R_SUCCESS;
}
-int SCENE_End() {
+int Scene::endScene() {
R_SCENE_INFO scene_info;
- assert(SceneModule.init);
+ assert(_initialized);
- if (SceneModule.scene_loaded != 1) {
- warning("SCENE_End(): No scene to end");
+ if (!_sceneLoaded) {
+ warning("Scene::endScene(): No scene to end");
return -1;
}
- debug(0, "SCENE_End(): Ending scene...");
+ debug(0, "Ending scene...");
- SCENE_GetInfo(&scene_info);
+ getInfo(&scene_info);
- SceneModule.scene_proc(SCENE_END, &scene_info);
+ _sceneProc(SCENE_END, &scene_info);
- if (SceneModule.desc.script_num > 0) {
+ if (_desc.script_num > 0) {
_vm->_script->freeScript();
}
// Free scene background
- if (SceneModule.bg.loaded) {
- free(SceneModule.bg.buf);
- SceneModule.bg.loaded = 0;
+ if (_bg.loaded) {
+ free(_bg.buf);
+ _bg.loaded = 0;
}
// Free scene background mask
- if (SceneModule.bg_mask.loaded) {
- free(SceneModule.bg_mask.buf);
- SceneModule.bg_mask.loaded = 0;
+ if (_bgMask.loaded) {
+ free(_bgMask.buf);
+ _bgMask.loaded = 0;
}
// Free scene resource list
- if (SceneModule.load_desc) {
+ if (_loadDesc) {
- free(SceneModule.reslist);
+ free(_resList);
}
// Free animation info list
@@ -792,19 +808,19 @@ int SCENE_End() {
_vm->_objectMap->freeMem();
_vm->_actionMap->freeMap();
- ys_dll_destroy(SceneModule.anim_list);
+ ys_dll_destroy(_animList);
- SceneModule.anim_entries = 0;
+ _animEntries = 0;
EVENT_ClearList();
- _vm->textClearList(SceneModule.text_list);
+ _vm->textClearList(_textList);
- SceneModule.scene_loaded = 0;
+ _sceneLoaded = false;
return R_SUCCESS;
}
-void CF_scenechange(int argc, char *argv[], void *refCon) {
+void Scene::sceneChangeCmd(int argc, char *argv[]) {
int scene_num = 0;
if ((argc == 0) || (argc > 1)) {
@@ -813,110 +829,42 @@ void CF_scenechange(int argc, char *argv[], void *refCon) {
scene_num = atoi(argv[0]);
- if ((scene_num < 1) || (scene_num > SceneModule.scene_max)) {
+ if ((scene_num < 1) || (scene_num > _sceneMax)) {
CON_Print("Invalid scene number.");
return;
}
- SCENE_ClearQueue();
+ clearSceneQueue();
- if (SCENE_Change(scene_num) == R_SUCCESS) {
+ if (changeScene(scene_num) == R_SUCCESS) {
CON_Print("Scene changed.");
} else {
CON_Print("Couldn't change scene!");
}
}
-void CF_sceneinfo(int argc, char *argv[], void *refCon) {
+static void CF_scenechange(int argc, char *argv[], void *refCon) {
+ ((Scene *)refCon)->sceneChangeCmd(argc, argv);
+}
+
+void Scene::sceneInfoCmd(int argc, char *argv[]) {
const char *fmt = "%-20s %d";
- CON_Print(fmt, "Scene number:", SceneModule.scene_number);
- CON_Print(fmt, "Descriptor R#:", SceneModule.scene_rn);
+ CON_Print(fmt, "Scene number:", _sceneNumber);
+ CON_Print(fmt, "Descriptor R#:", _sceneResNum);
CON_Print("-------------------------");
- CON_Print(fmt, "Unknown:", SceneModule.desc.unknown0);
- CON_Print(fmt, "Resource list R#:", SceneModule.desc.res_list_rn);
- CON_Print(fmt, "End slope:", SceneModule.desc.end_slope);
- CON_Print(fmt, "Begin slope:", SceneModule.desc.begin_slope);
- CON_Print(fmt, "Script resource:", SceneModule.desc.script_num);
- CON_Print(fmt, "Scene script:", SceneModule.desc.scene_scriptnum);
- CON_Print(fmt, "Start script:", SceneModule.desc.start_scriptnum);
- CON_Print(fmt, "Music R#", SceneModule.desc.music_rn);
+ CON_Print(fmt, "Unknown:", _desc.unknown0);
+ CON_Print(fmt, "Resource list R#:", _desc.res_list_rn);
+ CON_Print(fmt, "End slope:", _desc.end_slope);
+ CON_Print(fmt, "Begin slope:", _desc.begin_slope);
+ CON_Print(fmt, "Script resource:", _desc.script_num);
+ CON_Print(fmt, "Scene script:", _desc.scene_scriptnum);
+ CON_Print(fmt, "Start script:", _desc.start_scriptnum);
+ CON_Print(fmt, "Music R#", _desc.music_rn);
}
-int initialScene(int param, R_SCENE_INFO *scene_info) {
- R_EVENT event;
- R_EVENT *q_event;
- int delay_time = 0;
- static PALENTRY current_pal[R_PAL_ENTRIES];
- PALENTRY *pal;
-
- switch (param) {
- case SCENE_BEGIN:
- _vm->_music->stop();
- _vm->_sound->stopVoice();
-
- // Fade palette to black from intro scene
- _vm->_gfx->getCurrentPal(current_pal);
-
- event.type = R_CONTINUOUS_EVENT;
- event.code = R_PAL_EVENT;
- event.op = EVENT_PALTOBLACK;
- event.time = 0;
- event.duration = PALETTE_FADE_DURATION;
- event.data = current_pal;
-
- delay_time += PALETTE_FADE_DURATION;
-
- q_event = EVENT_Queue(&event);
-
- // Activate user interface
- event.type = R_ONESHOT_EVENT;
- event.code = R_INTERFACE_EVENT;
- event.op = EVENT_ACTIVATE;
- event.time = 0;
-
- q_event = EVENT_Chain(q_event, &event);
-
- // Set first scene background w/o changing palette
- event.type = R_ONESHOT_EVENT;
- event.code = R_BG_EVENT;
- event.op = EVENT_DISPLAY;
- event.param = NO_SET_PALETTE;
- event.time = 0;
-
- q_event = EVENT_Chain(q_event, &event);
-
- // Fade in to first scene background palette
- SCENE_GetBGPal(&pal);
-
- event.type = R_CONTINUOUS_EVENT;
- event.code = R_PAL_EVENT;
- event.op = EVENT_BLACKTOPAL;
- event.time = delay_time;
- event.duration = PALETTE_FADE_DURATION;
- event.data = pal;
-
- q_event = EVENT_Chain(q_event, &event);
-
- event.code = R_PALANIM_EVENT;
- event.op = EVENT_CYCLESTART;
- event.time = 0;
-
- q_event = EVENT_Chain(q_event, &event);
-
- _vm->_anim->setFlag(0, ANIM_LOOP);
- _vm->_anim->play(0, delay_time);
-
- debug(0, "InitialSceneproc(): Scene started");
- break;
- case SCENE_END:
- break;
- default:
- warning("Illegal scene procedure parameter");
- break;
- }
-
- return 0;
+static void CF_sceneinfo(int argc, char *argv[], void *refCon) {
+ ((Scene *)refCon)->sceneInfoCmd(argc, argv);
}
int defaultScene(int param, R_SCENE_INFO *scene_info) {
@@ -952,7 +900,7 @@ int defaultScene(int param, R_SCENE_INFO *scene_info) {
case SCENE_END:
break;
default:
- warning("Illegal scene procedure parameter");
+ warning("Scene::defaultScene(): Illegal scene procedure parameter");
break;
}
diff --git a/saga/scene.h b/saga/scene.h
index 2a168bfecc..acf7515fca 100644
--- a/saga/scene.h
+++ b/saga/scene.h
@@ -26,8 +26,40 @@
#ifndef SAGA_SCENE_H
#define SAGA_SCENE_H
+#include "saga/text.h"
+
namespace Saga {
+enum R_SCENE_MODES {
+ R_SCENE_MODE_INVALID,
+ R_SCENE_MODE_NORMAL,
+ R_SCENE_MODE_ISO
+};
+
+struct SCENE_ZINFO {
+ int begin_slope;
+ int end_slope;
+
+};
+
+struct SCENE_BGINFO {
+ int bg_x;
+ int bg_y;
+ int bg_w;
+ int bg_h;
+ int bg_p;
+ byte *bg_buf;
+ size_t bg_buflen;
+};
+
+struct R_SCENE_INFO {
+ SCENE_ZINFO z_info;
+ SCENE_BGINFO bg_info;
+ R_TEXTLIST *text_list;
+};
+
+typedef int (R_SCENE_PROC) (int, R_SCENE_INFO *);
+
#define PALETTE_FADE_DURATION 1000
enum SCENE_LOAD_FLAGS {
@@ -111,64 +143,67 @@ struct R_SCENE_QUEUE {
int scene_skiptarget;
};
-struct R_SCENE_MODULE {
- int init;
- R_RSCFILE_CONTEXT *scene_ctxt;
- int *scene_lut;
- int scene_count;
- int scene_max;
- YS_DL_LIST *scene_queue;
- int first_scene;
- int scene_loaded;
- int scene_mode;
- int scene_number;
- int scene_rn;
- int in_game;
- int load_desc;
- R_SCENE_DESC desc;
- int reslist_loaded;
- int reslist_entries;
- R_SCENE_RESLIST *reslist;
- int anim_entries;
- YS_DL_LIST *anim_list;
- R_SCENE_PROC *scene_proc;
- R_TEXTLIST *text_list;
- SCENE_IMAGE bg;
- SCENE_IMAGE bg_mask;
+class Scene {
+ public:
+ Scene(SagaEngine *vm);
+ ~Scene();
+ int reg();
+
+ int startScene();
+ int nextScene();
+ int skipScene();
+ int endScene();
+ int queueScene(R_SCENE_QUEUE *scene_queue);
+ int draw(R_SURFACE *);
+ int getMode();
+ int getBGMaskInfo(int *w, int *h, byte **buf, size_t *buf_len);
+ int isBGMaskPresent(void);
+ int getBGInfo(SCENE_BGINFO *bginfo);
+ int getZInfo(SCENE_ZINFO *zinfo);
+ int getBGPal(PALENTRY **pal);
+ int getInfo(R_SCENE_INFO *si);
+
+ int clearSceneQueue(void);
+ int changeScene(int scene_num);
+
+ bool initialized() { return _initialized; }
+
+ void sceneInfoCmd(int argc, char *argv[]);
+ void sceneChangeCmd(int argc, char *argv[]);
+
+ private:
+ int loadScene(int scene, int load_flag, R_SCENE_PROC scene_proc, R_SCENE_DESC *);
+ int loadSceneDescriptor(uint32 res_number);
+ int loadSceneResourceList(uint32 res_number);
+ int processSceneResources();
+
+ private:
+ SagaEngine *_vm;
+ bool _initialized;
+
+ R_RSCFILE_CONTEXT *_sceneContext;
+ int *_sceneLUT;
+ int _sceneCount;
+ int _sceneMax;
+ YS_DL_LIST *_sceneQueue;
+ int _firstScene;
+ bool _sceneLoaded;
+ int _sceneMode;
+ int _sceneNumber;
+ int _sceneResNum;
+ bool _inGame;
+ bool _loadDesc;
+ R_SCENE_DESC _desc;
+ int _resListEntries;
+ R_SCENE_RESLIST *_resList;
+ int _animEntries;
+ YS_DL_LIST *_animList;
+ R_SCENE_PROC *_sceneProc;
+ R_TEXTLIST *_textList;
+ SCENE_IMAGE _bg;
+ SCENE_IMAGE _bgMask;
};
-int SCENE_Queue(R_SCENE_QUEUE * scene_queue);
-int SCENE_ClearQueue(void);
-
-int SCENE_Load(int scene, int load_flag, R_SCENE_PROC scene_proc, R_SCENE_DESC *);
-int LoadSceneDescriptor(uint32 res_number);
-int LoadSceneResourceList(uint32 res_number);
-int ProcessSceneResources();
-void CF_scenechange(int argc, char *argv[], void *refCon);
-void CF_sceneinfo(int argc, char *argv[], void *refCon);
-
-int IHNM_StartProc();
-
-int initialScene(int param, R_SCENE_INFO *scene_info);
-int defaultScene(int param, R_SCENE_INFO *scene_info);
-
-int ITE_StartProc();
-int ITE_IntroAnimProc(int param, R_SCENE_INFO *scene_info);
-int ITE_IntroCave1Proc(int param, R_SCENE_INFO *scene_info);
-int ITE_IntroCave2Proc(int param, R_SCENE_INFO *scene_info);
-int ITE_IntroCave3Proc(int param, R_SCENE_INFO *scene_info);
-int ITE_IntroCave4Proc(int param, R_SCENE_INFO *scene_info);
-int ITE_IntroValleyProc(int param, R_SCENE_INFO *scene_info);
-int ITE_IntroTreeHouseProc(int param, R_SCENE_INFO *scene_info);
-int ITE_IntroFairePathProc(int param, R_SCENE_INFO *scene_info);
-int ITE_IntroFaireTentProc(int param, R_SCENE_INFO *scene_info);
-
-int IHNM_StartProc();
-int IHNM_IntroMovieProc1(int param, R_SCENE_INFO *scene_info);
-int IHNM_IntroMovieProc2(int param, R_SCENE_INFO *scene_info);
-int IHNM_IntroMovieProc3(int param, R_SCENE_INFO *scene_info);
-int IHNM_HateProc(int param, R_SCENE_INFO *scene_info);
-
} // End of namespace Saga
#endif
diff --git a/saga/scene_mod.h b/saga/scene_mod.h
deleted file mode 100644
index 0f4e46a62c..0000000000
--- a/saga/scene_mod.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* ScummVM - Scumm Interpreter
- * Copyright (C) 2004 The ScummVM project
- *
- * The ReInherit Engine is (C)2000-2003 by Daniel Balsom.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * $Header$
- *
- */
-
-// Scene management module public header file
-
-#ifndef SAGA_SCENE_MOD_H__
-#define SAGA_SCENE_MOD_H__
-
-#include "saga/text.h"
-
-namespace Saga {
-
-enum R_SCENE_MODES {
- R_SCENE_MODE_INVALID,
- R_SCENE_MODE_NORMAL,
- R_SCENE_MODE_ISO
-};
-
-struct SCENE_ZINFO {
- int begin_slope;
- int end_slope;
-
-};
-
-struct SCENE_BGINFO {
- int bg_x;
- int bg_y;
- int bg_w;
- int bg_h;
- int bg_p;
- byte *bg_buf;
- size_t bg_buflen;
-};
-
-struct R_SCENE_INFO {
- SCENE_ZINFO z_info;
- SCENE_BGINFO bg_info;
- R_TEXTLIST *text_list;
-};
-
-typedef int (R_SCENE_PROC) (int, R_SCENE_INFO *);
-
-int SCENE_Register();
-int SCENE_Init();
-int SCENE_Shutdown();
-int SCENE_Start();
-int SCENE_Next();
-int SCENE_Skip();
-int SCENE_End();
-int SCENE_Draw(R_SURFACE *);
-int SCENE_GetMode();
-int SCENE_GetBGMaskInfo(int *w, int *h, byte **buf, size_t *buf_len);
-int SCENE_IsBGMaskPresent(void);
-int SCENE_GetBGInfo(SCENE_BGINFO *bginfo);
-int SCENE_GetZInfo(SCENE_ZINFO *zinfo);
-int SCENE_GetBGPal(PALENTRY **pal);
-int SCENE_GetInfo(R_SCENE_INFO *si);
-
-} // End of namespace Saga
-
-#endif
diff --git a/saga/sdebug.cpp b/saga/sdebug.cpp
index 1995dafbbf..374d9a4d96 100644
--- a/saga/sdebug.cpp
+++ b/saga/sdebug.cpp
@@ -27,7 +27,7 @@
#include "saga/gfx.h"
#include "saga/console_mod.h"
#include "saga/text.h"
-#include "saga/scene_mod.h"
+#include "saga/scene.h"
#include "saga/font.h"
#include "saga/script.h"
@@ -48,7 +48,7 @@ int SDEBUG_PrintInstr(R_SCRIPT_THREAD *thread) {
int i;
R_SCENE_INFO si;
- SCENE_GetInfo(&si);
+ _vm->_scene->getInfo(&si);
disp_buf[0] = 0;
diff --git a/saga/sprite.cpp b/saga/sprite.cpp
index 38ad99c458..0db7a62a21 100644
--- a/saga/sprite.cpp
+++ b/saga/sprite.cpp
@@ -26,7 +26,7 @@
#include "saga/game_mod.h"
#include "saga/gfx.h"
-#include "saga/scene_mod.h"
+#include "saga/scene.h"
#include "saga/rscfile_mod.h"
#include "saga/text.h"
@@ -288,7 +288,7 @@ int Sprite::drawOccluded(R_SURFACE *ds, R_SPRITELIST *sprite_list, int sprite_nu
return R_FAILURE;
}
- if (!SCENE_IsBGMaskPresent()) {
+ if (!_vm->_scene->isBGMaskPresent()) {
return draw(ds, sprite_list, sprite_num, spr_x, spr_y);
}
@@ -317,7 +317,7 @@ int Sprite::drawOccluded(R_SURFACE *ds, R_SPRITELIST *sprite_list, int sprite_nu
sprite_data_p = sprite_p + readS.pos();
// Create actor Z occlusion LUT
- SCENE_GetZInfo(&zinfo);
+ _vm->_scene->getZInfo(&zinfo);
e_slope = zinfo.end_slope;
@@ -327,7 +327,7 @@ int Sprite::drawOccluded(R_SURFACE *ds, R_SPRITELIST *sprite_list, int sprite_nu
actor_z = spr_y;
- SCENE_GetBGMaskInfo(&mask_w, &mask_h, &mask_buf, &mask_buf_len);
+ _vm->_scene->getBGMaskInfo(&mask_w, &mask_h, &mask_buf, &mask_buf_len);
spr_src_rect.left = 0;
spr_src_rect.top = 0;