//------------------------------------------------- // File: ggsm_arcade_main.sch // Purpose: the game itself //------------------------------------------------- //------------------------------------------------- // INCLUDES //------------------------------------------------- USING "ggsm_structs.sch" USING "ggsm_maths.sch" USING "ggsm_helpers.sch" USING "ggsm_drawing.sch" USING "ggsm_entity.sch" //------------------------------------------------- // SPECIAL WEAPON FUNCTIONS //------------------------------------------------- PROC GGSM_UPDATE_SPECIAL_WEAPON_DECOY(GGSM_SPWEAPON_DATA &data) INT a VECTOR_2D vPos SWITCH (data.eState) CASE GGSM_SPWEAPON_LAUNCH vPos = sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].sWorld.vPosition GGSM_PLAYER_DECOY_INIT(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].sWorld.vPosition) data.fTimer = GGSM_DECOY_ACTIVE_TIME data.eState = GGSM_SPWEAPON_ACTIVE GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_ABIL_PLAYER_ACTIVATE_DECOY, vPos) BREAK CASE GGSM_SPWEAPON_ACTIVE a = FLOOR((data.fTimer / GGSM_DECOY_ACTIVE_TIME) * 128.0) ARCADE_GAMES_SOUND_PLAY_LOOP(ARCADE_GAMES_SOUND_GGSM_ABIL_PLAYER_DECOY_LOOP) IF GGSM_DOES_PLAYER_DECOY_EXIST() GGSM_SET_PACKED_A_COLOR(sGGSMData.sEntities[sGGSMData.iPlayerDecoyIndex].iPackedColor, a) ELSE data.eState = GGSM_SPWEAPON_COOLDOWN EXIT ENDIF IF (data.fTimer < 0) vPos = sGGSMData.sEntities[sGGSMData.iPlayerDecoyIndex].sWorld.vPosition ARCADE_GAMES_SOUND_STOP(ARCADE_GAMES_SOUND_GGSM_ABIL_PLAYER_DECOY_LOOP) GGSM_ENTITY_DESTROY(sGGSMData.sEntities[sGGSMData.iPlayerDecoyIndex]) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_ABIL_PLAYER_DEACTIVATE_DECOY, vPos) data.eState = GGSM_SPWEAPON_COOLDOWN ENDIF BREAK CASE GGSM_SPWEAPON_COOLDOWN IF GGSM_DOES_PLAYER_DECOY_EXIST() GGSM_ENTITY_DESTROY(sGGSMData.sEntities[sGGSMData.iPlayerDecoyIndex]) ENDIF ARCADE_GAMES_SOUND_STOP(ARCADE_GAMES_SOUND_GGSM_ABIL_PLAYER_DECOY_LOOP) data.eState = GGSM_SPWEAPON_INACTIVE BREAK ENDSWITCH ENDPROC PROC GGSM_UPDATE_SPECIAL_WEAPON_NUKE(GGSM_SPWEAPON_DATA &data) INT iDead SWITCH (data.eState) CASE GGSM_SPWEAPON_LAUNCH GGSM_SET_PLAYER_INVUNERABLE() GGSM_PLAY_SOUND(ARCADE_GAMES_SOUND_GGSM_ABIL_PLAYER_ACTIVATE_NUKE) data.eState = GGSM_SPWEAPON_DETONATE BREAK CASE GGSM_SPWEAPON_DETONATE GGSM_FADE_TO_WHITE(0.125) data.eState = GGSM_SPWEAPON_ACTIVE BREAK CASE GGSM_SPWEAPON_ACTIVE IF GGSM_IS_SCREEN_WHITED_OUT() iDead = GGSM_ENTITY_NUKE_ARRAY(sGGSMData.sEntities, FALSE) IF (iDead >= GGSM_KILLS_NEEDED_FOR_NUKE_TSHIRT) //GGSM_UNLOCK_PRIZE(GGSM_UNLOCK_TSHIRTS_GGSM_NUKE) ENDIF GGSM_RESET_PROJECTILE_ARRAY(sGGSMData.sProjectiles) data.eState = GGSM_SPWEAPON_COOLDOWN GGSM_FADE_FROM_WHITE() ENDIF BREAK CASE GGSM_SPWEAPON_COOLDOWN GGSM_FADE_FROM_WHITE() data.eState = GGSM_SPWEAPON_INACTIVE BREAK ENDSWITCH ENDPROC PROC GGSM_UPDATE_SPECIAL_WEAPON_REFLECT(GGSM_SPWEAPON_DATA &data) INT a SWITCH (data.eState) CASE GGSM_SPWEAPON_LAUNCH GGSM_PLAYER_SHIELD_INIT(TRUE) SET_BITMASK_ENUM_AS_ENUM(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].eFlags, GGSM_ENTITY_BIT_REFLECT_BULLETS) data.fTimer = GGSM_REPLUSE_ACTIVE_TIME data.eState = GGSM_SPWEAPON_ACTIVE GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_ABIL_PLAYER_ACTIVATE_REPUSLE, sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].sWorld.vPosition) BREAK CASE GGSM_SPWEAPON_ACTIVE a = FLOOR((data.fTimer / GGSM_REPLUSE_ACTIVE_TIME) * 255.0) IF GGSM_DOES_PLAYER_SHIELD_EXIST() GGSM_SET_PACKED_A_COLOR(sGGSMData.sEntities[sGGSMData.iPlayerShieldIndex].iPackedColor, a) ELSE CLEAR_BITMASK_ENUM_AS_ENUM(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].eFlags, GGSM_ENTITY_BIT_REFLECT_BULLETS) data.eState = GGSM_SPWEAPON_COOLDOWN EXIT ENDIF IF (data.fTimer < 0) OR NOT GGSM_IS_PLAYER_SHIP_ALIVE() CLEAR_BITMASK_ENUM_AS_ENUM(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].eFlags, GGSM_ENTITY_BIT_REFLECT_BULLETS) GGSM_ENTITY_DESTROY(sGGSMData.sEntities[sGGSMData.iPlayerShieldIndex]) data.eState = GGSM_SPWEAPON_COOLDOWN ENDIF BREAK CASE GGSM_SPWEAPON_COOLDOWN CLEAR_BITMASK_ENUM_AS_ENUM(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].eFlags, GGSM_ENTITY_BIT_REFLECT_BULLETS) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_ABIL_PLAYER_DEACTIVATE_REPULSE, sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].sWorld.vPosition) IF GGSM_DOES_PLAYER_SHIELD_EXIST() GGSM_ENTITY_DESTROY(sGGSMData.sEntities[sGGSMData.iPlayerShieldIndex]) ENDIF data.eState = GGSM_SPWEAPON_INACTIVE BREAK ENDSWITCH ENDPROC PROC GGSM_UPDATE_SPECIAL_WEAPON_SHIELD(GGSM_SPWEAPON_DATA &data) INT a SWITCH (data.eState) CASE GGSM_SPWEAPON_LAUNCH GGSM_PLAYER_SHIELD_INIT(FALSE) CLEAR_BITMASK_ENUM_AS_ENUM(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].eFlags, GGSM_ENTITY_BIT_REFLECT_BULLETS) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_ABIL_PLAYER_ACTIVATE_SHIELD, sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].sWorld.vPosition) data.eState = GGSM_SPWEAPON_ACTIVE BREAK CASE GGSM_SPWEAPON_ACTIVE IF GGSM_DOES_PLAYER_SHIELD_EXIST() a = FLOOR(GGSM_ENTITY_GET_HP_PERCENTAGE(sGGSMData.sEntities[sGGSMData.iPlayerShieldIndex]) * 255.0) GGSM_SET_PACKED_A_COLOR(sGGSMData.sEntities[sGGSMData.iPlayerShieldIndex].iPackedColor, a) ELSE data.eState = GGSM_SPWEAPON_COOLDOWN ENDIF BREAK CASE GGSM_SPWEAPON_COOLDOWN IF GGSM_DOES_PLAYER_SHIELD_EXIST() GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_ABIL_PLAYER_DEACTIVATE_SHIELD, sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].sWorld.vPosition) GGSM_ENTITY_DESTROY(sGGSMData.sEntities[sGGSMData.iPlayerShieldIndex]) ENDIF data.eState = GGSM_SPWEAPON_INACTIVE BREAK ENDSWITCH ENDPROC PROC GGSM_UPDATE_SPECIAL_WEAPON_TEMPORAL(GGSM_SPWEAPON_DATA &data) SWITCH (data.eState) CASE GGSM_SPWEAPON_LAUNCH data.fTimer = GGSM_TEMPORAL_ACTIVE_TIME data.eState = GGSM_SPWEAPON_ACTIVE GGSM_PLAY_SOUND(ARCADE_GAMES_SOUND_GGSM_ABIL_PLAYER_ACTIVATE_STUN) BREAK CASE GGSM_SPWEAPON_ACTIVE sGGSMData.fTimeScale -= (GET_FRAME_TIME() / 2.0) IF (sGGSMData.fTimeScale < GGSM_TEMPORAL_TIME_SCALE) sGGSMData.fTimeScale = GGSM_TEMPORAL_TIME_SCALE ENDIF IF (data.fTimer < 0.0) OR NOT GGSM_IS_PLAYER_SHIP_ALIVE() GGSM_PLAY_SOUND(ARCADE_GAMES_SOUND_GGSM_ABIL_PLAYER_DEACTIVATE_STUN) data.eState = GGSM_SPWEAPON_COOLDOWN ENDIF BREAK CASE GGSM_SPWEAPON_COOLDOWN sGGSMData.fTimeScale += (GET_FRAME_TIME() / 2.0) IF (sGGSMData.fTimeScale >= 1.0) sGGSMData.fTimeScale = 1.0 data.eState = GGSM_SPWEAPON_INACTIVE ENDIF BREAK ENDSWITCH ENDPROC FUNC BOOL GGSM_GET_FREE_SPECIAL_WEAPON_SLOT(GGSM_SPWEAPON_DATA &array[], INT &ind) INT i REPEAT COUNT_OF(array) i IF (array[i].eState = GGSM_SPWEAPON_INACTIVE) ind = i RETURN TRUE ENDIF ENDREPEAT RETURN FALSE ENDFUNC FUNC BOOL GGSM_DEPLOY_SPECIAL_WEAPON(GGSM_SPECIAL_WEAPON_TYPE eType) INT ind IF NOT GGSM_GET_FREE_SPECIAL_WEAPON_SLOT(sGGSMData.sSpWeaponData, ind) RETURN FALSE ENDIF sGGSMData.sSpWeaponData[ind].eType = eType sGGSMData.sSpWeaponData[ind].eState = GGSM_SPWEAPON_LAUNCH RETURN TRUE ENDFUNC PROC GGSM_UPDATE_SPECIAL_WEAPON(GGSM_SPWEAPON_DATA &spr) IF (spr.eType = GGSM_SPECIAL_WEAPON_NONE) EXIT ENDIF IF (spr.fTimer > 0.0) spr.fTimer -= GET_FRAME_TIME() ENDIF SWITCH (spr.eType) CASE GGSM_SPECIAL_WEAPON_DECOY GGSM_UPDATE_SPECIAL_WEAPON_DECOY(spr) BREAK CASE GGSM_SPECIAL_WEAPON_NUKE GGSM_UPDATE_SPECIAL_WEAPON_NUKE(spr) BREAK CASE GGSM_SPECIAL_WEAPON_REFLECT GGSM_UPDATE_SPECIAL_WEAPON_REFLECT(spr) BREAK CASE GGSM_SPECIAL_WEAPON_SHIELD GGSM_UPDATE_SPECIAL_WEAPON_SHIELD(spr) BREAK CASE GGSM_SPECIAL_WEAPON_TEMPORAL GGSM_UPDATE_SPECIAL_WEAPON_TEMPORAL(spr) BREAK ENDSWITCH ENDPROC PROC GGSM_UPDATE_SPECIAL_WEAPON_ARRAY(GGSM_SPWEAPON_DATA &array[]) INT i REPEAT COUNT_OF(array) i GGSM_UPDATE_SPECIAL_WEAPON(array[i]) ENDREPEAT ENDPROC //------------------------------------------------- // POWER UP FUNCTIONS //------------------------------------------------- PROC GGSM_SET_WEAPON_IN_SLOT(GGSM_SPRITE_TYPE eType, INT iSlot) // handle help IF (iSlot = GGSM_WEAPON_SLOT_SPECIAL) AND NOT IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eHelpFlags, GGSM_HELP_BIT_SPECIAL) IF GGSM_SHOULD_SHOW_TUTORIAL(GGSM_HELP_BIT_SPECIAL) ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_GGSM_SPECIALWPN) ENDIF SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eHelpFlags, GGSM_HELP_BIT_SPECIAL) ENDIF IF (iSlot = GGSM_WEAPON_SLOT_DEFENSE) AND NOT IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eHelpFlags, GGSM_HELP_BIT_DEFENSE) IF GGSM_SHOULD_SHOW_TUTORIAL(GGSM_HELP_BIT_DEFENSE) ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_GGSM_DEFENSEWPN) ENDIF SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eHelpFlags, GGSM_HELP_BIT_DEFENSE) ENDIF sGGSMData.eWeaponSlot[iSlot] = eType ENDPROC PROC GGSM_USE_WEAPON_IN_SLOT(INT iSlot) INT iSlotCheck IF NOT GGSM_GET_FREE_SPECIAL_WEAPON_SLOT(sGGSMData.sSpWeaponData, iSlotCheck) EXIT ENDIF SWITCH (sGGSMData.eWeaponSlot[iSlot]) CASE GGSM_SPRITE_POWER_UP_STUN GGSM_DEPLOY_SPECIAL_WEAPON(GGSM_SPECIAL_WEAPON_TEMPORAL) BREAK CASE GGSM_SPRITE_POWER_UP_NUKE GGSM_DEPLOY_SPECIAL_WEAPON(GGSM_SPECIAL_WEAPON_NUKE) BREAK CASE GGSM_SPRITE_POWER_UP_DECOY GGSM_DEPLOY_SPECIAL_WEAPON(GGSM_SPECIAL_WEAPON_DECOY) BREAK CASE GGSM_SPRITE_POWER_UP_SHIELD GGSM_DEPLOY_SPECIAL_WEAPON(GGSM_SPECIAL_WEAPON_SHIELD) BREAK CASE GGSM_SPRITE_POWER_UP_REPULSE GGSM_DEPLOY_SPECIAL_WEAPON(GGSM_SPECIAL_WEAPON_REFLECT) BREAK ENDSWITCH sGGSMData.eWeaponSlot[iSlot] = GGSM_SPRITE_NONE ENDPROC PROC GGSM_APPLY_POWER_UP(GGSM_POWER_UP &pType) IF NOT GGSM_DOES_PLAYER_SHIP_EXIST() EXIT ENDIF VECTOR_2D vShipPos = sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].sWorld.vPosition SWITCH (pType.eType) CASE GGSM_SPRITE_POWER_UP_DUALARCH GGSM_ENTITY_SET_WEAPON(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex], GGSM_WEAPON_PLYRDUALARCH) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_PICKUP_DOUBLE, vShipPos) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_MONKEY_VOICE_COLLECT_POWERUP, vShipPos) BREAK CASE GGSM_SPRITE_POWER_UP_FORWARD_BACK GGSM_ENTITY_SET_WEAPON(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex], GGSM_WEAPON_PLYRBACKVULCAN) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_PICKUP_BOLT, vShipPos) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_MONKEY_VOICE_COLLECT_POWERUP, vShipPos) BREAK CASE GGSM_SPRITE_POWER_UP_DECOY GGSM_SET_WEAPON_IN_SLOT(GGSM_SPRITE_POWER_UP_DECOY, GGSM_WEAPON_SLOT_DEFENSE) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_PICKUP_DECOY, vShipPos) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_MONKEY_VOICE_COLLECT_POWERUP, vShipPos) BREAK CASE GGSM_SPRITE_POWER_UP_EXPLOSION GGSM_ENTITY_SET_WEAPON(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex], GGSM_WEAPON_PLYREXPSHELL) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_PICKUP_EXPLOSION, vShipPos) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_MONKEY_VOICE_COLLECT_POWERUP, vShipPos) BREAK CASE GGSM_SPRITE_POWER_UP_EXTRALIFE GGSM_GIVE_EXTRA_LIFE() BREAK CASE GGSM_SPRITE_POWER_UP_HEALTH GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_MONKEY_VOICE_COLLECT_POWERUP, vShipPos) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_PICKUP_HEALTH, vShipPos) IF GGSM_ENTITY_IS_AT_FULL_HEALTH(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex]) GGSM_INCREASE_PLAYER_SCORE(GGSM_POINTS_FOR_FULL_HEALTH) ELSE GGSM_ENTITY_RESET_HEALTH(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex]) ENDIF BREAK CASE GGSM_SPRITE_POWER_UP_NUKE GGSM_SET_WEAPON_IN_SLOT(GGSM_SPRITE_POWER_UP_NUKE, GGSM_WEAPON_SLOT_SPECIAL) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_PICKUP_NUKE, vShipPos) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_MONKEY_VOICE_COLLECT_POWERUP, vShipPos) BREAK CASE GGSM_SPRITE_POWER_UP_REPULSE GGSM_SET_WEAPON_IN_SLOT(GGSM_SPRITE_POWER_UP_REPULSE, GGSM_WEAPON_SLOT_DEFENSE) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_PICKUP_REPULSE, vShipPos) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_MONKEY_VOICE_COLLECT_POWERUP, vShipPos) BREAK CASE GGSM_SPRITE_POWER_UP_ROCKET GGSM_ENTITY_SET_WEAPON(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex], GGSM_WEAPON_PLYRHOMINGROCKET) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_PICKUP_ROCKET, vShipPos) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_MONKEY_VOICE_COLLECT_POWERUP, vShipPos) BREAK CASE GGSM_SPRITE_POWER_UP_SCATTER GGSM_ENTITY_SET_WEAPON(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex], GGSM_WEAPON_PLYRSCATTER) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_PICKUP_SCATTER, vShipPos) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_MONKEY_VOICE_COLLECT_POWERUP, vShipPos) BREAK CASE GGSM_SPRITE_POWER_UP_SHIELD GGSM_SET_WEAPON_IN_SLOT(GGSM_SPRITE_POWER_UP_SHIELD, GGSM_WEAPON_SLOT_DEFENSE) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_PICKUP_SHIELD, vShipPos) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_MONKEY_VOICE_COLLECT_POWERUP, vShipPos) BREAK CASE GGSM_SPRITE_POWER_UP_STUN GGSM_SET_WEAPON_IN_SLOT(GGSM_SPRITE_POWER_UP_STUN, GGSM_WEAPON_SLOT_SPECIAL) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_PICKUP_STUN, vShipPos) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_MONKEY_VOICE_COLLECT_POWERUP, vShipPos) BREAK CASE GGSM_SPRITE_POWER_UP_WAVE GGSM_ENTITY_SET_WEAPON(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex], GGSM_WEAPON_PLYRWAVEBLASTER) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_PICKUP_WAVE, vShipPos) GGSM_PLAY_SOUND_FROM_POSITION(ARCADE_GAMES_SOUND_GGSM_MONKEY_VOICE_COLLECT_POWERUP, vShipPos) BREAK ENDSWITCH GGSM_INCREASE_PLAYER_SCORE(100) sGGSMData.sGameStats.powerUps ++ CDEBUG1LN(DEBUG_MINIGAME, "GGSM_APPLY_POWER_UP - TYPE:", GGSM_GET_SPRITE_NAME(pType.eType)) pType.eType = GGSM_SPRITE_NONE ENDPROC PROC GGSM_UPDATE_POWER_UP(GGSM_POWER_UP &pType) VECTOR_2D vPos VECTOR_2D vSize FLOAT fDistSq IF (pType.eType = GGSM_SPRITE_NONE) EXIT ENDIF #IF IS_DEBUG_BUILD IF (sGGSMData.bDebugNoPowerUps) pType.eType = GGSM_SPRITE_NONE EXIT ENDIF #ENDIF // move power up vPos = GGSM_UNPACK_VECTOR_2D(pType.iPackedPosition) vSize = GGSM_GET_SPRITE_SIZE(GGSM_SPRITE_POWER_UP_BEAM) vPos.x -= GGSM_POWER_UP_SPEED * sGGSMData.fTimeScale * sGGSMData.fDeltaTime IF (vPos.x < 1500.0) IF NOT GGSM_IS_POINT_ON_SCREEN(vPos, vSize) CDEBUG1LN(DEBUG_MINIGAME, "GGSM_UPDATE_POWER_UP - TYPE:", GGSM_GET_SPRITE_NAME(pType.eType), " OFF SCREEN") pType.eType = GGSM_SPRITE_NONE EXIT ENDIF ENDIF IF NOT GGSM_IS_PLAYER_SHIP_ALIVE() EXIT ENDIF // handle power up collision pType.iPackedPosition = GGSM_PACK_VECTOR_2D_TO_INT(vPos) fDistSq = VECTOR_2D_DIST2(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].sCollider.sAABB.vCenter, vPos) IF (fDistSq <= (500.0 * 500.0)) IF GGSM_SHOULD_SHOW_TUTORIAL(GGSM_HELP_BIT_POWERUP) ARCADE_GAMES_HELP_TEXT_CLEAR() ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_GGSM_COLLECTPOWERUP) ENDIF SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eHelpFlags, GGSM_HELP_BIT_POWERUP) ENDIF IF (fDistSq <= (vSize.x * vSize.x)) SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eHelpFlags, GGSM_HELP_BIT_POWERUP) GGSM_APPLY_POWER_UP(pType) sGGSMData.bPowerUpCollected = TRUE ENDIF ENDPROC PROC GGSM_UPDATE_POWER_UP_ARRAY(GGSM_POWER_UP &pArray[]) INT i REPEAT COUNT_OF(pArray) i GGSM_UPDATE_POWER_UP(pArray[i]) ENDREPEAT ENDPROC //------------------------------------------------- // ENEMY SPAWNER //------------------------------------------------- PROC GGSM_RESET_ENEMY_SPAWNER() sGGSMData.iSpawnIndexCounter = 0 sGGSMData.iEnemiesCreated = 0 sGGSMData.iEnemiesDestroyed = 0 sGGSMData.fChainMultiplier = 0.0 ENDPROC PROC GGSM_UPDATE_ENEMY_SPAWNER() INT iGroupID = -1 #IF IS_DEBUG_BUILD IF (sGGSMData.bDebugDisableEnemySpawn) EXIT ENDIF #ENDIF // update spawner IF (sGGSMData.iSpawnIndexCounter >= GGSM_MAX_SPAWN_DATA) EXIT ENDIF GGSM_FORMATION_DATA data = sGGSMData.sSpawnData[sGGSMData.iSpawnIndexCounter] IF (sGGSMData.sCamera.fDistTravelled < data.fScrollDistance) OR (data.fScrollDistance <= 0.0) EXIT ENDIF iGroupID = GGSM_GET_FREE_ENTITY_GROUP(sGGSMData.sEntityGroup) IF (iGroupID = -1) CPRINTLN(DEBUG_MINIGAME, "GGSM_UPDATE_ENEMY_SPAWNER - CAN'T GET FREE GROUP") EXIT ENDIF GGSM_ACTIVATE_ENTITY_GROUP_AS_FORMATION(sGGSMData.sEntityGroup[iGroupID], data) sGGSMData.iSpawnIndexCounter ++ ENDPROC PROC GGSM_RESET_FOR_STAGE_START(BOOL bResetStageData = TRUE, FLOAT fSkipDist = 0.0) CPRINTLN(DEBUG_MINIGAME, "GGSM_RESET_FOR_STAGE_START - Reset Stage Data:", GET_STRING_FROM_BOOL(bResetStageData)) GGSM_RESET_ENTITY_ARRAY(sGGSMData.sEntities) GGSM_RESET_PROJECTILE_ARRAY(sGGSMData.sProjectiles) GGSM_RESET_ENTITY_DEPTHSORT_ARRAY() GGSM_DIALOG_CONTROLLER_SET_STATE(sGGSMData.sDialogController, GGSM_DIALOG_STATE_NONE) GGSM_RESET_ENTITY_GROUP_ARRAY(sGGSMData.sEntityGroup) GGSM_RESET_FXSPRITE_ARRAY(sGGSMData.sFXSprite) GGSM_RESET_POWER_UP_ARRAY(sGGSMData.sPowerUp) GGSM_RESET_SPECIAL_WEAPONS_ARRAY(sGGSMData.sSpWeaponData) GGSM_RESET_BOSS_CONTROLLER_ARRAY(sGGSMData.sBossController) GGSM_RESET_ENEMY_SPAWNER() GGSM_CAMERA_RESET(sGGSMData.sCamera) GGSM_BGSCROLLER_RESET(sGGSMData.sBGScroller, sGGSMData.sGameStats.level) sGGSMData.iSpawnIndexCounter = 0 IF (bResetStageData) GGSM_GET_STAGE_FORMATION_DATA_ARRAY(sGGSMData.sSpawnData, sGGSMData.sGameStats.level) GGSM_GET_STAGE_TILE_MAP(sGGSMData.sTileMap, sGGSMData.sGameStats.level) ENDIF sGGSMData.iPlayerDecoyIndex = GGSM_INVALID_ENTITY sGGSMData.iPlayerShieldIndex = GGSM_INVALID_ENTITY sGGSMData.iPlayerShipIndex = GGSM_INVALID_ENTITY sGGSMData.eStageFlags = GGSM_STAGE_BIT_NONE sGGSMData.iEntitiesActive = 0 sGGSMData.iProjectilesActive = 0 sGGSMData.iSectorBonus = 0 sGGSMData.iTakedownBonus = 0 sGGSMData.iNoMissBonus = GGSM_NO_MISS_CLEAR_BONUS sGGSMData.iNoDamageBonus = GGSM_NO_DAMAGE_CLEAR_BONUS sGGSMData.fChainMultiplier = 0.0 sGGSMData.iGraze = 0 sGGSMData.fGrazeTimer = 0.0 GGSM_CAMERA_JUMP_TO_DISTANCE(sGGSMData.sCamera, fSkipDist) sGGSMData.iSpawnIndexCounter = 0 CPRINTLN(DEBUG_MINIGAME, "GGSM_RESET_FOR_STAGE_START - Spawn Used:", sGGSMData.iSpawnsUsed) ENDPROC PROC GGSM_RESET_FOR_GAME_START() INT i GGSM_RESET_GAME_STATS() sGGSMData.iPlayerLives = 3 sGGSMData.iExtendPtsCounter = 0 sGGSMData.iMaxEntitiesActive = 0 sGGSMData.iMaxGroupsActive = 0 sGGSMData.iMaxProjectilesActive = 0 sGGSMData.bPowerUpCollected = FALSE REPEAT COUNT_OF(sGGSMData.eWeaponSlot) i sGGSMData.eWeaponSlot[i] = GGSM_SPRITE_NONE ENDREPEAT ENDPROC PROC GGSM_PROCESS_PLAYER_VS_ENEMY_COLLISIONS() INT cnt IF (sGGSMData.iPlayerShipIndex = GGSM_INVALID_ENTITY) EXIT ENDIF IF NOT GGSM_ENTITY_HAS_COLLISION(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex]) EXIT ENDIF REPEAT COUNT_OF(sGGSMData.sEntities) cnt IF NOT GGSM_ENTITY_CAN_COLLIDE_WITH(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex], sGGSMData.sEntities[cnt]) RELOOP ENDIF IF GGSM_DOES_PLAYER_SHIELD_EXIST() IF GGSM_COLLIDER_INTERSECT(sGGSMData.sEntities[cnt].sCollider, sGGSMData.sEntities[sGGSMData.iPlayerShieldIndex].sCollider) GGSM_ENTITY_DAMAGE(sGGSMData.sEntities[sGGSMData.iPlayerShieldIndex], 9999) sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].iInvTimeMS = GET_GAME_TIMER() + 1000 EXIT ENDIF ENDIF IF GGSM_COLLIDER_INTERSECT(sGGSMData.sEntities[cnt].sCollider, sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].sCollider) IF GGSM_ENTITY_DAMAGE(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex], GGSM_PLAYER_DAMAGE_PER_ENEMY_COLLISION) cnt = COUNT_OF(sGGSMData.sEntities) + 1 ELSE RELOOP ENDIF ENDIF ENDREPEAT ENDPROC PROC GGSM_PROCESS_ENTITY_VS_PROJECTILE_COLLISIONS(GGSM_ENTITY &entArray[], GGSM_PROJECTILE &projArray[]) INT ind, cnt BOOL bHasReflectCapability // player bullets vs enemies REPEAT COUNT_OF(entArray) cnt IF NOT GGSM_ENTITY_HAS_COLLISION(entArray[cnt]) RELOOP ENDIF bHasReflectCapability = IS_BITMASK_ENUM_AS_ENUM_SET(entArray[cnt].eFlags, GGSM_ENTITY_BIT_REFLECT_BULLETS) REPEAT COUNT_OF(projArray) ind IF NOT GGSM_ENTITY_CAN_COLLIDE_WITH_PROJECTILE(entArray[cnt], projArray[ind]) RELOOP ENDIF IF GGSM_COLLIDER_INTERSECT(projArray[ind].sCollider, entArray[cnt].sCollider) IF (bHasReflectCapability) GGSM_REFLECT_PROJECTILE(projArray[ind]) RELOOP ENDIF GGSM_PROJECTILE_TAKE_DAMAGE(projArray[ind]) IF GGSM_ENTITY_DAMAGE(entArray[cnt]) ind = COUNT_OF(projArray) + 1 ELSE RELOOP ENDIF ENDIF ENDREPEAT ENDREPEAT ENDPROC PROC GGSM_PROCESS_PROJECTILE_VS_BACKGROUND_COLLISIONS(GGSM_PROJECTILE &projArray[]) INT ind IF (sGGSMData.sTileMap.iMapWidth = 0) OR (sGGSMData.sTileMap.iMapHeight = 0) EXIT ENDIF REPEAT COUNT_OF(projArray) ind IF NOT GGSM_PROJECTILE_HAS_COLLISION(projArray[ind]) RELOOP ENDIF IF GGSM_IS_SCREEN_POSITION_COLLIDED_WITH_TILE_MAP(projArray[ind].sCollider.sData.vCollisionVectors[0]) GGSM_PROJECTILE_TAKE_DAMAGE(projArray[ind]) RELOOP ENDIF IF (projArray[ind].sCollider.sData.eType = GGSM_COLLISION_CAPSULE) IF GGSM_IS_SCREEN_POSITION_COLLIDED_WITH_TILE_MAP(projArray[ind].sCollider.sData.vCollisionVectors[1]) GGSM_PROJECTILE_TAKE_DAMAGE(projArray[ind]) RELOOP ENDIF ENDIF ENDREPEAT ENDPROC PROC GGSM_PROCESS_PLAYER_VS_BACKGROUND_COLLISIONS() IF (sGGSMData.sTileMap.iMapWidth = 0) OR (sGGSMData.sTileMap.iMapHeight = 0) EXIT ENDIF IF (sGGSMData.iPlayerShipIndex = GGSM_INVALID_ENTITY) EXIT ENDIF IF NOT GGSM_ENTITY_HAS_COLLISION(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex]) EXIT ENDIF INT i VECTOR_2D vPos VECTOR_2D vCollidePoints[GGSM_MAX_ENTITY_BG_COLLISIONPOINTS] vCollidePoints[0] = INIT_VECTOR_2D(0.0, -30.0) vCollidePoints[1] = INIT_VECTOR_2D(35.0, 0.0) vCollidePoints[2] = INIT_VECTOR_2D(0.0, 35.0) vCollidePoints[3] = INIT_VECTOR_2D(-31.0, 0.0) REPEAT GGSM_MAX_ENTITY_BG_COLLISIONPOINTS i vPos = ADD_VECTOR_2D(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].sCollider.sAABB.vCenter, vCollidePoints[i]) IF GGSM_IS_SCREEN_POSITION_COLLIDED_WITH_TILE_MAP(vPos) IF GGSM_DOES_PLAYER_SHIELD_EXIST() GGSM_ENTITY_DAMAGE(sGGSMData.sEntities[sGGSMData.iPlayerShieldIndex], 9999) sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].iInvTimeMS = GET_GAME_TIMER() + 1000 EXIT ENDIF GGSM_ENTITY_DAMAGE(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex], 9999) EXIT ENDIF ENDREPEAT ENDPROC PROC GGSM_UPDATE_MAIN_GAME() INT i IF (sGGSMData.bGamePaused) EXIT ENDIF IF GGSM_IS_DIALOG_ACTIVE() GGSM_SET_PLAYER_INVUNERABLE() EXIT ENDIF CLEAR_BITMASK_ENUM_AS_ENUM(sGGSMData.eStageFlags, GGSM_STAGE_BIT_ENEMIES_ACTIVE | GGSM_STAGE_BIT_PLAYER_PROJECTILES_ACTIVE | GGSM_STAGE_BIT_BOSSES_ACTIVE | GGSM_STAGE_BIT_ENEMY_PROJECTILES_ACTIVE | GGSM_STAGE_BIT_GROUPS_ACTIVE) IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eStageFlags, GGSM_STAGE_BIT_PLAYER_BOSS_INVUNERABLE) GGSM_SET_PLAYER_INVUNERABLE() ENDIF IF (sGGSMData.fKillStreakTimer > 0.0) sGGSMData.fKillStreakTimer -= GET_FRAME_TIME() IF (sGGSMData.fKillStreakTimer <= 0.0) sGGSMData.fKillStreakTimer = 0.0 sGGSMData.iKillStreak = 0 ENDIF ENDIF IF (sGGSMData.iPlayerLives > 0) AND NOT GGSM_DOES_PLAYER_SHIP_EXIST() GGSM_PLAYER_SHIP_INIT(INIT_VECTOR_2D(600.0, 540.0)) ENDIF GGSM_UPDATE_ENEMY_SPAWNER() sGGSMData.iGroupsActive = 0 REPEAT COUNT_OF(sGGSMData.sEntityGroup) i GGSM_ENTITY_GROUP_UPDATE(sGGSMData.sEntityGroup[i]) ENDREPEAT IF (sGGSMData.iGroupsActive > sGGSMData.iMaxGroupsActive) sGGSMData.iMaxGroupsActive = sGGSMData.iGroupsActive ENDIF sGGSMData.iEntitiesActive = 0 REPEAT GGSM_MAX_ENTITIES i IF (sGGSMData.sEntities[i].eState != GGSM_ENTITY_STATE_NONE) GGSM_ENTITY_UPDATE(sGGSMData.sEntities[i]) ENDIF ENDREPEAT IF (sGGSMData.iEntitiesActive > sGGSMData.iMaxEntitiesActive) sGGSMData.iMaxEntitiesActive = sGGSMData.iEntitiesActive ENDIF GGSM_BOSS_CONTROLLER_UPDATE_ARRAY(sGGSMData.sBossController) GGSM_UPDATE_PROJECTILE_ARRAY(sGGSMData.sProjectiles) GGSM_PROCESS_PLAYER_VS_ENEMY_COLLISIONS() GGSM_PROCESS_ENTITY_VS_PROJECTILE_COLLISIONS(sGGSMData.sEntities, sGGSMData.sProjectiles) GGSM_PROCESS_PROJECTILE_VS_BACKGROUND_COLLISIONS(sGGSMData.sProjectiles) GGSM_PROCESS_PLAYER_VS_BACKGROUND_COLLISIONS() IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eStageFlags, GGSM_STAGE_BIT_PLAYER_SPECIAL_WPN_USED) GGSM_USE_WEAPON_IN_SLOT(GGSM_WEAPON_SLOT_SPECIAL) CLEAR_BITMASK_ENUM_AS_ENUM(sGGSMData.eStageFlags, GGSM_STAGE_BIT_PLAYER_SPECIAL_WPN_USED) ENDIF IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eStageFlags, GGSM_STAGE_BIT_PLAYER_DEFENSE_WPN_USED) GGSM_USE_WEAPON_IN_SLOT(GGSM_WEAPON_SLOT_DEFENSE) CLEAR_BITMASK_ENUM_AS_ENUM(sGGSMData.eStageFlags, GGSM_STAGE_BIT_PLAYER_DEFENSE_WPN_USED) ENDIF GGSM_UPDATE_FXSPRITE_ARRAY(sGGSMData.sFXSprite) GGSM_UPDATE_SPECIAL_WEAPON_ARRAY(sGGSMData.sSpWeaponData) GGSM_UPDATE_POWER_UP_ARRAY(sGGSMData.sPowerUp) IF (GET_GAME_TIMER() > sGGSMData.iLastEnemyDeathTimeMS + GGSM_CHAIN_GRACE_TIME_MS) sGGSMData.fChainMultiplier -= (GET_FRAME_TIME() * GGSM_CHAIN_REDUCE_RATE_PER_SECOND) IF (sGGSMData.fChainMultiplier < 0) sGGSMData.fChainMultiplier = 0 ENDIF ENDIF sGGSMData.fGrazeTimer += GET_FRAME_TIME() IF (sGGSMData.fGrazeTimer > sGGSMData.fGrazeTime) AND (sGGSMData.bGrazed) sGGSMData.bGrazed = FALSE GGSM_INCREASE_PLAYER_SCORE(10) sGGSMData.iGraze ++ sGGSMData.fGrazeTimer = sGGSMData.fGrazeTime ENDIF ENDPROC //------------------------------------------------- // CLIENT STATE //------------------------------------------------- /// PURPOSE: /// Set Client State /// PARAMS: /// eNewState - New State PROC GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE eNewState) ARCADE_GAMES_HELP_TEXT_CLEAR() CDEBUG1LN(DEBUG_MINIGAME, "[GGSM] GGSM_SET_CLIENT_SUBSTATE - State changed from ", GGSM_SUBSTATE_TO_STRING(sGGSMData.eSubState), " to ", GGSM_SUBSTATE_TO_STRING(eNewState)) sGGSMData.eSubState = eNewState sGGSMData.fStateTimer = 0 sGGSMData.fStateInterpolateValue = 0.0 sGGSMData.fTimeScale = 1.0 ENDPROC /// PURPOSE: /// Set Client State /// PARAMS: /// eNewState - New State PROC GGSM_SET_CLIENT_STATE(GGSM_STATE eNewState) CDEBUG1LN(DEBUG_MINIGAME, "[GGSM] GGSM_SET_CLIENT_STATE - State changed from ", GGSM_STATE_TO_STRING(sGGSMData.eState), " to ", GGSM_STATE_TO_STRING(eNewState)) sGGSMData.bGamePaused = FALSE sGGSMData.eState = eNewState GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_INIT) ENDPROC /// PURPOSE: /// Cleanup and Exit Client PROC GGSM_CLEANUP_AND_EXIT_CLIENT() IF GGSM_IS_GAME_ACTIVELY_PLAYING() GGSM_SEND_PLAYSTATS() ENDIF GGSM_TRIGGER_MUSIC_EVENT("ARCADE_SM_STOP") CDEBUG1LN(DEBUG_MINIGAME, "[GGSM] [JS] - GGSM_CLEANUP_AND_EXIT_CLIENT - Cleaning up and terminating the script") GGSM_PLAY_AVATAR_LEAVE_MACHINE_ANIM() ARCADE_CABINET_COMMON_CLEANUP() GGSM_RELEASE_BINK_MOVIE(sGGSMData.sBinkMovie) GGSM_RELEASE_ALL_TEXTURE_DICTS() GGSM_STOP_AUDIO_SCENE("DLC_CH_AM_SM_IN_MENUS_SCENE") GGSM_STOP_AUDIO_SCENE("DLC_CH_AM_SM_IN_GAMEPLAY_SCENE") GGSM_STOP_AUDIO_SCENE("DLC_CH_ARCADE_MACHINE_IN_USE_SCENE") GGSM_PC_CONTROLS_CLEANUP() ARCADE_GAMES_HELP_TEXT_CLEAR() ARCADE_GAMES_AUDIO_CLEAN_UP() ARCADE_GAMES_SOUND_RELEASE_AUDIO_BANK("DLC_HEIST3\\H3_SpaceMonkey3") CLEAR_ADDITIONAL_TEXT(MINIGAME_TEXT_SLOT, FALSE) TERMINATE_THIS_MULTIPLAYER_THREAD_NO_ARGS() ENDPROC /// PURPOSE: /// Initializes the Client PROC GGSM_PROCESS_CLIENT_STATE_INIT() GGSM_INIT_GLOBALS() ARCADE_CABINET_COMMON_INITIALIZATION() ARCADE_GAMES_POSTFX_INIT(CASINO_ARCADE_GAME_GO_GO_SPACE_MONKEY_3) ARCADE_GAMES_SOUND_INIT(CASINO_ARCADE_GAME_GO_GO_SPACE_MONKEY_3) GGSM_PC_CONTROLS_INIT() GGSM_SET_CHALLENGE_BITS_FROM_AWARDS() GGSM_CAMERA_INIT(sGGSMData.sCamera) GGSM_TILEMAP_INIT(sGGSMData.sTileMap) GGSM_SET_CLIENT_STATE(GGSM_STATE_REQUESTING_ASSETS) ENDPROC /// PURPOSE: /// Processes Requesting of Assets PROC GGSM_PROCESS_CLIENT_STATE_REQUESTING_ASSETS() IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_RESIDENT) EXIT ENDIF IF GGSM_IS_ANY_EDITOR_INCLUDED() IF NOT GGSM_LOAD_ALL_TEXTURE_DICTS() EXIT ENDIF ENDIF //Additional Text REQUEST_ADDITIONAL_TEXT("GGSM", MINIGAME_TEXT_SLOT) IF NOT HAS_THIS_ADDITIONAL_TEXT_LOADED("GGSM", MINIGAME_TEXT_SLOT) CDEBUG1LN(DEBUG_MINIGAME, "[GGSM] GGSM_PROCESS_CLIENT_STATE_REQUESTING_ASSETS - Loading Additional Text: GGSM") EXIT ENDIF IF NOT ARCADE_GAMES_POSTFX_REQUESTING_ASSETS() CDEBUG1LN(DEBUG_MINIGAME, "[GGSM] GGSM_PROCESS_CLIENT_STATE_REQUESTING_ASSETS - Post FX") EXIT ENDIF //Audio IF NOT ARCADE_GAMES_SOUND_REQUESTING_AUDIO_BANK("DLC_HEIST3\\H3_SpaceMonkey3") CDEBUG1LN(DEBUG_MINIGAME, "[GGSM] GGSM_PROCESS_CLIENT_STATE_REQUESTING_ASSETS - Loading Audio Bank DLC_HEIST3/H3_SpaceMonkey3") EXIT ENDIF GGSM_START_AUDIO_SCENE("DLC_CH_ARCADE_MACHINE_IN_USE_SCENE") GGSM_SET_CLIENT_STATE(GGSM_STATE_PSA_SCREEN) #IF GGSM_NO_INTRO GGSM_SET_CLIENT_STATE(GGSM_STATE_STAGE_SELECT) #ENDIF GGSM_FADE_SCREEN_OUT(0.01) ENDPROC PROC GGSM_PROCESS_CLIENT_STATE_FIB_WARNING() SWITCH (sGGSMData.eSubState) CASE GGSM_SUBSTATE_INIT IF NOT GGSM_LOAD_TEXTURE_DICT_FOR_SPRITE(GGSM_SPRITE_FBI_WARN) EXIT ENDIF GGSM_FADE_SCREEN_IN() GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_ACTIVE) BREAK CASE GGSM_SUBSTATE_ACTIVE GGSM_DRAW_CLIENT_STATE_FIB_WARNING() IF (sGGSMData.fStateTimer > 5.0) GGSM_FADE_SCREEN_OUT() GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLEANUP) ENDIF BREAK CASE GGSM_SUBSTATE_CLEANUP GGSM_DRAW_CLIENT_STATE_FIB_WARNING() IF GGSM_IS_SCREEN_FADED_OUT() GGSM_SET_CLIENT_STATE(GGSM_STATE_PSA_SCREEN) ENDIF BREAK ENDSWITCH ENDPROC PROC GGSM_PROCESS_CLIENT_STATE_PSA_SCREEN() SWITCH (sGGSMData.eSubState) CASE GGSM_SUBSTATE_INIT IF NOT GGSM_LOAD_TEXTURE_DICT_FOR_SPRITE(GGSM_SPRITE_PSA) EXIT ENDIF GGSM_FADE_SCREEN_IN() GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_ACTIVE) BREAK CASE GGSM_SUBSTATE_ACTIVE GGSM_DRAW_CLIENT_STATE_PSA_SCREEN() IF (sGGSMData.fStateTimer > 4.0) GGSM_FADE_SCREEN_OUT() GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLEANUP) ENDIF BREAK CASE GGSM_SUBSTATE_CLEANUP GGSM_DRAW_CLIENT_STATE_PSA_SCREEN() IF GGSM_IS_SCREEN_FADED_OUT() GGSM_SET_CLIENT_STATE(GGSM_STATE_DEVELOPER_LOGO) ENDIF BREAK ENDSWITCH ENDPROC PROC GGSM_PROCESS_CLIENT_STATE_DEVELOPER_LOGO() GGSM_DRAW_BLACK_BG() SWITCH (sGGSMData.eSubState) CASE GGSM_SUBSTATE_INIT GGSM_FADE_SCREEN_IN() IF NOT GGSM_START_BINK_MOVIE(sGGSMData.sBinkMovie, "_Pixtro_Intro_80s_2") GGSM_SET_CLIENT_STATE(GGSM_STATE_FIB_WARNING) EXIT ENDIF GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_ACTIVE) BREAK CASE GGSM_SUBSTATE_ACTIVE IF GGSM_DRAW_BINK_MOVIE(sGGSMData.sBinkMovie) GGSM_FADE_SCREEN_OUT_INSTANT() GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLEANUP) ENDIF BREAK CASE GGSM_SUBSTATE_CLEANUP IF GGSM_IS_SCREEN_FADED_OUT() GGSM_RELEASE_BINK_MOVIE(sGGSMData.sBinkMovie) GGSM_SET_CLIENT_STATE(GGSM_STATE_TITLE_SCREEN) ENDIF BREAK ENDSWITCH ENDPROC PROC GGSM_PROCESS_CLIENT_STATE_TITLE_SCREEN() SWITCH (sGGSMData.eSubState) CASE GGSM_SUBSTATE_INIT IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_FRONTEND) EXIT ENDIF IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_BG) EXIT ENDIF GGSM_FADE_SCREEN_IN() GGSM_CAMERA_RESET(sGGSMData.sCamera) GGSM_BGSCROLLER_RESET(sGGSMData.sBGScroller, 0) GGSM_START_AUDIO_SCENE("DLC_CH_AM_SM_IN_MENUS_SCENE") GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_ACTIVE) GGSM_TRIGGER_MUSIC_EVENT("ARCADE_SM_THEME_START") BREAK CASE GGSM_SUBSTATE_ACTIVE GGSM_DRAW_CLIENT_STATE_TITLE_SCREEN() sGGSMData.bHardMode = IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_LT) AND IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RT) AND IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_LB) AND IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RB) AND IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RLEFT) sGGSMData.fScrollTimePerFrame = GGSM_SCROLL_TIME_PER_FRAME IF (sGGSMData.bHardMode) sGGSMData.fScrollTimePerFrame = GGSM_SCROLL_TIME_PER_FRAME / 2.0 ENDIF IF GGSM_IS_SCREEN_FADED_IN() IF NOT ARCADE_GAMES_HELP_TEXT_IS_THIS_BEING_DISPLAYED(ARCADE_GAMES_HELP_TEXT_ENUM_GGSM_TITLE) ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_GGSM_TITLE, 15000) ENDIF ENDIF IF GGSM_HAS_PLAYER_PRESSED_START() OR GGSM_HAS_PLAYER_PRESSED_FIRE() GGSM_FADE_SCREEN_OUT() GGSM_PLAY_SOUND(ARCADE_GAMES_SOUND_GGSM_PRESSED_START) GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLEANUP) ELIF (sGGSMData.fStateTimer > 15.0) GGSM_FADE_SCREEN_OUT() GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLEANUP_TO_LDB) ENDIF BREAK CASE GGSM_SUBSTATE_CLEANUP GGSM_DRAW_CLIENT_STATE_TITLE_SCREEN() IF GGSM_IS_SCREEN_FADED_OUT() GGSM_SET_CLIENT_STATE(GGSM_STATE_STORY) ENDIF BREAK CASE GGSM_SUBSTATE_CLEANUP_TO_LDB GGSM_DRAW_CLIENT_STATE_TITLE_SCREEN() IF GGSM_IS_SCREEN_FADED_OUT() GGSM_SET_CLIENT_STATE(GGSM_STATE_LEADERBOARD) ENDIF BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Handles the main game state PROC GGSM_PROCESS_CLIENT_STATE_PLAYING() SWITCH (sGGSMData.eSubState) CASE GGSM_SUBSTATE_INIT IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_BG) EXIT ENDIF GGSM_FADE_SCREEN_IN() ARCADE_GAMES_HELP_TEXT_CLEAR() GGSM_STOP_AUDIO_SCENE("DLC_CH_AM_SM_IN_MENUS_SCENE") GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_ACTIVE) BREAK CASE GGSM_SUBSTATE_ACTIVE GGSM_DRAW_BG() BREAK ENDSWITCH ENDPROC /// Handles the main game state PROC GGSM_PROCESS_CLIENT_STATE_STORY() SWITCH (sGGSMData.eSubState) CASE GGSM_SUBSTATE_INIT IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_FRONTEND) EXIT ENDIF GGSM_CAMERA_RESET(sGGSMData.sCamera) GGSM_RESET_FOR_GAME_START() GGSM_RESET_FOR_STAGE_START(TRUE) GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_ACTIVE) sGGSMData.vStoryBasePos = INIT_VECTOR_2D(cfBASE_SCREEN_HALF_WIDTH, GGSM_STORY_MAX_Y_POS) sGGSMData.fStoryScrollRate = 40.0 GGSM_FADE_SCREEN_IN() BREAK CASE GGSM_SUBSTATE_ACTIVE sGGSMData.vStoryBasePos.y -= (sGGSMData.fStoryScrollRate * GET_FRAME_TIME()) GGSM_DRAW_CLIENT_STATE_STORY() IF GGSM_HAS_PLAYER_PRESSED_START() OR GGSM_HAS_PLAYER_PRESSED_FIRE() OR (sGGSMData.vStoryBasePos.y < GGSM_STORY_MIN_Y_POS) GGSM_FADE_SCREEN_OUT() GGSM_PLAY_SOUND(ARCADE_GAMES_SOUND_GGSM_PRESSED_START) GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLEANUP) ENDIF BREAK CASE GGSM_SUBSTATE_CLEANUP GGSM_DRAW_CLIENT_STATE_STORY() IF GGSM_IS_SCREEN_FADED_OUT() GGSM_SET_CLIENT_STATE(GGSM_STATE_STAGE_SELECT) ENDIF BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Handles the main game state PROC GGSM_PROCESS_CLIENT_STATE_STAGE_MISSION_SELECT() SWITCH (sGGSMData.eSubState) CASE GGSM_SUBSTATE_INIT IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_BG) EXIT ENDIF IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_FRONTEND) EXIT ENDIF IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_GAME) EXIT ENDIF GGSM_FADE_SCREEN_IN() GGSM_CAMERA_RESET(sGGSMData.sCamera) GGSM_RESET_FOR_STAGE_START(TRUE) GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_MAP_FLY_START) BREAK CASE GGSM_SUBSTATE_MAP_FLY_START IF (sGGSMData.fStateTimer > 0.5) GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_MAP_FLY) ELIF GGSM_HAS_PLAYER_PRESSED_FIRE() GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_ACTIVE) sGGSMData.fStateInterpolateValue = 1.0 ELIF GGSM_HAS_PLAYER_PRESSED_START() GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_MAP_DONE) sGGSMData.fStateInterpolateValue = 1.0 ENDIF GGSM_DRAW_CLIENT_STATE_STAGE_MISSION_SELECT() BREAK CASE GGSM_SUBSTATE_MAP_FLY sGGSMData.fStateInterpolateValue += GET_FRAME_TIME() IF (sGGSMData.fStateInterpolateValue >= 1.0) OR GGSM_HAS_PLAYER_PRESSED_FIRE() GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_ACTIVE) sGGSMData.fStateInterpolateValue = 1.0 ELIF GGSM_HAS_PLAYER_PRESSED_START() GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_MAP_DONE) sGGSMData.fStateInterpolateValue = 1.0 ENDIF GGSM_DRAW_CLIENT_STATE_STAGE_MISSION_SELECT() BREAK CASE GGSM_SUBSTATE_ACTIVE GGSM_DRAW_CLIENT_STATE_STAGE_MISSION_SELECT() IF GGSM_HAS_PLAYER_PRESSED_START() OR GGSM_HAS_PLAYER_PRESSED_FIRE() GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_MAP_DONE) sGGSMData.fStateInterpolateValue = 1.0 ENDIF BREAK CASE GGSM_SUBSTATE_MAP_DONE GGSM_DRAW_CLIENT_STATE_STAGE_MISSION_SELECT() GGSM_FADE_SCREEN_OUT() GGSM_PLAY_SOUND(ARCADE_GAMES_SOUND_GGSM_MONKEY_VOICE_STAGE_SELECT) GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLEANUP) sGGSMData.fStateInterpolateValue = 1.0 BREAK CASE GGSM_SUBSTATE_CLEANUP GGSM_DRAW_CLIENT_STATE_STAGE_MISSION_SELECT() IF GGSM_IS_SCREEN_FADED_OUT() GGSM_SET_CLIENT_STATE(GGSM_STATE_STAGE_ACTIVE) ENDIF BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Handles the main game state PROC GGSM_PROCESS_CLIENT_STATE_STAGE_ACTIVE() GGSM_TEXDICT stageBG SWITCH (sGGSMData.eSubState) CASE GGSM_SUBSTATE_INIT GGSM_RELEASE_TEXTURE_DICT(GGSM_TEXDICT_FRONTEND) IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_GAME) EXIT ENDIF IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_BG) EXIT ENDIF stageBG = GGSM_GET_TEXDICT_FOR_STAGE_TILES(sGGSMData.sGameStats.level) IF (stageBG != GGSM_TEXDICT_NONE) AND NOT GGSM_LOAD_TEXTURE_DICT(stageBG) EXIT ENDIF GGSM_FADE_SCREEN_IN() ARCADE_GAMES_HELP_TEXT_CLEAR() GGSM_PLAY_AVATAR_PLAY_RANDOM_IDLE_ANIM() GGSM_START_AUDIO_SCENE("DLC_CH_AM_SM_IN_GAMEPLAY_SCENE") GGSM_STOP_AUDIO_SCENE("DLC_CH_AM_SM_IN_MENUS_SCENE") GGSM_RESET_FOR_STAGE_START(FALSE) GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_ACTIVE) GGSM_TRIGGER_MUSIC_EVENT_FOR_STAGE(sGGSMData.sGameStats.level) BREAK CASE GGSM_SUBSTATE_ACTIVE GGSM_UPDATE_MAIN_GAME() GGSM_DRAW_MAIN_GAME() IF NOT IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eStageFlags, GGSM_STAGE_BIT_EXPLOSIONS_ACTIVE) IF (sGGSMData.iPlayerLives = 0) AND NOT GGSM_DOES_PLAYER_SHIP_EXIST() sGGSMData.fPlayerDeadTimer += GET_FRAME_TIME() IF (sGGSMData.fPlayerDeadTimer >= 1.5) GGSM_FADE_SCREEN_OUT() GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLEANUP) ENDIF ELSE sGGSMData.fPlayerDeadTimer = 0.0 ENDIF ENDIF IF GGSM_IS_STAGE_READY_TO_END() GGSM_SET_CLIENT_STATE(GGSM_STATE_STAGE_CLEAR) ENDIF BREAK CASE GGSM_SUBSTATE_CLEANUP GGSM_DRAW_MAIN_GAME() IF GGSM_IS_SCREEN_FADED_OUT() GGSM_SET_CLIENT_STATE(GGSM_STATE_GAME_OVER) ENDIF BREAK ENDSWITCH ENDPROC PROC GGSM_PROCESS_CLIENT_STATE_STAGE_CLEAR() FLOAT pc FLOAT fShipY = 690.0 GGSM_SET_PLAYER_INVUNERABLE() GGSM_UPDATE_MAIN_GAME() GGSM_DRAW_GAME_STATE_STAGE_CLEAR() SWITCH (sGGSMData.eSubState) CASE GGSM_SUBSTATE_INIT IF NOT IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eStageFlags, GGSM_STAGE_BIT_EXPLOSIONS_ACTIVE) GGSM_RESET_PROJECTILE_ARRAY(sGGSMData.sProjectiles) CLEAR_BITMASK_ENUM_AS_ENUM(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].eFlags, GGSM_ENTITY_BIT_WPN_ACTIVE) SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eStageFlags, GGSM_STAGE_BIT_DISABLE_WEAPONS) SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eStageFlags, GGSM_STAGE_BIT_BRING_CAMERA_TO_STOP) IF (sGGSMData.sGameStats.level = 1) //GGSM_DIALOG_CONTROLLER_START_DIALOG(sGGSMData.sDialogController, GGSM_DIALOG_ASTEROID_LEAVE) ENDIF GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLR_DIALOG) ENDIF BREAK CASE GGSM_SUBSTATE_CLR_DIALOG IF NOT GGSM_IS_DIALOG_ACTIVE() GGSM_ENTITY_SET_MOVEMENT_TO_VECTOR(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex], INIT_VECTOR_2D(cfBASE_SCREEN_HALF_WIDTH, fShipY)) CLEAR_BITMASK_ENUM_AS_ENUM(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].eFlags, GGSM_ENTITY_BIT_WPN_ACTIVE) SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eStageFlags, GGSM_STAGE_BIT_DISABLE_WEAPONS) SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eStageFlags, GGSM_STAGE_BIT_BRING_CAMERA_TO_STOP) sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].fSpeed /= 2.0 sGGSMData.iSectorBonus = (sGGSMData.sGameStats.level) * GGSM_SECTOR_CLEAR_BONUS pc = (TO_FLOAT(sGGSMData.iEnemiesDestroyed) / TO_FLOAT(sGGSMData.iEnemiesCreated)) * 100.0 IF (pc >= 100.0) pc = 100.0 ENDIF sGGSMData.iTakedownBonus = CEIL(pc) * (GGSM_TAKEDOWN_BONUS / 100) sGGSMData.iTakedownBonus -= (sGGSMData.iTakedownBonus % 100) IF GGSM_IS_LAST_STAGE() sGGSMData.iAllClearBonus = (GGSM_POINTS_PER_LIFE_ALL_CLEAR * sGGSMData.iPlayerLives) IF (sGGSMData.bHardMode) sGGSMData.iAllClearBonus += sGGSMData.sGameStats.score ENDIF ELSE sGGSMData.iAllClearBonus = 0 ENDIF GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLR_STAGE_CLEAR) ENDIF BREAK CASE GGSM_SUBSTATE_CLR_STAGE_CLEAR // handle movement anim IF (sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].sWorld.vPosition.y > fShipY) GGSM_ENTITY_SET_ANIM_FRAME(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex], 1) ELIF (sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].sWorld.vPosition.y < fShipY) GGSM_ENTITY_SET_ANIM_FRAME(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex], 2) ELSE GGSM_ENTITY_SET_ANIM_FRAME(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex], 0) ENDIF IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].eMoveFlags, GGSM_MOVE_BIT_COMPLETE) GGSM_FAKE_FADE_SCREEN_OUT(1.0) GGSM_TRIGGER_MUSIC_EVENT("ARCADE_SM_THEME_START") GGSM_ENTITY_SET_MOVEMENT_TYPE(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex], GGSM_MOVEMENT_NONE) GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLR_STAGE_BONUS) ENDIF BREAK CASE GGSM_SUBSTATE_CLR_STAGE_BONUS IF GGSM_IS_SCREEN_FAKE_FADED_OUT() GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLR_SECTOR_BONUS) ENDIF BREAK CASE GGSM_SUBSTATE_CLR_SECTOR_BONUS IF (sGGSMData.iSectorBonus <= 0) sGGSMData.iSectorBonus = 0 GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLR_TAKEDOWN_BONUS) ELSE ARCADE_GAMES_SOUND_PLAY_LOOP(ARCADE_GAMES_SOUND_GGSM_SCORE_COUNT_LOOP) sGGSMData.iSectorBonus -= GGSM_BONUS_COUNT_RATE GGSM_INCREASE_PLAYER_SCORE(GGSM_BONUS_COUNT_RATE, GGSM_IS_LAST_STAGE()) ENDIF BREAK CASE GGSM_SUBSTATE_CLR_TAKEDOWN_BONUS IF (sGGSMData.iTakedownBonus <= 0) sGGSMData.iTakedownBonus = 0 GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLR_NO_DMG_BONUS) ELSE ARCADE_GAMES_SOUND_PLAY_LOOP(ARCADE_GAMES_SOUND_GGSM_SCORE_COUNT_LOOP) sGGSMData.iTakedownBonus -= GGSM_BONUS_COUNT_RATE GGSM_INCREASE_PLAYER_SCORE(GGSM_BONUS_COUNT_RATE, GGSM_IS_LAST_STAGE()) ENDIF BREAK CASE GGSM_SUBSTATE_CLR_NO_DMG_BONUS IF (sGGSMData.iNoDamageBonus <= 0) sGGSMData.iNoDamageBonus = 0 GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLR_NO_MISS_BONUS) ELSE ARCADE_GAMES_SOUND_PLAY_LOOP(ARCADE_GAMES_SOUND_GGSM_SCORE_COUNT_LOOP) sGGSMData.iNoDamageBonus -= GGSM_BONUS_COUNT_RATE GGSM_INCREASE_PLAYER_SCORE(GGSM_BONUS_COUNT_RATE, GGSM_IS_LAST_STAGE()) ENDIF BREAK CASE GGSM_SUBSTATE_CLR_NO_MISS_BONUS IF (sGGSMData.iNoMissBonus <= 0) sGGSMData.iNoMissBonus = 0 GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLR_ALL_CLEAR_BONUS) ELSE ARCADE_GAMES_SOUND_PLAY_LOOP(ARCADE_GAMES_SOUND_GGSM_SCORE_COUNT_LOOP) sGGSMData.iNoMissBonus -= GGSM_BONUS_COUNT_RATE GGSM_INCREASE_PLAYER_SCORE(GGSM_BONUS_COUNT_RATE, GGSM_IS_LAST_STAGE()) ENDIF BREAK CASE GGSM_SUBSTATE_CLR_ALL_CLEAR_BONUS IF (sGGSMData.iAllClearBonus <= 0) sGGSMData.iAllClearBonus = 0 GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLR_FLY_OFF) ELSE ARCADE_GAMES_SOUND_PLAY_LOOP(ARCADE_GAMES_SOUND_GGSM_SCORE_COUNT_LOOP) sGGSMData.iAllClearBonus -= GGSM_BONUS_COUNT_RATE GGSM_INCREASE_PLAYER_SCORE(GGSM_BONUS_COUNT_RATE, GGSM_IS_LAST_STAGE()) ENDIF BREAK CASE GGSM_SUBSTATE_CLR_FLY_OFF ARCADE_GAMES_SOUND_STOP(ARCADE_GAMES_SOUND_GGSM_SCORE_COUNT_LOOP) ARCADE_GAMES_SOUND_PLAY(ARCADE_GAMES_SOUND_GGSM_SCORE_COUNT_FINAL) sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].fSpeed *= 2.0 GGSM_ENTITY_SET_MOVEMENT_TO_VECTOR(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex], INIT_VECTOR_2D(1800.0, fShipY)) GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLR_FLY_OFF_DONE) BREAK CASE GGSM_SUBSTATE_CLR_FLY_OFF_DONE IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.sEntities[sGGSMData.iPlayerShipIndex].eMoveFlags, GGSM_MOVE_BIT_COMPLETE) GGSM_FADE_SCREEN_OUT() GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLEANUP) ENDIF BREAK CASE GGSM_SUBSTATE_CLEANUP IF GGSM_IS_SCREEN_FADED_OUT() IF NOT IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eStageFlags, GGSM_STAGE_BIT_PLAYER_DAMAGED) AND NOT IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eStageFlags, GGSM_STAGE_BIT_PLAYER_DIED) GGSM_SET_CHALLENGE_COMPLETED(GGSM_CHALLENGE_BIT_APE_ESCAPE) ENDIF GGSM_CLEAR_FAKE_FADE() sGGSMData.sGameStats.level ++ IF (sGGSMData.sGameStats.level > GGSM_SECTOR_MAX) GGSM_SET_CLIENT_STATE(GGSM_STATE_STAGE_CONGRATS) ELSE GGSM_SET_CLIENT_STATE(GGSM_STATE_STAGE_SELECT) ENDIF ENDIF BREAK ENDSWITCH ENDPROC PROC GGSM_PROCESS_CLIENT_STATE_STAGE_CONGRATS() SWITCH (sGGSMData.eSubState) CASE GGSM_SUBSTATE_INIT IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_BG) EXIT ENDIF IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_FRONTEND) EXIT ENDIF IF (sGGSMData.bPowerUpCollected = FALSE ) GGSM_SET_CHALLENGE_COMPLETED(GGSM_CHALLENGE_BIT_MONKEY_MIND) ENDIF sGGSMData.sGameStats.level = 0 GGSM_SEND_PLAYSTATS() GGSM_RESET_FOR_STAGE_START(FALSE) GGSM_FADE_SCREEN_IN() GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_ACTIVE) //GGSM_UNLOCK_PRIZE(GGSM_UNLOCK_TSHIRTS_GGSM_CLOCKEDIT) BREAK CASE GGSM_SUBSTATE_ACTIVE GGSM_DRAW_CLIENT_STATE_STAGE_CONGRATS() IF GGSM_HAS_PLAYER_PRESSED_START() OR GGSM_HAS_PLAYER_PRESSED_FIRE() OR (sGGSMData.fStateTimer > 15.0) GGSM_FADE_SCREEN_OUT() GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLEANUP) ENDIF BREAK CASE GGSM_SUBSTATE_CLEANUP GGSM_DRAW_CLIENT_STATE_STAGE_CONGRATS() IF GGSM_IS_SCREEN_FADED_OUT() GGSM_SET_CLIENT_STATE(GGSM_STATE_LEADERBOARD_ENTRY) ENDIF BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Handles the main game state PROC GGSM_PROCESS_CLIENT_STATE_GAME_OVER() SWITCH (sGGSMData.eSubState) CASE GGSM_SUBSTATE_INIT IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_PORTRAITS) EXIT ENDIF IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_DIALOG) EXIT ENDIF IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_FRONTEND) EXIT ENDIF GGSM_SEND_PLAYSTATS() GGSM_FADE_SCREEN_IN() ARCADE_GAMES_HELP_TEXT_CLEAR() GGSM_RESET_FOR_STAGE_START() GGSM_START_AUDIO_SCENE("DLC_CH_AM_SM_IN_MENUS_SCENE") GGSM_STOP_AUDIO_SCENE("DLC_CH_AM_SM_IN_GAMEPLAY_SCENE") GGSM_DIALOG_CONTROLLER_START_DIALOG(sGGSMData.sDialogController, GGSM_DIALOG_GAME_OVER) GGSM_TRIGGER_MUSIC_EVENT("ARCADE_SM_STOP") GGSM_PLAY_SOUND(ARCADE_GAMES_SOUND_GGSM_GAME_OVER) GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_ACTIVE) BREAK CASE GGSM_SUBSTATE_ACTIVE ARCADE_DRAW_PIXELSPACE_SPRITE(GGSM_GET_TEXTURE_DICT(GGSM_TEXDICT_FRONTEND), "GAME_OVER_SCREEN", INIT_VECTOR_2D(cfBASE_SCREEN_HALF_WIDTH, cfBASE_SCREEN_HALF_HEIGHT), INIT_VECTOR_2D(1364.0, 972.0), 0, sGGSMData.rgbaWhite) GGSM_DRAW_GAME_OVER_TEXT() IF NOT GGSM_IS_DIALOG_ACTIVE() GGSM_FADE_SCREEN_OUT() GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLEANUP) ENDIF BREAK CASE GGSM_SUBSTATE_CLEANUP ARCADE_DRAW_PIXELSPACE_SPRITE(GGSM_GET_TEXTURE_DICT(GGSM_TEXDICT_FRONTEND), "GAME_OVER_SCREEN", INIT_VECTOR_2D(cfBASE_SCREEN_HALF_WIDTH, cfBASE_SCREEN_HALF_HEIGHT), INIT_VECTOR_2D(1364.0, 972.0), 0, sGGSMData.rgbaWhite) GGSM_DRAW_GAME_OVER_TEXT() IF GGSM_IS_SCREEN_FADED_OUT() GGSM_SET_CLIENT_STATE(GGSM_STATE_LEADERBOARD_ENTRY) ENDIF BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Handles the leaderboard PROC GGSM_PROCESS_CLIENT_STATE_LEADERBOARD() SWITCH (sGGSMData.eSubState) CASE GGSM_SUBSTATE_INIT IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_FRONTEND) EXIT ENDIF IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_BG) EXIT ENDIF GGSM_FADE_SCREEN_IN() ARCADE_GAMES_HELP_TEXT_CLEAR() GGSM_STOP_AUDIO_SCENE("DLC_CH_AM_SM_IN_GAMEPLAY_SCENE") GGSM_START_AUDIO_SCENE("DLC_CH_AM_SM_IN_MENUS_SCENE") GGSM_CAMERA_RESET(sGGSMData.sCamera) GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_ACTIVE) BREAK CASE GGSM_SUBSTATE_ACTIVE GGSM_DRAW_BG() ARCADE_GAMES_LEADERBOARD_DRAW() IF (sGGSMData.fStateTimer > 10.0) OR GGSM_HAS_PLAYER_PRESSED_START() OR GGSM_HAS_PLAYER_PRESSED_CANCEL() GGSM_FADE_SCREEN_OUT() GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLEANUP) ENDIF BREAK CASE GGSM_SUBSTATE_CLEANUP IF GGSM_IS_SCREEN_FADED_OUT() GGSM_SET_CLIENT_STATE(GGSM_STATE_TITLE_SCREEN) ELSE GGSM_DRAW_BG() ARCADE_GAMES_LEADERBOARD_DRAW() ENDIF BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Handles the leaderboard PROC GGSM_PROCESS_CLIENT_STATE_LEADERBOARD_ENTRY() SWITCH (sGGSMData.eSubState) CASE GGSM_SUBSTATE_INIT IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_FRONTEND) EXIT ENDIF IF NOT GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT_BG) EXIT ENDIF GGSM_FADE_FROM_WHITE() GGSM_FADE_SCREEN_IN() ARCADE_GAMES_HELP_TEXT_CLEAR() GGSM_STOP_AUDIO_SCENE("DLC_CH_AM_SM_IN_GAMEPLAY_SCENE") GGSM_START_AUDIO_SCENE("DLC_CH_AM_SM_IN_MENUS_SCENE") GGSM_CAMERA_RESET(sGGSMData.sCamera) GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_ACTIVE) GGSM_TRIGGER_MUSIC_EVENT("ARCADE_SM_THEME_START") BREAK CASE GGSM_SUBSTATE_ACTIVE GGSM_DRAW_BG() ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY(sGGSMData.sGameStats.score) ARCADE_GAMES_LEADERBOARD_DRAW() IF (sAGLeaderboardData.bEditing = FALSE) AND (GGSM_HAS_PLAYER_PRESSED_START() OR GGSM_HAS_PLAYER_PRESSED_CANCEL()) GGSM_FADE_SCREEN_OUT() GGSM_SET_CLIENT_SUBSTATE(GGSM_SUBSTATE_CLEANUP) ENDIF BREAK CASE GGSM_SUBSTATE_CLEANUP IF GGSM_IS_SCREEN_FADED_OUT() GGSM_SET_CLIENT_STATE(GGSM_STATE_TITLE_SCREEN) ELSE GGSM_DRAW_BG() ARCADE_GAMES_LEADERBOARD_DRAW() ENDIF BREAK ENDSWITCH ENDPROC /// PURPOSE: /// The actual state machine PROC GGSM_PROCESS_CLIENT_STATE_MACHINE() IF (sGGSMData.eState > GGSM_STATE_REQUESTING_ASSETS) GGSM_DRAW_BLACK_BG() GGSM_CAMERA_UPDATE(sGGSMData.sCamera) GGSM_BGSCROLLER_UPDATE(sGGSMData.sBGScroller) ENDIF SWITCH sGGSMData.eState CASE GGSM_STATE_INIT GGSM_PROCESS_CLIENT_STATE_INIT() BREAK CASE GGSM_STATE_REQUESTING_ASSETS GGSM_PROCESS_CLIENT_STATE_REQUESTING_ASSETS() BREAK CASE GGSM_STATE_FIB_WARNING GGSM_PROCESS_CLIENT_STATE_FIB_WARNING() BREAK CASE GGSM_STATE_PSA_SCREEN GGSM_PROCESS_CLIENT_STATE_PSA_SCREEN() BREAK CASE GGSM_STATE_DEVELOPER_LOGO GGSM_PROCESS_CLIENT_STATE_DEVELOPER_LOGO() BREAK CASE GGSM_STATE_TITLE_SCREEN GGSM_PROCESS_CLIENT_STATE_TITLE_SCREEN() BREAK CASE GGSM_STATE_PLAYING GGSM_PROCESS_CLIENT_STATE_PLAYING() BREAK CASE GGSM_STATE_STORY GGSM_PROCESS_CLIENT_STATE_STORY() BREAK CASE GGSM_STATE_STAGE_SELECT GGSM_PROCESS_CLIENT_STATE_STAGE_MISSION_SELECT() BREAK CASE GGSM_STATE_STAGE_ACTIVE GGSM_PROCESS_CLIENT_STATE_STAGE_ACTIVE() BREAK CASE GGSM_STATE_STAGE_CLEAR GGSM_PROCESS_CLIENT_STATE_STAGE_CLEAR() BREAK CASE GGSM_STATE_STAGE_CONGRATS GGSM_PROCESS_CLIENT_STATE_STAGE_CONGRATS() BREAK CASE GGSM_STATE_GAME_OVER GGSM_PROCESS_CLIENT_STATE_GAME_OVER() BREAK CASE GGSM_STATE_LEADERBOARD GGSM_PROCESS_CLIENT_STATE_LEADERBOARD() BREAK CASE GGSM_STATE_LEADERBOARD_ENTRY GGSM_PROCESS_CLIENT_STATE_LEADERBOARD_ENTRY() BREAK CASE GGSM_STATE_CLEANUP GGSM_CLEANUP_AND_EXIT_CLIENT() BREAK ENDSWITCH IF GGSM_IS_GAME_PLAYING() GGSM_TILEMAP_SET_RENDERABLE_TILE_BOUNDS(sGGSMData.sTileMap, sGGSMData.sCamera) GGSM_DIALOG_CONTROLLER_UPDATE(sGGSMData.sDialogController) IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eStageFlags, GGSM_STAGE_BIT_FORCE_Z_SORT) GGSM_QUICK_SORT_ZDEPTH_ARRAY(sGGSMData.sZSortData, 0, GGSM_MAX_ENTITIES - 1) CLEAR_BITMASK_ENUM_AS_ENUM(sGGSMData.eStageFlags, GGSM_STAGE_BIT_FORCE_Z_SORT) ENDIF ENDIF IF (sGGSMData.fFadeTime != 0.0) sGGSMData.fFadeAlpha = CLAMP(sGGSMData.fFadeAlpha + (GET_FRAME_TIME() / sGGSMData.fFadeTime), 0.0, 1.0) ENDIF IF (sGGSMData.fFakeFadeTime != 0.0) sGGSMData.fFakeFadeAlpha = CLAMP(sGGSMData.fFakeFadeAlpha + (GET_FRAME_TIME() / sGGSMData.fFakeFadeTime), 0.0, 1.0) ENDIF IF (sGGSMData.fWhiteOutFadeTime != 0.0) sGGSMData.fWhiteOutAlpha = CLAMP(sGGSMData.fWhiteOutAlpha + (GET_FRAME_TIME() / sGGSMData.fWhiteOutFadeTime), 0.0, 1.0) ENDIF IF (sGGSMData.eState > GGSM_STATE_REQUESTING_ASSETS) GGSM_DRAW_FACADE() ENDIF IF IS_PC_VERSION() AND IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) sGGSMData.sQuitTimer.action = INPUT_FRONTEND_DELETE ELSE sGGSMData.sQuitTimer.action = INPUT_FRONTEND_CANCEL ENDIF INT iQuitTime = 1000 IF IS_CONTROL_PRESSED(sGGSMData.sQuitTimer.control, sGGSMData.sQuitTimer.action) OR (IS_DISABLED_CONTROL_PRESSED(sGGSMData.sQuitTimer.control, sGGSMData.sQuitTimer.action)) IF IS_PC_VERSION() AND IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) DRAW_GENERIC_METER(ABSI(GET_TIME_DIFFERENCE(GET_NETWORK_TIME(), sGGSMData.sQuitTimer.sTimer.Timer)), iQuitTime, "DEG_GAME_QUIT") ELSE DRAW_GENERIC_METER(ABSI(GET_TIME_DIFFERENCE(GET_NETWORK_TIME(), sGGSMData.sQuitTimer.sTimer.Timer)), iQuitTime, "DEG_GAME_QUIT") ENDIF ELSE IF IS_PC_VERSION() AND IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) DRAW_GENERIC_METER(0, iQuitTime, "DEG_GAME_QUIT") ELSE DRAW_GENERIC_METER(0, iQuitTime, "DEG_GAME_QUIT") ENDIF ENDIF IF IS_CONTROL_HELD(sGGSMData.sQuitTimer, DEFAULT, iQuitTime) OR SHOULD_KICK_PLAYER_FROM_ANY_ARCADE_GAME() IF GGSM_IS_GAME_ACTIVELY_PLAYING() GGSM_SEND_PLAYSTATS() ENDIF GGSM_SET_CLIENT_STATE(GGSM_STATE_CLEANUP) ENDIF ENDPROC //------------------------------------------------- // DEBUG FUNCTIONS //------------------------------------------------- #IF IS_DEBUG_BUILD /// PURPOSE: /// Sets up the parent widget group /// PARAMS: /// parentWidgetGroup - group PROC GGSM_DEBUG_SET_PARENT_WIDGET_GROUP(WIDGET_GROUP_ID parentWidgetGroup) sGGSMData.widgetGroupExample = parentWidgetGroup ENDPROC /// PURPOSE: /// Entity Type Selector /// PARAMS: /// index - index for editing the type PROC GGSM_BOSS_STATE_SELECTOR(INT &index, STRING str = NULL) GGSM_BOSS_STATE eBet START_NEW_WIDGET_COMBO() REPEAT NUM_GGSM_BOSS_STATE eBet ADD_TO_WIDGET_COMBO(GGSM_BOSS_STATE_TO_STRING(eBet)) ENDREPEAT IF (NOT IS_STRING_NULL_OR_EMPTY(str)) STOP_WIDGET_COMBO(str, index) ELSE STOP_WIDGET_COMBO("Boss State", index) ENDIF ENDPROC /// PURPOSE: /// Client Type Selector /// PARAMS: /// index - index for editing the type PROC GGSM_STATE_SELECTOR(INT &index, STRING str = NULL) GGSM_STATE eBet START_NEW_WIDGET_COMBO() REPEAT NUM_GGSM_STATE eBet ADD_TO_WIDGET_COMBO(GGSM_STATE_TO_STRING(eBet)) ENDREPEAT IF (NOT IS_STRING_NULL_OR_EMPTY(str)) STOP_WIDGET_COMBO(str, index) ELSE STOP_WIDGET_COMBO("Client State", index) ENDIF ENDPROC /// PURPOSE: /// Client Type Selector /// PARAMS: /// index - index for editing the type PROC GGSM_SUBSTATE_SELECTOR(INT &index, STRING str = NULL) GGSM_SUBSTATE eBet START_NEW_WIDGET_COMBO() REPEAT NUM_GGSM_SUBSTATE eBet ADD_TO_WIDGET_COMBO(GGSM_SUBSTATE_TO_STRING(eBet)) ENDREPEAT IF (NOT IS_STRING_NULL_OR_EMPTY(str)) STOP_WIDGET_COMBO(str, index) ELSE STOP_WIDGET_COMBO("Client Substate", index) ENDIF ENDPROC /// PURPOSE: /// Entity Type Selector /// PARAMS: /// index - index for editing the type PROC GGSM_ENTITY_TYPE_SELECTOR(INT &index) GGSM_ENTITY_TYPE eBet START_NEW_WIDGET_COMBO() REPEAT NUM_GGSM_ENTITY_TYPE eBet ADD_TO_WIDGET_COMBO(GGSM_ENTITY_TYPE_TO_STRING(eBet)) ENDREPEAT STOP_WIDGET_COMBO("Entity Type", index) ENDPROC /// PURPOSE: /// Tile collision Type Widget /// PARAMS: /// data - data to effect PROC GGSM_TILE_COLLISION_TYPE_SELECTOR(INT &index) GGSM_TILE_COLLISION_TYPE eBet START_NEW_WIDGET_COMBO() REPEAT NUM_GGSM_TILE_COLLISION_TYPE eBet ADD_TO_WIDGET_COMBO(GGSM_TILE_COLLISION_TYPE_TO_STRING(eBet)) ENDREPEAT STOP_WIDGET_COMBO("Tile Collision Type", index) ENDPROC /// PURPOSE: /// Entity Type Selector /// PARAMS: /// index - index for editing the type PROC GGSM_UNLOCK_SELECTOR(INT &index) GGSM_UNLOCK_TYPE eBet START_NEW_WIDGET_COMBO() REPEAT NUM_GGSM_UNLOCK_TYPE eBet ADD_TO_WIDGET_COMBO(GGSM_UNLOCK_TYPE_TO_STRING(eBet)) ENDREPEAT STOP_WIDGET_COMBO("Unlock Type", index) ENDPROC /// PURPOSE: /// Creates a read only 2D vector widget /// PARAMS: /// str - widget name /// vec - vector PROC GGSM_ADD_WIDGET_VECTOR_2D_READONLY(STRING str, VECTOR_2D &vec) TEXT_LABEL_23 txt txt = str txt += " X" ADD_WIDGET_FLOAT_READ_ONLY(txt, vec.x) txt = str txt += " Y" ADD_WIDGET_FLOAT_READ_ONLY(txt, vec.y) ENDPROC /// PURPOSE: /// Creates an editable 2D Vector widget /// PARAMS: /// str - widget name /// vec - vector /// vMin - min value (note this effects both x and y) /// vMax - max value (note this effects both x and y) /// vStep - value increase rate PROC GGSM_ADD_WIDGET_VECTOR_2D_SLIDER(STRING str, VECTOR_2D &vec, FLOAT vMin, FLOAT vMax, FLOAT vStep) TEXT_LABEL_23 txt txt = str txt += " X" ADD_WIDGET_FLOAT_SLIDER(txt, vec.x, vMin, vMax, vStep) txt = str txt += " Y" ADD_WIDGET_FLOAT_SLIDER(txt, vec.y, vMin, vMax, vStep) ENDPROC PROC GGSM_ADD_WIDGET_TRANSFORM_SLIDER(STRING str, GGSM_TRANSFORM &t) START_WIDGET_GROUP(str) GGSM_ADD_WIDGET_VECTOR_2D_SLIDER("Position", t.vPosition, -cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_WIDTH, 10) ADD_WIDGET_FLOAT_SLIDER("Rotation", t.fRotation, -720.0, 720.0, 1) GGSM_ADD_WIDGET_VECTOR_2D_SLIDER("Scale", t.vScale, -10.0, 10.0, 0.25) STOP_WIDGET_GROUP() ENDPROC PROC GGSM_ADD_WIDGET_TRANSFORM_READ_ONLY(STRING str, GGSM_TRANSFORM &t) START_WIDGET_GROUP(str) GGSM_ADD_WIDGET_VECTOR_2D_READONLY("Position", t.vPosition) ADD_WIDGET_FLOAT_READ_ONLY("Rotation", t.fRotation) GGSM_ADD_WIDGET_VECTOR_2D_READONLY("Scale", t.vScale) STOP_WIDGET_GROUP() ENDPROC PROC GGSM_RGBA_COLOUR_STRUCT_WIDGET(RGBA_COLOUR_STRUCT &col, STRING str) START_WIDGET_GROUP(str) ADD_WIDGET_INT_SLIDER("Red", col.iR, 0, 255, 1) ADD_WIDGET_INT_SLIDER("Green", col.iG, 0, 255, 1) ADD_WIDGET_INT_SLIDER("Blue", col.iB, 0, 255, 1) ADD_WIDGET_INT_SLIDER("Alpha", col.iA, 0, 255, 1) STOP_WIDGET_GROUP() ENDPROC PROC GGSM_BOSS_CONTROLLER_CREATE_WIDGET(GGSM_BOSS_CONTROLLER &boss, STRING str) INT i TEXT_LABEL_23 txt START_WIDGET_GROUP(str) ADD_WIDGET_BOOL("Change State", boss.bDebugSetState) GGSM_BOSS_STATE_SELECTOR(boss.iDebugSetState, "Change State") GGSM_BOSS_STATE_SELECTOR(boss.iCurrentState) ADD_WIDGET_FLOAT_READ_ONLY("State Timer", boss.fStateTimer) ADD_WIDGET_INT_READ_ONLY("HP", boss.iTotalHP) ADD_WIDGET_INT_READ_ONLY("Max HP", boss.iMaxTotalHP) ADD_WIDGET_INT_READ_ONLY("Group", boss.iGroupID) ADD_WIDGET_INT_READ_ONLY("Sub Group", boss.iSubGroupID) ADD_WIDGET_INT_READ_ONLY("Boss Pattern State", boss.iBossPatternState) ADD_BIT_FIELD_WIDGET("Summed HP Contributors", boss.iSummedMaxHPBitSet) ADD_BIT_FIELD_WIDGET("Used Pattern Bit Set", boss.iPatternUsedBitSet) ADD_WIDGET_INT_READ_ONLY("Boss Max Patterns", boss.iMaxPatterns) ADD_WIDGET_INT_READ_ONLY("Internal Counter", boss.iInternalCounter) START_WIDGET_GROUP("Entities") REPEAT GGSM_MAX_BOSS_PARTS i txt = "Entity " txt += i ADD_WIDGET_INT_READ_ONLY(txt, boss.iEntityIndex[i]) ENDREPEAT STOP_WIDGET_GROUP() STOP_WIDGET_GROUP() ENDPROC PROC GGSM_CAMERA_CREATE_DEBUG_WIDGET(GGSM_CAMERA &sCamera) START_WIDGET_GROUP("Viewport Camera") GGSM_ADD_WIDGET_VECTOR_2D_READONLY("Viewport Offset", sCamera.vWorldViewportOffset) GGSM_ADD_WIDGET_VECTOR_2D_SLIDER("World Pos", sCamera.vWorldPosition, -10000000.0, 10000000.0, 4) GGSM_ADD_WIDGET_VECTOR_2D_READONLY("Last World Pos", sCamera.vLastWorldPosition) GGSM_ADD_WIDGET_VECTOR_2D_SLIDER("Scroll Direction", sCamera.vScrollDirection, -1.0, 1.0, 0.001) ADD_WIDGET_FLOAT_SLIDER("Tile Scroll Speed", sCamera.fTileScrollSpeed, 0, 1000000, 1) ADD_WIDGET_FLOAT_READ_ONLY("Dist Travelled", sCamera.fDistTravelled) ADD_WIDGET_BOOL("Debug Move Camera", sCamera.bDebugMoveCamera) ADD_WIDGET_FLOAT_SLIDER("Move Camera Dist", sCamera.fDebugMoveCameraDist, 0, 1000000, 1) ADD_WIDGET_FLOAT_READ_ONLY("Spd", sCamera.fSpd) STOP_WIDGET_GROUP() ENDPROC /// PURPOSE: /// Collsion Data Widget /// PARAMS: /// data - data to effect PROC GGSM_COLLISION_DATA_WIDGET(GGSM_COLLISION_DATA &data) START_WIDGET_GROUP(GGSM_COLLISION_SHAPE_TO_STRING(data.eType)) GGSM_ADD_WIDGET_VECTOR_2D_SLIDER("Vector 0", data.vCollisionVectors[0], -cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_WIDTH, 1) GGSM_ADD_WIDGET_VECTOR_2D_SLIDER("Vector 1", data.vCollisionVectors[1], -cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_WIDTH, 1) ADD_WIDGET_FLOAT_SLIDER("Col Radius", data.fColRadius, -cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_WIDTH, 1) STOP_WIDGET_GROUP() ENDPROC PROC GGSM_ENTITY_WIDGET(GGSM_ENTITY &data, STRING str) INT i TEXT_LABEL_15 txt START_WIDGET_GROUP(str) ADD_WIDGET_INT_READ_ONLY("Parent Index", data.iEntityParentIndex) ADD_WIDGET_INT_READ_ONLY("Group ID", data.iGroupID) ADD_WIDGET_INT_READ_ONLY("HP", data.iHP) ADD_WIDGET_INT_READ_ONLY("Inv Frame Time", data.iInvTimeMS) ADD_WIDGET_FLOAT_READ_ONLY("Anim Frame", data.fAnimFrame) ADD_WIDGET_FLOAT_READ_ONLY("Timer", data.fTimer) ADD_WIDGET_FLOAT_READ_ONLY("Explode Timer", data.fExplodeTimer) GGSM_ADD_WIDGET_TRANSFORM_SLIDER("Local", data.sLocal) GGSM_ADD_WIDGET_TRANSFORM_READ_ONLY("World", data.sWorld) START_WIDGET_GROUP("Movement") GGSM_ADD_WIDGET_VECTOR_2D_READONLY("Local Direction", data.vLocalDirection) ADD_WIDGET_FLOAT_SLIDER("Speed", data.fSpeed, 0, 20000, 1) START_WIDGET_GROUP("Move Params") REPEAT COUNT_OF(data.fMoveParam) i txt = "Param " txt += i ADD_WIDGET_FLOAT_READ_ONLY(txt, data.fMoveParam[i]) ENDREPEAT STOP_WIDGET_GROUP() STOP_WIDGET_GROUP() START_WIDGET_GROUP("Weapon") ADD_WIDGET_INT_READ_ONLY("iWeaponBurstCounter", data.iWeaponBurstCounter) ADD_WIDGET_INT_READ_ONLY("iWeaponShotCounter", data.iWeaponShotCounter) ADD_WIDGET_FLOAT_READ_ONLY("Timer", data.fWeaponTimer) STOP_WIDGET_GROUP() STOP_WIDGET_GROUP() ENDPROC PROC GGSM_ENTITY_DATA_WIDGET(GGSM_ENTITY_DATA &data, GGSM_ENTITY_TYPE eType) START_WIDGET_GROUP(GGSM_ENTITY_TYPE_TO_STRING(eType)) ADD_WIDGET_INT_SLIDER("HP", data.iMaxHP, 0, 1000, 1) ADD_WIDGET_FLOAT_SLIDER("Base Speed", data.fBaseSpeed, 0, 8000, 1) GGSM_ADD_WIDGET_TRANSFORM_SLIDER("Gun Transform", data.sGunPos) GGSM_COLLISION_DATA_WIDGET(data.sCollisionData) STOP_WIDGET_GROUP() ENDPROC PROC GGSM_PROJECTILE_WIDGET(GGSM_PROJECTILE &data, STRING str) START_WIDGET_GROUP(str) ADD_WIDGET_FLOAT_READ_ONLY("Timer", data.fTimer) ADD_WIDGET_INT_READ_ONLY("Target Index", data.iTargetIndex) GGSM_ADD_WIDGET_VECTOR_2D_READONLY("Point 0", data.sCollider.sData.vCollisionVectors[0]) GGSM_ADD_WIDGET_VECTOR_2D_READONLY("Point 1", data.sCollider.sData.vCollisionVectors[1]) ADD_WIDGET_FLOAT_SLIDER("Radius", data.sCollider.sData.fColRadius, -cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_WIDTH, 1) ADD_WIDGET_FLOAT_SLIDER("Length", data.fLength, -cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_WIDTH, 1) STOP_WIDGET_GROUP() ENDPROC #IF GGSM_DEBUG_TSHIRT_HELP PROC GGSM_CREATE_TSHIRT_DEBUG_WIDGET() START_WIDGET_GROUP("T-Shirt Debug") ADD_WIDGET_BOOL("bDebugResetUnlocks", sGGSMData.bDebugResetUnlocks) ADD_WIDGET_BOOL("bDebugShowUnlock", sGGSMData.bDebugShowUnlock) GGSM_UNLOCK_SELECTOR(sGGSMData.iDebugUnlockSelector) STOP_WIDGET_GROUP() ENDPROC PROC GGSM_UPDATE_TSHIRT_DEBUG_WIDGET() GGSM_UNLOCK_TYPE eType IF (sGGSMData.bDebugResetUnlocks) SET_MP_INT_CHARACTER_STAT(MP_STAT_ARCADE_HELP_BITSET, 0) sGGSMData.bDebugResetUnlocks = FALSE ENDIF IF (sGGSMData.bDebugShowUnlock) eType = INT_TO_ENUM(GGSM_UNLOCK_TYPE, sGGSMData.iDebugUnlockSelector) GGSM_UNLOCK_PRIZE(eType) sGGSMData.bDebugShowUnlock = FALSE ENDIF ENDPROC #ENDIF #IF GGSM_CHALLENGE_DEBUG PROC GGSM_CREATE_CHALLENGE_DEBUG_WIDGET() START_WIDGET_GROUP("Challenge Debug") ADD_WIDGET_BOOL("Reset", sGGSMData.bDebugResetChallenge) ADD_WIDGET_BOOL("Show Awards", sGGSMData.bDebugShowAwardsOnScreen) ADD_WIDGET_BOOL("ApeEscape", sGGSMData.bDebugChallengeApeEscape) ADD_WIDGET_BOOL("MonkeyMind", sGGSMData.bDebugChallengeMonkeyMind) ADD_WIDGET_BOOL("AstroChimp B", sGGSMData.bDebugChallengeAstroChimpB) ADD_WIDGET_BOOL("AstroChimp S", sGGSMData.bDebugChallengeAstroChimpS) ADD_WIDGET_BOOL("AstroChimp G", sGGSMData.bDebugChallengeAstroChimpG) ADD_WIDGET_BOOL("AstroChimp P", sGGSMData.bDebugChallengeAstroChimpP) ADD_WIDGET_BOOL("AquaApe", sGGSMData.bDebugChallengeAquaApe) ADD_WIDGET_BOOL("Award All", sGGSMData.bDebugAwardAllChallenges) STOP_WIDGET_GROUP() ENDPROC PROC GGSM_UPDATE_CHALLENGE_DEBUG_WIDGET() IF (sGGSMData.bDebugResetChallenge) GGSM_RESET_CHALLENGES() sGGSMData.bDebugResetChallenge = FALSE ENDIF IF (sGGSMData.bDebugChallengeApeEscape) GGSM_SET_CHALLENGE_COMPLETED(GGSM_CHALLENGE_BIT_APE_ESCAPE) sGGSMData.bDebugChallengeApeEscape = FALSE ENDIF IF (sGGSMData.bDebugChallengeMonkeyMind) GGSM_SET_CHALLENGE_COMPLETED(GGSM_CHALLENGE_BIT_MONKEY_MIND) sGGSMData.bDebugChallengeMonkeyMind = FALSE ENDIF IF (sGGSMData.bDebugChallengeAstroChimpB) GGSM_SET_CHALLENGE_COMPLETED(GGSM_CHALLENGE_BIT_ASTROCHIMP_B) sGGSMData.bDebugChallengeAstroChimpB = FALSE ENDIF IF (sGGSMData.bDebugChallengeAstroChimpS) GGSM_SET_CHALLENGE_COMPLETED(GGSM_CHALLENGE_BIT_ASTROCHIMP_S) sGGSMData.bDebugChallengeAstroChimpS = FALSE ENDIF IF (sGGSMData.bDebugChallengeAstroChimpG) GGSM_SET_CHALLENGE_COMPLETED(GGSM_CHALLENGE_BIT_ASTROCHIMP_G) sGGSMData.bDebugChallengeAstroChimpG = FALSE ENDIF IF (sGGSMData.bDebugChallengeAstroChimpP) GGSM_SET_CHALLENGE_COMPLETED(GGSM_CHALLENGE_BIT_ASTROCHIMP_P) sGGSMData.bDebugChallengeAstroChimpP = FALSE ENDIF IF (sGGSMData.bDebugAwardAllChallenges) GGSM_RESET_CHALLENGES() GGSM_SET_CHALLENGE_COMPLETED(GGSM_CHALLENGE_BIT_APE_ESCAPE) GGSM_SET_CHALLENGE_COMPLETED(GGSM_CHALLENGE_BIT_ASTROCHIMP_B) GGSM_SET_CHALLENGE_COMPLETED(GGSM_CHALLENGE_BIT_ASTROCHIMP_S) GGSM_SET_CHALLENGE_COMPLETED(GGSM_CHALLENGE_BIT_ASTROCHIMP_G) GGSM_SET_CHALLENGE_COMPLETED(GGSM_CHALLENGE_BIT_ASTROCHIMP_P) GGSM_SET_CHALLENGE_COMPLETED(GGSM_CHALLENGE_BIT_MONKEY_MIND) sGGSMData.bDebugAwardAllChallenges = FALSE ENDIF IF (sGGSMData.bDebugShowAwardsOnScreen) GGSM_DRAW_AWARD_DEBUG() ENDIF ENDPROC #ENDIF //------------------------------------------------- // EDITOR CORE DEBUG FUNCTIONS //------------------------------------------------- FUNC BOOL GGSM_EDITOR_CORE_IS_EDITOR_ACTIVE(GGSM_EDITOR_CORE &editor) RETURN editor.bEditorActive ENDFUNC FUNC BOOL GGSM_EDITOR_CORE_IS_EDITOR_LAST_ACTIVE(GGSM_EDITOR_CORE &editor) RETURN editor.bLastEditorActive ENDFUNC PROC GGSM_EDITOR_CORE_FINALISE_FOR_FRAME_END(GGSM_EDITOR_CORE &editor) editor.iLastEditDatam = editor.iCurrentEditDatam editor.iLastEditIndex = editor.iCurrentEditIndex editor.bLastEditorActive = editor.bEditorActive editor.bLastPauseState = sGGSMData.bGamePaused ENDPROC PROC GGSM_EDITOR_CORE_SET_EDITOR_BIT(GGSM_EDITOR_CORE &editor, GGSM_EDITOR_BIT eBit) SET_BITMASK_ENUM_AS_ENUM(editor.eFlags, eBit) CPRINTLN(DEBUG_MINIGAME, "GGSM_EDITOR_CORE_SET_EDITOR_BIT - ", GGSM_EDITOR_BIT_TO_STRING(eBit)) ENDPROC PROC GGSM_EDITOR_CORE_CLEAR_EDITOR_BIT(GGSM_EDITOR_CORE &editor, GGSM_EDITOR_BIT eBit) CLEAR_BITMASK_ENUM_AS_ENUM(editor.eFlags, eBit) CPRINTLN(DEBUG_MINIGAME, "GGSM_EDITOR_CORE_CLEAR_EDITOR_BIT - ", GGSM_EDITOR_BIT_TO_STRING(eBit)) ENDPROC FUNC BOOL GGSM_EDITOR_CORE_EDIT_INT_PARAM(GGSM_EDITOR_CORE &editor, INT &iValue, INT max, INT iIgnoreValue = -1) IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_LEFT) iValue -- IF (iValue < 0) iValue = max - 1 ENDIF IF (editor.iOption != iIgnoreValue) CLEAR_BITMASK_ENUM_AS_ENUM(editor.eFlags, GGSM_EDITOR_BIT_SAVED) ENDIF RETURN TRUE ENDIF IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_RIGHT) iValue ++ IF (iValue >= max) iValue = 0 ENDIF IF (editor.iOption != iIgnoreValue) CLEAR_BITMASK_ENUM_AS_ENUM(editor.eFlags, GGSM_EDITOR_BIT_SAVED) ENDIF RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL GGSM_EDITOR_CORE_EDIT_INT_MIN_MAX(GGSM_EDITOR_CORE &editor, INT &iValue, INT min, INT max, INT iIgnoreValue = -1) IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_LEFT) iValue -- IF (iValue < min) iValue = max - 1 ENDIF IF (editor.iOption != iIgnoreValue) CLEAR_BITMASK_ENUM_AS_ENUM(editor.eFlags, GGSM_EDITOR_BIT_SAVED) ENDIF RETURN TRUE ENDIF IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_RIGHT) iValue ++ IF (iValue >= max) iValue = min ENDIF IF (editor.iOption != iIgnoreValue) CLEAR_BITMASK_ENUM_AS_ENUM(editor.eFlags, GGSM_EDITOR_BIT_SAVED) ENDIF RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC GGSM_EDITOR_CORE_EDIT_FLOAT_MIN_MAX(GGSM_EDITOR_CORE &editor, FLOAT &iValue, FLOAT inc, FLOAT min, FLOAT max, INT iIgnoreValue = -1) IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_LEFT) iValue -= inc IF (iValue < min) iValue = max ENDIF IF (editor.iOption != iIgnoreValue) CLEAR_BITMASK_ENUM_AS_ENUM(editor.eFlags, GGSM_EDITOR_BIT_SAVED) ENDIF ENDIF IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_RIGHT) iValue += inc IF (iValue > max) iValue = min ENDIF IF (editor.iOption != iIgnoreValue) CLEAR_BITMASK_ENUM_AS_ENUM(editor.eFlags, GGSM_EDITOR_BIT_SAVED) ENDIF ENDIF ENDPROC PROC GGSM_EDITOR_CORE_PICK_OPTION(GGSM_EDITOR_CORE &editor, INT iMaxOption) // options IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_UP) editor.iOption -- IF (editor.iOption < 0) editor.iOption = iMaxOption - 1 ENDIF ENDIF IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_DOWN) editor.iOption ++ IF (editor.iOption >= iMaxOption) editor.iOption = 0 ENDIF ENDIF ENDPROC PROC GGSM_EDITOR_CORE_SHARED_UPDATE(GGSM_EDITOR_CORE &editor) IF (editor.iLastEditIndex != editor.iCurrentEditIndex) GGSM_EDITOR_CORE_SET_EDITOR_BIT(editor, GGSM_EDITOR_BIT_COPY_FROM_DATA) ENDIF IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RLEFT) GGSM_EDITOR_CORE_SET_EDITOR_BIT(editor, GGSM_EDITOR_BIT_COPY_TO_DATA) ENDIF IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RRIGHT) GGSM_EDITOR_CORE_SET_EDITOR_BIT(editor, GGSM_EDITOR_BIT_COPY_FROM_DATA) ENDIF IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RDOWN) GGSM_EDITOR_CORE_SET_EDITOR_BIT(editor, GGSM_EDITOR_BIT_TEST_SYSTEM) ENDIF IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RUP) GGSM_EDITOR_CORE_SET_EDITOR_BIT(editor, GGSM_EDITOR_BIT_EXPORT) ENDIF IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_SELECT) sGGSMData.bGamePaused = !sGGSMData.bGamePaused ENDIF ENDPROC //------------------------------------------------- // EDITOR TEST DEBUG FUNCTIONS //------------------------------------------------- #IF GGSM_ENTITY_EDITOR_ACTIVE PROC GGSM_ENTITY_EDITOR_WIDGET_UPDATE(GGSM_ENTITY_EDITOR &editor) IF (editor.sEditCore.bEditorActive = TRUE) IF (editor.sEditCore.bLastEditorActive = FALSE) GGSM_EDITOR_CORE_SET_EDITOR_BIT(editor.sEditCore, GGSM_EDITOR_BIT_COPY_FROM_DATA) sGGSMData.bGamePaused = TRUE ENDIF DISABLE_PLAYER_CONTROLS_THIS_FRAME() GGSM_SET_PLAYER_INVUNERABLE() GGSM_EDITOR_CORE_SHARED_UPDATE(editor.sEditCore) GGSM_EDITOR_CORE_PICK_OPTION(editor.sEditCore, GGSM_ENTITY_EDITOR_OPTION_MAX) // handle options SWITCH (editor.sEditCore.iOption) CASE GGSM_ENTITY_EDITOR_OPTION_DATA_SELECT IF GGSM_EDITOR_CORE_EDIT_INT_PARAM(editor.sEditCore, editor.sEditCore.iCurrentEditIndex, ENUM_TO_INT(NUM_GGSM_ENTITY_TYPE)) GGSM_EDITOR_CORE_SET_EDITOR_BIT(editor.sEditCore, GGSM_EDITOR_BIT_COPY_FROM_DATA) ENDIF BREAK ENDSWITCH IF IS_BITMASK_ENUM_AS_ENUM_SET(editor.sEditCore.eFlags, GGSM_EDITOR_BIT_COPY_FROM_DATA) editor.eEditType = INT_TO_ENUM(GGSM_ENTITY_TYPE, editor.sEditCore.iCurrentEditIndex) editor.sEditData = GGSM_ENTITY_DATA_GET(editor.eEditType) GGSM_EDITOR_CORE_CLEAR_EDITOR_BIT(editor.sEditCore, GGSM_EDITOR_BIT_COPY_FROM_DATA) GGSM_ENTITY_RESET(editor.sTestEntity) GGSM_ENTITY_INIT(editor.sTestEntity, editor.eEditType, INIT_VECTOR_2D(cfBASE_SCREEN_HALF_WIDTH, cfBASE_SCREEN_HALF_HEIGHT), 0, TRUE) ENDIF // handle point movement SWITCH (editor.sEditCore.iOption) CASE GGSM_ENTITY_EDITOR_OPTION_POINT_EDIT GGSM_ALTER_POINT_WITH_INPUT(editor.sEditData.sCollisionData.vCollisionVectors[0], 128.0, GGSM_INPUT_LSTICK) GGSM_ALTER_POINT_WITH_INPUT(editor.sEditData.sCollisionData.vCollisionVectors[1], 128.0, GGSM_INPUT_RSTICK) BREAK CASE GGSM_ENTITY_EDITOR_OPTION_RADIUS_SELECT GGSM_ALTER_FLOAT_WITH_INPUT(editor.sEditData.sCollisionData.fColRadius, 128.0, GGSM_INPUT_LSTICK) BREAK CASE GGSM_ENTITY_EDITOR_OPTION_GUNPOS_SELECT GGSM_ALTER_POINT_WITH_INPUT(editor.sEditData.sGunPos.vPosition, 128.0, GGSM_INPUT_LSTICK) GGSM_ALTER_FLOAT_WITH_INPUT(editor.sEditData.sGunPos.fRotation, 360.0, GGSM_INPUT_RSTICK) BREAK ENDSWITCH IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RDOWN) GGSM_EDITOR_CORE_SET_EDITOR_BIT(editor.sEditCore, GGSM_EDITOR_BIT_COPY_TO_DATA) ENDIF IF IS_BITMASK_ENUM_AS_ENUM_SET(editor.sEditCore.eFlags, GGSM_EDITOR_BIT_COPY_TO_DATA) editor.eEditType = INT_TO_ENUM(GGSM_ENTITY_TYPE, editor.sEditCore.iCurrentEditIndex) GGSM_EDITOR_CORE_CLEAR_EDITOR_BIT(editor.sEditCore, GGSM_EDITOR_BIT_COPY_TO_DATA) GGSM_EDITOR_CORE_SET_EDITOR_BIT(editor.sEditCore, GGSM_EDITOR_BIT_SAVED) GGSM_ENTITY_RESET(editor.sTestEntity) GGSM_ENTITY_INIT(editor.sTestEntity, editor.eEditType, INIT_VECTOR_2D(cfBASE_SCREEN_HALF_WIDTH, cfBASE_SCREEN_HALF_HEIGHT), 0, TRUE) ENDIF IF IS_BITMASK_ENUM_AS_ENUM_SET(editor.sEditCore.eFlags, GGSM_EDITOR_BIT_EXPORT) GGSM_EDITOR_CORE_CLEAR_EDITOR_BIT(editor.sEditCore, GGSM_EDITOR_BIT_EXPORT) GGSM_EDITOR_CORE_SET_EDITOR_BIT(editor.sEditCore, GGSM_EDITOR_BIT_SAVED) ENDIF editor.sDebugEntData[editor.eEditType] = editor.sEditData GGSM_ENTITY_UPDATE(editor.sTestEntity) GGSM_DRAW_ENTITY_EDITOR(editor) ELSE IF (editor.sEditCore.bLastEditorActive != editor.sEditCore.bEditorActive) sGGSMData.bGamePaused = FALSE ENDIF ENDIF GGSM_EDITOR_CORE_FINALISE_FOR_FRAME_END(editor.sEditCore) ENDPROC #ENDIF #IF GGSM_SPAWN_EDITOR_ACTIVE PROC GGSM_SPAWN_EDITOR_WIDGET_UPDATE(GGSM_SPAWN_EDITOR &editor) // check right stick VECTOR_2D vec = INIT_VECTOR_2D(GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_X), GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_Y)) FLOAT len = VECTOR_2D_MAG(vec) INT iGroupID = -1 INT ind IF (editor.sEditCore.bEditorActive = TRUE) IF (editor.sEditCore.bLastEditorActive = FALSE) GGSM_EDITOR_CORE_SET_EDITOR_BIT(editor.sEditCore, GGSM_EDITOR_BIT_COPY_FROM_DATA) GGSM_RESET_FOR_STAGE_START(FALSE) sGGSMData.bGamePaused = TRUE ENDIF IF IS_CONTROL_HELD(sGGSMData.sStartBtnTimer) sGGSMData.bGamePaused = FALSE editor.sEditCore.bEditorActive = FALSE GGSM_SET_CLIENT_STATE(GGSM_STATE_STAGE_ACTIVE) EXIT ENDIF DISABLE_PLAYER_CONTROLS_THIS_FRAME() GGSM_SET_PLAYER_INVUNERABLE() GGSM_EDITOR_CORE_SHARED_UPDATE(editor.sEditCore) GGSM_EDITOR_CORE_PICK_OPTION(editor.sEditCore, GGSM_SPAWN_EDITOR_OPTION_MAX) IF (len >= 0.9) editor.fFormAngle = GET_HEADING_FROM_VECTOR_2D(vec.x, vec.y) ENDIF // options SWITCH (editor.sEditCore.iOption) CASE GGSM_SPAWN_EDITOR_OPTION_DATA_SELECT IF GGSM_EDITOR_CORE_EDIT_INT_PARAM(editor.sEditCore, editor.sEditCore.iCurrentEditIndex, GGSM_MAX_SPAWN_DATA) GGSM_EDITOR_CORE_SET_EDITOR_BIT(editor.sEditCore, GGSM_EDITOR_BIT_COPY_FROM_DATA) ENDIF BREAK CASE GGSM_SPAWN_EDITOR_OPTION_FORMATION_SELECT GGSM_EDITOR_CORE_EDIT_INT_PARAM(editor.sEditCore, editor.iFormationType, ENUM_TO_INT(NUM_GGSM_FORMATION_TYPE), GGSM_SPAWN_EDITOR_OPTION_FORMATION_SELECT) BREAK CASE GGSM_SPAWN_EDITOR_OPTION_ENTITY_SELECT GGSM_EDITOR_CORE_EDIT_INT_PARAM(editor.sEditCore, editor.iEntityType, ENUM_TO_INT(NUM_GGSM_ENTITY_TYPE)) BREAK CASE GGSM_SPAWN_EDITOR_OPTION_MOVEMENT_SELECT GGSM_EDITOR_CORE_EDIT_INT_PARAM(editor.sEditCore, editor.iMoveType, ENUM_TO_INT(NUM_GGSM_MOVEMENT_TYPE)) BREAK CASE GGSM_SPAWN_EDITOR_OPTION_WEAPON_SELECT GGSM_EDITOR_CORE_EDIT_INT_PARAM(editor.sEditCore, editor.iWeaponType, ENUM_TO_INT(NUM_GGSM_WEAPON_TYPE)) BREAK CASE GGSM_SPAWN_EDITOR_OPTION_UNITCOUNT_SELECT GGSM_EDITOR_CORE_EDIT_INT_PARAM(editor.sEditCore, editor.sEditData.iFormationMembers, GGSM_MAX_ENEMIES) BREAK CASE GGSM_SPAWN_EDITOR_OPTION_XSPACE_SELECT GGSM_EDITOR_CORE_EDIT_FLOAT_MIN_MAX(editor.sEditCore, editor.sEditData.vSpacing.x, 0.125, 0.125, 4.0, GGSM_SPAWN_EDITOR_OPTION_FORMATION_SELECT) BREAK CASE GGSM_SPAWN_EDITOR_OPTION_YSPACE_SELECT GGSM_EDITOR_CORE_EDIT_FLOAT_MIN_MAX(editor.sEditCore, editor.sEditData.vSpacing.y, 0.125, 0.125, 4.0, GGSM_SPAWN_EDITOR_OPTION_FORMATION_SELECT) BREAK CASE GGSM_SPAWN_EDITOR_OPTION_PATH_SELECT IF (editor.iFormationType != ENUM_TO_INT(GGSM_FORMATION_POWER_UP)) GGSM_EDITOR_CORE_EDIT_INT_MIN_MAX(editor.sEditCore, editor.sEditData.iPathNumber, -1, GGSM_MAX_PATH_LIBRARY) ELSE GGSM_EDITOR_CORE_EDIT_INT_PARAM(editor.sEditCore, editor.sEditData.iPathNumber, GGSM_NUM_POWER_UPS) ENDIF BREAK CASE GGSM_SPAWN_EDITOR_OPTION_FORMATION_SHIFT GGSM_EDITOR_CORE_EDIT_FLOAT_MIN_MAX(editor.sEditCore, editor.fFormShift, 50.0, -10000.0, 10000.0, GGSM_SPAWN_EDITOR_OPTION_FORMATION_SELECT) BREAK ENDSWITCH // shift the camera forward and backward IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_LB) GGSM_RESET_FOR_STAGE_START(FALSE) editor.sEditCore.iActiveTestGroup = -1 ENDIF IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RT) sGGSMData.sCamera.vWorldPosition.x += (700.0 * GET_FRAME_TIME()) sGGSMData.sCamera.fDistTravelled += (700.0 * GET_FRAME_TIME()) sGGSMData.sCamera.vLastWorldPosition = sGGSMData.sCamera.vWorldPosition ENDIF IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RB) sGGSMData.sCamera.vWorldPosition.x -= (700.0 * GET_FRAME_TIME()) sGGSMData.sCamera.fDistTravelled -= (700.0 * GET_FRAME_TIME()) sGGSMData.sCamera.vLastWorldPosition = sGGSMData.sCamera.vWorldPosition ENDIF IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_LT) IF (editor.sEditCore.iOption != GGSM_SPAWN_EDITOR_OPTION_FORMATION_SHIFT) ind = GGSM_GET_FREE_FORMATION_SLOT(sGGSMData.sSpawnData) IF (ind != -1) editor.sEditCore.iCurrentEditIndex = ind editor.sEditCore.iLastEditIndex = ind ENDIF ELSE GGSM_SHIFT_FORMATION_DATA_ARRAY(sGGSMData.sSpawnData, editor.fFormShift, editor.sEditCore.iCurrentEditIndex) ENDIF ENDIF // handle point movement GGSM_ALTER_POINT_WITH_INPUT(editor.vFormPosition, 700.0) editor.vFormPosition.x = CLAMP(editor.vFormPosition.x, -cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_WIDTH) editor.vFormPosition.y = CLAMP(editor.vFormPosition.y, -cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_WIDTH) // copy data from array IF IS_BITMASK_ENUM_AS_ENUM_SET(editor.sEditCore.eFlags, GGSM_EDITOR_BIT_COPY_FROM_DATA) editor.sEditData = sGGSMData.sSpawnData[editor.sEditCore.iCurrentEditIndex] editor.iEntityType = ENUM_TO_INT(GGSM_FORMATION_GET_ENTITY_TYPE(editor.sEditData)) editor.iFormationType = ENUM_TO_INT(GGSM_FORMATION_GET_TYPE(editor.sEditData)) editor.iMoveType = ENUM_TO_INT(GGSM_FORMATION_GET_MOVEMENT_TYPE(editor.sEditData)) editor.iWeaponType = ENUM_TO_INT(GGSM_FORMATION_GET_WEAPON_TYPE(editor.sEditData)) vec = GGSM_FORMATION_GET_START_DIRECTION(editor.sEditData) editor.fFormAngle = GET_HEADING_FROM_VECTOR_2D(vec.x, vec.y) editor.vFormPosition = GGSM_FORMATION_GET_START_POSITION(editor.sEditData) GGSM_RESET_FOR_STAGE_START(FALSE, editor.sEditData.fScrollDistance) sGGSMData.iSpawnIndexCounter = editor.sEditCore.iCurrentEditIndex GGSM_EDITOR_CORE_CLEAR_EDITOR_BIT(editor.sEditCore, GGSM_EDITOR_BIT_COPY_FROM_DATA) ENDIF // copy data to array IF IS_BITMASK_ENUM_AS_ENUM_SET(editor.sEditCore.eFlags, GGSM_EDITOR_BIT_COPY_TO_DATA) vec = GGSM_ROTATE_VECTOR_2D_ABOUT_Z(INIT_VECTOR_2D(0, 1), editor.fFormAngle) GGSM_FORMATION_SET_SCROLL_DISTANCE(editor.sEditData, sGGSMData.sCamera.fDistTravelled) GGSM_FORMATION_SET_START_POSITION(editor.sEditData, editor.vFormPosition.x, editor.vFormPosition.y) GGSM_FORMATION_SET_START_DIRECTION(editor.sEditData, vec.x, vec.y) sGGSMData.sSpawnData[editor.sEditCore.iCurrentEditIndex] = editor.sEditData GGSM_QUICK_SORT_FORMATION_DATA_ARRAY(sGGSMData.sSpawnData) editor.sEditCore.iCurrentEditIndex = GGSM_FIND_FORMATION_SLOT_AT_DISTANCE(sGGSMData.sSpawnData, editor.sEditData.fScrollDistance) GGSM_EDITOR_CORE_CLEAR_EDITOR_BIT(editor.sEditCore, GGSM_EDITOR_BIT_COPY_TO_DATA) GGSM_EDITOR_CORE_SET_EDITOR_BIT(editor.sEditCore, GGSM_EDITOR_BIT_SAVED) ENDIF // update dropdowns GGSM_FORMATION_SET_TYPE(editor.sEditData, INT_TO_ENUM(GGSM_FORMATION_TYPE, editor.iFormationType)) GGSM_FORMATION_SET_ENTITY_TYPE(editor.sEditData, INT_TO_ENUM(GGSM_ENTITY_TYPE, editor.iEntityType)) GGSM_FORMATION_SET_MOVEMENT_TYPE(editor.sEditData, INT_TO_ENUM(GGSM_MOVEMENT_TYPE, editor.iMoveType)) GGSM_FORMATION_SET_WEAPON_TYPE(editor.sEditData, INT_TO_ENUM(GGSM_WEAPON_TYPE, editor.iWeaponType)) // test formation IF IS_BITMASK_ENUM_AS_ENUM_SET(editor.sEditCore.eFlags, GGSM_EDITOR_BIT_TEST_SYSTEM) vec = GGSM_ROTATE_VECTOR_2D_ABOUT_Z(INIT_VECTOR_2D(0, 1), editor.fFormAngle) GGSM_FORMATION_SET_START_DIRECTION(editor.sEditData, vec.x, vec.y) GGSM_FORMATION_SET_START_POSITION(editor.sEditData, editor.vFormPosition.x, editor.vFormPosition.y) iGroupID = GGSM_GET_FREE_ENTITY_GROUP(sGGSMData.sEntityGroup) IF (iGroupID != GGSM_INVALID_GROUP_ID) editor.sEditCore.iActiveTestGroup = iGroupID GGSM_FORMATION_SET_SCROLL_DISTANCE(editor.sEditData, sGGSMData.sCamera.fDistTravelled) GGSM_ACTIVATE_ENTITY_GROUP_AS_FORMATION(sGGSMData.sEntityGroup[iGroupID], editor.sEditData) ENDIF GGSM_EDITOR_CORE_SET_EDITOR_BIT(editor.sEditCore, GGSM_EDITOR_BIT_COPY_TO_DATA) GGSM_EDITOR_CORE_CLEAR_EDITOR_BIT(editor.sEditCore, GGSM_EDITOR_BIT_TEST_SYSTEM) ENDIF // update scroll while test is active IF (editor.sEditCore.iActiveTestGroup != GGSM_INVALID_GROUP_ID) IF GGSM_ENTITY_GROUP_IS_RUNNING(sGGSMData.sEntityGroup[editor.sEditCore.iActiveTestGroup]) sGGSMData.bGamePaused = FALSE ENDIF IF GGSM_ENTITY_GROUP_HAS_GROUP_FINISHED(sGGSMData.sEntityGroup[editor.sEditCore.iActiveTestGroup]) GGSM_RESET_FOR_STAGE_START(FALSE, editor.sEditData.fScrollDistance) editor.sEditCore.iActiveTestGroup = GGSM_INVALID_GROUP_ID sGGSMData.bGamePaused = TRUE ENDIF ENDIF // export IF IS_BITMASK_ENUM_AS_ENUM_SET(editor.sEditCore.eFlags, GGSM_EDITOR_BIT_EXPORT) GGSM_QUICK_SORT_FORMATION_DATA_ARRAY(sGGSMData.sSpawnData) GGSM_DEBUG_EXPORT_FORMATION_ARRAY_TO_SCRIPT(sGGSMData.sSpawnData, DEFAULT, TRUE) GGSM_EDITOR_CORE_CLEAR_EDITOR_BIT(editor.sEditCore, GGSM_EDITOR_BIT_EXPORT) GGSM_EDITOR_CORE_SET_EDITOR_BIT(editor.sEditCore, GGSM_EDITOR_BIT_SAVED) ENDIF GGSM_DRAW_SPAWN_EDITOR(editor) ELSE IF (editor.sEditCore.bLastEditorActive != editor.sEditCore.bEditorActive) sGGSMData.bGamePaused = FALSE ENDIF ENDIF GGSM_EDITOR_CORE_FINALISE_FOR_FRAME_END(editor.sEditCore) ENDPROC #ENDIF #IF GGSM_TILEMAP_EDITOR_ACTIVE PROC GGSM_TILEMAP_EDITOR_WIDGET_UPDATE(GGSM_TILEMAP_EDITOR &editor, GGSM_TILEMAP &tm) IF (editor.sEditCore.bEditorActive = TRUE) IF (editor.sEditCore.bLastEditorActive = FALSE) GGSM_RESET_FOR_STAGE_START(FALSE) sGGSMData.bGamePaused = TRUE ENDIF sGGSMData.bDrawCollisionDebug = TRUE DISABLE_PLAYER_CONTROLS_THIS_FRAME() GGSM_SET_PLAYER_INVUNERABLE() GGSM_EDITOR_CORE_SHARED_UPDATE(editor.sEditCore) IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RT) GGSM_EDITOR_CORE_CLEAR_EDITOR_BIT(editor.sEditCore, GGSM_EDITOR_BIT_EDIT_MODE) ELSE GGSM_EDITOR_CORE_SET_EDITOR_BIT(editor.sEditCore, GGSM_EDITOR_BIT_EDIT_MODE) ENDIF IF NOT IS_BITMASK_ENUM_AS_ENUM_SET(editor.sEditCore.eFlags, GGSM_EDITOR_BIT_EDIT_MODE) GGSM_EDITOR_CORE_PICK_OPTION(editor.sEditCore, GGSM_TILEMAP_EDITOR_OPTION_MAX) // options SWITCH (editor.sEditCore.iOption) CASE GGSM_TILEMAP_EDITOR_OPTION_TILE_SELECT GGSM_EDITOR_CORE_EDIT_INT_PARAM(editor.sEditCore, editor.sEditCore.iCurrentEditIndex, tm.iMaxTiles) BREAK CASE GGSM_TILEMAP_EDITOR_OPTION_FLIP_SELECT GGSM_EDITOR_CORE_EDIT_INT_PARAM(editor.sEditCore, editor.iFlipBits, 4) BREAK CASE GGSM_TILEMAP_EDITOR_OPTION_MAX_X_SELECT GGSM_EDITOR_CORE_EDIT_INT_PARAM(editor.sEditCore, tm.iMapWidth, GGSM_MAX_TILEMAP_SIZE_X + 1) BREAK CASE GGSM_TILEMAP_EDITOR_OPTION_MAX_Y_SELECT GGSM_EDITOR_CORE_EDIT_INT_PARAM(editor.sEditCore, tm.iMapHeight, GGSM_MAX_TILEMAP_SIZE_Y + 1) BREAK ENDSWITCH ELSE IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_LEFT) editor.iEditMapX -- ENDIF IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_RIGHT) editor.iEditMapX ++ ENDIF IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_UP) editor.iEditMapY -- ENDIF IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_DOWN) editor.iEditMapY ++ ENDIF ENDIF IF GGSM_ALTER_POINT_WITH_INPUT(sGGSMData.sCamera.vWorldPosition, 700.0, GGSM_INPUT_RSTICK) GGSM_WORLD_POSITION_IN_TILE_MAP(tm, ADD_VECTOR_2D(sGGSMData.sCamera.vWorldPosition, sGGSMData.sCamera.vWorldViewportOffset), editor.iEditMapX, editor.iEditMapY) ENDIF // clamp values editor.iEditMapX = CLAMP_INT(editor.iEditMapX, 0, tm.iMapWidth - 1) editor.iEditMapY = CLAMP_INT(editor.iEditMapY, 0, tm.iMapHeight - 1) editor.sEditCore.iCurrentEditIndex = CLAMP_INT(editor.sEditCore.iCurrentEditIndex, 0, tm.iMaxTiles - 1) // copy data to array IF IS_BITMASK_ENUM_AS_ENUM_SET(editor.sEditCore.eFlags, GGSM_EDITOR_BIT_COPY_TO_DATA) GGSM_TILEMAP_SET_INDEX(tm, editor.iEditMapX, editor.iEditMapY, editor.sEditCore.iCurrentEditIndex) GGSM_TILE_SET_FLIP(tm, editor.iEditMapX, editor.iEditMapY, editor.iFlipBits) CLEAR_BITMASK_ENUM_AS_ENUM(editor.sEditCore.eFlags, GGSM_EDITOR_BIT_COPY_TO_DATA) ENDIF IF IS_BITMASK_ENUM_AS_ENUM_SET(editor.sEditCore.eFlags, GGSM_EDITOR_BIT_EXPORT) CLEAR_BITMASK_ENUM_AS_ENUM(editor.sEditCore.eFlags, GGSM_EDITOR_BIT_EXPORT) GGSM_DEBUG_EXPORT_TILE_MAP_DATA_TO_SCRIPT(tm) SET_BITMASK_ENUM_AS_ENUM(editor.sEditCore.eFlags, GGSM_EDITOR_BIT_SAVED) ENDIF GGSM_DRAW_TILE_MAP_EDITOR(editor, tm) ELSE IF (editor.sEditCore.bLastEditorActive != editor.sEditCore.bEditorActive) sGGSMData.bGamePaused = FALSE ENDIF ENDIF editor.iLastEditMapX = editor.iEditMapX editor.iLastEditMapY = editor.iEditMapY GGSM_EDITOR_CORE_FINALISE_FOR_FRAME_END(editor.sEditCore) ENDPROC #ENDIF //------------------------------------------------- // LOG FUNCTIONS //------------------------------------------------- PROC GGSM_AABB_TO_LOG(GGSM_AABB &ent) CPRINTLN(DEBUG_MINIGAME, " --- GGSM_AABB ---") CPRINTLN(DEBUG_MINIGAME, " vCenter:[", ent.vCenter.x, ",", ent.vCenter.y,"]") CPRINTLN(DEBUG_MINIGAME, " vHalfSize:[", ent.vHalfSize.x, ",", ent.vHalfSize.y,"]") CPRINTLN(DEBUG_MINIGAME, " --- END GGSM_AABB ---") CPRINTLN(DEBUG_MINIGAME, " ") ENDPROC PROC GGSM_BOSS_CONTROLLER_TO_LOG(GGSM_BOSS_CONTROLLER &ent, INT i) INT entIndex CPRINTLN(DEBUG_MINIGAME, " --- GGSM_BOSS_CONTROLLER [", i ,"]---") CPRINTLN(DEBUG_MINIGAME, " eType:", GGSM_BOSS_TYPE_TO_STRING(ent.eType)) CPRINTLN(DEBUG_MINIGAME, " eState:", GGSM_BOSS_STATE_TO_STRING(ent.eState)) CPRINTLN(DEBUG_MINIGAME, " HP:", ent.iTotalHP, "/", ent.iMaxTotalHP) CPRINTLN(DEBUG_MINIGAME, " fStateTimer:", ent.fStateTimer) CPRINTLN(DEBUG_MINIGAME, " iGroupID:", ent.iGroupID) CPRINTLN(DEBUG_MINIGAME, " iSummedMaxHPBitSet:", ent.iSummedMaxHPBitSet) CPRINTLN(DEBUG_MINIGAME, " iBossPatternState:", ent.iBossPatternState) CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- BOSS SECTIONS ---") REPEAT GGSM_MAX_BOSS_PARTS i entIndex = GGSM_BOSS_CONTROLLER_GET_ENTITY_INDEX(ent, i) IF (entIndex != GGSM_INVALID_ENTITY) CPRINTLN(DEBUG_MINIGAME, " ", i, ") ", GGSM_ENTITY_TYPE_TO_STRING(sGGSMData.sEntities[entIndex].eType), " HP:", sGGSMData.sEntities[entIndex].iHP) ENDIF ENDREPEAT CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- END GGSM_BOSS_CONTROLLER ---") CPRINTLN(DEBUG_MINIGAME, " ") ENDPROC PROC GGSM_COLLISION_DATA_STATE_TO_LOG(GGSM_COLLISION_DATA &ent) INT i CPRINTLN(DEBUG_MINIGAME, " --- GGSM_COLLISION_DATA ---") CPRINTLN(DEBUG_MINIGAME, " eType:", GGSM_COLLISION_SHAPE_TO_STRING(ent.eType)) CPRINTLN(DEBUG_MINIGAME, " fColRadius:", ent.fColRadius) REPEAT COUNT_OF(ent.vCollisionVectors) i CPRINTLN(DEBUG_MINIGAME, " vCollisionVectors:") CPRINTLN(DEBUG_MINIGAME, " vCollisionVectors[", i, "] = [", ent.vCollisionVectors[i].x, ",", ent.vCollisionVectors[i].y,"]") ENDREPEAT CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- END GGSM_COLLISION_DATA ---") CPRINTLN(DEBUG_MINIGAME, " ") ENDPROC PROC GGSM_COLLIDER_TO_LOG(GGSM_COLLIDER &ent) CPRINTLN(DEBUG_MINIGAME, " --- GGSM_COLLIDER ---") GGSM_COLLISION_DATA_STATE_TO_LOG(ent.sData) GGSM_AABB_TO_LOG(ent.sAABB) CPRINTLN(DEBUG_MINIGAME, " --- END GGSM_COLLIDER ---") CPRINTLN(DEBUG_MINIGAME, " ") ENDPROC PROC GGSM_DIALOG_CONTROLLER_TO_LOG(GGSM_DIALOG_CONTROLLER &ent) CPRINTLN(DEBUG_MINIGAME, " --- GGSM_DIALOG_CONTROLLER ---") CPRINTLN(DEBUG_MINIGAME, " eType:", GGSM_DIALOG_TYPE_TO_STRING(ent.eType)) CPRINTLN(DEBUG_MINIGAME, " eState:", GGSM_DIALOG_STATE_TO_STRING(ent.eState)) CPRINTLN(DEBUG_MINIGAME, " eLeftPicture:", GGSM_SPRITE_TYPE_TO_STRING(ent.eLeftPicture)) CPRINTLN(DEBUG_MINIGAME, " eRightPicture:", GGSM_SPRITE_TYPE_TO_STRING(ent.eRightPicture)) CPRINTLN(DEBUG_MINIGAME, " eLeftDialog:", GGSM_SPRITE_TYPE_TO_STRING(ent.eLeftDialog)) CPRINTLN(DEBUG_MINIGAME, " eRightDialog:", GGSM_SPRITE_TYPE_TO_STRING(ent.eRightDialog)) CPRINTLN(DEBUG_MINIGAME, " iSlideInOffset:", ent.iSlideInOffset) CPRINTLN(DEBUG_MINIGAME, " iVariation:", ent.iVariation) CPRINTLN(DEBUG_MINIGAME, " iMsgNumber:", ent.iMsgNumber) CPRINTLN(DEBUG_MINIGAME, " iMsgTimerMS:", ent.iMsgTimerMS) CPRINTLN(DEBUG_MINIGAME, " --- END GGSM_DIALOG_CONTROLLER ---") CPRINTLN(DEBUG_MINIGAME, " ") ENDPROC PROC GGSM_ENTITY_TO_LOG(GGSM_ENTITY &ent) INT i VECTOR_2D v GGSM_ENTITY_BIT bit CPRINTLN(DEBUG_MINIGAME, " --- GGSM_ENTITY [", GGSM_ENTITY_GET_ARRAY_INDEX(ent),"]---") CPRINTLN(DEBUG_MINIGAME, " eState:", GGSM_ENTITY_STATE_TO_STRING(ent.eState)) CPRINTLN(DEBUG_MINIGAME, " eType:", GGSM_ENTITY_TYPE_TO_STRING(ent.eType)) CPRINTLN(DEBUG_MINIGAME, " iArrayIndex:", GGSM_ENTITY_GET_ARRAY_INDEX(ent)) CPRINTLN(DEBUG_MINIGAME, " iFlags:", ENUM_TO_INT(ent.eFlags)) CPRINTLN(DEBUG_MINIGAME, " iGroupID:", ent.iGroupID) CPRINTLN(DEBUG_MINIGAME, " iEntityParentIndex:", GGSM_ENTITY_GET_PARENT_INDEX(ent)) CPRINTLN(DEBUG_MINIGAME, " iHP:", ent.iHP) CPRINTLN(DEBUG_MINIGAME, " iInvTimeMS:", ent.iInvTimeMS) CPRINTLN(DEBUG_MINIGAME, " fAnimFrame:", ent.fAnimFrame) CPRINTLN(DEBUG_MINIGAME, " fExplodeTimer:", ent.fExplodeTimer) CPRINTLN(DEBUG_MINIGAME, " fTimer:", ent.fTimer) CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- ACTIVE FLAGS ---") REPEAT 32 i bit = INT_TO_ENUM(GGSM_ENTITY_BIT, SHIFT_LEFT(1, i)) IF IS_BITMASK_ENUM_AS_ENUM_SET(ent.eFlags, bit) CPRINTLN(DEBUG_MINIGAME," ", GGSM_ENTITY_BIT_TO_STRING(bit)) ENDIF ENDREPEAT CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- TRANSFORM ---") CPRINTLN(DEBUG_MINIGAME, " vLocalPosition:[", ent.sLocal.vPosition.x, ",", ent.sLocal.vPosition.y, "]") CPRINTLN(DEBUG_MINIGAME, " fLocalRotation:", ent.sLocal.fRotation) CPRINTLN(DEBUG_MINIGAME, " vLocalScale:[", ent.sLocal.vScale.x, ",", ent.sLocal.vScale.y, "]") CPRINTLN(DEBUG_MINIGAME, " vPosition:[", ent.sWorld.vPosition.x, ",", ent.sWorld.vPosition.y, "]") CPRINTLN(DEBUG_MINIGAME, " fRotation:", ent.sWorld.fRotation) CPRINTLN(DEBUG_MINIGAME, " vScale:[", ent.sWorld.vScale.x, ",", ent.sWorld.vScale.y, "]") v = GGSM_UNPACK_VECTOR_2D(ent.iPackedLocalOrigin) CPRINTLN(DEBUG_MINIGAME, " iPackedLocalOrigin:[", v.x, ",", v.y, "]") CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- MOVEMENT ---") CPRINTLN(DEBUG_MINIGAME, " eMoveType:", GGSM_MOVEMENT_TYPE_TO_STRING(ent.eMoveType)) CPRINTLN(DEBUG_MINIGAME, " eMoveState:", GGSM_MOVESTATE_TYPE_TO_STRING(ent.eMoveState)) CPRINTLN(DEBUG_MINIGAME, " vLocalDirection:[", ent.vLocalDirection.x, ",", ent.vLocalDirection.y, "]") v = GGSM_UNPACK_VECTOR_2D(ent.iPackedLocalTargetPosition) CPRINTLN(DEBUG_MINIGAME, " iPackedTargetLocalPosition:[", v.x, ",", v.y, "]") CPRINTLN(DEBUG_MINIGAME, " fSpeed:", ent.fSpeed) REPEAT COUNT_OF(ent.fMoveParam) i CPRINTLN(DEBUG_MINIGAME, " fMoveParam[", i, "]:", ent.fMoveParam[i]) ENDREPEAT CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- COLLISION ---") CPRINTLN(DEBUG_MINIGAME, " eType:", GGSM_COLLISION_SHAPE_TO_STRING(ent.sCollider.sData.eType)) CPRINTLN(DEBUG_MINIGAME, " fColRadius:", ent.sCollider.sData.fColRadius) CPRINTLN(DEBUG_MINIGAME, " AABB vCenter:[", ent.sCollider.sAABB.vCenter.x, ",", ent.sCollider.sAABB.vCenter.y,"]") CPRINTLN(DEBUG_MINIGAME, " AABB vHalfSize:[", ent.sCollider.sAABB.vHalfSize.x, ",", ent.sCollider.sAABB.vHalfSize.y,"]") CPRINTLN(DEBUG_MINIGAME, " vCollisionVectors:") REPEAT COUNT_OF(ent.sCollider.sData.vCollisionVectors) i CPRINTLN(DEBUG_MINIGAME, " vCollisionVectors[", i, "] = [", ent.sCollider.sData.vCollisionVectors[i].x, ",", ent.sCollider.sData.vCollisionVectors[i].y,"]") ENDREPEAT CPRINTLN(DEBUG_MINIGAME, " ") /* CPRINTLN(DEBUG_MINIGAME, " --- FX ---") CPRINTLN(DEBUG_MINIGAME, " eSpriteAnim:", GGSM_SPRITE_ANIM_TO_STRING(ent.eSpriteAnim)) IF (ent.iPackedColor != 0) GGSM_UNPACK_RGBA_COLOUR(ent.iPackedColor, col) CPRINTLN(DEBUG_MINIGAME, " iPackedColor:", col.iR, " ", col.iG, " ", col.iB, " ", col.iA) ENDIF */ CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- WEAPONS ---") CPRINTLN(DEBUG_MINIGAME, " eWeaponState:", GGSM_WEAPON_STATE_TO_STRING(ent.eWeaponState)) CPRINTLN(DEBUG_MINIGAME, " eWeaponType:", GGSM_WEAPON_TYPE_TO_STRING(ent.eWeaponType)) CPRINTLN(DEBUG_MINIGAME, " fWeaponTimer:", ent.fWeaponTimer) CPRINTLN(DEBUG_MINIGAME, " iWeaponShotCounter:", ent.iWeaponShotCounter) CPRINTLN(DEBUG_MINIGAME, " iWeaponBurstCounter:", ent.iWeaponBurstCounter) CPRINTLN(DEBUG_MINIGAME, " iNumShotsOverride:", ent.iNumShotsOverride) CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- END_GGSM_ENTITY ---") CPRINTLN(DEBUG_MINIGAME, " ") ENDPROC PROC GGSM_ENTITY_GROUP_TO_LOG(GGSM_ENTITY_GROUP &ent) INT i VECTOR_2D v GGSM_GROUP_BIT bit CPRINTLN(DEBUG_MINIGAME, " --- GGSM_ENTITY_GROUP [",ent.iGroupID ,"]---") CPRINTLN(DEBUG_MINIGAME, " eFlags:", ENUM_TO_INT(ent.eFlags)) CPRINTLN(DEBUG_MINIGAME, " iLeader:", ent.iLeader) CPRINTLN(DEBUG_MINIGAME, " iMembersBitSet:", ent.iMemberBitSet) CPRINTLN(DEBUG_MINIGAME, " iMembersOnStageBitSet:", ent.iMembersOnStageBitSet) CPRINTLN(DEBUG_MINIGAME, " iActiveCount:", ent.iActiveCount) CPRINTLN(DEBUG_MINIGAME, " iMembersToCreate:", ent.iMembersToCreate) CPRINTLN(DEBUG_MINIGAME, " fDistCounter:", ent.fDistCounter) CPRINTLN(DEBUG_MINIGAME, " ") //GGSM_FORMATION_DATA_TO_LOG(ent.sFormSettings) CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- ACTIVE FLAGS ---") REPEAT 32 i bit = INT_TO_ENUM(GGSM_GROUP_BIT, SHIFT_LEFT(1, i)) IF IS_BITMASK_ENUM_AS_ENUM_SET(ent.eFlags, bit) CPRINTLN(DEBUG_MINIGAME," ", GGSM_GROUP_BIT_TO_STRING(bit)) ENDIF ENDREPEAT CPRINTLN(DEBUG_MINIGAME, " ") IF (ent.iActiveCount > 0) CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- MEMBERS ---") REPEAT GGSM_MAX_ENTITIES i IF (sGGSMData.sEntities[i].eState != GGSM_ENTITY_STATE_NONE) AND (GGSM_ENTITY_GET_GROUP_ID(sGGSMData.sEntities[i]) = ent.iGroupID) v = sGGSMData.sEntities[i].sWorld.vPosition CPRINTLN(DEBUG_MINIGAME, " ENTITY:", i, " ", GGSM_ENTITY_TYPE_TO_STRING(sGGSMData.sEntities[i].eType), " POS:[", v.x, ", ", v.y, "]") ENDIF ENDREPEAT CPRINTLN(DEBUG_MINIGAME, " ") ENDIF CPRINTLN(DEBUG_MINIGAME, " --- FORMATION PARAMS ---") CPRINTLN(DEBUG_MINIGAME, " eFormType:", GGSM_FORMATION_TYPE_TO_STRING(GGSM_FORMATION_GET_TYPE(ent.sFormSettings))) CPRINTLN(DEBUG_MINIGAME, " eEntityType:", GGSM_ENTITY_TYPE_TO_STRING(GGSM_FORMATION_GET_ENTITY_TYPE(ent.sFormSettings))) CPRINTLN(DEBUG_MINIGAME, " eWeaponType:", GGSM_WEAPON_TYPE_TO_STRING(GGSM_FORMATION_GET_WEAPON_TYPE(ent.sFormSettings))) CPRINTLN(DEBUG_MINIGAME, " eMovementType:", GGSM_MOVEMENT_TYPE_TO_STRING(GGSM_FORMATION_GET_MOVEMENT_TYPE(ent.sFormSettings))) v = GGSM_FORMATION_GET_START_POSITION(ent.sFormSettings) CPRINTLN(DEBUG_MINIGAME, " vBasePos:[", v.x, ",", v.y,"]") v = GGSM_FORMATION_GET_START_DIRECTION(ent.sFormSettings) CPRINTLN(DEBUG_MINIGAME, " vBaseDir:[", v.x, ",", v.y,"]") v = GGSM_FORMATION_GET_SPACING(ent.sFormSettings) CPRINTLN(DEBUG_MINIGAME, " vSpacing:[", v.x, ",", v.y,"]") CPRINTLN(DEBUG_MINIGAME, " fScrollDistance:", GGSM_FORMATION_GET_SCROLL_DISTANCE(ent.sFormSettings)) CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- END_GGSM_ENTITY_GROUP ---") CPRINTLN(DEBUG_MINIGAME, " ") ENDPROC PROC GGSM_FX_SPRITE_TO_LOG(GGSM_FX_SPRITE &ent, INT n) GGSM_FX_SPRITE_BIT bit VECTOR_2D v INT i CPRINTLN(DEBUG_MINIGAME, " --- GGSM_SPRITE [", n ,"]---") CPRINTLN(DEBUG_MINIGAME, " --- ACTIVE FLAGS ---") REPEAT 32 i bit = INT_TO_ENUM(GGSM_FX_SPRITE_BIT, SHIFT_LEFT(1, i)) IF IS_BITMASK_ENUM_AS_ENUM_SET(ent.eFlags, bit) CPRINTLN(DEBUG_MINIGAME," ", GGSM_FX_SPRITE_BIT_TO_STRING(bit)) ENDIF ENDREPEAT CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- INFO ---") CPRINTLN(DEBUG_MINIGAME, " eSpriteAnim:", GGSM_SPRITE_ANIM_TO_STRING(ent.eSpriteAnim)) CPRINTLN(DEBUG_MINIGAME, " eSpriteType:", GGSM_SPRITE_TYPE_TO_STRING(ent.eSpriteType)) v = GGSM_UNPACK_VECTOR_2D(ent.iPackedPosition) CPRINTLN(DEBUG_MINIGAME, " iPackedPosition:[", v.x, ",", v.y, "]") CPRINTLN(DEBUG_MINIGAME, " fAnimFrame:", ent.fAnimFrame) CPRINTLN(DEBUG_MINIGAME, " fScale:", ent.fScale) CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- END_GGSM_SPRITE ---") CPRINTLN(DEBUG_MINIGAME, " ") ENDPROC PROC GGSM_PROJECTILE_TO_LOG(GGSM_PROJECTILE &ent, INT n) GGSM_PROJECTILE_BIT bit INT i CPRINTLN(DEBUG_MINIGAME, " --- GGSM_PROJECTILE [", n ,"]---") CPRINTLN(DEBUG_MINIGAME, " eType:", GGSM_PROJECTILE_TYPE_TO_STRING(ent.eType)) CPRINTLN(DEBUG_MINIGAME, " eFlags:", ENUM_TO_INT(ent.eFlags)) CPRINTLN(DEBUG_MINIGAME, " iTargetIndex:", ent.iTargetIndex) CPRINTLN(DEBUG_MINIGAME, " fTimer:", ent.fTimer) CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- ACTIVE FLAGS ---") REPEAT 32 i bit = INT_TO_ENUM(GGSM_PROJECTILE_BIT, SHIFT_LEFT(1, i)) IF IS_BITMASK_ENUM_AS_ENUM_SET(ent.eFlags, bit) CPRINTLN(DEBUG_MINIGAME," ", GGSM_PROJECTILE_BIT_TO_STRING(bit)) ENDIF ENDREPEAT CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- MOVEMENT ---") CPRINTLN(DEBUG_MINIGAME, " vDirection:[", ent.vDirection.x, ",", ent.vDirection.y, "]") CPRINTLN(DEBUG_MINIGAME, " fSpeed:", ent.fSpeed) CPRINTLN(DEBUG_MINIGAME, " fRotation:", GET_HEADING_FROM_VECTOR_2D(ent.vDirection.x, ent.vDirection.y)) CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- COLLISION ---") CPRINTLN(DEBUG_MINIGAME, " eType:", GGSM_COLLISION_SHAPE_TO_STRING(ent.sCollider.sData.eType)) CPRINTLN(DEBUG_MINIGAME, " fLength:", ent.fLength) CPRINTLN(DEBUG_MINIGAME, " fColRadius:", ent.sCollider.sData.fColRadius) CPRINTLN(DEBUG_MINIGAME, " AABB vCenter:[", ent.sCollider.sAABB.vCenter.x, ",", ent.sCollider.sAABB.vCenter.y,"]") CPRINTLN(DEBUG_MINIGAME, " AABB vHalfSize:[", ent.sCollider.sAABB.vHalfSize.x, ",", ent.sCollider.sAABB.vHalfSize.y,"]") CPRINTLN(DEBUG_MINIGAME, " vCollisionVectors:") REPEAT COUNT_OF(ent.sCollider.sData.vCollisionVectors) i CPRINTLN(DEBUG_MINIGAME, " vCollisionVectors[", i, "] = [", ent.sCollider.sData.vCollisionVectors[i].x, ",", ent.sCollider.sData.vCollisionVectors[i].y,"]") ENDREPEAT CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- END_GGSM_PROJECTILE ---") CPRINTLN(DEBUG_MINIGAME, " ") ENDPROC PROC GGSM_TO_LOG() INT i, n GGSM_STAGE_BIT stageBit GGSM_CHALLENGE_BIT challengeBit GGSM_TEXDICT textureBit GGSM_UNLOCK_TYPE unlockType CPRINTLN(DEBUG_MINIGAME, " --- STATE ---") CPRINTLN(DEBUG_MINIGAME, " eClientState:", GGSM_STATE_TO_STRING(sGGSMData.eState)) CPRINTLN(DEBUG_MINIGAME, " fTimeScale:", sGGSMData.fTimeScale) CPRINTLN(DEBUG_MINIGAME, " gameTimer:", GET_GAME_TIMER()) CPRINTLN(DEBUG_MINIGAME, " bPowerUpCollected:", GET_STRING_FROM_BOOL(sGGSMData.bPowerUpCollected)) CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- STATS ---") CPRINTLN(DEBUG_MINIGAME, " gameType:", sGGSMData.sGameStats.gameType) CPRINTLN(DEBUG_MINIGAME, " matchId:", sGGSMData.sGameStats.matchId) CPRINTLN(DEBUG_MINIGAME, " numPlayers:", sGGSMData.sGameStats.numPlayers) CPRINTLN(DEBUG_MINIGAME, " level:", sGGSMData.sGameStats.level) CPRINTLN(DEBUG_MINIGAME, " powerUps:", sGGSMData.sGameStats.powerUps) CPRINTLN(DEBUG_MINIGAME, " kills:", sGGSMData.sGameStats.kills) CPRINTLN(DEBUG_MINIGAME, " timePlayed:", sGGSMData.sGameStats.timePlayed) CPRINTLN(DEBUG_MINIGAME, " score:", sGGSMData.sGameStats.score) CPRINTLN(DEBUG_MINIGAME, " reward:", sGGSMData.sGameStats.reward) CPRINTLN(DEBUG_MINIGAME, " challenges:", sGGSMData.sGameStats.challenges) CPRINTLN(DEBUG_MINIGAME, " iPlayerLives:", sGGSMData.iPlayerLives) CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- ENTITIES ---") n = 0 REPEAT COUNT_OF(sGGSMData.sEntities) i IF (sGGSMData.sEntities[i].eState != GGSM_ENTITY_STATE_NONE) GGSM_ENTITY_TO_LOG(sGGSMData.sEntities[i]) n ++ ENDIF ENDREPEAT CPRINTLN(DEBUG_MINIGAME," # ACTIVE ENTITIES:", n) CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- PLAYER PROJECTILES ---") n = 0 REPEAT COUNT_OF(sGGSMData.sProjectiles) i IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.sProjectiles[i].eFlags, GGSM_PROJECTILE_BIT_ACTIVE) IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.sProjectiles[i].eFlags, GGSM_PROJECTILE_BIT_IS_PLAYER_ALLIED) GGSM_PROJECTILE_TO_LOG(sGGSMData.sProjectiles[i], i) n ++ ENDIF ENDIF ENDREPEAT CPRINTLN(DEBUG_MINIGAME," # ACTIVE PROJECTILES:", n) CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- ENEMY PROJECTILES ---") n = 0 REPEAT COUNT_OF(sGGSMData.sProjectiles) i IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.sProjectiles[i].eFlags, GGSM_PROJECTILE_BIT_ACTIVE) IF NOT IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.sProjectiles[i].eFlags, GGSM_PROJECTILE_BIT_IS_PLAYER_ALLIED) GGSM_PROJECTILE_TO_LOG(sGGSMData.sProjectiles[i], i) ENDIF n ++ ENDIF ENDREPEAT CPRINTLN(DEBUG_MINIGAME," # ACTIVE PROJECTILES:", n) CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- ENTITY GROUPS ---") REPEAT COUNT_OF(sGGSMData.sEntityGroup) i IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.sEntityGroup[i].eFlags, GGSM_GROUP_BIT_ACTIVE) GGSM_ENTITY_GROUP_TO_LOG(sGGSMData.sEntityGroup[i]) ENDIF ENDREPEAT CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- BOSS CONTROLLERS ---") REPEAT COUNT_OF(sGGSMData.sBossController) i GGSM_BOSS_CONTROLLER_TO_LOG(sGGSMData.sBossController[i], i) ENDREPEAT CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- FX SPRITES ---") REPEAT COUNT_OF(sGGSMData.sFXSprite) i IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.sFXSprite[i].eFlags, GGSM_FX_SPRITE_BIT_ACTIVE) GGSM_FX_SPRITE_TO_LOG(sGGSMData.sFXSprite[i], i) ENDIF ENDREPEAT CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- STAGE FLAGS ---") REPEAT 32 i stageBit = INT_TO_ENUM(GGSM_STAGE_BIT, SHIFT_LEFT(1, i)) IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eStageFlags, stageBit) CPRINTLN(DEBUG_MINIGAME," ", GGSM_STAGE_BIT_TO_STRING(stageBit)) ENDIF ENDREPEAT CPRINTLN(DEBUG_MINIGAME, " ") 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, " ") CPRINTLN(DEBUG_MINIGAME, " --- UNLOCKS FLAGS ---") REPEAT NUM_GGSM_UNLOCK_TYPE unlockType IF (unlockType != GGSM_UNLOCK_NONE) CPRINTLN(DEBUG_MINIGAME," ", GGSM_UNLOCK_TYPE_TO_STRING(unlockType), ":", GET_STRING_FROM_BOOL(IS_BIT_SET(sGGSMData.iUnlockedBitField, ENUM_TO_INT(unlockType)))) ENDIF ENDREPEAT CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- TEXTURE DICTS ---") REPEAT GGSM_MAX_TEXDICT i textureBit = INT_TO_ENUM(GGSM_TEXDICT, SHIFT_LEFT(1, i)) IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eLoadedTextureFlags, textureBit) CPRINTLN(DEBUG_MINIGAME," ", GGSM_TEXDICT_TO_STRING(textureBit)) ENDIF ENDREPEAT CPRINTLN(DEBUG_MINIGAME, " ") CPRINTLN(DEBUG_MINIGAME, " --- Z SORT DATA ---") REPEAT COUNT_OF(sGGSMData.sZSortData) i CPRINTLN(DEBUG_MINIGAME, " Slot:", i, " Entity Index:", sGGSMData.sZSortData[i].iEntityIndex, " Z-Depth:", sGGSMData.sZSortData[i].iZDepth) ENDREPEAT GGSM_DIALOG_CONTROLLER_TO_LOG(sGGSMData.sDialogController) CPRINTLN(DEBUG_MINIGAME, " ") ENDPROC //------------------------------------------------- // MAIN DEBUG FUNCTIONS //------------------------------------------------- /// PURPOSE: /// Creates Debug Widgets PROC GGSM_DEBUG_CREATE_WIDGETS() IF sGGSMData.bDebugCreatedWidgets EXIT ENDIF IF sGGSMData.widgetGroupExample = NULL EXIT ENDIF INT i TEXT_LABEL_31 txt SET_CURRENT_WIDGET_GROUP(sGGSMData.widgetGroupExample) START_WIDGET_GROUP("Game Widgets") ADD_WIDGET_BOOL("Dump To TTY", sGGSMData.bDebugDumpToLogs) ADD_WIDGET_BOOL("Draw Collision", sGGSMData.bDrawCollisionDebug) ADD_WIDGET_BOOL("Disable SFX", sGGSMData.bDebugDisableSFX) ADD_WIDGET_BOOL("g_bBlockArcadeCabinetDrawing", g_bBlockArcadeCabinetDrawing) ADD_WIDGET_BOOL("g_bMinimizeArcadeCabinetDrawing", g_bMinimizeArcadeCabinetDrawing) ADD_WIDGET_BOOL("Game Paused", sGGSMData.bGamePaused) ADD_WIDGET_BOOL("Game Force Quit", sGGSMData.bGameForceQuit) ADD_WIDGET_FLOAT_SLIDER("Analog Dead Zone", sGGSMData.fAnalogDeadZone, 0.1, 1.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("D-Pad Scalar", sGGSMData.fDPadScalar, 0.1, 1.0, 0.1) ADD_WIDGET_INT_READ_ONLY("Stack Size", sGGSMData.iDebugCurrentStackSize) ADD_WIDGET_FLOAT_READ_ONLY("Frame Time", sGGSMData.fDebugFrameTime) ADD_WIDGET_FLOAT_SLIDER("Time Scale", sGGSMData.fTimeScale, 0.1, 1.0, 0.1) START_WIDGET_GROUP("Client State") ADD_WIDGET_BOOL("Change State", sGGSMData.bDebugChangeState) GGSM_STATE_SELECTOR(sGGSMData.iDebugStateSelector) GGSM_STATE_SELECTOR(sGGSMData.iDebugCurrentState, "Current State") GGSM_SUBSTATE_SELECTOR(sGGSMData.iDebugCurrentSubstate, "Current SubState") ADD_WIDGET_FLOAT_READ_ONLY("Timer", sGGSMData.fStateTimer) ADD_WIDGET_FLOAT_SLIDER("Interpolator", sGGSMData.fStateInterpolateValue, 0.0, 1.0, 0.1) STOP_WIDGET_GROUP() #IF GGSM_DEBUG_TSHIRT_HELP GGSM_CREATE_TSHIRT_DEBUG_WIDGET() #ENDIF GGSM_CAMERA_CREATE_DEBUG_WIDGET(sGGSMData.sCamera) START_WIDGET_GROUP("Instances") ADD_WIDGET_BOOL("Skip To Boss", sGGSMData.bDebugJumpToBoss) ADD_WIDGET_BOOL("Kill All Enemies", sGGSMData.bDebugKillAllEnemies) ADD_WIDGET_BOOL("Player Invunerable", sGGSMData.bDebugPlayerInvunerable) ADD_WIDGET_INT_SLIDER("Spawn Index Counter", sGGSMData.iSpawnIndexCounter, 0, GGSM_MAX_SPAWN_DATA - 1, 1) ADD_WIDGET_INT_SLIDER("Spawns Used", sGGSMData.iSpawnsUsed, 0, GGSM_MAX_SPAWN_DATA, 1) ADD_WIDGET_INT_READ_ONLY("Player Ship Index", sGGSMData.iPlayerShipIndex) START_WIDGET_GROUP("Entities") REPEAT GGSM_MAX_ENTITIES i txt = "Entity " txt += i GGSM_ENTITY_WIDGET(sGGSMData.sEntities[i], txt) ENDREPEAT STOP_WIDGET_GROUP() START_WIDGET_GROUP("Projectiles") REPEAT GGSM_MAX_PROJECTILES i txt = "Projectile " txt += i GGSM_PROJECTILE_WIDGET(sGGSMData.sProjectiles[i], txt) ENDREPEAT STOP_WIDGET_GROUP() START_WIDGET_GROUP("Entity Groups") REPEAT GGSM_MAX_ENTITY_GROUPS i txt = "Group " txt += i START_WIDGET_GROUP(txt) ADD_WIDGET_INT_READ_ONLY("Leader", sGGSMData.sEntityGroup[i].iLeader) ADD_WIDGET_INT_READ_ONLY("Active Count", sGGSMData.sEntityGroup[i].iActiveCount) ADD_WIDGET_INT_READ_ONLY("Members Left To Create", sGGSMData.sEntityGroup[i].iMembersToCreate) ADD_BIT_FIELD_WIDGET("Group Members", sGGSMData.sEntityGroup[i].iMemberBitSet) ADD_BIT_FIELD_WIDGET("Group Members On Stage", sGGSMData.sEntityGroup[i].iMembersOnStageBitSet) STOP_WIDGET_GROUP() ENDREPEAT STOP_WIDGET_GROUP() START_WIDGET_GROUP("Boss Controllers") REPEAT COUNT_OF(sGGSMData.sBossController) i txt = "Boss Controller " txt += i GGSM_BOSS_CONTROLLER_CREATE_WIDGET(sGGSMData.sBossController[i], txt) ENDREPEAT STOP_WIDGET_GROUP() STOP_WIDGET_GROUP() START_WIDGET_GROUP("Rendering Counters") ADD_WIDGET_INT_READ_ONLY("iRectsDrawnThisFrame", iRectsDrawnThisFrame) ADD_WIDGET_INT_READ_ONLY("iSpritesDrawnThisFrame", iSpritesDrawnThisFrame) ADD_WIDGET_INT_READ_ONLY("iDebugLinesDrawnThisFrame", iDebugLinesDrawnThisFrame) ADD_WIDGET_FLOAT_READ_ONLY("Fade Alpha", sGGSMData.fFadeAlpha) ADD_WIDGET_FLOAT_SLIDER("Fade Time", sGGSMData.fFadeTime, -5.0, 5.0, 0.125) START_WIDGET_GROUP("Story") GGSM_ADD_WIDGET_VECTOR_2D_SLIDER("Story Base Pos", sGGSMData.vStoryBasePos, -cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_WIDTH, 1) ADD_WIDGET_FLOAT_SLIDER("Story Scroll Rate", sGGSMData.fStoryScrollRate, 0.0, 1600.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Min Width", sGGSMData.fStoryMinWidth, 0.0, 2048.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Max Width", sGGSMData.fStoryMaxWidth, 0.0, 2048.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Fadeout Y-Pos", sGGSMData.fStoryFadeOutYPos, -cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_WIDTH, 1) ADD_WIDGET_FLOAT_READ_ONLY("Story T", sGGSMData.fDebugStoryT) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Z Sort List") REPEAT COUNT_OF(sGGSMData.sZSortData) i txt = "Entry " txt += i START_WIDGET_GROUP(txt) ADD_WIDGET_INT_READ_ONLY("Entity", sGGSMData.sZSortData[i].iEntityIndex) ADD_WIDGET_INT_READ_ONLY("Depth", sGGSMData.sZSortData[i].iZDepth) STOP_WIDGET_GROUP() ENDREPEAT STOP_WIDGET_GROUP() STOP_WIDGET_GROUP() START_WIDGET_GROUP("Stats") ADD_WIDGET_BOOL("Set Stage", sGGSMData.bDebugSetStage) ADD_WIDGET_BOOL("Force Default Leaderboard", sAGLeaderboardData.bForceDefaultLeaderboard) ADD_WIDGET_INT_SLIDER("Stage", sGGSMData.sGameStats.level, 0, 10, 1) ADD_WIDGET_INT_SLIDER("Lives", sGGSMData.iPlayerLives, 0, 99, 1) ADD_WIDGET_INT_READ_ONLY("Score", sGGSMData.sGameStats.score) ADD_WIDGET_INT_READ_ONLY("Kill Streak", sGGSMData.iKillStreak) ADD_WIDGET_FLOAT_READ_ONLY("Kill Streak Timer", sGGSMData.fKillStreakTimer) ADD_WIDGET_FLOAT_READ_ONLY("Chain Multiplier", sGGSMData.fChainMultiplier) ADD_WIDGET_FLOAT_SLIDER("Time Per Frame", sGGSMData.fScrollTimePerFrame, 0.010, 0.050, 0.001) ADD_WIDGET_INT_READ_ONLY("Extend Point Counter", sGGSMData.iExtendPtsCounter) ADD_WIDGET_INT_READ_ONLY("Enemies Created", sGGSMData.iEnemiesCreated) ADD_WIDGET_INT_READ_ONLY("Enemies Destroyed", sGGSMData.iEnemiesDestroyed) ADD_WIDGET_INT_READ_ONLY("Entities Active", sGGSMData.iEntitiesActive) ADD_WIDGET_INT_READ_ONLY("Groups Active", sGGSMData.iGroupsActive) ADD_WIDGET_INT_READ_ONLY("Enemy Projectiles Active", sGGSMData.iEnemyProjectilesActive) ADD_WIDGET_INT_READ_ONLY("Total Projectiles Active", sGGSMData.iProjectilesActive) ADD_WIDGET_INT_READ_ONLY("Max Entities Active", sGGSMData.iMaxEntitiesActive) ADD_WIDGET_INT_READ_ONLY("Max Groups Active", sGGSMData.iMaxGroupsActive) ADD_WIDGET_INT_READ_ONLY("Max Projectiles Active", sGGSMData.iMaxProjectilesActive) START_WIDGET_GROUP("Graze") ADD_WIDGET_INT_READ_ONLY("Graze", sGGSMData.iGraze) ADD_WIDGET_FLOAT_READ_ONLY("Graze Timer", sGGSMData.fGrazeTimer) ADD_WIDGET_FLOAT_SLIDER("Graze Timer", sGGSMData.fGrazeTime, 0.0, 1.0, 0.001) ADD_WIDGET_FLOAT_SLIDER("Graze Radius", sGGSMData.fGrazeRadius, 0.0, 128.0, 1.0) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Game Stats") ADD_WIDGET_INT_READ_ONLY("Game Type", sGGSMData.sGameStats.gameType) ADD_WIDGET_INT_READ_ONLY("Match ID", sGGSMData.sGameStats.matchId) ADD_WIDGET_INT_READ_ONLY("# Players", sGGSMData.sGameStats.numPlayers) ADD_WIDGET_INT_READ_ONLY("Level", sGGSMData.sGameStats.level) ADD_WIDGET_INT_READ_ONLY("Power Ups", sGGSMData.sGameStats.powerUps) ADD_WIDGET_INT_READ_ONLY("Kills", sGGSMData.sGameStats.kills) ADD_WIDGET_INT_READ_ONLY("Time Played", sGGSMData.sGameStats.timePlayed) ADD_WIDGET_INT_READ_ONLY("Score", sGGSMData.sGameStats.score) ADD_WIDGET_INT_READ_ONLY("Reward", sGGSMData.sGameStats.reward) ADD_WIDGET_INT_READ_ONLY("Challenges", sGGSMData.sGameStats.challenges) STOP_WIDGET_GROUP() STOP_WIDGET_GROUP() ARCADE_GAMES_POSTFX_WIDGET_CREATE() START_WIDGET_GROUP("Debug Stuff") ADD_WIDGET_BOOL("Show Spawn Debug", sGGSMData.bShowSpawnDebug) ADD_WIDGET_BOOL("Disable Post FX", sGGSMData.bDebugDisablePostFX) #IF GGSM_ENTITY_EDITOR_ACTIVE ADD_WIDGET_BOOL("Entity Editor Active", sGGSMData.sDebugEntityEditor.sEditCore.bEditorActive) #ENDIF #IF GGSM_SPAWN_EDITOR_ACTIVE ADD_WIDGET_BOOL("Spawn Editor Active", sGGSMData.sDebugSpawnEditor.sEditCore.bEditorActive) #ENDIF #IF GGSM_TILEMAP_EDITOR_ACTIVE ADD_WIDGET_BOOL("Tilemap Editor Active", sGGSMData.sDebugMapEditor.sEditCore.bEditorActive) #ENDIF #IF GGSM_SOUND_TEST ARCADE_GAMES_SOUND_WIDGET_CREATE() #ENDIF #IF GGSM_CHALLENGE_DEBUG GGSM_CREATE_CHALLENGE_DEBUG_WIDGET() #ENDIF ADD_WIDGET_BOOL("bDebugCreatePowerUp", sGGSMData.bDebugCreatePowerUp) START_WIDGET_GROUP("Debug Rect") ADD_WIDGET_BOOL("Show Rect", sGGSMData.bDrawDebugRect) ADD_WIDGET_BOOL("Center Mode", sGGSMData.bDebugRectCenterMode) GGSM_ADD_WIDGET_VECTOR_2D_SLIDER("Top Left (Center)", sGGSMData.vDebugRect[0], -cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_WIDTH, 10) GGSM_ADD_WIDGET_VECTOR_2D_SLIDER("Base Right (HalfSize)", sGGSMData.vDebugRect[1], -cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_WIDTH, 10) STOP_WIDGET_GROUP() STOP_WIDGET_GROUP() STOP_WIDGET_GROUP() CLEAR_CURRENT_WIDGET_GROUP(sGGSMData.widgetGroupExample) sGGSMData.bDebugCreatedWidgets = TRUE ENDPROC /// PURPOSE: /// Dumps the current state of the game to the logs /// Automatically called when a bug is entered PROC GGSM_DEBUG_DUMP_DATA_TO_LOGS() ARCADE_CABINET_DUMP_DATA_TO_CONSOLE() GGSM_TO_LOG() sGGSMData.bDebugDumpToLogs = FALSE ENDPROC /// PURPOSE: /// Update Debug Processing PROC GGSM_DEBUG_PROCESSING() INT i VECTOR_2D rc, rs RGBA_COLOUR_STRUCT rcol GGSM_DEBUG_CREATE_WIDGETS() sGGSMData.fDebugFrameTime = GET_FRAME_TIME() sGGSMData.iDebugCurrentStackSize = GET_CURRENT_STACK_SIZE() SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE) //If a bug is entered dump all data to the console. IF IS_KEYBOARD_KEY_PRESSED(KEY_SPACE) OR IS_KEYBOARD_KEY_PRESSED(KEY_RBRACKET) OR sGGSMData.bDebugDumpToLogs GGSM_DEBUG_DUMP_DATA_TO_LOGS() ENDIF IF (sGGSMData.bDebugChangeState) GGSM_SET_CLIENT_STATE(INT_TO_ENUM(GGSM_STATE, sGGSMData.iDebugStateSelector)) sGGSMData.bDebugChangeState = FALSE ENDIF sGGSMData.fDebugStoryT = GGSM_CALCULATE_T_FOR_STORY_POS(sGGSMData.vStoryBasePos.y) sGGSMData.iDebugCurrentState = ENUM_TO_INT(sGGSMData.eState) sGGSMData.iDebugCurrentSubstate = ENUM_TO_INT(sGGSMData.eSubState) IF (sGGSMData.bDebugCreatePowerUp) GGSM_CREATE_POWER_UP(INT_TO_ENUM(GGSM_SPRITE_TYPE, GET_RANDOM_INT_IN_RANGE(ENUM_TO_INT(GGSM_SPRITE_POWER_UP_BEAM), ENUM_TO_INT(GGSM_SPRITE_POWER_UP_WAVE) + 1)), sGGSMData.sPowerUp) sGGSMData.bDebugCreatePowerUp = FALSE ENDIF IF (sGGSMData.bDebugSetStage) GGSM_SET_CLIENT_STATE(GGSM_STATE_STAGE_SELECT) sGGSMData.bDebugSetStage = FALSE ENDIF REPEAT COUNT_OF(sGGSMData.sBossController) i IF (sGGSMData.sBossController[i].bDebugSetState) GGSM_BOSS_CONTROLLER_SET_STATE(sGGSMData.sBossController[i], INT_TO_ENUM(GGSM_BOSS_STATE, sGGSMData.sBossController[i].iDebugSetState)) sGGSMData.sBossController[i].bDebugSetState = FALSE ENDIF sGGSMData.sBossController[i].iCurrentState = ENUM_TO_INT(sGGSMData.sBossController[i].eState) ENDREPEAT #IF GGSM_CHALLENGE_DEBUG GGSM_UPDATE_CHALLENGE_DEBUG_WIDGET() #ENDIF #IF GGSM_DEBUG_TSHIRT_HELP GGSM_UPDATE_TSHIRT_DEBUG_WIDGET() #ENDIF #IF GGSM_ENTITY_EDITOR_ACTIVE GGSM_ENTITY_EDITOR_WIDGET_UPDATE(sGGSMData.sDebugEntityEditor) #ENDIF #IF GGSM_SPAWN_EDITOR_ACTIVE GGSM_SPAWN_EDITOR_WIDGET_UPDATE(sGGSMData.sDebugSpawnEditor) #ENDIF #IF GGSM_TILEMAP_EDITOR_ACTIVE GGSM_TILEMAP_EDITOR_WIDGET_UPDATE(sGGSMData.sDebugMapEditor, sGGSMData.sTileMap) #ENDIF #IF GGSM_SOUND_TEST ARCADE_GAMES_SOUND_WIDGET_CREATE() #ENDIF IF (sGGSMData.bDrawDebugRect) INIT_RGBA_STRUCT(rcol, 255, 255, 255, 64) IF (sGGSMData.bDebugRectCenterMode = FALSE) rs.x = sGGSMData.vDebugRect[1].x - sGGSMData.vDebugRect[0].x rs.y = sGGSMData.vDebugRect[1].y - sGGSMData.vDebugRect[0].y rc.x = sGGSMData.vDebugRect[0].x + (rs.x / 2.0) rc.y = sGGSMData.vDebugRect[0].y + (rs.y / 2.0) ARCADE_DRAW_PIXELSPACE_RECT(rc, rs, rcol) ELSE ARCADE_DRAW_PIXELSPACE_RECT(sGGSMData.vDebugRect[0], sGGSMData.vDebugRect[1], rcol) ENDIF ENDIF IF (sGGSMData.bDebugJumpToBoss) i = sGGSMData.iSpawnsUsed - 1 sGGSMData.iSpawnIndexCounter = i sGGSMData.bDebugKillAllEnemies = TRUE GGSM_CAMERA_JUMP_TO_DISTANCE(sGGSMData.sCamera, sGGSMData.sSpawnData[i].fScrollDistance) sGGSMData.bDebugJumpToBoss = FALSE ENDIF IF (sGGSMData.bDebugKillAllEnemies) GGSM_ENTITY_EXPLODE_ARRAY(sGGSMData.sEntities, FALSE) sGGSMData.bDebugKillAllEnemies = FALSE ENDIF IF (sGGSMData.bDebugPlayerInvunerable) GGSM_SET_PLAYER_INVUNERABLE() ENDIF IF (sGGSMData.bShowSpawnDebug) GGSM_DRAW_SPAWN_DEBUG() ENDIF ENDPROC #ENDIF //------------------------------------------------- // PER FRAME UPDATES //------------------------------------------------- /// PURPOSE: /// Handles Script Events PROC GGSM_PROCESS_SCRIPT_EVENTS() ENDPROC /// PURPOSE: /// Run every frame before the client state machine is processed PROC GGSM_PRE_UPDATE() IF sGGSMData.eState >= GGSM_STATE_CLEANUP // Cleaning up, don't do anything EXIT ENDIF IF NOT IS_SKYSWOOP_AT_GROUND() GGSM_SET_CLIENT_STATE(GGSM_STATE_CLEANUP) EXIT ENDIF GGSM_UPDATE_MAIN_TIMERS() GGSM_PROCESS_SCRIPT_EVENTS() GGSM_UPDATE_AVATAR() ARCADE_GAMES_LEADERBOARD_PROCESS_EVENTS() ARCADE_GAMES_LEADERBOARD_LOAD(CASINO_ARCADE_GAME_GO_GO_SPACE_MONKEY_3) ARCADE_GAMES_HELP_TEXT_PRE_UPDATE() BOOL bIsPlaying = (sGGSMData.eState >= GGSM_STATE_PLAYING) ARCADE_CABINET_COMMON_EVERY_FRAME_PROCESSING(bIsPlaying) ENDPROC /// PURPOSE: /// Run every frame after the client state machine is processed PROC GGSM_POST_UPDATE() IF NOT ARCADE_GAMES_HELP_TEXT_SHOULD_ALLOW_THIS_FRAME() HIDE_HELP_TEXT_THIS_FRAME() ENDIF ENDPROC /// PURPOSE: /// Call every frame to run the minigame PROC PROCESS_GGSM() GGSM_PRE_UPDATE() GGSM_PROCESS_CLIENT_STATE_MACHINE() GGSM_POST_UPDATE() #IF IS_DEBUG_BUILD GGSM_DEBUG_PROCESSING() #ENDIF ENDPROC