diff --git a/Utils/Scripter/function.cpp b/Utils/Scripter/function.cpp index 1e0db0109..04c7e44b6 100644 --- a/Utils/Scripter/function.cpp +++ b/Utils/Scripter/function.cpp @@ -63,13 +63,11 @@ static FunctionDef s_functionNames[]= { { "setCharacterAnimation", 2 }, // characterId,animationId { "setText", 2 }, // characterId,textId - { "giveItem", 1 }, // itemId - { "gotItem", 1 }, // itemId { "setResponseOptions", 1 }, // optionsId { "getResponse", 0 }, // - - { "drawSprite", 4 }, // frame,x,y,ot - { "getFrameTime", 0 }, // + { "getAmmoCount", 1 }, // ammoId + { "setAmmoCount", 2 }, // ammoId,amount + { "isHoldingWeapon", 1 }, // weaponId }; static int s_functionCount=sizeof(s_functionNames)/sizeof(FunctionDef); diff --git a/data/Scripts/ch3l3_01.scr b/data/Scripts/ch3l3_01.scr index d833c596b..683a093f8 100644 --- a/data/Scripts/ch3l3_01.scr +++ b/data/Scripts/ch3l3_01.scr @@ -6,12 +6,19 @@ #include data/scripts/defs/trans.scr -_setText(CHAR_PATRICK,STR__INGAME__CH3__L3__PATRICK1); -_setResponseOptions(QUESTION_OK); -do +if(_isHoldingWeapon(WEAPON_BUBBLEWAND)==TRUE) { - pause; + if(_getAmmoCount(AMMO_BUBBLEWAND)<10) + { + _setText(CHAR_PATRICK,STR__INGAME__CH3__L3__PATRICK1); + _setResponseOptions(QUESTION_OK); + do + { + pause; + } + while(_getResponse()==ANSWER_NONE); + _setAmmoCount(AMMO_BUBBLEWAND,10); + } } -while(_getResponse()==ANSWER_NONE); stop; diff --git a/data/Scripts/ch3l3_02.scr b/data/Scripts/ch3l3_02.scr index c43084887..21f549b96 100644 --- a/data/Scripts/ch3l3_02.scr +++ b/data/Scripts/ch3l3_02.scr @@ -6,12 +6,19 @@ #include data/scripts/defs/trans.scr -_setText(CHAR_PATRICK,STR__INGAME__CH3__L3__PATRICK2); -_setResponseOptions(QUESTION_OK); -do +if(_isHoldingWeapon(WEAPON_BUBBLEWAND)==TRUE) { - pause; + if(_getAmmoCount(AMMO_BUBBLEWAND)<10) + { + _setText(CHAR_PATRICK,STR__INGAME__CH3__L3__PATRICK2); + _setResponseOptions(QUESTION_OK); + do + { + pause; + } + while(_getResponse()==ANSWER_NONE); + _setAmmoCount(AMMO_BUBBLEWAND,10); + } } -while(_getResponse()==ANSWER_NONE); stop; diff --git a/data/Scripts/defs/items.scr b/data/Scripts/defs/items.scr index 392fbbf4d..093f1e350 100644 --- a/data/Scripts/defs/items.scr +++ b/data/Scripts/defs/items.scr @@ -1,21 +1,7 @@ -// Item numbers +// For getAmmoCount(), setAmmoCount() +#define AMMO_BUBBLEWAND 0 -#define ITEM_BALLOON 0 -#define ITEM_BUBBLE_MIXTURE 1 -#define ITEM_DIVING_HELMET 2 -#define ITEM_CORAL_BLOWER 3 -#define ITEM_NET 4 -#define ITEM_JELLY_LAUNCHER 5 -#define ITEM_GLASSES 6 -#define ITEM_SQUEAKY_BOOTS 7 -#define ITEM_SUPERHERO_RING 8 -#define ITEM_GARY_THE_SNAIL 9 -#define ITEM_DISGUISE 10 -#define ITEM_100_HEALTH 11 -#define ITEM_50_HEALTH 12 -#define ITEM_25_HEALTH 13 -#define ITEM_JELLYFISH_1 14 -#define ITEM_JELLYFISH_2 15 -#define ITEM_JELLYFISH_3 16 -#define ITEM_JAM_JAR 17 + +// For isHoldingWeapon() +#define WEAPON_BUBBLEWAND 0 diff --git a/source/player/player.h b/source/player/player.h index db2ddf54f..6fe537f50 100644 --- a/source/player/player.h +++ b/source/player/player.h @@ -409,8 +409,10 @@ public: int isWearingDivingHelmet() {return m_divingHelmet;} void giveBubbleAmmo() {m_bubbleAmmo+=INITIAL_BUBBLE_BLOWER_AMMO;if(m_bubbleAmmo>MAX_BUBBLE_BLOWER_AMMO)m_bubbleAmmo=MAX_BUBBLE_BLOWER_AMMO;} + void setBubbleAmmo(int _amount) {m_bubbleAmmo=_amount;if(m_bubbleAmmo>MAX_BUBBLE_BLOWER_AMMO)m_bubbleAmmo=MAX_BUBBLE_BLOWER_AMMO;} void useOneBubble() {m_bubbleAmmo--;} int getBubbleAmmo() {return m_bubbleAmmo;} + int isHoldingBubbleWand() {return m_currentMode==PLAYER_MODE_BUBBLE_MIXTURE;} void giveJellyAmmo() {m_jellyAmmo+=JELLY_LAUNCHER_AMMO_IN_PICKUP;if(m_jellyAmmo>MAX_JELLY_LAUNCHER_AMMO)m_jellyAmmo=MAX_JELLY_LAUNCHER_AMMO;} void useOneJelly() {m_jellyAmmo--;} @@ -420,14 +422,13 @@ public: void useOneJellyFishAmmo() {m_jellyfishAmmoCount--;} int isJellyFishAmmoFull() {return m_jellyfishAmmoCount==MAX_JELLFISH_IN_NET;} int getJellyFishAmmo() {return m_jellyfishAmmoCount;} + int isHoldingNet() {return m_currentMode==PLAYER_MODE_NET;} void setIsInWater(int _in) {m_isInWater=_in;m_helmetSoundTimer=0;} int getIsInWater() {return m_isInWater;} int getIsHelmetFullSoICanStopSoakingUp() {return m_healthWaterLevel==WATERMAXHEALTH;} int getIsHelmetSoFullThatIDontNeedToSoakUp(){return m_healthWaterLevel>=WATERMINSOAKUPLEVEL;} - int isHoldingNet() {return m_currentMode==PLAYER_MODE_NET;} - void justButtBouncedABadGuy(); // Also fugly.. :/ void setFloating(); diff --git a/source/script/function.cpp b/source/script/function.cpp index e09eb7f0c..33cea0149 100644 --- a/source/script/function.cpp +++ b/source/script/function.cpp @@ -35,6 +35,15 @@ question/response #include "game\convo.h" #endif +#ifndef __GAME_GAME_H__ +#include "game\game.h" +#endif + +#ifndef __PLAYER_PLAYER_H__ +#include "player\player.h" +#endif + + /* Std Lib ------- */ @@ -46,6 +55,19 @@ question/response Tyepdefs && Defines ------------------- */ +// For getAmmoCount(), setAmmoCount() +enum +{ + AMMO_BUBBLEWAND, +}; + +// For isHoldingWeapon() +enum +{ + WEAPON_BUBBLEWAND, +}; + + /*---------------------------------------------------------------------- Structure defintions -------------------- */ @@ -63,13 +85,11 @@ typedef struct static signed short func_setCharacterAnimation(unsigned short *_args); static signed short func_setText(unsigned short *_args); -static signed short func_giveItem(unsigned short *_args); -static signed short func_gotItem(unsigned short *_args); static signed short func_setResponseOptions(unsigned short *_args); static signed short func_getResponse(unsigned short *_args); - -static signed short func_drawSprite(unsigned short *_args); -static signed short func_getFrameTime(unsigned short *_args); +static signed short func_getAmmoCount(unsigned short *_args); +static signed short func_setAmmoCount(unsigned short *_args); +static signed short func_isHoldingWeapon(unsigned short *_args); /*---------------------------------------------------------------------- @@ -80,13 +100,11 @@ static FunctionDef s_functionDefs[]= { { func_setCharacterAnimation, 2 }, // characterId,animationId { func_setText, 2 }, // characterId,textId - { func_giveItem, 1 }, // itemId - { func_gotItem, 1 }, // itemId { func_setResponseOptions, 1 }, // optionsId { func_getResponse, 0 }, // - - { func_drawSprite, 4 }, // frame,x,y,ot - { func_getFrameTime, 0 }, // + { func_getAmmoCount, 1 }, // ammoId + { func_setAmmoCount, 2 }, // ammoId,amount + { func_isHoldingWeapon, 1 }, // weaponId }; static const int s_numFunctionDefs=sizeof(s_functionDefs)/sizeof(FunctionDef); @@ -135,31 +153,6 @@ static signed short func_setText(unsigned short *_args) } -/*---------------------------------------------------------------------- - Function: - Purpose: Flag item as collected - Params: itemId - Returns: 0 - ---------------------------------------------------------------------- */ -static signed short func_giveItem(unsigned short *_args) -{ - return 0; -} - - -/*---------------------------------------------------------------------- - Function: - Purpose: Test whether an item has been collected or not - Params: itemId - Returns: true/false - ---------------------------------------------------------------------- */ -static signed short func_gotItem(unsigned short *_args) -{ - - return false; -} - - /*---------------------------------------------------------------------- Function: Purpose: Sets the allowable responses for a question @@ -187,35 +180,76 @@ static signed short func_getResponse(unsigned short *_args) /*---------------------------------------------------------------------- Function: - Purpose: - Params: frame,x,y,ot + Purpose: + Params: ammoId + Returns: ammoCount + ---------------------------------------------------------------------- */ +static signed short func_getAmmoCount(unsigned short *_args) +{ + int ammo=0; + + switch(_args[0]) + { + case AMMO_BUBBLEWAND: + ammo=GameScene.getPlayer()->getBubbleAmmo(); + break; + + default: + ASSERT(!"BAD AMMO TYPE IN func_getAmmoCount()"); + break; + } + + return ammo; +} + + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: ammoId,amount Returns: 0 ---------------------------------------------------------------------- */ -#include "gfx\sprbank.h" -SpriteBank *sb=NULL; -static signed short func_drawSprite(unsigned short *_args) +static signed short func_setAmmoCount(unsigned short *_args) { - sFrameHdr *fh; - if(!sb) + switch(_args[0]) { - sb=new ("sb") SpriteBank; - sb->load(SPRITES_SPRITES_SPR); + case AMMO_BUBBLEWAND: + GameScene.getPlayer()->setBubbleAmmo(_args[1]); + break; + + default: + ASSERT(!"BAD AMMO TYPE IN func_setAmmoCount()"); + break; } - fh=sb->getFrameHeader(_args[0]); - sb->printFT4(_args[0],_args[1]-(fh->W/2),_args[2]-(fh->H/2),0,0,_args[3]); return 0; } /*---------------------------------------------------------------------- Function: - Purpose: - Params: 0 - Returns: frameCount + Purpose: + Params: weaponId + Returns: true(1) or false(0) ---------------------------------------------------------------------- */ -static signed short func_getFrameTime(unsigned short *_args) +static signed short func_isHoldingWeapon(unsigned short *_args) { - return GameState::getFramesSinceLast(); + int held=0; + + switch(_args[0]) + { + case WEAPON_BUBBLEWAND: + if(GameScene.getPlayer()->isHoldingBubbleWand()) + { + held=1; + } + break; + + default: + ASSERT(!"BAD AMMO TYPE IN func_setAmmoCount()"); + break; + } + + return held; } diff --git a/tools/scripter.exe b/tools/scripter.exe index 024575a9f..41bbf64d8 100644 Binary files a/tools/scripter.exe and b/tools/scripter.exe differ