diff options
author | Torbjörn Andersson | 2004-09-25 10:11:17 +0000 |
---|---|---|
committer | Torbjörn Andersson | 2004-09-25 10:11:17 +0000 |
commit | 05829b6edb131033adc9010af05a5326bfea5cb5 (patch) | |
tree | 41846749d4b9045043472718e66ab08959acaad0 | |
parent | 05e440cc5a8aedbbcb508cb53527c5f286fc8169 (diff) | |
download | scummvm-rg350-05829b6edb131033adc9010af05a5326bfea5cb5.tar.gz scummvm-rg350-05829b6edb131033adc9010af05a5326bfea5cb5.tar.bz2 scummvm-rg350-05829b6edb131033adc9010af05a5326bfea5cb5.zip |
Enough stubs and pops to make the intro scene script finish properly.
svn-id: r15263
-rw-r--r-- | saga/script.h | 12 | ||||
-rw-r--r-- | saga/sfuncs.cpp | 195 |
2 files changed, 160 insertions, 47 deletions
diff --git a/saga/script.h b/saga/script.h index c3164b98e6..003299b4ef 100644 --- a/saga/script.h +++ b/saga/script.h @@ -222,17 +222,24 @@ private: int SDebugPrintInstr(R_SCRIPT_THREAD *thread); int SF_sleep(R_SCRIPTFUNC_PARAMS); - int SF_3(R_SCRIPTFUNC_PARAMS); + int SF_takeObject(R_SCRIPTFUNC_PARAMS); + int SF_objectIsCarried(R_SCRIPTFUNC_PARAMS); int SF_setCommandText(R_SCRIPTFUNC_PARAMS); + int SF_mainMode(R_SCRIPTFUNC_PARAMS); int SF_actorWalkTo(R_SCRIPTFUNC_PARAMS); int SF_setFacing(R_SCRIPTFUNC_PARAMS); + int SF_startBgdAnim(R_SCRIPTFUNC_PARAMS); int SF_freezeInterface(R_SCRIPTFUNC_PARAMS); + int SF_dialogMode(R_SCRIPTFUNC_PARAMS); int SF_startAnim(R_SCRIPTFUNC_PARAMS); + int SF_stopBgdAnim(R_SCRIPTFUNC_PARAMS); int SF_actorWalkToAsync(R_SCRIPTFUNC_PARAMS); int SF_moveTo(R_SCRIPTFUNC_PARAMS); int SF_actorWalk(R_SCRIPTFUNC_PARAMS); int SF_cycleActorFrames(R_SCRIPTFUNC_PARAMS); int SF_setFrame(R_SCRIPTFUNC_PARAMS); + int SF_setRightPortrait(R_SCRIPTFUNC_PARAMS); + int SF_setLeftPortrait(R_SCRIPTFUNC_PARAMS); int SF_linkAnim(R_SCRIPTFUNC_PARAMS); int SF_placeActor(R_SCRIPTFUNC_PARAMS); int SF_checkUserInterrupt(R_SCRIPTFUNC_PARAMS); @@ -240,8 +247,10 @@ private: int SF_doAction(R_SCRIPTFUNC_PARAMS); int SF_faceTowards(R_SCRIPTFUNC_PARAMS); int SF_setFollower(R_SCRIPTFUNC_PARAMS); + int SF_setBgdAnimSpeed(R_SCRIPTFUNC_PARAMS); int SF_centerActor(R_SCRIPTFUNC_PARAMS); int SF_setActorState(R_SCRIPTFUNC_PARAMS); + int SF_finishBgdAnim(R_SCRIPTFUNC_PARAMS); int SF_swapActors(R_SCRIPTFUNC_PARAMS); int SF_scriptSpecialWalk(R_SCRIPTFUNC_PARAMS); int SF_walkRelative(R_SCRIPTFUNC_PARAMS); @@ -253,6 +262,7 @@ private: int SF_getActorX(R_SCRIPTFUNC_PARAMS); int SF_getActorY(R_SCRIPTFUNC_PARAMS); int SF_playMusic(R_SCRIPTFUNC_PARAMS); + int SF_playSound(R_SCRIPTFUNC_PARAMS); }; } // End of namespace Saga diff --git a/saga/sfuncs.cpp b/saga/sfuncs.cpp index df1c900c81..c2e7fae026 100644 --- a/saga/sfuncs.cpp +++ b/saga/sfuncs.cpp @@ -43,20 +43,20 @@ void Script::setupScriptFuncList(void) { static const R_SFUNC_ENTRY SFuncList[R_SFUNC_NUM] = { {0, 0, NULL}, {1, 1, OPCODE(SF_sleep)}, - {2, 0, NULL}, - {3, 1, OPCODE(SF_3)}, + {2, 1, OPCODE(SF_takeObject)}, + {3, 1, OPCODE(SF_objectIsCarried)}, {4, 1, OPCODE(SF_setCommandText)}, - {5, 0, NULL}, + {5, 0, OPCODE(SF_mainMode)}, {6, 3, OPCODE(SF_actorWalkTo)}, - {7, 0, OPCODE(SF_doAction)}, + {7, 4, OPCODE(SF_doAction)}, {8, 2, OPCODE(SF_setFacing)}, - {9, 0, NULL}, - {10, 0, NULL}, + {9, 2, OPCODE(SF_startBgdAnim)}, + {10, 1, OPCODE(SF_stopBgdAnim)}, {11, 1, OPCODE(SF_freezeInterface)}, - {12, 0, NULL}, + {12, 0, OPCODE(SF_dialogMode)}, {13, 0, NULL}, - {14, 0, OPCODE(SF_faceTowards)}, - {15, 0, OPCODE(SF_setFollower)}, + {14, 2, OPCODE(SF_faceTowards)}, + {15, 2, OPCODE(SF_setFollower)}, {16, 0, NULL}, {17, 0, NULL}, {18, 0, NULL}, @@ -64,54 +64,54 @@ void Script::setupScriptFuncList(void) { {20, 0, NULL}, {21, 0, NULL}, {22, 0, NULL}, - {23, 0, NULL}, + {23, 2, OPCODE(SF_setBgdAnimSpeed)}, {24, 0, NULL}, - {25, 0, OPCODE(SF_centerActor)}, + {25, 1, OPCODE(SF_centerActor)}, {26, 3, OPCODE(SF_startAnim)}, {27, 3, OPCODE(SF_actorWalkToAsync)}, {28, 0, NULL}, - {29, 0, OPCODE(SF_setActorState)}, + {29, 2, OPCODE(SF_setActorState)}, {30, 3, OPCODE(SF_moveTo)}, {31, 0, NULL}, {32, 0, NULL}, - {33, 0, NULL}, - {34, 0, OPCODE(SF_swapActors)}, + {33, 1, OPCODE(SF_finishBgdAnim)}, + {34, 2, OPCODE(SF_swapActors)}, {35, 0, NULL}, {36, 4, OPCODE(SF_actorWalk)}, {37, 4, OPCODE(SF_cycleActorFrames)}, {38, 3, OPCODE(SF_setFrame)}, - {39, 0, NULL}, - {40, 0, NULL}, + {39, 1, OPCODE(SF_setRightPortrait)}, + {40, 1, OPCODE(SF_setLeftPortrait)}, {41, 4, OPCODE(SF_linkAnim)}, - {42, 0, OPCODE(SF_scriptSpecialWalk)}, + {42, 4, OPCODE(SF_scriptSpecialWalk)}, {43, 6, OPCODE(SF_placeActor)}, {44, 0, OPCODE(SF_checkUserInterrupt)}, - {45, 0, OPCODE(SF_walkRelative)}, - {46, 0, OPCODE(SF_moveRelative)}, + {45, 5, OPCODE(SF_walkRelative)}, + {46, 5, OPCODE(SF_moveRelative)}, {47, 0, NULL}, {48, 0, NULL}, {49, 0, NULL}, {50, 0, NULL}, {51, 0, NULL}, - {52, 0, OPCODE(SF_throwActor)}, - {53, 0, OPCODE(SF_waitWalk)}, + {52, 6, OPCODE(SF_throwActor)}, + {53, 1, OPCODE(SF_waitWalk)}, {54, 0, NULL}, - {55, 0, OPCODE(SF_changeActorScene)}, - {56, 0, OPCODE(SF_climb)}, + {55, 2, OPCODE(SF_changeActorScene)}, + {56, 4, OPCODE(SF_climb)}, {57, 0, NULL}, - {58, 0, OPCODE(SF_setActorZ)}, + {58, 2, OPCODE(SF_setActorZ)}, {59, 0, NULL}, - {60, 0, OPCODE(SF_getActorX)}, - {61, 0, OPCODE(SF_getActorY)}, + {60, 1, OPCODE(SF_getActorX)}, + {61, 1, OPCODE(SF_getActorY)}, {62, 0, NULL}, - {63, 0, OPCODE(SF_playMusic)}, + {63, 1, OPCODE(SF_playMusic)}, {64, 0, NULL}, {65, 0, NULL}, {66, 0, NULL}, {67, 0, NULL}, {68, 0, NULL}, {69, 0, NULL}, - {70, 0, NULL}, + {70, 1, OPCODE(SF_playSound)}, {71, 0, NULL}, {72, 0, NULL}, {73, 0, NULL}, @@ -136,10 +136,16 @@ int Script::SF_sleep(R_SCRIPTFUNC_PARAMS) { return R_SUCCESS; } +// Script function #2 (0x02) +int Script::SF_takeObject(R_SCRIPTFUNC_PARAMS) { + thread->pop(); + return R_SUCCESS; +} + // Script function #3 (0x03) // Unknown function; pops a parameter and pushes a return value // Param1: unknown -int Script::SF_3(R_SCRIPTFUNC_PARAMS) { +int Script::SF_objectIsCarried(R_SCRIPTFUNC_PARAMS) { // INCOMPLETE SDataWord_T param1; param1 = thread->pop(); @@ -161,6 +167,11 @@ int Script::SF_setCommandText(R_SCRIPTFUNC_PARAMS) { return R_SUCCESS; } +// Script function #5 (0x05) +int Script::SF_mainMode(R_SCRIPTFUNC_PARAMS) { + return R_SUCCESS; +} + // Script function #6 (0x06) blocking // Commands the specified actor to walk to the given position // Param1: actor id @@ -193,8 +204,12 @@ int Script::SF_actorWalkTo(R_SCRIPTFUNC_PARAMS) { return R_SUCCESS; } -// Script function #7 +// Script function #7 (0x07) int Script::SF_doAction(R_SCRIPTFUNC_PARAMS) { + thread->pop(); + thread->pop(); + thread->pop(); + thread->pop(); return R_SUCCESS; } @@ -224,6 +239,19 @@ int Script::SF_setFacing(R_SCRIPTFUNC_PARAMS) { return R_SUCCESS; } +// Script function #9 (0x09) +int Script::SF_startBgdAnim(R_SCRIPTFUNC_PARAMS) { + thread->pop(); + thread->pop(); + return R_SUCCESS; +} + +// Script function #10 (0x0A) +int Script::SF_stopBgdAnim(R_SCRIPTFUNC_PARAMS) { + thread->pop(); + return R_SUCCESS; +} + // Script function #11 (0x0B) nonblocking // If the parameter is true, the user interface is disabled while script // continues to run. If the parameter is false, the user interface is @@ -243,20 +271,36 @@ int Script::SF_freezeInterface(R_SCRIPTFUNC_PARAMS) { return R_SUCCESS; } -// Script function #14 +// Script function #12 (0x0C) +// Disables mouse input, etc. +int Script::SF_dialogMode(R_SCRIPTFUNC_PARAMS) { + return R_SUCCESS; +} + +// Script function #14 (0x0E) int Script::SF_faceTowards(R_SCRIPTFUNC_PARAMS) { + thread->pop(); + thread->pop(); return R_SUCCESS; } -// Script function #15 +// Script function #15 (0x0F) int Script::SF_setFollower(R_SCRIPTFUNC_PARAMS) { thread->pop(); thread->pop(); return R_SUCCESS; } -// Script function #25 +// Script function #23 (0x17) +int Script::SF_setBgdAnimSpeed(R_SCRIPTFUNC_PARAMS) { + thread->pop(); + thread->pop(); + return R_SUCCESS; +} + +// Script function #25 (0x19) int Script::SF_centerActor(R_SCRIPTFUNC_PARAMS) { + thread->pop(); return R_SUCCESS; } @@ -320,8 +364,10 @@ int Script::SF_actorWalkToAsync(R_SCRIPTFUNC_PARAMS) { return R_SUCCESS; } -// Script function #29 +// Script function #29 (0x1D) int Script::SF_setActorState(R_SCRIPTFUNC_PARAMS) { + thread->pop(); + thread->pop(); return R_SUCCESS; } @@ -362,7 +408,13 @@ int Script::SF_moveTo(R_SCRIPTFUNC_PARAMS) { return R_SUCCESS; } -// Script function #34 +// Script function #33 (0x21) +int Script::SF_finishBgdAnim(R_SCRIPTFUNC_PARAMS) { + thread->pop(); + return R_SUCCESS; +} + +// Script function #34 (0x22) int Script::SF_swapActors(R_SCRIPTFUNC_PARAMS) { thread->pop(); thread->pop(); @@ -473,6 +525,20 @@ int Script::SF_setFrame(R_SCRIPTFUNC_PARAMS) { return R_SUCCESS; } +// Script function #39 (0x27) +// Sets the right-hand portrait +int Script::SF_setRightPortrait(R_SCRIPTFUNC_PARAMS) { + thread->pop(); + return R_SUCCESS; +} + +// Script function #40 (0x28) +// Sets the left-hand portrait +int Script::SF_setLeftPortrait(R_SCRIPTFUNC_PARAMS) { + thread->pop(); + return R_SUCCESS; +} + // Script function #41 (0x29) nonblocking // Links the specified animations for playback @@ -505,8 +571,12 @@ int Script::SF_linkAnim(R_SCRIPTFUNC_PARAMS) { return R_SUCCESS; } -// Script function #42 +// Script function #42 (0x2A) int Script::SF_scriptSpecialWalk(R_SCRIPTFUNC_PARAMS) { + thread->pop(); + thread->pop(); + thread->pop(); + thread->pop(); return R_SUCCESS; } @@ -574,48 +644,75 @@ int Script::SF_checkUserInterrupt(R_SCRIPTFUNC_PARAMS) { return R_SUCCESS; } -// Script function #45 +// Script function #45 (0x2D) int Script::SF_walkRelative(R_SCRIPTFUNC_PARAMS) { + thread->pop(); + thread->pop(); + thread->pop(); + thread->pop(); + thread->pop(); return R_SUCCESS; } -// Script function #46 +// Script function #46 (0x2E) int Script::SF_moveRelative(R_SCRIPTFUNC_PARAMS) { + thread->pop(); + thread->pop(); + thread->pop(); + thread->pop(); + thread->pop(); return R_SUCCESS; } -// Script function #52 +// Script function #52 (0x34) int Script::SF_throwActor(R_SCRIPTFUNC_PARAMS) { + thread->pop(); + thread->pop(); + thread->pop(); + thread->pop(); + thread->pop(); + thread->pop(); return R_SUCCESS; } -// Script function #53 +// Script function #53 (0x35) int Script::SF_waitWalk(R_SCRIPTFUNC_PARAMS) { + thread->pop(); return R_SUCCESS; } -// Script function #55 +// Script function #55 (0x37) int Script::SF_changeActorScene(R_SCRIPTFUNC_PARAMS) { + thread->pop(); + thread->pop(); return R_SUCCESS; } -// Script function #56 +// Script function #56 (0x38) int Script::SF_climb(R_SCRIPTFUNC_PARAMS) { + thread->pop(); + thread->pop(); + thread->pop(); + thread->pop(); return R_SUCCESS; } -// Script function #58 +// Script function #58 (0x3A) int Script::SF_setActorZ(R_SCRIPTFUNC_PARAMS) { + thread->pop(); + thread->pop(); return R_SUCCESS; } -// Script function #60 +// Script function #60 (0x3C) int Script::SF_getActorX(R_SCRIPTFUNC_PARAMS) { + thread->pop(); return R_SUCCESS; } -// Script function #61 +// Script function #61 (0x3D) int Script::SF_getActorY(R_SCRIPTFUNC_PARAMS) { + thread->pop(); return R_SUCCESS; } @@ -648,7 +745,7 @@ static int musicTable[] = { MUSIC_26 }; -// Script function #63 +// Script function #63 (0x3F) int Script::SF_playMusic(R_SCRIPTFUNC_PARAMS) { SDataWord_T param; @@ -662,4 +759,10 @@ int Script::SF_playMusic(R_SCRIPTFUNC_PARAMS) { return R_SUCCESS; } +// Script function #70 (0x46) +int Script::SF_playSound(R_SCRIPTFUNC_PARAMS) { + thread->pop(); + return R_SUCCESS; +} + } // End of namespace Saga |