diff options
author | Torbjörn Andersson | 2003-09-17 13:03:13 +0000 |
---|---|---|
committer | Torbjörn Andersson | 2003-09-17 13:03:13 +0000 |
commit | d6c2957d5cc17c121f540938697e4a6ea6e96073 (patch) | |
tree | 3f61310e6da10259e8b40587fd35398eacb43336 /sword2/function.cpp | |
parent | 7d0b682cc950a8cc9865f71e28f0d8e7502342c4 (diff) | |
download | scummvm-rg350-d6c2957d5cc17c121f540938697e4a6ea6e96073.tar.gz scummvm-rg350-d6c2957d5cc17c121f540938697e4a6ea6e96073.tar.bz2 scummvm-rg350-d6c2957d5cc17c121f540938697e4a6ea6e96073.zip |
cleanup
svn-id: r10269
Diffstat (limited to 'sword2/function.cpp')
-rw-r--r-- | sword2/function.cpp | 480 |
1 files changed, 229 insertions, 251 deletions
diff --git a/sword2/function.cpp b/sword2/function.cpp index 753c1a61a6..d6ec2a193e 100644 --- a/sword2/function.cpp +++ b/sword2/function.cpp @@ -17,14 +17,7 @@ * $Header$ */ -//------------------------------------------------------------------------------------ - -#include <stdlib.h> -#include <stdarg.h> -#include <stdio.h> - #include "stdafx.h" -#include "driver/driver96.h" #include "build_display.h" #include "credits.h" #include "debug.h" @@ -33,263 +26,243 @@ #include "interpreter.h" #include "layers.h" // for 'this_screen' structure #include "logic.h" -#include "memory.h" -#include "object.h" #include "protocol.h" #include "resman.h" #include "sword2.h" // for CloseGame() -//------------------------------------------------------------------------------------ -typedef struct -{ - uint32 a; - uint32 b; -} test_struct; - -//------------------------------------------------------------------------------------ - -Object_graphic engine_graph; // global for engine -Object_mega engine_mega; // global for engine -//------------------------------------------------------------------------------------ -int32 FN_test_function(int32 *params) -{ -//param 0 address of a flag - Zdebug(" TEST %d %d", *params, RESULT); +Object_graphic engine_graph; // global for engine +Object_mega engine_mega; // global for engine +int32 FN_test_function(int32 *params) { + // param 0 address of a flag - return(IR_CONT); + Zdebug(" TEST %d %d", params[0], RESULT); + return IR_CONT; } -//------------------------------------------------------------------------------------ -int32 FN_test_flags(int32 *params) -{ -//param 0 value of flag - test_struct *tony; - - - tony = (test_struct*) *params; //address of structure +int32 FN_test_flags(int32 *params) { + // param 0 value of flag + // Zdebug("\nFN_test_flags %d, %d\n", params[0], params[1]); + return IR_CONT; +} +int32 FN_gosub(int32 *params) { // Tony23Sept96 + // hurray, script subroutines + // param 0 id of script -// Zdebug("\nFN_test_flags %d, %d\n", tony->a, tony->b ); + LLogic.Logic_up(params[0]); - return(IR_CONT); + // logic goes up - pc is saved for current level + return IR_GOSUB; } -//------------------------------------------------------------------------------------ -int32 FN_gosub(int32 *params) //Tony23Sept96 -{ -//hurray, script subroutines -//param 0 id of script +int32 FN_new_script(int32 *params) { // Tony13Nov96 + // change current script - must be followed by a TERMINATE script + // directive + // param 0 id of script - LLogic.Logic_up(*params); + Zdebug("FN_new_script %d", params[0]); - return(4); //logic goes up - pc is saved for current level -} -//------------------------------------------------------------------------------------ -int32 FN_new_script(int32 *params) //Tony13Nov96 -{ -//change current script - must be followed by a TERMINATE script directive -//param 0 id of script - Zdebug("FN_new_script %d", *params); - - PLAYER_ACTION=0; //must clear this + // must clear this + PLAYER_ACTION = 0; - LLogic.Logic_replace( *params ); + LLogic.Logic_replace(params[0]); - return(IR_TERMINATE); //drop out no pc save - and around again + //drop out no pc save - and around again + return IR_TERMINATE; } -//------------------------------------------------------------------------------------ -int32 FN_interact(int32 *params) //Tony13Nov96 -{ -//run targets action on a subroutine -//called by player on his base level 0 idle, for example +int32 FN_interact(int32 *params) { // Tony13Nov96 + // run targets action on a subroutine + // called by player on his base level 0 idle, for example + // param 0 id of target from which we derive action script + // reference -//param 0 id of target from which we derive action script reference + Zdebug("FN_interact %d", params[0]); - Zdebug("FN_interact %d", *params); - PLAYER_ACTION=0; //must clear this + // must clear this + PLAYER_ACTION = 0; - LLogic.Logic_up( (*params*65536)+2); //3rd script of clicked on id + // 3rd script of clicked on id + LLogic.Logic_up((params[0] * 65536) + 2); - return(IR_GOSUB); //out, up and around again - pc is saved for current level to be returned to + // out, up and around again - pc is saved for current level to be + // returned to + return IR_GOSUB; } -//------------------------------------------------------------------------------------ -// Open & close a resource. -// Forces a resource into memory before it's "officially" opened for use. -// eg. if an anim needs to run on smoothly from another, "preloading" gets it into memory in advance -// to avoid the cacheing delay that normally occurs before the first frame. +int32 FN_preload(int32 *params) { // (1Nov96 JEL) + // Open & close a resource. + // Forces a resource into memory before it's "officially" opened for + // use. eg. if an anim needs to run on smoothly from another, + // "preloading" gets it into memory in advance to avoid the cacheing + // delay that normally occurs before the first frame. -int32 FN_preload(int32 *params) // (1Nov96 JEL) -{ res_man.Res_open(params[0]); // open resource res_man.Res_close(params[0]); // close resource - - return(IR_CONT); // continue script + return IR_CONT; // continue script } +int32 FN_prefetch(int32 *params) { + // Go fetch resource in the background. -// Go fetch resource in the background. -int32 FN_prefetch(int32 *params) -{ - return(IR_CONT); + return IR_CONT; } +int32 FN_fetch_wait(int32 *params) { + // Fetches a resource in the background but prevents the script from + // continuing until the resource is in memory. -// Fetches a resource in the background but prevents the script from continuing until the resource is in memory. -int32 FN_fetch_wait(int32 *params) -{ - return (IR_CONT); + return IR_CONT; } +int32 FN_release(int32 *params) { + // Releases a resource from memory. Used for freeing memory for + // sprites that have just been used and will not be used again. + // Sometimes it is better to kick out a sprite straight away so that + // the memory can be used for more frequent animations. -// Releases a resource from memory. Used for freeing memory for sprites that have just been used -// and will not be used again. -// Sometimes it is better to kick out a sprite straight away so that the memory can be used for -// more frequent animations. -int32 FN_release(int32 *params) -{ - return (IR_CONT); + return IR_CONT; } +int32 FN_random(int32 *params) { // (1nov96 JEL) + // Generates a random number between 'min' & 'max' inclusive, and + // sticks it in the script flag 'result' -//------------------------------------------------------------------------------------ -// Generates a random number between 'min' & 'max' inclusive, and sticks it in the script flag 'result' - -int32 FN_random(int32 *params) // (1nov96 JEL) -{ uint32 min = params[0]; uint32 max = params[1]; - RESULT = (rand() % (max-min+1)) + min; // return_value = random integer between min and max, inclusive + // return_value = random integer between min and max, inclusive + RESULT = (rand() % (max-min + 1)) + min; - return(IR_CONT); // continue script + // continue script + return IR_CONT; } -//------------------------------------------------------------------------------------ -int32 FN_pause(int32 *params) // (19nov96 JEL) -{ + +int32 FN_pause(int32 *params) { // (19nov96 JEL) // params: 0 pointer to object's logic structure - // 1 number of game-cycles to pause + // 1 number of game-cycles to pause - //NB. Pause-value of 0 causes script to continue, 1 causes a 1-cycle quit, 2 gives 2 cycles, etc. + // NB. Pause-value of 0 causes script to continue, 1 causes a 1-cycle + // quit, 2 gives 2 cycles, etc. - Object_logic *ob_logic = (Object_logic *)params[0]; + Object_logic *ob_logic = (Object_logic *) params[0]; - if (ob_logic->looping==0) // start the pause - { + if (ob_logic->looping == 0) { + // start the pause ob_logic->looping = 1; - ob_logic->pause = params[1]; // no. of game cycles - } - if (ob_logic->pause) // if non-zero - { - ob_logic->pause--; // decrement the pause count - return(IR_REPEAT); // drop out of script, but call this again next cycle + // no. of game cycles + ob_logic->pause = params[1]; } - else // pause count is zerp - { + + if (ob_logic->pause) { + // decrement the pause count + ob_logic->pause--; + + // drop out of script, but call this again next cycle + return IR_REPEAT; + } else { ob_logic->looping = 0; - return(IR_CONT); // continue script + + // continue script + return IR_CONT; } } -//------------------------------------------------------------------------------------ -int32 FN_random_pause(int32 *params) // (26nov96 JEL) -{ + +int32 FN_random_pause(int32 *params) { // (26nov96 JEL) // params: 0 pointer to object's logic structure - // 1 minimum number of game-cycles to pause - // 2 maximum number of game-cycles to pause + // 1 minimum number of game-cycles to pause + // 2 maximum number of game-cycles to pause - Object_logic *ob_logic = (Object_logic *)params[0]; + Object_logic *ob_logic = (Object_logic *) params[0]; int32 pars[2]; - - if (ob_logic->looping==0) - { + if (ob_logic->looping == 0) { pars[0] = params[1]; // min pars[1] = params[2]; // max FN_random(pars); - pars[1] = RESULT; // random value between 'min' & 'max' inclusive + // random value between 'min' & 'max' inclusive + pars[1] = RESULT; } pars[0] = params[0]; // &logic - return FN_pause(pars); } -//------------------------------------------------------------------------------------ -//------------------------------------------------------------------------------------ -int32 FN_pass_graph(int32 *params) //Tony28Nov96 -{ -//makes an engine local copy of passed graphic_structure and mega_structure - run script 4 of an object to request this -//used by FN_turn_to(id) etc -//remember, we cannot simply read a compact any longer but instead must request it from the object itself -//params 0 pointer to a graphic structure *might not need this? +int32 FN_pass_graph(int32 *params) { // Tony28Nov96 + // makes an engine local copy of passed graphic_structure and + // mega_structure - run script 4 of an object to request this + // used by FN_turn_to(id) etc + // + // remember, we cannot simply read a compact any longer but instead + // must request it from the object itself + //params 0 pointer to a graphic structure (might not need this?) - memcpy( &engine_graph, (uint8*)params[0], sizeof(Object_graphic)); + memcpy(&engine_graph, (uint8 *) params[0], sizeof(Object_graphic)); - return(IR_CONT); //makes no odds + // makes no odds + return IR_CONT; } -//------------------------------------------------------------------------------------ -int32 FN_pass_mega(int32 *params) //Tony28Nov96 -{ -//makes an engine local copy of passed graphic_structure and mega_structure - run script 4 of an object to request this -//used by FN_turn_to(id) etc -//remember, we cannot simply read a compact any longer but instead must request it from the object itself -//params 0 pointer to a mega structure +int32 FN_pass_mega(int32 *params) { // Tony28Nov96 + // makes an engine local copy of passed graphic_structure and + // mega_structure - run script 4 of an object to request this + // used by FN_turn_to(id) etc + // + // remember, we cannot simply read a compact any longer but instead + // must request it from the object itself + // params 0 pointer to a mega structure - memcpy( &engine_mega, (uint8*)params[0], sizeof(Object_mega)); + memcpy(&engine_mega, (uint8*) params[0], sizeof(Object_mega)); - return(IR_CONT); //makes no odds + //makes no odds + return IR_CONT; } -//------------------------------------------------------------------------------------ -// temp. function! -// used for setting far-referenced megaset resource field in mega object, from start script -int32 FN_set_value(int32 *params) // (02jan97 JEL) -{ +int32 FN_set_value(int32 *params) { // (02jan97 JEL) + // temp. function! + // used for setting far-referenced megaset resource field in mega + // object, from start script + // params: 0 pointer to object's mega structure - // 1 value to set it to + // 1 value to set it to Object_mega *ob_mega = (Object_mega *)params[0]; - ob_mega->megaset_res = params[1]; - return(IR_CONT); // continue script + // continue script + return IR_CONT; } -//------------------------------------------------------------------------------------ + #define BLACK 0 #define WHITE 1 -#define RED 2 +#define RED 2 #define GREEN 3 #define BLUE 4 -//------------------------------------------------------------------------------------ -uint8 black[4] = {0,0,0,0}; -uint8 white[4] = {255,255,255,0}; -uint8 red[4] = {255,0,0,0}; -uint8 green[4] = {0,255,0,0}; -uint8 blue[4] = {0,0,255,0}; -//------------------------------------------------------------------------------------ -// flash colour 0 (ie. border) - useful during script development -// eg. FN_flash(BLUE) where a text line is missed; RED when some code missing, etc - -int32 FN_flash(int32 *params) // (James14feb97) -{ - // params 0: colour to flash -#ifdef _SWORD2_DEBUG +uint8 black[4] = { 0, 0, 0, 0 }; +uint8 white[4] = { 255, 255, 255, 0 }; +uint8 red[4] = { 255, 0, 0, 0 }; +uint8 green[4] = { 0, 255, 0, 0 }; +uint8 blue[4] = { 0, 0, 255, 0 }; + +int32 FN_flash(int32 *params) { // (James14feb97) + // flash colour 0 (ie. border) - useful during script development + // eg. FN_flash(BLUE) where a text line is missed; RED when some code + // missing, etc - uint32 count; + // params 0: colour to flash - switch (params[0]) // what colour? - { +#ifdef _SWORD2_DEBUG + // what colour? + switch (params[0]) { case WHITE: BS2_SetPalette(0, 1, white, RDPAL_INSTANT); break; @@ -307,152 +280,157 @@ int32 FN_flash(int32 *params) // (James14feb97) break; } - for (count=0; count<0x80000; count++) - { - count++; - count--; - } + // There used to be a busy-wait loop here, so I don't know how long + // the delay was meant to be. Probably doesn't matter much. + ServiceWindows(); + g_system->delay_msecs(250); BS2_SetPalette(0, 1, black, RDPAL_INSTANT); +#endif -#endif // _SWORD2_DEBUG - - return(IR_CONT); + return IR_CONT; } -//------------------------------------------------------------------------------------ -// set border colour - useful during script development -// eg. set to colour during a timer situation, then black when timed out -int32 FN_colour(int32 *params) // (James14feb97) -{ + +int32 FN_colour(int32 *params) { // (James14feb97) + // set border colour - useful during script development + // eg. set to colour during a timer situation, then black when timed + // out + // params 0: colour (see defines above) #ifdef _SWORD2_DEBUG - - switch (params[0]) // what colour? - { + // what colour? + switch (params[0]) { case BLACK: - BS2_SetPalette(0, 1, black, RDPAL_INSTANT); + BS2_SetPalette(0, 1, black, RDPAL_INSTANT); break; case WHITE: - BS2_SetPalette(0, 1, white, RDPAL_INSTANT); + BS2_SetPalette(0, 1, white, RDPAL_INSTANT); break; case RED: - BS2_SetPalette(0, 1, red, RDPAL_INSTANT); + BS2_SetPalette(0, 1, red, RDPAL_INSTANT); break; case GREEN: - BS2_SetPalette(0, 1, green, RDPAL_INSTANT); + BS2_SetPalette(0, 1, green, RDPAL_INSTANT); break; case BLUE: - BS2_SetPalette(0, 1, blue, RDPAL_INSTANT); + BS2_SetPalette(0, 1, blue, RDPAL_INSTANT); break; } +#endif -#endif // _SWORD2_DEBUG - - return(IR_CONT); + return IR_CONT; } -//------------------------------------------------------------------------------------ -// Display a message to the user on the screen. -// -int32 FN_display_msg(int32 *params) // (Chris 15/5/97) -{ +int32 FN_display_msg(int32 *params) { // (Chris 15/5/97) + // Display a message to the user on the screen. + // // params 0: Text number of message to be displayed. - uint32 local_text = params[0]&0xffff; - uint32 text_res = params[0]/SIZE; + + uint32 local_text = params[0] & 0xffff; + uint32 text_res = params[0] / SIZE; // Display message for three seconds. - DisplayMsg(FetchTextLine( res_man.Res_open(text_res), local_text )+2, 3); // +2 to skip the encoded text number in the first 2 chars; 3 is duration in seconds + + // +2 to skip the encoded text number in the first 2 chars; 3 is + // duration in seconds + + DisplayMsg(FetchTextLine(res_man.Res_open(text_res), local_text) + 2, 3); res_man.Res_close(text_res); RemoveMsg(); - return(IR_CONT); + return IR_CONT; } -//------------------------------------------------------------------------------------ -// FN_reset_globals is used by the demo - so it can loop back & restart itself -int32 FN_reset_globals(int32 *params) //Tony29May97 -{ - int32 size; - uint32 *globals; - int j; - size = res_man.Res_fetch_len(1); +int32 FN_reset_globals(int32 *params) { // Tony29May97 + // FN_reset_globals is used by the demo - so it can loop back & + // restart itself - size-=sizeof(_standardHeader); + int32 size; + uint32 *globals; + int j; + + size = res_man.Res_fetch_len(1); + size -= sizeof(_standardHeader); - Zdebug("\nglobals size %d", size/4); + Zdebug("\nglobals size %d", size / 4); - globals = (uint32*) ((uint8 *) res_man.Res_open(1)+sizeof(_standardHeader)); + globals = (uint32*) ((uint8 *) res_man.Res_open(1) + sizeof(_standardHeader)); - for (j=0;j<size/4;j++) - globals[j]=0; //blank each global variable + // blank each global variable + for (j = 0; j < size / 4; j++) + globals[j] = 0; res_man.Res_close(1); - res_man.Kill_all_objects(0); //all objects but george + // all objects but george + res_man.Kill_all_objects(0); -// SetGlobalInterpreterVariables((int32*)(res_man.Res_open(1)+sizeof(_standardHeader))); //reopen global variables resource & send address to interpreter - it won't be moving -// res_man.Res_close(1); + // reopen global variables resource & send address to interpreter - it + // won't be moving + // SetGlobalInterpreterVariables((int32 *) (res_man.Res_open(1) + sizeof(_standardHeader))); + // res_man.Res_close(1); - //--------------------------------------------------------------- // FOR THE DEMO - FORCE THE SCROLLING TO BE RESET! (James29may97) // - this is taken from FN_init_background - this_screen.scroll_flag = 2; // switch on scrolling (2 means first time on screen) - //--------------------------------------------------------------- - return(IR_CONT); -} -//------------------------------------------------------------------------------------ -// FN_play_credits - Plays the credits? -// This function just quits the game if this is the playable demo, ie. credits are NOT played in the demo any more! + // switch on scrolling (2 means first time on screen) + this_screen.scroll_flag = 2; -extern uint8 quitGame; // From sword2.cpp + return IR_CONT; +} -int32 FN_play_credits(int32 *params) -{ +int32 FN_play_credits(int32 *params) { + // FN_play_credits - Plays the credits? + // This function just quits the game if this is the playable demo, ie. + // credits are NOT played in the demo any more! -/* uint32 rv; // for Credits() return value + /* uint32 rv; // for Credits() return value - if (!DEMO) // this ju - { - _drvDrawStatus ds; - _drvSoundStatus ss; - _drvKeyStatus ks; + if (!DEMO) { + _drvDrawStatus ds; + _drvSoundStatus ss; + _drvKeyStatus ks; ClearAllFx(); // Must stop all fx CloseFx(-2); // including leadins CloseFx(-1); // including leadouts StopMusic(); // Stop any streaming music + +#if 0 + // FIXME: I don't think this is needed - for (int i = 0; i<16; i++) - g_sword2->_sound->UpdateCompSampleStreaming(); // And wait for it to die + // And wait for it to die + for (int i = 0; i<16; i++) { + g_sword2->_sound->UpdateCompSampleStreaming(); + } +#endif - GetDrawStatus (&ds); + GetDrawStatus(&ds); GetSoundStatus(&ss); - GetKeyStatus (&ks); + GetKeyStatus(&ks); rv = Credits(&ds, &ss, res_man.GetCdPath(), GetRenderType()==3, &gotTheFocus, &ks); - SetDrawStatus (&ds); // (James14aug97) Because game crashing when trying to close down after credits - SetSoundStatus(&ss); // -"- - } - // returns non-zero if Ctrl-Q was pressed to quit the game during the credits + // (James14aug97) Because game crashing when trying to close + // down after credits + SetDrawStatus(&ds); + SetSoundStatus(&ss); + } */ - //if (rv || DEMO) // if Ctrl-Q pressed during credits, or if this is the playable demo - if (g_sword2->_gameId == GID_SWORD2_DEMO) - { - Close_game(); //close engine systems down + + // FIXME: This probably isn't the correct way of shutting down ScummVM + + if (g_sword2->_gameId == GID_SWORD2_DEMO) { + Close_game(); // close engine systems down CloseAppWindow(); exit(0); // quit the game } - - return (IR_CONT); + return IR_CONT; } -//------------------------------------------------------------------------------------ - |