2478 lines
76 KiB
Scheme
Executable File
2478 lines
76 KiB
Scheme
Executable File
//-------------------------------------------------
|
|
// File: ggsm_arcade_helper.sch
|
|
// Purpose: general functions required by system
|
|
//-------------------------------------------------
|
|
|
|
//-------------------------------------------------
|
|
// INCLUDES
|
|
//-------------------------------------------------
|
|
USING "ggsm_structs.sch"
|
|
USING "ggsm_maths.sch"
|
|
USING "ggsm_data.sch"
|
|
USING "arcade_games_help_text_flow.sch"
|
|
USING "net_arcade_cabinet.sch"
|
|
|
|
//-------------------------------------------------
|
|
// SOUND FUNCTIONS
|
|
//-------------------------------------------------
|
|
FUNC BOOL GGSM_IS_SOUND_LOOPED(ARCADE_GAMES_SOUND eSound)
|
|
SWITCH (eSound)
|
|
CASE ARCADE_GAMES_SOUND_GGSM_BOSS_GRAN_ATTACK_EYE_LASER_CHARGE_LOOP
|
|
CASE ARCADE_GAMES_SOUND_GGSM_ABIL_PLAYER_DECOY_LOOP
|
|
RETURN TRUE
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC GGSM_START_AUDIO_SCENE(STRING str)
|
|
IF NOT IS_AUDIO_SCENE_ACTIVE(str)
|
|
START_AUDIO_SCENE(str)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC GGSM_STOP_AUDIO_SCENE(STRING str)
|
|
IF IS_AUDIO_SCENE_ACTIVE(str)
|
|
STOP_AUDIO_SCENE(str)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL GGSM_PLAY_SOUND(ARCADE_GAMES_SOUND eSound)
|
|
IF (eSound = ARCADE_GAMES_SOUND_END)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF sGGSMData.bDebugDisableSFX
|
|
RETURN FALSE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
ARCADE_GAMES_SOUND_PLAY(eSound)
|
|
ARCADE_GAMES_SOUND_SET_VARIABLE(eSound, "Screen_Position", 0.5)
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND eSound, VECTOR_2D vPos)
|
|
IF (eSound = ARCADE_GAMES_SOUND_END)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF sGGSMData.bDebugDisableSFX
|
|
RETURN FALSE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
FLOAT sp = ((vPos.x - GGSM_PX_OVERSCAN_MIN_X) / GGSM_PX_OVERSCAN_WIDTH)
|
|
sp = CLAMP(sp, 0.0, 1.0)
|
|
|
|
ARCADE_GAMES_SOUND_PLAY(eSound)
|
|
ARCADE_GAMES_SOUND_SET_VARIABLE(eSound, "Screen_Position", sp)
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL GGSM_TRIGGER_MUSIC_EVENT(STRING str)
|
|
BOOL bOk = TRIGGER_MUSIC_EVENT(str)
|
|
CPRINTLN(DEBUG_MINIGAME, "GGSM_TRIGGER_MUSIC_EVENT:", str)
|
|
RETURN bOk
|
|
ENDFUNC
|
|
|
|
FUNC BOOL GGSM_TRIGGER_MUSIC_EVENT_FOR_STAGE(INT iStage)
|
|
SWITCH (iStage)
|
|
CASE 0 RETURN GGSM_TRIGGER_MUSIC_EVENT("ARCADE_SM_LVL_1_START")
|
|
CASE 1 RETURN GGSM_TRIGGER_MUSIC_EVENT("ARCADE_SM_LVL_2_START")
|
|
CASE 2 RETURN GGSM_TRIGGER_MUSIC_EVENT("ARCADE_SM_LVL_3_START")
|
|
CASE 3 RETURN GGSM_TRIGGER_MUSIC_EVENT("ARCADE_SM_LVL_4_START")
|
|
CASE 4 RETURN GGSM_TRIGGER_MUSIC_EVENT("ARCADE_SM_LVL_5_START")
|
|
CASE 5 RETURN GGSM_TRIGGER_MUSIC_EVENT("ARCADE_SM_BOSS_START")
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
//-------------------------------------------------
|
|
// FADE FUNCTIONS
|
|
//-------------------------------------------------
|
|
PROC GGSM_FADE_SCREEN_OUT(FLOAT fTime = 0.5)
|
|
sGGSMData.fFadeTime = fTime
|
|
ENDPROC
|
|
|
|
PROC GGSM_FADE_SCREEN_OUT_INSTANT()
|
|
sGGSMData.fFadeTime = 0.001
|
|
sGGSMData.fFadeAlpha = 1.0
|
|
ENDPROC
|
|
|
|
PROC GGSM_FADE_SCREEN_IN(FLOAT fTime = 0.5)
|
|
sGGSMData.fFadeTime = -fTime
|
|
ENDPROC
|
|
|
|
FUNC BOOL GGSM_IS_SCREEN_FADED_OUT()
|
|
RETURN (sGGSMData.fFadeAlpha = 1.0)
|
|
ENDFUNC
|
|
|
|
FUNC BOOL GGSM_IS_SCREEN_FADED_IN()
|
|
RETURN (sGGSMData.fFadeAlpha = 0.0)
|
|
ENDFUNC
|
|
|
|
PROC GGSM_FAKE_FADE_SCREEN_OUT(FLOAT fTime = 0.5)
|
|
sGGSMData.fFakeFadeTime = fTime
|
|
ENDPROC
|
|
|
|
PROC GGSM_FAKE_FADE_SCREEN_IN(FLOAT fTime = 0.5)
|
|
sGGSMData.fFakeFadeTime = -fTime
|
|
ENDPROC
|
|
|
|
FUNC BOOL GGSM_IS_SCREEN_FAKE_FADED_OUT()
|
|
RETURN (sGGSMData.fFakeFadeAlpha = 1.0)
|
|
ENDFUNC
|
|
|
|
FUNC BOOL GGSM_IS_SCREEN_FAKE_FADED_IN()
|
|
RETURN (sGGSMData.fFakeFadeAlpha = 0.0)
|
|
ENDFUNC
|
|
|
|
PROC GGSM_CLEAR_FAKE_FADE()
|
|
sGGSMData.fFakeFadeAlpha = 0.0
|
|
sGGSMData.fFakeFadeTime = 0.0
|
|
ENDPROC
|
|
|
|
PROC GGSM_CLEAR_WHITE_OUT()
|
|
sGGSMData.fWhiteOutAlpha = 0.0
|
|
sGGSMData.fWhiteOutFadeTime = 0.0
|
|
ENDPROC
|
|
|
|
PROC GGSM_FADE_TO_WHITE(FLOAT fTime = 0.5)
|
|
sGGSMData.fWhiteOutFadeTime = fTime
|
|
ENDPROC
|
|
|
|
PROC GGSM_FADE_FROM_WHITE(FLOAT fTime = 0.5)
|
|
sGGSMData.fWhiteOutFadeTime = -fTime
|
|
ENDPROC
|
|
|
|
FUNC BOOL GGSM_IS_SCREEN_WHITED_OUT()
|
|
RETURN (sGGSMData.fWhiteOutAlpha = 1.0)
|
|
ENDFUNC
|
|
|
|
FUNC BOOL GGSM_IS_SCREEN_WHITED_IN()
|
|
RETURN (sGGSMData.fWhiteOutAlpha = 0.0)
|
|
ENDFUNC
|
|
|
|
PROC GGSM_NUKE_WHITE_INSTANT()
|
|
sGGSMData.fWhiteOutFadeTime = -1.0
|
|
sGGSMData.fWhiteOutAlpha = 1.0
|
|
ENDPROC
|
|
|
|
|
|
//-------------------------------------------------
|
|
// PC CONTROLS FUNCTIONS
|
|
//-------------------------------------------------
|
|
|
|
PROC GGSM_PC_CONTROLS_INIT()
|
|
IF !sGGSMData.bHasInitPCControls
|
|
INIT_PC_SCRIPTED_CONTROLS("Arcade_Go_Go_Space_Monkey")
|
|
sGGSMData.bHasInitPCControls = TRUE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC GGSM_PC_CONTROLS_CLEANUP()
|
|
IF sGGSMData.bHasInitPCControls
|
|
SHUTDOWN_PC_SCRIPTED_CONTROLS()
|
|
sGGSMData.bHasInitPCControls = FALSE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
//-------------------------------------------------
|
|
// ANIM FUNCTIONS
|
|
//-------------------------------------------------
|
|
|
|
PROC GGSM_PLAY_AVATAR_LOST_LIFE_ANIM()
|
|
ARCADE_CABINET_ANIM_EVENT_STRUCT sArcadeCabinetAnimEvent
|
|
sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
|
|
sArcadeCabinetAnimEvent.bLoopAnim = FALSE
|
|
|
|
sGGSMData.eAvatarClip = ARCADE_CABINET_ANIM_CLIP_LOSE
|
|
sGGSMData.iAvatarClipFrames = 0
|
|
PLAY_ARCADE_CABINET_ANIMATION(sArcadeCabinetAnimEvent, sGGSMData.eAvatarClip)
|
|
ENDPROC
|
|
|
|
PROC GGSM_PLAY_AVATAR_GAME_OVER_ANIM()
|
|
ARCADE_CABINET_ANIM_EVENT_STRUCT sArcadeCabinetAnimEvent
|
|
sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
|
|
sArcadeCabinetAnimEvent.bLoopAnim = FALSE
|
|
|
|
sGGSMData.eAvatarClip = ARCADE_CABINET_ANIM_CLIP_LOSE_BIG
|
|
sGGSMData.iAvatarClipFrames = 0
|
|
PLAY_ARCADE_CABINET_ANIMATION(sArcadeCabinetAnimEvent, sGGSMData.eAvatarClip)
|
|
ENDPROC
|
|
|
|
PROC GGSM_PLAY_AVATAR_BOSS_DEAD_ANIM()
|
|
ARCADE_CABINET_ANIM_EVENT_STRUCT sArcadeCabinetAnimEvent
|
|
sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
|
|
sArcadeCabinetAnimEvent.bLoopAnim = FALSE
|
|
|
|
sGGSMData.eAvatarClip = ARCADE_CABINET_ANIM_CLIP_WIN
|
|
sGGSMData.iAvatarClipFrames = 0
|
|
PLAY_ARCADE_CABINET_ANIMATION(sArcadeCabinetAnimEvent, sGGSMData.eAvatarClip)
|
|
ENDPROC
|
|
|
|
PROC GGSM_PLAY_AVATAR_ALL_CLEAR_ANIM()
|
|
ARCADE_CABINET_ANIM_EVENT_STRUCT sArcadeCabinetAnimEvent
|
|
sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
|
|
sArcadeCabinetAnimEvent.bLoopAnim = FALSE
|
|
|
|
sGGSMData.eAvatarClip = ARCADE_CABINET_ANIM_CLIP_WIN_BIG
|
|
sGGSMData.iAvatarClipFrames = 0
|
|
PLAY_ARCADE_CABINET_ANIMATION(sArcadeCabinetAnimEvent, sGGSMData.eAvatarClip)
|
|
ENDPROC
|
|
|
|
PROC GGSM_PLAY_AVATAR_IDLE_ANIM()
|
|
ARCADE_CABINET_ANIM_EVENT_STRUCT sArcadeCabinetAnimEvent
|
|
sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
|
|
sArcadeCabinetAnimEvent.bLoopAnim = TRUE
|
|
|
|
sGGSMData.eAvatarClip = ARCADE_CABINET_ANIM_CLIP_IDLE
|
|
sGGSMData.iAvatarClipFrames = 0
|
|
PLAY_ARCADE_CABINET_ANIMATION(sArcadeCabinetAnimEvent, sGGSMData.eAvatarClip)
|
|
ENDPROC
|
|
|
|
PROC GGSM_PLAY_AVATAR_PLAY_IDLE_ANIM(ARCADE_CABINET_ANIM_CLIPS eClip = ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE)
|
|
ARCADE_CABINET_ANIM_EVENT_STRUCT sArcadeCabinetAnimEvent
|
|
sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
|
|
sArcadeCabinetAnimEvent.bLoopAnim = FALSE
|
|
|
|
sGGSMData.eAvatarClip = eClip
|
|
sGGSMData.iAvatarClipFrames = 0
|
|
PLAY_ARCADE_CABINET_ANIMATION(sArcadeCabinetAnimEvent, sGGSMData.eAvatarClip)
|
|
ENDPROC
|
|
|
|
PROC GGSM_PLAY_AVATAR_PLAY_RANDOM_IDLE_ANIM()
|
|
ARCADE_CABINET_ANIM_CLIPS eClip
|
|
|
|
// If already doing PlayIdle, alternate variation
|
|
IF sGGSMData.eAvatarClip = ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE
|
|
eClip = ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE_V2
|
|
|
|
ELIF sGGSMData.eAvatarClip = ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE_V2
|
|
eClip = ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE
|
|
|
|
// Otherwise, pick random variation
|
|
ELSE
|
|
IF GET_RANDOM_BOOL()
|
|
eClip = ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE
|
|
ELSE
|
|
eClip = ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE_V2
|
|
ENDIF
|
|
ENDIF
|
|
|
|
GGSM_PLAY_AVATAR_PLAY_IDLE_ANIM(eClip)
|
|
|
|
ENDPROC
|
|
|
|
PROC GGSM_PLAY_AVATAR_LEAVE_MACHINE_ANIM()
|
|
ARCADE_CABINET_ANIM_EVENT_STRUCT sArcadeCabinetAnimEvent
|
|
sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
|
|
sArcadeCabinetAnimEvent.bLoopAnim = FALSE
|
|
|
|
sGGSMData.eAvatarClip = ARCADE_CABINET_ANIM_CLIP_EXIT
|
|
sGGSMData.iAvatarClipFrames = 0
|
|
PLAY_ARCADE_CABINET_ANIMATION(sArcadeCabinetAnimEvent, sGGSMData.eAvatarClip)
|
|
ENDPROC
|
|
|
|
PROC GGSM_UPDATE_AVATAR()
|
|
|
|
sGGSMData.iAvatarClipFrames++
|
|
|
|
// If current anim has finished...
|
|
IF sGGSMData.iAvatarClipFrames > 5
|
|
IF !IS_PLAYER_PLAYING_THIS_ARCADE_CABINET_ANIMATION_CLIP(sGGSMData.eAvatarClip)
|
|
OR HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(sGGSMData.eAvatarClip)
|
|
SWITCH sGGSMData.eAvatarClip
|
|
|
|
// PlayIdle proceeds to PlayIdle (randomises variation each time)
|
|
CASE ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE
|
|
CASE ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE_V2
|
|
GGSM_PLAY_AVATAR_PLAY_RANDOM_IDLE_ANIM()
|
|
BREAK
|
|
|
|
// Lose proceeds to PlayIdle (as player is immediately returned to current stage)
|
|
CASE ARCADE_CABINET_ANIM_CLIP_LOSE
|
|
GGSM_PLAY_AVATAR_PLAY_RANDOM_IDLE_ANIM()
|
|
BREAK
|
|
|
|
// Win proceeds to Idle (most bosses), or PlayIdle (boss rush - but not on final boss yet, because that would have done BigWin)
|
|
CASE ARCADE_CABINET_ANIM_CLIP_WIN
|
|
IF sGGSMData.sGameStats.level = GGSM_SECTOR_BANANASTAR
|
|
GGSM_PLAY_AVATAR_PLAY_RANDOM_IDLE_ANIM()
|
|
ELSE
|
|
GGSM_PLAY_AVATAR_IDLE_ANIM()
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Win/BigWin/BigLose proceed to Idle (as game has ended, or between stages)
|
|
CASE ARCADE_CABINET_ANIM_CLIP_WIN_BIG
|
|
CASE ARCADE_CABINET_ANIM_CLIP_LOSE_BIG
|
|
GGSM_PLAY_AVATAR_IDLE_ANIM()
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
//-------------------------------------------------
|
|
// MISC FUNCTIONS
|
|
//-------------------------------------------------
|
|
PROC GGSM_RESET_GAME_STATS()
|
|
CDEBUG1LN(DEBUG_MINIGAME, "GGSM_RESET_GAME_STATS")
|
|
sGGSMData.sGameStats.gameType = HASH("ARCADE_CABINET_CH_GG_SPACE_MONKEY")
|
|
sGGSMData.sGameStats.matchId = 0
|
|
sGGSMData.sGameStats.numPlayers = 1
|
|
sGGSMData.sGameStats.level = GGSM_SECTOR_FIRST
|
|
sGGSMData.sGameStats.powerUps = 0
|
|
sGGSMData.sGameStats.kills = 0
|
|
sGGSMData.sGameStats.timePlayed = GET_GAME_TIMER()
|
|
sGGSMData.sGameStats.score = 0
|
|
sGGSMData.sGameStats.reward = 0
|
|
sGGSMData.sGameStats.challenges = 0
|
|
sGGSMData.iPlayerLives = 3
|
|
ENDPROC
|
|
|
|
PROC GGSM_SEND_PLAYSTATS()
|
|
CDEBUG1LN(DEBUG_MINIGAME, "GGSM_SEND_PLAYSTATS")
|
|
sGGSMData.sGameStats.level = sGGSMData.sGameStats.level
|
|
sGGSMData.sGameStats.timePlayed = GET_GAME_TIMER() - sGGSMData.sGameStats.timePlayed
|
|
sGGSMData.sGameStats.challenges = ENUM_TO_INT(sGGSMData.eChallengeFlags)
|
|
|
|
IF sGGSMData.bTrophyUnlockedThisSession
|
|
sGGSMData.sGameStats.reward = ARCADE_GAME_GET_TROPHY_ID_FOR_TELEMETRY(ARCADE_GAME_TROPHY_GGSM)
|
|
ELSE
|
|
sGGSMData.sGameStats.reward = 0
|
|
ENDIf
|
|
|
|
IF PLAYER_ID() != INVALID_PLAYER_INDEX()
|
|
IF IS_PLAYER_IN_ARCADE_PROPERTY(PLAYER_ID())
|
|
sGGSMData.sGameStats.location = ENUM_TO_INT(GET_ARCADE_PROPERTY_ID_FROM_SIMPLE_INTERIOR_ID(GlobalPlayerBD[NATIVE_TO_INT(PLAYER_ID())].SimpleInteriorBD.eCurrentSimpleInterior))
|
|
#IF FEATURE_FIXER
|
|
ELIF IS_PLAYER_IN_FIXER_HQ(PLAYER_ID())
|
|
sGGSMData.sGameStats.location = HASH("SIMPLE_INTERIOR_TYPE_FIXER_HQ")
|
|
#ENDIF
|
|
ELSE
|
|
CDEBUG1LN(DEBUG_MINIGAME, "[GGSM_HELPERS] [GGSM_SEND_PLAYSTATS] Not in valid location, setting sGGSMData.sGameStats.location = 0")
|
|
sGGSMData.sGameStats.location = 0
|
|
ENDIF
|
|
ELSE
|
|
CDEBUG1LN(DEBUG_MINIGAME, "[GGSM_HELPERS] [GGSM_SEND_PLAYSTATS] Invalid Player ID, setting sGGSMData.sGameStats.location = 0")
|
|
sGGSMData.sGameStats.location = 0
|
|
ENDIF
|
|
|
|
PLAYSTATS_ARCADE_CABINET(sGGSMData.sGameStats)
|
|
ENDPROC
|
|
|
|
FUNC BOOL GGSM_IS_GAME_PLAYING()
|
|
RETURN (sGGSMData.eState >= GGSM_STATE_PLAYING) AND (sGGSMData.eState <= GGSM_STATE_GAME_OVER)
|
|
ENDFUNC
|
|
|
|
FUNC BOOL GGSM_IS_GAME_ACTIVELY_PLAYING()
|
|
RETURN (sGGSMData.eState >= GGSM_STATE_STAGE_SELECT) AND (sGGSMData.eState <= GGSM_STATE_GAME_OVER)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Updates the values used for animating sprite sequences
|
|
PROC GGSM_UPDATE_MAIN_TIMERS()
|
|
sGGSMData.fDeltaTime = GET_FRAME_TIME()
|
|
sGGSMData.fStateTimer += sGGSMData.fDeltaTime
|
|
ENDPROC
|
|
|
|
PROC GGSM_INIT_GLOBALS()
|
|
sGGSMData.sQuitTimer.control = FRONTEND_CONTROL
|
|
sGGSMData.sQuitTimer.action = INPUT_FRONTEND_CANCEL
|
|
|
|
sGGSMData.sStartBtnTimer.control = FRONTEND_CONTROL
|
|
sGGSMData.sStartBtnTimer.action = INPUT_FRONTEND_SELECT
|
|
|
|
INIT_RGBA_STRUCT(sGGSMData.rgbaBlack, 0, 0, 0, 255)
|
|
INIT_RGBA_STRUCT(sGGSMData.rgbaBGSprite, 64, 64, 64, 255)
|
|
INIT_RGBA_STRUCT(sGGSMData.rgbaSprite, 208, 208, 208, 255)
|
|
INIT_RGBA_STRUCT(sGGSMData.rgbaWhite, 255, 255, 255, 255)
|
|
|
|
GGSM_RESET_GAME_STATS()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
#IF GGSM_ENTITY_EDITOR_ACTIVE
|
|
GGSM_ENTITY_DATA_INIT_DEBUG_ARRAY()
|
|
#ENDIF
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
PROC GGSM_UNLOCK_PRIZE(GGSM_UNLOCK_TYPE eType)
|
|
SWITCH (eType)
|
|
CASE GGSM_UNLOCK_TSHIRTS_GGSM_ASTEROID
|
|
ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TSHIRT_HELP(ARCADE_GAME_TSHIRTS_GGSM_ASTEROID)
|
|
BREAK
|
|
|
|
CASE GGSM_UNLOCK_TSHIRTS_GGSM_CLOCKEDIT
|
|
ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TSHIRT_HELP(ARCADE_GAME_TSHIRTS_GGSM_CLOCKEDIT)
|
|
BREAK
|
|
|
|
CASE GGSM_UNLOCK_TSHIRTS_GGSM_NUKE
|
|
ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TSHIRT_HELP(ARCADE_GAME_TSHIRTS_GGSM_NUKE)
|
|
BREAK
|
|
|
|
CASE GGSM_UNLOCK_TSHIRTS_GGSM_SCORE
|
|
ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TSHIRT_HELP(ARCADE_GAME_TSHIRTS_GGSM_SCORE)
|
|
BREAK
|
|
|
|
CASE GGSM_UNLOCK_TSHIRTS_GGSM_COMPLETE
|
|
ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TSHIRT_HELP(ARCADE_GAME_TSHIRTS_GGSM_COMPLETE)
|
|
BREAK
|
|
|
|
CASE GGSM_UNLOCK_TSHIRTS_GGSM_NODAMAGE
|
|
ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TSHIRT_HELP(ARCADE_GAME_TSHIRTS_GGSM_NODAMAGE)
|
|
BREAK
|
|
|
|
CASE GGSM_UNLOCK_TROPHY
|
|
ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TROPHY_HELP(ARCADE_GAME_TROPHY_GGSM, FALSE)
|
|
BREAK
|
|
|
|
CASE GGSM_UNLOCK_TROPHY_PENTHOUSE
|
|
ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TROPHY_HELP(ARCADE_GAME_TROPHY_GGSM, TRUE)
|
|
BREAK
|
|
|
|
DEFAULT
|
|
EXIT
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
SET_BIT(sGGSMData.iUnlockedBitField, ENUM_TO_INT(eType))
|
|
CDEBUG1LN(DEBUG_MINIGAME, "GGSM_UNLOCK_PRIZE:", GGSM_UNLOCK_TYPE_TO_STRING(eType), " UNLOCK BITSET:", sGGSMData.iUnlockedBitField)
|
|
ENDPROC
|
|
|
|
PROC GGSM_RESET_CHALLENGES()
|
|
sGGSMData.eChallengeFlags = GGSM_CHALLENGE_BIT_NONE
|
|
sGGSMData.iUnlockedBitField = 0
|
|
SET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_APEESCAPE, FALSE)
|
|
SET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_MONKEYKIND, FALSE)
|
|
SET_MP_INT_CHARACTER_AWARD(MP_AWARD_ASTROCHIMP, 0)
|
|
SET_MP_INT_CHARACTER_STAT(MP_STAT_ARCADE_HELP_BITSET, 0)
|
|
SET_MP_INT_CHARACTER_STAT(MP_STAT_ARCADE_HELP_BITSETTWO, 0)
|
|
ENDPROC
|
|
|
|
FUNC BOOL GGSM_ARE_ALL_CHALLENGES_COMPLETE()
|
|
IF NOT GET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_MONKEYKIND)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF NOT GET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_APEESCAPE)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF (GET_MP_INT_CHARACTER_AWARD(MP_AWARD_ASTROCHIMP) < g_sMPTunables.iCH_ARCADE_GAMES_GGSM_ASTROCHIMP_P_SCORE)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
PROC GGSM_SET_CHALLENGE_BITS_FROM_AWARDS()
|
|
sGGSMData.eChallengeFlags = GGSM_CHALLENGE_BIT_NONE
|
|
IF GET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_MONKEYKIND)
|
|
SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eChallengeFlags, GGSM_CHALLENGE_BIT_MONKEY_MIND)
|
|
ENDIF
|
|
|
|
IF GET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_APEESCAPE)
|
|
SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eChallengeFlags, GGSM_CHALLENGE_BIT_APE_ESCAPE)
|
|
ENDIF
|
|
|
|
IF (GET_MP_INT_CHARACTER_AWARD(MP_AWARD_ASTROCHIMP) >= g_sMPTunables.iCH_ARCADE_GAMES_GGSM_ASTROCHIMP_B_SCORE)
|
|
SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eChallengeFlags, GGSM_CHALLENGE_BIT_ASTROCHIMP_B)
|
|
ENDIF
|
|
|
|
IF (GET_MP_INT_CHARACTER_AWARD(MP_AWARD_ASTROCHIMP) >= g_sMPTunables.iCH_ARCADE_GAMES_GGSM_ASTROCHIMP_S_SCORE)
|
|
SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eChallengeFlags, GGSM_CHALLENGE_BIT_ASTROCHIMP_S)
|
|
ENDIF
|
|
|
|
IF (GET_MP_INT_CHARACTER_AWARD(MP_AWARD_ASTROCHIMP) >= g_sMPTunables.iCH_ARCADE_GAMES_GGSM_ASTROCHIMP_G_SCORE)
|
|
SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eChallengeFlags, GGSM_CHALLENGE_BIT_ASTROCHIMP_G)
|
|
ENDIF
|
|
|
|
IF (GET_MP_INT_CHARACTER_AWARD(MP_AWARD_ASTROCHIMP) >= g_sMPTunables.iCH_ARCADE_GAMES_GGSM_ASTROCHIMP_P_SCORE)
|
|
SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eChallengeFlags, GGSM_CHALLENGE_BIT_ASTROCHIMP_P)
|
|
ENDIF
|
|
|
|
INT i
|
|
GGSM_CHALLENGE_BIT challengeBit
|
|
|
|
CPRINTLN(DEBUG_MINIGAME, " --- CHALLENGE FLAGS ---")
|
|
REPEAT 32 i
|
|
challengeBit = INT_TO_ENUM(GGSM_CHALLENGE_BIT, SHIFT_LEFT(1, i))
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eChallengeFlags, challengeBit)
|
|
CPRINTLN(DEBUG_MINIGAME," ", GGSM_CHALLENGE_BIT_TO_STRING(challengeBit))
|
|
ENDIF
|
|
ENDREPEAT
|
|
CPRINTLN(DEBUG_MINIGAME, " ")
|
|
ENDPROC
|
|
|
|
PROC GGSM_SET_CHALLENGE_COMPLETED(GGSM_CHALLENGE_BIT eBit)
|
|
IF NOT IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eChallengeFlags, eBit)
|
|
CDEBUG1LN(DEBUG_MINIGAME, "GGSM_SET_CHALLENGE_COMPLETED:", GGSM_CHALLENGE_BIT_TO_STRING(eBit))
|
|
SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eChallengeFlags, eBit)
|
|
|
|
SWITCH (eBit)
|
|
CASE GGSM_CHALLENGE_BIT_APE_ESCAPE
|
|
SET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_APEESCAPE, TRUE)
|
|
GGSM_UNLOCK_PRIZE(GGSM_UNLOCK_TSHIRTS_GGSM_ASTEROID)
|
|
BREAK
|
|
CASE GGSM_CHALLENGE_BIT_MONKEY_MIND
|
|
SET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_MONKEYKIND, TRUE)
|
|
GGSM_UNLOCK_PRIZE(GGSM_UNLOCK_TSHIRTS_GGSM_NODAMAGE)
|
|
BREAK
|
|
CASE GGSM_CHALLENGE_BIT_ASTROCHIMP_P
|
|
GGSM_UNLOCK_PRIZE(GGSM_UNLOCK_TSHIRTS_GGSM_SCORE)
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
BOOL bOwnsPenthouse = DOES_PLAYER_OWN_A_CASINO_APARTMENT(PLAYER_ID())
|
|
IF GGSM_ARE_ALL_CHALLENGES_COMPLETE()
|
|
sGGSMData.bTrophyUnlockedThisSession = TRUE
|
|
GGSM_UNLOCK_PRIZE(GGSM_UNLOCK_TSHIRTS_GGSM_COMPLETE)
|
|
IF (bOwnsPenthouse)
|
|
GGSM_UNLOCK_PRIZE(GGSM_UNLOCK_TROPHY_PENTHOUSE)
|
|
ELSE
|
|
GGSM_UNLOCK_PRIZE(GGSM_UNLOCK_TROPHY)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL GGSM_SHOULD_SHOW_TUTORIAL(GGSM_HELP_BIT eBit)
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eHelpFlags, eBit)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
PROC GGSM_GIVE_EXTRA_LIFE()
|
|
sGGSMData.iPlayerLives ++
|
|
GGSM_PLAY_SOUND(ARCADE_GAMES_SOUND_GGSM_PICKUP_EXTRA_LIFE)
|
|
GGSM_PLAY_SOUND(ARCADE_GAMES_SOUND_GGSM_MONKEY_VOICE_EXTRA_LIFE)
|
|
ENDPROC
|
|
|
|
FUNC INT GGSM_CALCULATE_TAKEDOWN_PERCENTAGE()
|
|
FLOAT pc = (TO_FLOAT(sGGSMData.iEnemiesDestroyed) / TO_FLOAT(sGGSMData.iEnemiesCreated)) * 100.0
|
|
IF (pc >= 100.0)
|
|
pc = 100.0
|
|
ENDIF
|
|
|
|
RETURN CEIL(pc)
|
|
ENDFUNC
|
|
|
|
FUNC INT GGSM_CALCULATE_TAKEDOWN_BONUS()
|
|
INT pc = GGSM_CALCULATE_TAKEDOWN_PERCENTAGE()
|
|
INT tb = pc * (GGSM_TAKEDOWN_BONUS / 100)
|
|
tb -= (tb % 100) // gets rid of decimals
|
|
RETURN tb
|
|
ENDFUNC
|
|
|
|
FUNC BOOL GGSM_IS_LAST_STAGE()
|
|
RETURN (sGGSMData.sGameStats.level >= GGSM_SECTOR_MAX)
|
|
ENDFUNC
|
|
|
|
PROC GGSM_INCREASE_PLAYER_SCORE(INT iSc, BOOL bNoExtend = FALSE)
|
|
sGGSMData.sGameStats.score += iSc
|
|
sGGSMData.iExtendPtsCounter += iSc
|
|
|
|
IF (bNoExtend = FALSE)
|
|
IF (sGGSMData.iExtendPtsCounter >= g_sMPTunables.iCH_ARCADE_GAMES_GGSM_POINTS_FOR_EXTEND)
|
|
GGSM_GIVE_EXTRA_LIFE()
|
|
sGGSMData.iExtendPtsCounter -= g_sMPTunables.iCH_ARCADE_GAMES_GGSM_POINTS_FOR_EXTEND
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// astrochimp challenge
|
|
IF (sGGSMData.sGameStats.score > GET_MP_INT_CHARACTER_AWARD(MP_AWARD_ASTROCHIMP))
|
|
SET_MP_INT_CHARACTER_AWARD(MP_AWARD_ASTROCHIMP, sGGSMData.sGameStats.score)
|
|
ENDIF
|
|
|
|
IF (sGGSMData.sGameStats.score >= g_sMPTunables.iCH_ARCADE_GAMES_GGSM_ASTROCHIMP_P_SCORE)
|
|
GGSM_SET_CHALLENGE_COMPLETED(GGSM_CHALLENGE_BIT_ASTROCHIMP_P)
|
|
ELIF (sGGSMData.sGameStats.score >= g_sMPTunables.iCH_ARCADE_GAMES_GGSM_ASTROCHIMP_G_SCORE)
|
|
GGSM_SET_CHALLENGE_COMPLETED(GGSM_CHALLENGE_BIT_ASTROCHIMP_G)
|
|
ELIF (sGGSMData.sGameStats.score >= g_sMPTunables.iCH_ARCADE_GAMES_GGSM_ASTROCHIMP_S_SCORE)
|
|
GGSM_SET_CHALLENGE_COMPLETED(GGSM_CHALLENGE_BIT_ASTROCHIMP_S)
|
|
ELIF (sGGSMData.sGameStats.score >= g_sMPTunables.iCH_ARCADE_GAMES_GGSM_ASTROCHIMP_B_SCORE)
|
|
GGSM_SET_CHALLENGE_COMPLETED(GGSM_CHALLENGE_BIT_ASTROCHIMP_B)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL GGSM_IS_DIALOG_ACTIVE()
|
|
RETURN (sGGSMData.sDialogController.eState > GGSM_DIALOG_STATE_NONE) AND (sGGSMData.sDialogController.eState < GGSM_DIALOG_STATE_DONE)
|
|
ENDFUNC
|
|
|
|
FUNC BOOL GGSM_IS_ANY_EDITOR_RUNNING()
|
|
#IF IS_DEBUG_BUILD
|
|
#IF GGSM_ENTITY_EDITOR_ACTIVE
|
|
IF (sGGSMData.sDebugEntityEditor.sEditCore.bEditorActive)
|
|
RETURN TRUE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
#IF GGSM_SPAWN_EDITOR_ACTIVE
|
|
IF (sGGSMData.sDebugSpawnEditor.sEditCore.bEditorActive)
|
|
RETURN TRUE
|
|
ENDIF
|
|
#ENDIF
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL GGSM_IS_ANY_EDITOR_INCLUDED()
|
|
#IF IS_DEBUG_BUILD
|
|
#IF GGSM_ENTITY_EDITOR_ACTIVE
|
|
RETURN TRUE
|
|
#ENDIF
|
|
|
|
#IF GGSM_SPAWN_EDITOR_ACTIVE
|
|
RETURN TRUE
|
|
#ENDIF
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC GGSM_RESET_SPECIAL_WEAPONS_ARRAY(GGSM_SPWEAPON_DATA &array[])
|
|
INT i
|
|
|
|
REPEAT COUNT_OF(array) i
|
|
array[i].eType = GGSM_SPECIAL_WEAPON_NONE
|
|
array[i].eState = GGSM_SPWEAPON_INACTIVE
|
|
array[i].fTimer = 0
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
PROC GGSM_SHUTDOWN_ALL_SPECIAL_WEAPONS(GGSM_SPWEAPON_DATA &array[])
|
|
INT i
|
|
|
|
REPEAT COUNT_OF(array) i
|
|
IF (array[i].eType != GGSM_SPECIAL_WEAPON_NONE)
|
|
IF (array[i].eState != GGSM_SPWEAPON_INACTIVE) AND (array[i].eState != GGSM_SPWEAPON_COOLDOWN)
|
|
array[i].eState = GGSM_SPWEAPON_COOLDOWN
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
// Player Ship
|
|
IF (sGGSMData.iPlayerShipIndex != GGSM_INVALID_ENTITY)
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].eFlags, GGSM_ENTITY_BIT_REFLECT_BULLETS)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL GGSM_IS_STAGE_READY_TO_END()
|
|
#IF IS_DEBUG_BUILD
|
|
IF GGSM_IS_ANY_EDITOR_RUNNING()
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF (sGGSMData.bDebugDisableEnemySpawn)
|
|
RETURN FALSE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IF GGSM_IS_DIALOG_ACTIVE()
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
/*
|
|
IF (GET_GAME_TIMER() < (sGGSMData.iLastEnemyDeathTimeMS + 5000))
|
|
RETURN FALSE
|
|
ENDIF
|
|
*/
|
|
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eStageFlags, GGSM_STAGE_BIT_EXPLOSIONS_ACTIVE)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eStageFlags, GGSM_STAGE_BIT_ENEMIES_ACTIVE)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eStageFlags, GGSM_STAGE_BIT_BOSSES_ACTIVE)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN (sGGSMData.iSpawnIndexCounter >= sGGSMData.iSpawnsUsed)
|
|
ENDFUNC
|
|
|
|
//-------------------------------------------------
|
|
// INPUT FUNCTIONS
|
|
//-------------------------------------------------
|
|
|
|
/// PURPOSE:
|
|
/// Returns true if the player has pressed start this frame
|
|
FUNC BOOL GGSM_HAS_PLAYER_PRESSED_START()
|
|
CONTROL_ACTION CA_Start = INPUT_FRONTEND_PAUSE
|
|
|
|
IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
|
|
CA_Start = INPUT_FRONTEND_ACCEPT
|
|
ENDIF
|
|
|
|
IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, CA_Start)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Returns true if the player has pressed quit this frame
|
|
FUNC BOOL GGSM_HAS_PLAYER_PRESSED_FIRE()
|
|
CONTROL_ACTION CA_Fire = INPUT_SCRIPT_RDOWN
|
|
CONTROL_ACTION CA_Fire2 = INPUT_SCRIPT_RT
|
|
|
|
RETURN IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, CA_Fire) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, CA_Fire2)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Returns true if the player has pressed quit this frame
|
|
FUNC BOOL GGSM_HAS_PLAYER_PRESSED_CANCEL()
|
|
CONTROL_ACTION CA_Fire = INPUT_FRONTEND_CANCEL
|
|
|
|
RETURN IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, CA_Fire)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Returns true if the player has pressed quit this frame
|
|
FUNC BOOL GGSM_HAS_PLAYER_HOLDING_FIRE()
|
|
CONTROL_ACTION CA_Fire = INPUT_SCRIPT_RDOWN
|
|
CONTROL_ACTION CA_Fire2 = INPUT_SCRIPT_RT
|
|
|
|
IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
|
|
RETURN (IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, CA_Fire) OR IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_ATTACK))
|
|
ENDIF
|
|
|
|
RETURN IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, CA_Fire) OR IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, CA_Fire2)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Returns true if the player has pressed quit this frame
|
|
FUNC BOOL GGSM_HAS_PLAYER_PRESSED_SPECIAL_WEAPON()
|
|
CONTROL_ACTION CA_Fire = INPUT_SCRIPT_RUP
|
|
CONTROL_ACTION CA_Fire2 = INPUT_SCRIPT_LB
|
|
RETURN IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, CA_Fire) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, CA_Fire2)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Returns true if the player has pressed quit this frame
|
|
FUNC BOOL GGSM_HAS_PLAYER_PRESSED_DEFENSE_WEAPON()
|
|
CONTROL_ACTION CA_Fire = INPUT_SCRIPT_RRIGHT // keep at as right because PC
|
|
CONTROL_ACTION CA_Fire2 = INPUT_SCRIPT_RB
|
|
CONTROL_ACTION CA_Fire3 = INPUT_SCRIPT_RLEFT
|
|
|
|
RETURN IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, CA_Fire)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, CA_Fire2)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, CA_Fire3)
|
|
ENDFUNC
|
|
|
|
FUNC BOOL GGSM_ALTER_POINT_WITH_INPUT(VECTOR_2D &vec, FLOAT fSpeed, GGSM_INPUT input = GGSM_INPUT_LSTICK)
|
|
BOOL bMoved = FALSE
|
|
|
|
FLOAT fStickX, fStickY
|
|
FLOAT spd = fSpeed * GET_FRAME_TIME()
|
|
|
|
IF (input = GGSM_INPUT_DPAD)
|
|
IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_UP)
|
|
fStickY = -sGGSMData.fDPadScalar
|
|
ENDIF
|
|
|
|
IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_DOWN)
|
|
fStickY = sGGSMData.fDPadScalar
|
|
ENDIF
|
|
|
|
IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_LEFT)
|
|
fStickX = -sGGSMData.fDPadScalar
|
|
ENDIF
|
|
|
|
IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_RIGHT)
|
|
fStickX = sGGSMData.fDPadScalar
|
|
ENDIF
|
|
ELIF (input = GGSM_INPUT_RSTICK)
|
|
fStickX = GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_X)
|
|
fStickY = GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_Y)
|
|
ELSE
|
|
fStickX = GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_LEFT_AXIS_X)
|
|
fStickY = GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_LEFT_AXIS_Y)
|
|
ENDIF
|
|
|
|
IF (fStickX <= -sGGSMData.fAnalogDeadZone) OR (fStickX >= sGGSMData.fAnalogDeadZone)
|
|
vec.x += (spd * fStickX)
|
|
bMoved = TRUE
|
|
ENDIF
|
|
|
|
IF (fStickY <= -sGGSMData.fAnalogDeadZone) OR (fStickY >= sGGSMData.fAnalogDeadZone)
|
|
vec.y += (spd * fStickY)
|
|
bMoved = TRUE
|
|
ENDIF
|
|
|
|
RETURN bMoved
|
|
ENDFUNC
|
|
|
|
PROC GGSM_ALTER_FLOAT_WITH_INPUT(FLOAT &fValue, FLOAT fSpeed, GGSM_INPUT input)
|
|
FLOAT fStickX, fStickY
|
|
FLOAT spd = fSpeed * GET_FRAME_TIME()
|
|
|
|
IF (input = GGSM_INPUT_DPAD)
|
|
IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_UP)
|
|
fStickY = -sGGSMData.fDPadScalar
|
|
ENDIF
|
|
|
|
IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_DOWN)
|
|
fStickY = sGGSMData.fDPadScalar
|
|
ENDIF
|
|
|
|
IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_LEFT)
|
|
fStickX = -sGGSMData.fDPadScalar
|
|
ENDIF
|
|
|
|
IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_RIGHT)
|
|
fStickX = sGGSMData.fDPadScalar
|
|
ENDIF
|
|
ELIF (input = GGSM_INPUT_RSTICK)
|
|
fStickX = GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_X)
|
|
fStickY = GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_Y)
|
|
ELSE
|
|
fStickX = GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_LEFT_AXIS_X)
|
|
fStickY = GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_LEFT_AXIS_Y)
|
|
ENDIF
|
|
|
|
IF (fStickX <= -sGGSMData.fAnalogDeadZone) OR (fStickX >= sGGSMData.fAnalogDeadZone)
|
|
fValue += (spd * fStickX)
|
|
ENDIF
|
|
|
|
IF (fStickY <= -sGGSMData.fAnalogDeadZone) OR (fStickY >= sGGSMData.fAnalogDeadZone)
|
|
fValue += (spd * fStickY)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
//-------------------------------------------------
|
|
// CAMERA FUNCTIONS
|
|
//-------------------------------------------------
|
|
|
|
/// PURPOSE:
|
|
/// Resets The Camera
|
|
/// PARAMS:
|
|
/// cam -
|
|
PROC GGSM_CAMERA_RESET(GGSM_CAMERA &cam)
|
|
cam.vWorldPosition = INIT_VECTOR_2D(-cam.vWorldViewportOffset.x, -cam.vWorldViewportOffset.y)
|
|
cam.vLastWorldPosition = cam.vWorldPosition
|
|
cam.vScrollDirection = INIT_VECTOR_2D(1, 0)
|
|
cam.fDistTravelled = 0.0
|
|
cam.fTileScrollSpeed = 5.0
|
|
cam.fScrollPCController = 1.0
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(sGGSMData.eStageFlags, GGSM_STAGE_BIT_BRING_CAMERA_TO_STOP)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Initializes the camera
|
|
/// PARAMS:
|
|
/// cam - camera struct
|
|
/// vw - viewport width
|
|
/// vh - viewport height
|
|
PROC GGSM_CAMERA_INIT(GGSM_CAMERA &cam)
|
|
cam.vWorldViewportOffset.x = (cfBASE_SCREEN_WIDTH - GGSM_PX_OVERSCAN_WIDTH) / 2.0
|
|
cam.vWorldViewportOffset.y = (cfBASE_SCREEN_HEIGHT - GGSM_PX_OVERSCAN_HEIGHT) / 2.0
|
|
|
|
cam.vViewportSize = INIT_VECTOR_2D(GGSM_PX_OVERSCAN_WIDTH, GGSM_PX_OVERSCAN_HEIGHT)
|
|
GGSM_CAMERA_RESET(cam)
|
|
ENDPROC
|
|
|
|
PROC GGSM_CAMERA_JUMP_TO_DISTANCE(GGSM_CAMERA &cam, FLOAT fDistance)
|
|
GGSM_CAMERA_RESET(cam)
|
|
cam.vWorldPosition.x += fDistance
|
|
cam.vLastWorldPosition = cam.vWorldPosition
|
|
cam.fDistTravelled = fDistance
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Updates the camera
|
|
/// PARAMS:
|
|
/// cam - camera struct
|
|
PROC GGSM_CAMERA_UPDATE(GGSM_CAMERA &cam)
|
|
#IF IS_DEBUG_BUILD
|
|
IF (cam.bDebugMoveCamera)
|
|
GGSM_CAMERA_JUMP_TO_DISTANCE(cam, cam.fDebugMoveCameraDist)
|
|
cam.bDebugMoveCamera = FALSE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eStageFlags, GGSM_STAGE_BIT_BRING_CAMERA_TO_STOP)
|
|
cam.fScrollPCController -= (GET_FRAME_TIME() / 3.0)
|
|
IF (cam.fScrollPCController < 0.0)
|
|
cam.fScrollPCController = 0.0
|
|
ENDIF
|
|
ELSE
|
|
cam.fScrollPCController += (GET_FRAME_TIME() / 3.0)
|
|
IF (cam.fScrollPCController > 1.0)
|
|
cam.fScrollPCController = 1.0
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT GGSM_IS_DIALOG_ACTIVE()
|
|
cam.fSpd = ((cam.fTileScrollSpeed * sGGSMData.fTimeScale * cam.fScrollPCController) / sGGSMData.fScrollTimePerFrame) * GET_FRAME_TIME()
|
|
IF (NOT sGGSMData.bGamePaused) AND (sGGSMData.eState = GGSM_STATE_STAGE_ACTIVE)
|
|
cam.vWorldPosition.x += cam.vScrollDirection.x * cam.fSpd
|
|
cam.vWorldPosition.y += cam.vScrollDirection.y * cam.fSpd
|
|
ENDIF
|
|
ENDIF
|
|
|
|
cam.fDistTravelled += VECTOR_2D_DIST(cam.vLastWorldPosition, cam.vWorldPosition)
|
|
cam.vLastWorldPosition = cam.vWorldPosition
|
|
ENDPROC
|
|
|
|
//-------------------------------------------------
|
|
// FX FUNCTIONS
|
|
//-------------------------------------------------
|
|
|
|
FUNC BOOL GGSM_SPRITE_UPDATE_ANIMATION(GGSM_SPRITE_ANIM eAnim, FLOAT &fAnimFrame, BOOL bAffectedByTimeScale = TRUE)
|
|
GGSM_SPRITE_ANIM_DATA data
|
|
FLOAT fDeltaTime = GET_FRAME_TIME()
|
|
|
|
IF (bAffectedByTimeScale)
|
|
fDeltaTime *= sGGSMData.fTimeScale
|
|
ENDIF
|
|
|
|
IF NOT GGSM_GET_SPRITE_ANIM_DATA(eAnim, data)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF (eAnim = GGSM_SPRITE_ANIM_EXPLOSION) OR (eAnim = GGSM_SPRITE_ANIM_PLYR_EXPLOSION)
|
|
SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eStageFlags, GGSM_STAGE_BIT_EXPLOSIONS_ACTIVE)
|
|
ENDIF
|
|
|
|
// animate frame
|
|
fAnimFrame += ((data.fEndFrame - data.fStartFrame) / data.fAnimTime) * fDeltaTime
|
|
|
|
// loop anim if needed
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(data.eAnimFlags, GGSM_ANIM_BIT_LOOP)
|
|
IF (fAnimFrame < data.fStartFrame)
|
|
fAnimFrame = data.fEndFrame
|
|
ENDIF
|
|
|
|
IF (fAnimFrame >= data.fEndFrame + 1.0)
|
|
fAnimFrame = data.fStartFrame
|
|
ENDIF
|
|
ELSE
|
|
IF (fAnimFrame >= data.fEndFrame + 1.0)
|
|
fAnimFrame = data.fEndFrame
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC GGSM_RESET_FXSPRITE(GGSM_FX_SPRITE &spr)
|
|
spr.eFlags = GGSM_FX_SPRITE_BIT_NONE
|
|
spr.eSpriteAnim = GGSM_SPRITE_ANIM_NONE
|
|
spr.eSpriteType = GGSM_SPRITE_NONE
|
|
spr.fAnimFrame = 0
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets all explosions to be inactive
|
|
/// PARAMS:
|
|
/// array - array of projectiles
|
|
PROC GGSM_RESET_FXSPRITE_ARRAY(GGSM_FX_SPRITE &array[])
|
|
INT i
|
|
INT cnt = COUNT_OF(array)
|
|
|
|
REPEAT cnt i
|
|
GGSM_RESET_FXSPRITE(array[i])
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Gets the next free projectile index
|
|
/// PARAMS:
|
|
/// array - projecile array
|
|
/// ind - Index of the next free index
|
|
/// iSearchIndex - Index to start searching from
|
|
/// RETURNS:
|
|
/// TRUE if projectile can be found
|
|
FUNC BOOL GGSM_GET_FREE_FXSPRITE(GGSM_FX_SPRITE &array[], INT &ind, INT &iSearchIndex)
|
|
INT i
|
|
INT cnt = COUNT_OF(array)
|
|
|
|
// stops any overflow nonsense
|
|
iSearchIndex = ABSI(iSearchIndex) % cnt
|
|
|
|
ind = GGSM_INVALID_FX_SPRITE
|
|
REPEAT cnt i
|
|
IF NOT IS_BITMASK_ENUM_AS_ENUM_SET(array[iSearchIndex].eFlags, GGSM_FX_SPRITE_BIT_ACTIVE)
|
|
ind = iSearchIndex
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
iSearchIndex = (iSearchIndex + 1) % cnt
|
|
ENDREPEAT
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Update the projectile array
|
|
/// PARAMS:
|
|
/// array - array
|
|
/// RETURNS:
|
|
/// # of active projectiles
|
|
FUNC INT GGSM_UPDATE_FXSPRITE_ARRAY(GGSM_FX_SPRITE &array[])
|
|
INT i, n
|
|
INT cnt = COUNT_OF(array)
|
|
VECTOR_2D vPos, vSize
|
|
FLOAT fDeltaTime = GET_FRAME_TIME() * sGGSMData.fTimeScale
|
|
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(sGGSMData.eStageFlags, GGSM_STAGE_BIT_EXPLOSIONS_ACTIVE)
|
|
|
|
REPEAT cnt i
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(array[i].eFlags, GGSM_FX_SPRITE_BIT_ACTIVE)
|
|
|
|
// update movement and do on screen checks
|
|
vPos = GGSM_UNPACK_VECTOR_2D(array[i].iPackedPosition)
|
|
vSize = GGSM_GET_SPRITE_SIZE(array[i].eSpriteType)
|
|
vSize.x *= array[i].fScale
|
|
vSize.y *= array[i].fScale
|
|
|
|
IF GGSM_IS_POINT_ON_SCREEN(vPos, vSize)
|
|
SET_BITMASK_ENUM_AS_ENUM(array[i].eFlags, GGSM_FX_SPRITE_BIT_ENTERED_PLAYFIELD)
|
|
SET_BITMASK_ENUM_AS_ENUM(array[i].eFlags, GGSM_FX_SPRITE_BIT_ON_SCREEN)
|
|
ELSE
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(array[i].eFlags, GGSM_FX_SPRITE_BIT_ON_SCREEN)
|
|
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(array[i].eFlags, GGSM_FX_SPRITE_BIT_REMOVE_WHEN_OFFSCREEN | GGSM_FX_SPRITE_BIT_ENTERED_PLAYFIELD)
|
|
array[i].eFlags = GGSM_FX_SPRITE_BIT_NONE
|
|
RELOOP
|
|
ENDIF
|
|
ENDIF
|
|
|
|
vPos.x += array[i].vVelocity.x * fDeltaTime
|
|
vPos.y += array[i].vVelocity.y * fDeltaTime
|
|
array[i].iPackedPosition = GGSM_PACK_VECTOR_2D_TO_INT(vPos)
|
|
|
|
IF (array[i].eSpriteAnim != GGSM_SPRITE_ANIM_NONE)
|
|
IF GGSM_SPRITE_UPDATE_ANIMATION(array[i].eSpriteAnim, array[i].fAnimFrame)
|
|
array[i].eSpriteAnim = GGSM_SPRITE_ANIM_NONE
|
|
array[i].eFlags = GGSM_FX_SPRITE_BIT_NONE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
n ++
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
RETURN n
|
|
ENDFUNC
|
|
|
|
PROC GGSM_FXSPRITE_SET_PHYSICAL_RADIUS(GGSM_FX_SPRITE &spr, FLOAT fRadius)
|
|
VECTOR_2D size = GGSM_GET_SPRITE_SIZE(spr.eSpriteType)
|
|
spr.fScale = fRadius / size.x
|
|
ENDPROC
|
|
|
|
FUNC BOOL GGSM_FXSPRITE_INIT_METEOR(GGSM_FX_SPRITE &sprite, VECTOR_2D vPos, VECTOR_2D vVelocity, FLOAT fPhysicalRadius = 64.0)
|
|
sprite.eFlags = GGSM_FX_SPRITE_BIT_ACTIVE | GGSM_FX_SPRITE_BIT_REMOVE_WHEN_OFFSCREEN | GGSM_FX_SPRITE_BIT_BG_SPRITE
|
|
|
|
IF (fPhysicalRadius < 40.0)
|
|
sprite.eSpriteType = GGSM_SPRITE_METEOR_SMALL
|
|
ELIF (fPhysicalRadius < 80.0)
|
|
sprite.eSpriteType = GGSM_SPRITE_METEOR_MEDIUM
|
|
ELSE
|
|
sprite.eSpriteType = GGSM_SPRITE_METEOR_BIG
|
|
ENDIF
|
|
|
|
sprite.eSpriteAnim = GGSM_SPRITE_ANIM_NONE
|
|
sprite.iPackedPosition = GGSM_PACK_VECTOR_2D_TO_INT(vPos)
|
|
sprite.vVelocity = vVelocity
|
|
sprite.fAnimFrame = 0
|
|
sprite.iPackedColor = GGSM_PACK_RGBA_COLOUR(32, 32, 32, 255)
|
|
|
|
GGSM_FXSPRITE_SET_PHYSICAL_RADIUS(sprite, fPhysicalRadius)
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL GGSM_FXSPRITE_INIT_ANIMATED(GGSM_FX_SPRITE &sprite, VECTOR_2D vPos, GGSM_SPRITE_ANIM eAnim, FLOAT fScale = 1.0, GGSM_FX_SPRITE_BIT eFlags = GGSM_FX_SPRITE_BIT_NONE)
|
|
GGSM_SPRITE_ANIM_DATA data
|
|
|
|
IF NOT GGSM_GET_SPRITE_ANIM_DATA(eAnim, data)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
sprite.eFlags = (GGSM_FX_SPRITE_BIT_ACTIVE | eFlags)
|
|
sprite.eSpriteAnim = eAnim
|
|
sprite.eSpriteType = data.eSprite
|
|
sprite.iPackedPosition = GGSM_PACK_VECTOR_2D_TO_INT(vPos)
|
|
sprite.fAnimFrame = data.fStartFrame
|
|
sprite.fScale = fScale
|
|
sprite.iPackedColor = GGSM_PACK_RGBA_COLOUR(255, 255, 255, 255)
|
|
GGSM_PLAY_SOUND_FROM_POSITION(data.eSound, vPos)
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
//-------------------------------------------------
|
|
// BG SCROLLER FUNCTIONS
|
|
//-------------------------------------------------
|
|
|
|
PROC GGSM_BGSCROLLER_RESET(GGSM_BGSCROLLER &scr, INT iStage)
|
|
INT i
|
|
VECTOR_2D vSize = GGSM_GET_SPRITE_SIZE(GGSM_SPRITE_BG_SPACE)
|
|
VECTOR_2D vPos
|
|
|
|
// set positions for stars
|
|
vPos.x = GGSM_PX_OVERSCAN_MIN_X - (vSize.x / 2.0)
|
|
vPos.y = cfBASE_SCREEN_HALF_HEIGHT
|
|
|
|
REPEAT GGSM_MAX_STAR_BG i
|
|
scr.vSpaceBgPos[i] = vPos
|
|
scr.vSpaceBgPos[i].x += (i * vSize.x)
|
|
ENDREPEAT
|
|
|
|
// set positions for floor
|
|
vSize = GGSM_GET_SPRITE_BG_LAYER_SIZE_FOR_STAGE(iStage)
|
|
vPos.x = GGSM_PX_OVERSCAN_MIN_X - (vSize.x / 2.0)
|
|
vPos.y = GGSM_PX_OVERSCAN_MAX_Y - (vSize.y / 2.0)
|
|
|
|
REPEAT GGSM_MAX_FLOOR_BG i
|
|
scr.vFloorBgPos[i] = vPos
|
|
scr.vFloorBgPos[i].x += (i * vSize.x)
|
|
ENDREPEAT
|
|
|
|
GGSM_RESET_FXSPRITE_ARRAY(scr.sBgSprite)
|
|
|
|
scr.fSpaceScrollRate = 64.0 + (12.8 * TO_FLOAT(iStage - 1))
|
|
scr.fFloorScrollRate = (scr.fSpaceScrollRate * 2.0)
|
|
|
|
scr.fObjScrollRate = 96.0
|
|
|
|
scr.iStage = iStage
|
|
scr.fTimer = 0
|
|
ENDPROC
|
|
|
|
PROC GGSM_BGSCROLLER_UPDATE(GGSM_BGSCROLLER &scr)
|
|
IF (sGGSMData.bGamePaused)
|
|
EXIT
|
|
ENDIF
|
|
|
|
INT i, iSearch
|
|
FLOAT r
|
|
|
|
FLOAT xlimit
|
|
FLOAT spd = (sGGSMData.fDeltaTime * sGGSMData.fTimeScale)
|
|
VECTOR_2D vSize = GGSM_GET_SPRITE_SIZE(GGSM_SPRITE_BG_SPACE)
|
|
|
|
// scroll stars
|
|
scr.fTimer -= spd
|
|
xlimit = GGSM_PX_OVERSCAN_MIN_X - (vSize.x / 2.0)
|
|
spd = (sGGSMData.fDeltaTime * sGGSMData.fTimeScale) * scr.fSpaceScrollRate
|
|
|
|
REPEAT GGSM_MAX_STAR_BG i
|
|
scr.vSpaceBgPos[i].x -= spd
|
|
IF (scr.vSpaceBgPos[i].x <= xlimit)
|
|
scr.vSpaceBgPos[i].x += (vSize.x * GGSM_MAX_STAR_BG)
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
// scroll floor bg
|
|
xlimit = GGSM_PX_OVERSCAN_MIN_X - (vSize.x / 2.0)
|
|
spd = (sGGSMData.fDeltaTime * sGGSMData.fTimeScale) * scr.fFloorScrollRate
|
|
vSize = GGSM_GET_SPRITE_BG_LAYER_SIZE_FOR_STAGE(scr.iStage)
|
|
|
|
REPEAT GGSM_MAX_FLOOR_BG i
|
|
scr.vFloorBgPos[i].x -= spd
|
|
IF (scr.vFloorBgPos[i].x <= xlimit)
|
|
scr.vFloorBgPos[i].x += (vSize.x * GGSM_MAX_FLOOR_BG)
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
// update scrolling objects
|
|
GGSM_UPDATE_FXSPRITE_ARRAY(scr.sBgSprite)
|
|
VECTOR_2D vPos, vVel
|
|
|
|
IF (scr.fTimer > 0.0)
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF (scr.iStage = GGSM_SECTOR_ASTEROID_BELT)
|
|
IF GGSM_GET_FREE_FXSPRITE(scr.sBgSprite, i, iSearch)
|
|
vVel = INIT_VECTOR_2D(-GET_RANDOM_FLOAT_IN_RANGE(300.0, 700.0), 0)
|
|
r = GET_RANDOM_FLOAT_IN_RANGE(32.0, 512.0)
|
|
vPos.x = GGSM_PX_OVERSCAN_MAX_X + (r / 2.0)
|
|
vPos.y = GET_RANDOM_FLOAT_IN_RANGE(GGSM_PX_OVERSCAN_MIN_Y + 20, GGSM_PX_OVERSCAN_MAX_Y - 20)
|
|
GGSM_FXSPRITE_INIT_METEOR(scr.sBgSprite[i], vPos, vVel, r)
|
|
scr.fTimer = GET_RANDOM_FLOAT_IN_RANGE(1.0, 5.0)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
//-------------------------------------------------
|
|
// DIALOG CONTROLLER FUNCTIONS
|
|
//-------------------------------------------------
|
|
PROC GGSM_DIALOG_CONTROLLER_SETUP_PICTURES(GGSM_DIALOG_CONTROLLER &con)
|
|
ARCADE_GAMES_SOUND monkeyVoice = ARCADE_GAMES_SOUND_GGSM_MONKEY_VOICE_SCREECH_MID
|
|
|
|
con.eLeftSpeak = ARCADE_GAMES_SOUND_END
|
|
con.eRightSpeak = ARCADE_GAMES_SOUND_END
|
|
|
|
SWITCH (con.eType)
|
|
CASE GGSM_DIALOG_BOSS_SMOOTHIE_START
|
|
CASE GGSM_DIALOG_BOSS_SMOOTHIE_FAILED
|
|
con.eLeftPicture = GGSM_SPRITE_PIC_SMOOTHIE_MAIN
|
|
con.eRightPicture = GGSM_SPRITE_PIC_MONKEY_MAIN
|
|
con.eLeftSpeak = ARCADE_GAMES_SOUND_GGSM_BOSS_SMOOTHIE_SPEAK
|
|
con.eRightSpeak = monkeyVoice
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_SMOOTHIE_DEFEATED
|
|
con.eLeftPicture = GGSM_SPRITE_PIC_SMOOTHIE_MAIN
|
|
con.eRightPicture = GGSM_SPRITE_PIC_MONKEY_MAIN
|
|
con.eLeftSpeak = ARCADE_GAMES_SOUND_GGSM_BOSS_SMOOTHIE_SPEAK_DEFEAT
|
|
con.eRightSpeak = monkeyVoice
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_MARINE_DEFEATED
|
|
con.eLeftPicture = GGSM_SPRITE_PIC_MONKEY_MAIN
|
|
con.eRightPicture = GGSM_SPRITE_PIC_MARINE_MAIN
|
|
con.eLeftSpeak = monkeyVoice
|
|
con.eRightSpeak = ARCADE_GAMES_SOUND_GGSM_BOSS_MARINE_SPEAK_DEFEAT
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_MARINE_START
|
|
CASE GGSM_DIALOG_BOSS_MARINE_FAILED
|
|
con.eLeftPicture = GGSM_SPRITE_PIC_MARINE_MAIN
|
|
con.eRightPicture = GGSM_SPRITE_PIC_MONKEY_MAIN
|
|
con.eLeftSpeak = ARCADE_GAMES_SOUND_GGSM_BOSS_MARINE_SPEAK
|
|
con.eRightSpeak = monkeyVoice
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_GRANANA_START
|
|
CASE GGSM_DIALOG_BOSS_GRANANA_FAILED
|
|
con.eLeftPicture = GGSM_SPRITE_PIC_GRANANA_MAIN
|
|
con.eRightPicture = GGSM_SPRITE_PIC_MONKEY_MAIN
|
|
con.eLeftSpeak = ARCADE_GAMES_SOUND_GGSM_BOSS_GRAN_SPEAK
|
|
con.eRightSpeak = monkeyVoice
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_GRANANA_DEFEATED
|
|
con.eLeftPicture = GGSM_SPRITE_PIC_GRANANA_MAIN
|
|
con.eRightPicture = GGSM_SPRITE_PIC_MONKEY_MAIN
|
|
con.eLeftSpeak = ARCADE_GAMES_SOUND_GGSM_BOSS_GRAN_SPEAK_DEFEAT
|
|
con.eRightSpeak = monkeyVoice
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_BREAD_START
|
|
CASE GGSM_DIALOG_BOSS_BREAD_FAILED
|
|
con.eLeftPicture = GGSM_SPRITE_PIC_BREAD_MAIN
|
|
con.eRightPicture = GGSM_SPRITE_PIC_MONKEY_MAIN
|
|
con.eLeftSpeak = ARCADE_GAMES_SOUND_GGSM_BOSS_BREAD_SPEAK
|
|
con.eRightSpeak = monkeyVoice
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_BREAD_DEFEATED
|
|
con.eLeftPicture = GGSM_SPRITE_PIC_BREAD_MAIN
|
|
con.eRightPicture = GGSM_SPRITE_PIC_MONKEY_MAIN
|
|
con.eLeftSpeak = ARCADE_GAMES_SOUND_GGSM_BOSS_BREAD_SPEAK_DEFEAT
|
|
con.eRightSpeak = monkeyVoice
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_DR_DANK_START
|
|
CASE GGSM_DIALOG_BOSS_DR_DANK_FAILED
|
|
con.eLeftPicture = GGSM_SPRITE_PIC_DR_DANK_MAIN
|
|
con.eRightPicture = GGSM_SPRITE_PIC_MONKEY_MAIN
|
|
con.eLeftSpeak = ARCADE_GAMES_SOUND_GGSM_BOSS_DR_DANK_SPEAK
|
|
con.eRightSpeak = monkeyVoice
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_DR_DANK_DEFEATED
|
|
con.eLeftPicture = GGSM_SPRITE_PIC_DR_DANK_MAIN
|
|
con.eRightPicture = GGSM_SPRITE_PIC_MONKEY_MAIN
|
|
con.eLeftSpeak = ARCADE_GAMES_SOUND_GGSM_BOSS_DR_DANK_SPEAK_DEFEAT
|
|
con.eRightSpeak = monkeyVoice
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_ASTEROID_ENTER
|
|
CASE GGSM_DIALOG_ASTEROID_LEAVE
|
|
con.eLeftPicture = GGSM_SPRITE_PIC_MONKEY_ASTEROID
|
|
con.eRightPicture = GGSM_SPRITE_NONE
|
|
con.eLeftSpeak = monkeyVoice
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_GAME_OVER
|
|
con.eLeftPicture = GGSM_SPRITE_PIC_DR_DANK_FAIL
|
|
con.eLeftSpeak = ARCADE_GAMES_SOUND_GGSM_BOSS_DR_DANK_SPEAK
|
|
con.eRightPicture = GGSM_SPRITE_PIC_MONKEY_FAIL
|
|
con.eRightSpeak = ARCADE_GAMES_SOUND_GGSM_MONKEY_VOICE_SCREECH_HIGH
|
|
BREAK
|
|
|
|
DEFAULT
|
|
con.eLeftPicture = GGSM_SPRITE_PIC_MONKEY_MAIN
|
|
con.eRightPicture = GGSM_SPRITE_PIC_GRANANA_MAIN
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
FUNC BOOL GGSM_DIALOG_CONTROLLER_SETUP_MESSAGES(GGSM_DIALOG_CONTROLLER &con)
|
|
con.iMsgTimerMS = GET_GAME_TIMER() + GGSM_DIALOG_READ_TIME
|
|
|
|
SWITCH (con.eType)
|
|
CASE GGSM_DIALOG_BOSS_SMOOTHIE_START
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_LVL1_BOSS_START
|
|
con.eRightDialog = GGSM_SPRITE_BOX_LVL1_MONKEY_START
|
|
IF (con.iMsgNumber != 0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_SMOOTHIE_DEFEATED
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_LVL1_BOSS_WIN
|
|
|
|
con.eRightDialog = GGSM_SPRITE_BOX_LVL1_MONKEY_WIN
|
|
IF (con.iMsgNumber != 0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_SMOOTHIE_FAILED
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_LVL1_BOSS_FAIL
|
|
con.eRightDialog = GGSM_SPRITE_BOX_LVL1_MONKEY_FAIL
|
|
IF (con.iMsgNumber != 0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
|
|
CASE GGSM_DIALOG_BOSS_MARINE_START
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_LVL2_BOSS_START
|
|
con.eRightDialog = GGSM_SPRITE_BOX_LVL2_MONKEY_START
|
|
IF (con.iMsgNumber != 0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_MARINE_DEFEATED
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_LVL2_BOSS_WIN
|
|
con.eRightDialog = GGSM_SPRITE_BOX_LVL2_MONKEY_WIN
|
|
IF (con.iMsgNumber != 0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_MARINE_FAILED
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_LVL2_BOSS_FAIL
|
|
con.eRightDialog = GGSM_SPRITE_BOX_LVL2_MONKEY_FAIL
|
|
IF (con.iMsgNumber != 0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_GRANANA_START
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_LVL3_BOSS_START
|
|
con.eRightDialog = GGSM_SPRITE_BOX_LVL3_MONKEY_START
|
|
IF (con.iMsgNumber != 0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_GRANANA_DEFEATED
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_LVL3_BOSS_WIN
|
|
con.eRightDialog = GGSM_SPRITE_BOX_LVL3_MONKEY_WIN
|
|
IF (con.iMsgNumber != 0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_GRANANA_FAILED
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_LVL3_BOSS_FAIL
|
|
con.eRightDialog = GGSM_SPRITE_BOX_LVL3_MONKEY_FAIL
|
|
IF (con.iMsgNumber != 0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_BREAD_START
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_LVL4_BOSS_START
|
|
con.eRightDialog = GGSM_SPRITE_BOX_LVL4_MONKEY_START
|
|
IF (con.iMsgNumber != 0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_BREAD_DEFEATED
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_LVL4_BOSS_WIN
|
|
con.eRightDialog = GGSM_SPRITE_BOX_LVL4_MONKEY_WIN
|
|
IF (con.iMsgNumber != 0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_BREAD_FAILED
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_LVL4_BOSS_FAIL
|
|
con.eRightDialog = GGSM_SPRITE_BOX_LVL4_MONKEY_FAIL
|
|
IF (con.iMsgNumber != 0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_DR_DANK_START
|
|
IF (con.iMsgNumber = 0)
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_LVL5_BOSS_START
|
|
con.eRightDialog = GGSM_SPRITE_BOX_LVL5_MONKEY_START
|
|
ELIF (con.iMsgNumber = 1)
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_LVL5_BOSS_START2
|
|
con.eRightDialog = GGSM_SPRITE_BOX_LVL5_MONKEY_START2
|
|
ELIF (con.iMsgNumber != 0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_DR_DANK_DEFEATED
|
|
IF (con.iMsgNumber = 0)
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_LVL5_BOSS_WIN
|
|
con.eRightDialog = GGSM_SPRITE_BOX_LVL5_MONKEY_WIN
|
|
ELIF (con.iMsgNumber = 1)
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_LVL5_BOSS_WIN2
|
|
con.eRightDialog = GGSM_SPRITE_NONE
|
|
ELIF (con.iMsgNumber != 0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_BOSS_DR_DANK_FAILED
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_LVL5_BOSS_FAIL
|
|
con.eRightDialog = GGSM_SPRITE_BOX_LVL5_MONKEY_FAIL
|
|
|
|
IF (con.iMsgNumber != 0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_ASTEROID_ENTER
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_ASTEROID_NEARING
|
|
con.eRightDialog = GGSM_SPRITE_NONE
|
|
|
|
IF (con.iMsgNumber != 0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_ASTEROID_LEAVE
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_ASTEROID_LEAVING
|
|
con.eRightDialog = GGSM_SPRITE_NONE
|
|
|
|
IF (con.iMsgNumber != 0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_GAME_OVER
|
|
con.eLeftDialog = INT_TO_ENUM(GGSM_SPRITE_TYPE, ENUM_TO_INT(GGSM_SPRITE_BOX_FAILSCRN_BOSS1) + con.iVariation)
|
|
con.eRightDialog = INT_TO_ENUM(GGSM_SPRITE_TYPE, ENUM_TO_INT(GGSM_SPRITE_BOX_FAILSCRN_MONKEY_1) + con.iVariation)
|
|
|
|
IF (con.iMsgNumber != 0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
DEFAULT
|
|
con.eLeftDialog = GGSM_SPRITE_BOX_LVL3_MONKEY_START
|
|
con.eRightDialog = GGSM_SPRITE_BOX_LVL3_BOSS_START
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
PROC GGSM_DIALOG_CONTROLLER_SET_STATE(GGSM_DIALOG_CONTROLLER &con, GGSM_DIALOG_STATE eState)
|
|
con.eState = eState
|
|
con.bStateInit = FALSE
|
|
con.iMsgTimerMS = GET_GAME_TIMER() + GGSM_DIALOG_READ_TIME
|
|
CDEBUG1LN(DEBUG_MINIGAME, "GGSM_DIALOG_CONTROLLER_SET_STATE:", GGSM_DIALOG_STATE_TO_STRING(eState))
|
|
ENDPROC
|
|
|
|
PROC GGSM_DIALOG_CONTROLLER_START_DIALOG(GGSM_DIALOG_CONTROLLER &con, GGSM_DIALOG_TYPE eType, INT iVariation = -1)
|
|
con.eType = eType
|
|
|
|
IF (iVariation = -1) AND (con.eType = GGSM_DIALOG_GAME_OVER)
|
|
iVariation = GET_RANDOM_INT_IN_RANGE(0, 6)
|
|
ENDIF
|
|
|
|
con.iVariation = iVariation
|
|
con.iMsgNumber = 0
|
|
GGSM_DIALOG_CONTROLLER_SET_STATE(con, GGSM_DIALOG_STATE_INIT)
|
|
ENDPROC
|
|
|
|
PROC GGSM_DIALOG_CONTROLLER_UPDATE(GGSM_DIALOG_CONTROLLER &con)
|
|
IF NOT GGSM_IS_DIALOG_ACTIVE()
|
|
EXIT
|
|
ENDIF
|
|
|
|
VECTOR_2D vPos, vSize
|
|
RGBA_COLOUR_STRUCT bgcol
|
|
INT iAlpha
|
|
STRING sPortraitDict = GGSM_GET_TEXTURE_DICT(GGSM_TEXDICT_PORTRAITS)
|
|
STRING sDialogDict = GGSM_GET_TEXTURE_DICT(GGSM_TEXDICT_DIALOG)
|
|
|
|
SWITCH (con.eState)
|
|
CASE GGSM_DIALOG_STATE_INIT
|
|
con.iMsgNumber = 0
|
|
con.iSlideInOffset = GGSM_DIALOG_MAX_SLIDEIN
|
|
//GGSM_RESET_PROJECTILE_ARRAY(sGGSMData.sProjectiles)
|
|
GGSM_DIALOG_CONTROLLER_SETUP_PICTURES(con)
|
|
GGSM_DIALOG_CONTROLLER_SETUP_MESSAGES(con)
|
|
GGSM_DIALOG_CONTROLLER_SET_STATE(con, GGSM_DIALOG_STATE_START)
|
|
|
|
SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eStageFlags, GGSM_STAGE_BIT_BRING_CAMERA_TO_STOP)
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_STATE_START
|
|
IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_PORTRAITS)
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_DIALOG)
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF (con.bStateInit = FALSE)
|
|
GGSM_PLAY_SOUND(ARCADE_GAMES_SOUND_GGSM_SPEECH_BUBBLE_APPEAR_SWEEP)
|
|
con.bStateInit = TRUE
|
|
ENDIF
|
|
|
|
con.iSlideInOffset -= GGSM_DIALOG_SLIDEIN_RATE
|
|
IF (con.iSlideInOffset <= 0)
|
|
GGSM_PLAY_SOUND(ARCADE_GAMES_SOUND_GGSM_SPEECH_BUBBLE_APPEAR_SYNTH)
|
|
GGSM_DIALOG_CONTROLLER_SET_STATE(con, GGSM_DIALOG_STATE_LEFT_SPEAK)
|
|
con.iSlideInOffset = 0
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_STATE_LEFT_SPEAK
|
|
IF (con.bStateInit = FALSE)
|
|
IF ARCADE_GAMES_SOUND_HAS_FINISHED(ARCADE_GAMES_SOUND_GGSM_SPEECH_BUBBLE_APPEAR_SYNTH)
|
|
IF (con.eLeftSpeak != ARCADE_GAMES_SOUND_END)
|
|
GGSM_PLAY_SOUND(con.eLeftSpeak)
|
|
ENDIF
|
|
con.bStateInit = TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF (con.eLeftSpeak = ARCADE_GAMES_SOUND_END) OR ARCADE_GAMES_SOUND_HAS_FINISHED(con.eLeftSpeak)
|
|
GGSM_DIALOG_CONTROLLER_SET_STATE(con, GGSM_DIALOG_STATE_RIGHT_SPEAK)
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_STATE_RIGHT_SPEAK
|
|
IF (con.bStateInit = FALSE)
|
|
IF (con.eRightSpeak != ARCADE_GAMES_SOUND_END)
|
|
GGSM_PLAY_SOUND(con.eRightSpeak)
|
|
ENDIF
|
|
con.bStateInit = TRUE
|
|
ELSE
|
|
IF (con.eRightSpeak = ARCADE_GAMES_SOUND_END) OR ARCADE_GAMES_SOUND_HAS_FINISHED(con.eRightSpeak)
|
|
GGSM_DIALOG_CONTROLLER_SET_STATE(con, GGSM_DIALOG_STATE_ACTIVE)
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_STATE_ACTIVE
|
|
// we jump to the next message if there isn't one we end the dialog
|
|
IF GGSM_HAS_PLAYER_PRESSED_FIRE() OR (GET_GAME_TIMER() > con.iMsgTimerMS)
|
|
con.iMsgNumber ++
|
|
IF NOT GGSM_DIALOG_CONTROLLER_SETUP_MESSAGES(con)
|
|
GGSM_DIALOG_CONTROLLER_SET_STATE(con, GGSM_DIALOG_STATE_END)
|
|
ELSE
|
|
GGSM_PLAY_SOUND(ARCADE_GAMES_SOUND_GGSM_SPEECH_BUBBLE_APPEAR_SYNTH)
|
|
GGSM_DIALOG_CONTROLLER_SET_STATE(con, GGSM_DIALOG_STATE_LEFT_SPEAK)
|
|
CDEBUG1LN(DEBUG_MINIGAME, "GGSM_DIALOG_CONTROLLER_UPDATE - TYPE:", GGSM_DIALOG_TYPE_TO_STRING(con.eType), " MSG #:", con.iMsgNumber)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF GGSM_HAS_PLAYER_PRESSED_START()
|
|
GGSM_DIALOG_CONTROLLER_SET_STATE(con, GGSM_DIALOG_STATE_END)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_STATE_END
|
|
IF (con.bStateInit = FALSE)
|
|
GGSM_PLAY_SOUND(ARCADE_GAMES_SOUND_GGSM_SPEECH_BUBBLE_DISAPPEAR_SWEEP)
|
|
con.bStateInit = TRUE
|
|
ENDIF
|
|
|
|
con.iSlideInOffset += GGSM_DIALOG_SLIDEIN_RATE
|
|
IF (con.iSlideInOffset >= GGSM_DIALOG_MAX_SLIDEIN)
|
|
con.iSlideInOffset = GGSM_DIALOG_MAX_SLIDEIN
|
|
|
|
con.eLeftDialog = GGSM_SPRITE_NONE
|
|
con.eRightDialog = GGSM_SPRITE_NONE
|
|
con.eLeftPicture = GGSM_SPRITE_NONE
|
|
con.eRightPicture = GGSM_SPRITE_NONE
|
|
GGSM_DIALOG_CONTROLLER_SET_STATE(con, GGSM_DIALOG_STATE_DONE)
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(sGGSMData.eStageFlags, GGSM_STAGE_BIT_BRING_CAMERA_TO_STOP)
|
|
GGSM_RELEASE_TEXTURE_DICT(GGSM_TEXDICT_DIALOG)
|
|
EXIT
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE GGSM_DIALOG_STATE_DONE
|
|
GGSM_RELEASE_TEXTURE_DICT(GGSM_TEXDICT_DIALOG)
|
|
GGSM_DIALOG_CONTROLLER_SET_STATE(con, GGSM_DIALOG_STATE_SHUTDOWN)
|
|
EXIT
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
// draw transparent bg if in stage
|
|
IF (con.eType > GGSM_DIALOG_GAME_OVER)
|
|
iAlpha = FLOOR(128.0 * (TO_FLOAT(GGSM_DIALOG_MAX_SLIDEIN - con.iSlideInOffset) / TO_FLOAT(GGSM_DIALOG_MAX_SLIDEIN)))
|
|
INIT_RGBA_STRUCT(bgcol, 0, 0, 0, iAlpha)
|
|
ARCADE_DRAW_PIXELSPACE_RECT(INIT_VECTOR_2D(cfBASE_SCREEN_HALF_WIDTH, cfBASE_SCREEN_HALF_HEIGHT), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT), bgcol)
|
|
ENDIF
|
|
|
|
// draw left picture
|
|
IF (con.eLeftPicture != GGSM_SPRITE_NONE)
|
|
vSize = GGSM_GET_SPRITE_SIZE(con.eLeftPicture)
|
|
vPos.x = (GGSM_PX_HUD_MIN_X + (vSize.x / 2) + 120) - con.iSlideInOffset
|
|
vPos.y = GGSM_PX_HUD_MIN_Y + (vSize.y / 2) + 120
|
|
ARCADE_DRAW_PIXELSPACE_SPRITE(sPortraitDict, GGSM_GET_SPRITE_NAME(con.eLeftPicture), vPos, vSize, 0, sGGSMData.rgbaWhite)
|
|
vPos.x += ((vSize.x / 2) + 32)
|
|
|
|
// draw left text
|
|
IF (con.iSlideInOffset = 0) AND (con.eLeftDialog != GGSM_SPRITE_NONE)
|
|
vSize = GGSM_GET_SPRITE_SIZE(con.eLeftDialog)
|
|
|
|
IF (con.eType <= GGSM_DIALOG_GAME_OVER)
|
|
vPos.x += (328.0 / 2.0)
|
|
ELSE
|
|
vPos.x += (628.0 / 2.0)
|
|
ENDIF
|
|
|
|
ARCADE_DRAW_PIXELSPACE_SPRITE(sDialogDict, GGSM_GET_SPRITE_NAME(con.eLeftDialog), vPos, vSize, 0, sGGSMData.rgbaWhite)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// draw right picture
|
|
IF (con.eRightPicture != GGSM_SPRITE_NONE)
|
|
vSize = GGSM_GET_SPRITE_SIZE(con.eRightPicture)
|
|
vPos.x = (GGSM_PX_HUD_MAX_X - (vSize.x / 2) - 120) + con.iSlideInOffset
|
|
|
|
IF (con.eType <= GGSM_DIALOG_GAME_OVER)
|
|
vPos.y = 420.0
|
|
ELSE
|
|
vPos.y = GGSM_PX_HUD_MAX_Y - (vSize.y / 2) - 120
|
|
ENDIF
|
|
ARCADE_DRAW_PIXELSPACE_SPRITE(sPortraitDict, GGSM_GET_SPRITE_NAME(con.eRightPicture), vPos, vSize, 0, sGGSMData.rgbaWhite)
|
|
vPos.x -= ((vSize.x / 2) + 32)
|
|
|
|
// draw right text
|
|
IF (con.iSlideInOffset = 0) AND (con.eRightDialog != GGSM_SPRITE_NONE)
|
|
vSize = GGSM_GET_SPRITE_SIZE(con.eRightDialog)
|
|
|
|
IF (con.eType <= GGSM_DIALOG_GAME_OVER)
|
|
vPos.x -= (328.0 / 2.0)
|
|
ELSE
|
|
vPos.x -= (628.0 / 2.0)
|
|
ENDIF
|
|
|
|
ARCADE_DRAW_PIXELSPACE_SPRITE(sDialogDict, GGSM_GET_SPRITE_NAME(con.eRightDialog), vPos, vSize, 0, sGGSMData.rgbaWhite)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
//-------------------------------------------------
|
|
// POWER UP FUNCTIONS
|
|
//-------------------------------------------------
|
|
|
|
PROC GGSM_RESET_POWER_UP(GGSM_POWER_UP &pType)
|
|
pType.eType = GGSM_SPRITE_NONE
|
|
pType.iPackedPosition = GGSM_PACK_VECTOR_2D_TO_INT_EXPLICIT(1800, 540)
|
|
ENDPROC
|
|
|
|
PROC GGSM_RESET_POWER_UP_ARRAY(GGSM_POWER_UP &pArray[])
|
|
INT i
|
|
|
|
REPEAT COUNT_OF(pArray) i
|
|
GGSM_RESET_POWER_UP(pArray[i])
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
FUNC INT GGSM_GET_FREE_POWER_UP(GGSM_POWER_UP &pArray[])
|
|
INT i
|
|
|
|
REPEAT COUNT_OF(pArray) i
|
|
IF (pArray[i].eType = GGSM_SPRITE_NONE)
|
|
RETURN i
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
RETURN -1
|
|
ENDFUNC
|
|
|
|
FUNC BOOL GGSM_CREATE_POWER_UP(GGSM_SPRITE_TYPE eSprite, GGSM_POWER_UP &pArray[])
|
|
IF (eSprite < GGSM_SPRITE_POWER_UP_BEAM) OR (eSprite > GGSM_SPRITE_POWER_UP_WAVE)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
INT ind = GGSM_GET_FREE_POWER_UP(pArray)
|
|
IF (ind = -1)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
pArray[ind].eType = eSprite
|
|
pArray[ind].iPackedPosition = GGSM_PACK_VECTOR_2D_TO_INT_EXPLICIT(1800, GET_RANDOM_FLOAT_IN_RANGE(200.0, 840.0))
|
|
CDEBUG1LN(DEBUG_MINIGAME, "GGSM_CREATE_POWER_UP - TYPE:", GGSM_GET_SPRITE_NAME(eSprite))
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL GGSM_CREATE_POWER_UP_AT(GGSM_SPRITE_TYPE eSprite, VECTOR_2D vPos, GGSM_POWER_UP &pArray[])
|
|
IF (eSprite < GGSM_SPRITE_POWER_UP_BEAM) OR (eSprite > GGSM_SPRITE_POWER_UP_WAVE)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
INT ind = GGSM_GET_FREE_POWER_UP(pArray)
|
|
IF (ind = -1)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
pArray[ind].eType = eSprite
|
|
pArray[ind].iPackedPosition = GGSM_PACK_VECTOR_2D_TO_INT(vPos)
|
|
CDEBUG1LN(DEBUG_MINIGAME, "GGSM_CREATE_POWER_UP - TYPE:", GGSM_GET_SPRITE_NAME(eSprite))
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
//-------------------------------------------------
|
|
// ENTITY ACCESSOR FUNCTIONS
|
|
//-------------------------------------------------
|
|
|
|
FUNC INT GGSM_ENTITY_GET_ARRAY_INDEX(GGSM_ENTITY &ent)
|
|
RETURN ent.iArrayIndex
|
|
ENDFUNC
|
|
|
|
FUNC INT GGSM_ENTITY_GET_GROUP_ID(GGSM_ENTITY &ent)
|
|
RETURN ent.iGroupID
|
|
ENDFUNC
|
|
|
|
FUNC INT GGSM_ENTITY_GET_PARENT_INDEX(GGSM_ENTITY &ent)
|
|
RETURN ent.iEntityParentIndex
|
|
ENDFUNC
|
|
|
|
PROC GGSM_ENTITY_SET_ARRAY_INDEX(GGSM_ENTITY &ent, INT i)
|
|
ent.iArrayIndex = i
|
|
ENDPROC
|
|
|
|
PROC GGSM_ENTITY_SET_GROUP_ID(GGSM_ENTITY &ent, INT i)
|
|
ent.iGroupID = i
|
|
ENDPROC
|
|
|
|
PROC GGSM_ENTITY_SET_PARENT_INDEX(GGSM_ENTITY &ent, INT i)
|
|
ent.iEntityParentIndex = i
|
|
ENDPROC
|
|
|
|
//-------------------------------------------------
|
|
// BOSS CONTROLLER FUNCTIONS
|
|
//-------------------------------------------------
|
|
|
|
PROC GGSM_BOSS_CONTROLLER_SET_STATE(GGSM_BOSS_CONTROLLER &con, GGSM_BOSS_STATE eState)
|
|
con.eState = eState
|
|
con.bStateInit = FALSE
|
|
con.fStateTimer = 0.0
|
|
con.iInternalCounter = 0
|
|
con.iBossPatternState = 0
|
|
|
|
CDEBUG1LN(DEBUG_MINIGAME, "GGSM_BOSS_CONTROLLER_SET_STATE - TYPE:", GGSM_BOSS_TYPE_TO_STRING(con.eType), " STATE:", GGSM_BOSS_STATE_TO_STRING(con.eState))
|
|
|
|
IF (eState = GGSM_BOSS_STATE_LOADING)
|
|
SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eStageFlags, GGSM_STAGE_BIT_BRING_CAMERA_TO_STOP)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL GGSM_BOSS_CONTROLLER_IS_BOSS_ACTIVE(GGSM_BOSS_CONTROLLER &boss)
|
|
IF (boss.eState = GGSM_BOSS_STATE_NONE) OR (boss.eState = GGSM_BOSS_STATE_DONE)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC INT GGSM_GET_FREE_BOSS_CONTROLLER_INDEX(GGSM_BOSS_CONTROLLER &boss[])
|
|
INT i
|
|
|
|
REPEAT COUNT_OF(boss) i
|
|
IF (boss[i].iMaxTotalHP = 0)
|
|
RETURN i
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
RETURN GGSM_INVALID_BOSS_CONTROLLER
|
|
ENDFUNC
|
|
|
|
FUNC FLOAT GGSM_GET_BOSS_STATE_TIME_ELAPSED(GGSM_BOSS_CONTROLLER &boss)
|
|
RETURN boss.fStateTimer
|
|
ENDFUNC
|
|
|
|
FUNC INT GGSM_BOSS_CONTROLLER_GET_ENTITY_INDEX(GGSM_BOSS_CONTROLLER &boss, INT iSlot)
|
|
IF (iSlot < 0) OR (iSlot >= GGSM_MAX_BOSS_PARTS)
|
|
RETURN GGSM_INVALID_ENTITY
|
|
ENDIF
|
|
|
|
RETURN boss.iEntityIndex[iSlot]
|
|
//RETURN GET_PACKED_BITFIELD_VALUE_FROM_ARRAY(boss.iPackedEntityList, iSlot, GGSM_BOSS_LIST_BIT_WIDTH)
|
|
ENDFUNC
|
|
|
|
PROC GGSM_BOSS_CONTROLLER_SET_ENTITY_INDEX(GGSM_BOSS_CONTROLLER &boss, INT iSlot, INT iEntityIndex)
|
|
IF (iSlot < 0) OR (iSlot >= GGSM_MAX_BOSS_PARTS)
|
|
EXIT
|
|
ENDIF
|
|
|
|
boss.iEntityIndex[iSlot] = iEntityIndex
|
|
//SET_PACKED_BITFIELD_VALUE_IN_ARRAY(boss.iPackedEntityList, iSlot, GGSM_BOSS_LIST_BIT_WIDTH, iEntityIndex)
|
|
ENDPROC
|
|
|
|
PROC GGSM_CLEAR_BOSS_CONTROLLER_USED_PATTERN_BITSET(GGSM_BOSS_CONTROLLER &boss)
|
|
boss.iPatternUsedBitSet = 0
|
|
ENDPROC
|
|
|
|
FUNC BOOL GGSM_BOSS_CONTROLLER_ARE_ANY_PATTERNS_LEFT(GGSM_BOSS_CONTROLLER &boss)
|
|
INT i
|
|
|
|
REPEAT boss.iMaxPatterns i
|
|
IF NOT IS_BIT_SET(boss.iPatternUsedBitSet, i)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL GGSM_BOSS_CONTROLLER_PICK_UNIQUE_PATTERN(GGSM_BOSS_CONTROLLER &boss, GGSM_BOSS_STATE &newPattern)
|
|
INT i, iRand
|
|
|
|
REPEAT 30 i
|
|
iRand = GET_RANDOM_INT_IN_RANGE(0, boss.iMaxPatterns)
|
|
IF NOT IS_BIT_SET(boss.iPatternUsedBitSet, iRand)
|
|
newPattern = INT_TO_ENUM(GGSM_BOSS_STATE, ENUM_TO_INT(GGSM_BOSS_STATE_PATTERN_A) + iRand)
|
|
SET_BIT(boss.iPatternUsedBitSet, iRand)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
REPEAT boss.iMaxPatterns i
|
|
IF NOT IS_BIT_SET(boss.iPatternUsedBitSet, i)
|
|
newPattern = INT_TO_ENUM(GGSM_BOSS_STATE, ENUM_TO_INT(GGSM_BOSS_STATE_PATTERN_A) + i)
|
|
SET_BIT(boss.iPatternUsedBitSet, i)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC GGSM_BOSS_CONTROLLER_SET_ATTACK_PATTERN(GGSM_BOSS_CONTROLLER &boss, GGSM_BOSS_STATE newState)
|
|
GGSM_BOSS_CONTROLLER_SET_STATE(boss, newState)
|
|
|
|
IF NOT GGSM_BOSS_CONTROLLER_ARE_ANY_PATTERNS_LEFT(boss)
|
|
GGSM_CLEAR_BOSS_CONTROLLER_USED_PATTERN_BITSET(boss)
|
|
SET_BIT(boss.iPatternUsedBitSet, ENUM_TO_INT(newState) - ENUM_TO_INT(GGSM_BOSS_STATE_PATTERN_A))
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC GGSM_BOSS_CONTROLLER_SELECT_ATTACK_PATTERN(GGSM_BOSS_CONTROLLER &boss)
|
|
GGSM_BOSS_STATE newState
|
|
|
|
IF NOT GGSM_BOSS_CONTROLLER_ARE_ANY_PATTERNS_LEFT(boss)
|
|
GGSM_CLEAR_BOSS_CONTROLLER_USED_PATTERN_BITSET(boss)
|
|
ENDIF
|
|
|
|
GGSM_BOSS_CONTROLLER_PICK_UNIQUE_PATTERN(boss, newState)
|
|
GGSM_BOSS_CONTROLLER_SET_ATTACK_PATTERN(boss, newState)
|
|
ENDPROC
|
|
|
|
PROC GGSM_RESET_BOSS_CONTROLLER(GGSM_BOSS_CONTROLLER &boss, GGSM_BOSS_TYPE eType = GGSM_BOSS_NONE)
|
|
INT i
|
|
|
|
REPEAT GGSM_MAX_BOSS_PARTS i
|
|
GGSM_BOSS_CONTROLLER_SET_ENTITY_INDEX(boss, i, GGSM_INVALID_ENTITY)
|
|
ENDREPEAT
|
|
|
|
boss.eType = eType
|
|
boss.iTotalHP = 0
|
|
boss.iMaxTotalHP = 0
|
|
boss.bFiftyPercent = FALSE
|
|
boss.iGroupID = GGSM_INVALID_GROUP_ID
|
|
boss.iSubGroupID = GGSM_INVALID_GROUP_ID
|
|
boss.eState = GGSM_BOSS_STATE_NONE
|
|
boss.iSummedMaxHPBitSet = 0
|
|
boss.iPatternUsedBitSet = 0
|
|
boss.iMaxPatterns = 5
|
|
|
|
CPRINTLN(DEBUG_MINIGAME, "GGSM_RESET_BOSS_CONTROLLER:", GGSM_BOSS_TYPE_TO_STRING(eType))
|
|
DEBUG_PRINTCALLSTACK()
|
|
ENDPROC
|
|
|
|
FUNC GGSM_SPRITE_TYPE GGSM_GET_BOSS_CONTROLLER_PORTRAIT(GGSM_BOSS_TYPE eType)
|
|
SWITCH (eType)
|
|
CASE GGSM_BOSS_BREAD RETURN GGSM_SPRITE_PIC_BREAD_64
|
|
CASE GGSM_BOSS_DR_DANK RETURN GGSM_SPRITE_PIC_DR_DANK_64
|
|
CASE GGSM_BOSS_GRANANA RETURN GGSM_SPRITE_PIC_GRANANA_64
|
|
CASE GGSM_BOSS_MARINE RETURN GGSM_SPRITE_PIC_MARINE_64
|
|
CASE GGSM_BOSS_SMOOTHIE RETURN GGSM_SPRITE_PIC_SMOOTHIE_64
|
|
ENDSWITCH
|
|
|
|
RETURN GGSM_SPRITE_BOSS_TEXT
|
|
ENDFUNC
|
|
|
|
FUNC BOOL GGSM_LOAD_TEXTURE_DICTS_FOR_BOSS(GGSM_BOSS_TYPE eType)
|
|
IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_PORTRAITS)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
SWITCH (eType)
|
|
CASE GGSM_BOSS_BREAD
|
|
RETURN GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_BOSS_BREAD)
|
|
BREAK
|
|
|
|
CASE GGSM_BOSS_DR_DANK
|
|
RETURN GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_BOSS_DR_DANK)
|
|
BREAK
|
|
|
|
CASE GGSM_BOSS_GRANANA
|
|
RETURN GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_BOSS_GRANANA)
|
|
BREAK
|
|
|
|
CASE GGSM_BOSS_MARINE
|
|
IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_BOSS_MARINE)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_BOSS_ALIEN)
|
|
BREAK
|
|
|
|
CASE GGSM_BOSS_SMOOTHIE
|
|
RETURN GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_BOSS_SMOOTHIE)
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC GGSM_RELEASE_TEXTURE_DICTS_FOR_BOSS(GGSM_BOSS_TYPE eType)
|
|
SWITCH (eType)
|
|
CASE GGSM_BOSS_BREAD
|
|
GGSM_RELEASE_TEXTURE_DICT(GGSM_TEXDICT_BOSS_BREAD)
|
|
BREAK
|
|
|
|
CASE GGSM_BOSS_DR_DANK
|
|
GGSM_RELEASE_TEXTURE_DICT(GGSM_TEXDICT_BOSS_DR_DANK)
|
|
BREAK
|
|
|
|
CASE GGSM_BOSS_GRANANA
|
|
GGSM_RELEASE_TEXTURE_DICT(GGSM_TEXDICT_BOSS_GRANANA)
|
|
BREAK
|
|
|
|
CASE GGSM_BOSS_MARINE
|
|
GGSM_RELEASE_TEXTURE_DICT(GGSM_TEXDICT_BOSS_MARINE)
|
|
GGSM_RELEASE_TEXTURE_DICT(GGSM_TEXDICT_BOSS_ALIEN)
|
|
BREAK
|
|
|
|
CASE GGSM_BOSS_SMOOTHIE
|
|
GGSM_RELEASE_TEXTURE_DICT(GGSM_TEXDICT_BOSS_SMOOTHIE)
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
FUNC INT GGSM_BOSS_CONTROLLER_GET_ACTIVE_PART_COUNT(GGSM_BOSS_CONTROLLER &boss)
|
|
INT i, cnt, ent
|
|
|
|
REPEAT GGSM_MAX_BOSS_PARTS i
|
|
ent = GGSM_BOSS_CONTROLLER_GET_ENTITY_INDEX(boss, i)
|
|
IF (ent != GGSM_INVALID_ENTITY) AND (sGGSMData.sEntities[ent].eState = GGSM_ENTITY_STATE_ALIVE)
|
|
cnt ++
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
RETURN cnt
|
|
ENDFUNC
|
|
|
|
PROC GGSM_BOSS_CONTROLLER_DEACTIVATE_ALL_WEAPONS(GGSM_BOSS_CONTROLLER &boss)
|
|
INT i, ent
|
|
|
|
REPEAT GGSM_MAX_BOSS_PARTS i
|
|
ent = GGSM_BOSS_CONTROLLER_GET_ENTITY_INDEX(boss, i)
|
|
IF (ent != GGSM_INVALID_ENTITY) AND (sGGSMData.sEntities[ent].eState = GGSM_ENTITY_STATE_ALIVE)
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(sGGSMData.sEntities[ent].eFlags, GGSM_ENTITY_BIT_WPN_ACTIVE)
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
PROC GGSM_BOSS_CONTROLLER_DACTIVATE_ALL_WEAPONS(GGSM_BOSS_CONTROLLER &boss)
|
|
INT i, ent
|
|
|
|
REPEAT GGSM_MAX_BOSS_PARTS i
|
|
ent = GGSM_BOSS_CONTROLLER_GET_ENTITY_INDEX(boss, i)
|
|
IF (ent != GGSM_INVALID_ENTITY) AND (sGGSMData.sEntities[ent].eState = GGSM_ENTITY_STATE_ALIVE)
|
|
SET_BITMASK_ENUM_AS_ENUM(sGGSMData.sEntities[ent].eFlags, GGSM_ENTITY_BIT_WPN_ACTIVE)
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
FUNC INT GGSM_BOSS_CONTROLLER_GET_HP(GGSM_BOSS_CONTROLLER &boss)
|
|
INT i, cnt, ent
|
|
|
|
REPEAT GGSM_MAX_BOSS_PARTS i
|
|
ent = GGSM_BOSS_CONTROLLER_GET_ENTITY_INDEX(boss, i)
|
|
IF IS_BIT_SET(boss.iSummedMaxHPBitSet, i)
|
|
IF (ent != GGSM_INVALID_ENTITY) AND (sGGSMData.sEntities[ent].eState = GGSM_ENTITY_STATE_ALIVE)
|
|
cnt += sGGSMData.sEntities[ent].iHP
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
RETURN cnt
|
|
ENDFUNC
|
|
|
|
FUNC FLOAT GGSM_BOSS_CONTROLLER_GET_HP_PERCENTAGE(GGSM_BOSS_CONTROLLER &boss)
|
|
IF (boss.iMaxTotalHP = 0.0)
|
|
RETURN 0.0
|
|
ENDIF
|
|
|
|
RETURN TO_FLOAT(boss.iTotalHP) / TO_FLOAT(boss.iMaxTotalHP)
|
|
ENDFUNC
|
|
|
|
PROC GGSM_ADD_ENTITY_TO_BOSS_CONTROLLER(GGSM_BOSS_CONTROLLER &boss, GGSM_ENTITY &ent, INT iIndex, BOOL bContributeToMaxHP = TRUE)
|
|
INT iEntity = GGSM_BOSS_CONTROLLER_GET_ENTITY_INDEX(boss, iIndex)
|
|
|
|
IF (iEntity = GGSM_INVALID_ENTITY) AND NOT IS_BITMASK_ENUM_AS_ENUM_SET(ent.eFlags, GGSM_ENTITY_BIT_IS_PLAYER_ALLIED)
|
|
GGSM_BOSS_CONTROLLER_SET_ENTITY_INDEX(boss, iIndex, GGSM_ENTITY_GET_ARRAY_INDEX(ent))
|
|
|
|
IF (bContributeToMaxHP)
|
|
boss.iMaxTotalHP += ent.iHP
|
|
SET_BIT(boss.iSummedMaxHPBitSet, iIndex)
|
|
ENDIF
|
|
|
|
IF (boss.eState = GGSM_BOSS_STATE_NONE)
|
|
GGSM_BOSS_CONTROLLER_SET_STATE(boss, GGSM_BOSS_STATE_ARRIVE)
|
|
ENDIF
|
|
|
|
SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eStageFlags, GGSM_STAGE_BIT_BOSSES_ACTIVE)
|
|
SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eStageFlags, GGSM_STAGE_BIT_BRING_CAMERA_TO_STOP)
|
|
|
|
IF (iIndex = 0)
|
|
SET_BITMASK_ENUM_AS_ENUM(ent.eFlags, GGSM_ENTITY_BIT_FORCE_SCROLLING_TO_STOP)
|
|
ENDIF
|
|
|
|
EXIT
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC GGSM_RESET_BOSS_CONTROLLER_ARRAY(GGSM_BOSS_CONTROLLER &boss[])
|
|
INT i
|
|
|
|
REPEAT COUNT_OF(boss) i
|
|
GGSM_RESET_BOSS_CONTROLLER(boss[i])
|
|
ENDREPEAT
|
|
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(sGGSMData.eStageFlags, GGSM_STAGE_BIT_BOSSES_ACTIVE)
|
|
ENDPROC
|
|
|
|
//-------------------------------------------------
|
|
// SCRIPT EXPORT FUNCTIONS
|
|
//-------------------------------------------------
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
/// PURPOSE:
|
|
/// Exports a Tile Collison Definiation to script
|
|
/// PARAMS:
|
|
/// data -
|
|
/// bOpenAndCloseFile -
|
|
PROC GGSM_DEBUG_EXPORT_TILE_COLLISION_DEFINITION_TO_SCRIPT(GGSM_TILE_COLLISION_DATA &data, BOOL bOpenAndCloseFile = TRUE)
|
|
INT i
|
|
VECTOR_2D vec
|
|
|
|
IF (bOpenAndCloseFile)
|
|
OPEN_DEBUG_FILE()
|
|
ENDIF
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE(" // Tile Collision Data")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE(" data.eType = ")
|
|
SAVE_STRING_TO_DEBUG_FILE(GGSM_TILE_COLLISION_TYPE_TO_STRING(data.eType))
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
REPEAT data.iNumPoints i
|
|
vec = GGSM_TILE_COLLISION_DATA_GET_COLLISION_VECTOR(data, i)
|
|
SAVE_STRING_TO_DEBUG_FILE(" GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, ")
|
|
SAVE_INT_TO_DEBUG_FILE(i)
|
|
SAVE_STRING_TO_DEBUG_FILE(", ")
|
|
SAVE_FLOAT_TO_DEBUG_FILE(vec.x)
|
|
SAVE_STRING_TO_DEBUG_FILE(", ")
|
|
SAVE_FLOAT_TO_DEBUG_FILE(vec.y)
|
|
SAVE_STRING_TO_DEBUG_FILE(")")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
ENDREPEAT
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE(" data.iNumPoints = ")
|
|
SAVE_INT_TO_DEBUG_FILE(data.iNumPoints)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
IF (bOpenAndCloseFile)
|
|
CLOSE_DEBUG_FILE()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Exports Tile Collison Array to script
|
|
/// PARAMS:
|
|
/// array -
|
|
/// iCount - # of elements to export
|
|
PROC GGSM_DEBUG_EXPORT_TILE_COLLISION_ARRAY_TO_SCRIPT(GGSM_TILE_COLLISION_DATA &array[], INT iCount = 0, BOOL bReturn = FALSE)
|
|
INT i
|
|
|
|
IF (iCount = 0)
|
|
iCount = COUNT_OF(array)
|
|
ENDIF
|
|
|
|
OPEN_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("// Tile Colliders")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE("SWITCH (iTileIndex)")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
REPEAT iCount i
|
|
SAVE_STRING_TO_DEBUG_FILE("CASE ")
|
|
SAVE_INT_TO_DEBUG_FILE(i)
|
|
SAVE_STRING_TO_DEBUG_FILE(" ")
|
|
GGSM_DEBUG_EXPORT_TILE_COLLISION_DEFINITION_TO_SCRIPT(array[i], FALSE)
|
|
|
|
IF (bReturn)
|
|
SAVE_STRING_TO_DEBUG_FILE("RETURN TRUE")
|
|
ELSE
|
|
SAVE_STRING_TO_DEBUG_FILE("BREAK")
|
|
ENDIF
|
|
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
ENDREPEAT
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE("ENDSWITCH")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
CLOSE_DEBUG_FILE()
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Export Tile Map Data to Script
|
|
/// PARAMS:
|
|
/// tm -
|
|
PROC GGSM_DEBUG_EXPORT_TILE_MAP_DATA_TO_SCRIPT(GGSM_TILEMAP &tm)
|
|
INT x, y, ind
|
|
BOOL bHFlip, bVFlip
|
|
|
|
OPEN_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("// Tile Map Dimensions")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE("data.iMapWidth = ")
|
|
SAVE_INT_TO_DEBUG_FILE(tm.iMapWidth)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE("data.iMapHeight = ")
|
|
SAVE_INT_TO_DEBUG_FILE(tm.iMapHeight)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE("data.iMaxTiles = ")
|
|
SAVE_INT_TO_DEBUG_FILE(tm.iMaxTiles)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE("data.fTileSize = ")
|
|
SAVE_FLOAT_TO_DEBUG_FILE(tm.fTileSize)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE("data.fTileDrawSize = ")
|
|
SAVE_FLOAT_TO_DEBUG_FILE(tm.fTileDrawSize)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE("data.bWrapped = ")
|
|
IF (tm.bWrapped)
|
|
SAVE_STRING_TO_DEBUG_FILE("TRUE")
|
|
ELSE
|
|
SAVE_STRING_TO_DEBUG_FILE("FALSE")
|
|
ENDIF
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE("// Tile Directories")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("data.sTileDirectory = \"")
|
|
SAVE_STRING_TO_DEBUG_FILE(tm.sTileDirectory)
|
|
SAVE_STRING_TO_DEBUG_FILE("\"")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE("data.sTileSetBaseName = \"")
|
|
SAVE_STRING_TO_DEBUG_FILE(tm.sTileSetBaseName)
|
|
SAVE_STRING_TO_DEBUG_FILE("\"")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE("// Tile Map Data")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
REPEAT tm.iMapHeight y
|
|
REPEAT tm.iMapWidth x
|
|
IF GGSM_TILEMAP_GET_DATA(tm, x, y, ind, bHFlip, bVFlip)
|
|
IF (ind != 0)
|
|
SAVE_STRING_TO_DEBUG_FILE("GGSM_TILEMAP_SET_DATA(data, ")
|
|
SAVE_INT_TO_DEBUG_FILE(x)
|
|
SAVE_STRING_TO_DEBUG_FILE(", ")
|
|
SAVE_INT_TO_DEBUG_FILE(y)
|
|
SAVE_STRING_TO_DEBUG_FILE(", ")
|
|
SAVE_INT_TO_DEBUG_FILE(ind)
|
|
|
|
IF (bHFlip)
|
|
SAVE_STRING_TO_DEBUG_FILE(", TRUE")
|
|
ELSE
|
|
SAVE_STRING_TO_DEBUG_FILE(", FALSE")
|
|
ENDIF
|
|
|
|
IF (bVFlip)
|
|
SAVE_STRING_TO_DEBUG_FILE(", TRUE")
|
|
ELSE
|
|
SAVE_STRING_TO_DEBUG_FILE(", FALSE")
|
|
ENDIF
|
|
SAVE_STRING_TO_DEBUG_FILE(")")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDREPEAT
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
CLOSE_DEBUG_FILE()
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Exports a Spawn Definition to script
|
|
/// PARAMS:
|
|
/// data -
|
|
/// bOpenAndCloseFile -
|
|
PROC GGSM_DEBUG_EXPORT_FORMATION_TO_SCRIPT(GGSM_FORMATION_DATA &data, BOOL bOpenAndCloseFile = TRUE)
|
|
//INT i
|
|
VECTOR_2D vec
|
|
|
|
IF (bOpenAndCloseFile)
|
|
OPEN_DEBUG_FILE()
|
|
ENDIF
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE(" // Formation Data")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE(" GGSM_FORMATION_SET_TYPE(data, ")
|
|
SAVE_STRING_TO_DEBUG_FILE(GGSM_FORMATION_TYPE_TO_STRING(GGSM_FORMATION_GET_TYPE(data)))
|
|
SAVE_STRING_TO_DEBUG_FILE(")")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
vec = GGSM_FORMATION_GET_START_POSITION(data)
|
|
SAVE_STRING_TO_DEBUG_FILE(" GGSM_FORMATION_SET_START_POSITION(data, ")
|
|
SAVE_FLOAT_TO_DEBUG_FILE(vec.x)
|
|
SAVE_STRING_TO_DEBUG_FILE(", ")
|
|
SAVE_FLOAT_TO_DEBUG_FILE(vec.y)
|
|
SAVE_STRING_TO_DEBUG_FILE(")")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
vec = GGSM_FORMATION_GET_START_DIRECTION(data)
|
|
SAVE_STRING_TO_DEBUG_FILE(" GGSM_FORMATION_SET_START_DIRECTION(data, ")
|
|
SAVE_FLOAT_TO_DEBUG_FILE(vec.x)
|
|
SAVE_STRING_TO_DEBUG_FILE(", ")
|
|
SAVE_FLOAT_TO_DEBUG_FILE(vec.y)
|
|
SAVE_STRING_TO_DEBUG_FILE(")")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE(" GGSM_FORMATION_SET_SCROLL_DISTANCE(data, ")
|
|
SAVE_FLOAT_TO_DEBUG_FILE(GGSM_FORMATION_GET_SCROLL_DISTANCE(data))
|
|
SAVE_STRING_TO_DEBUG_FILE(")")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
IF (GGSM_FORMATION_GET_TYPE(data) = GGSM_FORMATION_POWER_UP)
|
|
SAVE_STRING_TO_DEBUG_FILE(" GGSM_FORMATION_SET_POWER_UP_SPRITE(data, ")
|
|
SAVE_STRING_TO_DEBUG_FILE(GGSM_SPRITE_TYPE_TO_STRING(GGSM_FORMATION_GET_POWER_UP_SPRITE(data)))
|
|
SAVE_STRING_TO_DEBUG_FILE(")")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
ELSE
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE(" GGSM_FORMATION_SET_ENTITY_TYPE(data, ")
|
|
SAVE_STRING_TO_DEBUG_FILE(GGSM_ENTITY_TYPE_TO_STRING(GGSM_FORMATION_GET_ENTITY_TYPE(data)))
|
|
SAVE_STRING_TO_DEBUG_FILE(")")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE(" GGSM_FORMATION_SET_MOVEMENT_TYPE(data, ")
|
|
SAVE_STRING_TO_DEBUG_FILE(GGSM_MOVEMENT_TYPE_TO_STRING(GGSM_FORMATION_GET_MOVEMENT_TYPE(data)))
|
|
SAVE_STRING_TO_DEBUG_FILE(")")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE(" GGSM_FORMATION_SET_WEAPON_TYPE(data, ")
|
|
SAVE_STRING_TO_DEBUG_FILE(GGSM_WEAPON_TYPE_TO_STRING(GGSM_FORMATION_GET_WEAPON_TYPE(data)))
|
|
SAVE_STRING_TO_DEBUG_FILE(")")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE(" GGSM_FORMATION_SET_PATH_INDEX(data, ")
|
|
SAVE_INT_TO_DEBUG_FILE(GGSM_FORMATION_GET_PATH_INDEX(data))
|
|
SAVE_STRING_TO_DEBUG_FILE(")")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
vec = GGSM_FORMATION_GET_SPACING(data)
|
|
SAVE_STRING_TO_DEBUG_FILE(" GGSM_FORMATION_SET_SPACING(data, ")
|
|
SAVE_FLOAT_TO_DEBUG_FILE(vec.x)
|
|
SAVE_STRING_TO_DEBUG_FILE(", ")
|
|
SAVE_FLOAT_TO_DEBUG_FILE(vec.y)
|
|
SAVE_STRING_TO_DEBUG_FILE(")")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
ENDIF
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE(" GGSM_FORMATION_SET_MEMBER_COUNT(data, ")
|
|
SAVE_INT_TO_DEBUG_FILE(GGSM_FORMATION_GET_MEMBER_COUNT(data))
|
|
SAVE_STRING_TO_DEBUG_FILE(")")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
IF (bOpenAndCloseFile)
|
|
CLOSE_DEBUG_FILE()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Exports Spawn Array to script
|
|
/// PARAMS:
|
|
/// array -
|
|
/// iCount - # of elements to export
|
|
PROC GGSM_DEBUG_EXPORT_FORMATION_ARRAY_TO_SCRIPT(GGSM_FORMATION_DATA &array[], INT iCount = 0, BOOL bReturn = FALSE)
|
|
INT i
|
|
INT n = 0
|
|
|
|
IF (iCount <= 0)
|
|
iCount = COUNT_OF(array)
|
|
ENDIF
|
|
|
|
OPEN_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("// Formation Definitions")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE("SWITCH (iSpawnIndex)")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
REPEAT iCount i
|
|
IF NOT GGSM_FORMATION_IS_VALID(array[i])
|
|
RELOOP
|
|
ENDIF
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE("CASE ")
|
|
SAVE_INT_TO_DEBUG_FILE(n)
|
|
SAVE_STRING_TO_DEBUG_FILE(" ")
|
|
GGSM_DEBUG_EXPORT_FORMATION_TO_SCRIPT(array[n], FALSE)
|
|
|
|
IF (bReturn)
|
|
SAVE_STRING_TO_DEBUG_FILE("RETURN TRUE")
|
|
ELSE
|
|
SAVE_STRING_TO_DEBUG_FILE("BREAK")
|
|
ENDIF
|
|
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
n ++
|
|
ENDREPEAT
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE("ENDSWITCH")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
CLOSE_DEBUG_FILE()
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Exports a Spawn Definition to script
|
|
/// PARAMS:
|
|
/// data -
|
|
/// bOpenAndCloseFile -
|
|
PROC GGSM_DEBUG_EXPORT_PATH_TO_SCRIPT(GGSM_PATH_DATA &data, BOOL bOpenAndCloseFile = TRUE)
|
|
INT i, numpts
|
|
VECTOR_2D vec
|
|
|
|
IF (bOpenAndCloseFile)
|
|
OPEN_DEBUG_FILE()
|
|
ENDIF
|
|
|
|
numpts = GGSM_PATH_DATA_GET_NUM_POINTS(data)
|
|
SAVE_STRING_TO_DEBUG_FILE(" // Path Data")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE(" GGSM_PATH_DATA_SET_NUM_POINTS(data, ")
|
|
SAVE_INT_TO_DEBUG_FILE(GGSM_PATH_DATA_GET_NUM_POINTS(data))
|
|
SAVE_STRING_TO_DEBUG_FILE(")")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
REPEAT numpts i
|
|
vec = GGSM_PATH_DATA_GET_POINT(data, i)
|
|
SAVE_STRING_TO_DEBUG_FILE(" GGSM_PATH_DATA_SET_POINT(data, ")
|
|
SAVE_INT_TO_DEBUG_FILE(i)
|
|
SAVE_STRING_TO_DEBUG_FILE(", ")
|
|
SAVE_FLOAT_TO_DEBUG_FILE(vec.x)
|
|
SAVE_STRING_TO_DEBUG_FILE(", ")
|
|
SAVE_FLOAT_TO_DEBUG_FILE(vec.y)
|
|
SAVE_STRING_TO_DEBUG_FILE(")")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
ENDREPEAT
|
|
|
|
IF (bOpenAndCloseFile)
|
|
CLOSE_DEBUG_FILE()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Exports Spawn Array to script
|
|
/// PARAMS:
|
|
/// array -
|
|
/// iCount - # of elements to export
|
|
PROC GGSM_DEBUG_EXPORT_PATH_ARRAY_TO_SCRIPT(GGSM_PATH_DATA &array[], INT iCount = 0, BOOL bReturn = FALSE)
|
|
INT i
|
|
INT n = 0
|
|
|
|
IF (iCount <= 0)
|
|
iCount = COUNT_OF(array)
|
|
ENDIF
|
|
|
|
OPEN_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("// Path Definitions")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE("SWITCH (iPathIndex)")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
REPEAT iCount i
|
|
IF (GGSM_PATH_DATA_GET_NUM_POINTS(array[i]) = 0)
|
|
RELOOP
|
|
ENDIF
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE("CASE ")
|
|
SAVE_INT_TO_DEBUG_FILE(n)
|
|
SAVE_STRING_TO_DEBUG_FILE(" ")
|
|
GGSM_DEBUG_EXPORT_PATH_TO_SCRIPT(array[n], FALSE)
|
|
|
|
IF (bReturn)
|
|
SAVE_STRING_TO_DEBUG_FILE("RETURN TRUE")
|
|
ELSE
|
|
SAVE_STRING_TO_DEBUG_FILE("BREAK")
|
|
ENDIF
|
|
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
n ++
|
|
ENDREPEAT
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE("ENDSWITCH")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
CLOSE_DEBUG_FILE()
|
|
ENDPROC
|
|
|
|
#ENDIF
|
|
|