Files
2025-09-29 00:52:08 +02:00

6055 lines
242 KiB
Scheme
Executable File

//-------------------------------------------------
// File: ggsm_arcade_data.sch
// Purpose: general functions required by system
//-------------------------------------------------
//-------------------------------------------------
// INCLUDES
//-------------------------------------------------
USING "ggsm_structs.sch"
USING "ggsm_maths.sch"
//-------------------------------------------------
// TEXTURE DATA
//-------------------------------------------------
FUNC STRING GGSM_GET_TEXTURE_DICT(GGSM_TEXDICT eTexDict)
SWITCH (eTexDict)
CASE GGSM_TEXDICT_BG RETURN "MpGoGoSpaceBG"
CASE GGSM_TEXDICT_BOSS_ALIEN RETURN "MpGoGoSpaceBossAlien"
CASE GGSM_TEXDICT_BOSS_BREAD RETURN "MpGoGoSpaceBossBananaBread"
CASE GGSM_TEXDICT_BOSS_BANANA_SPLIT RETURN "MpGoGoSpaceBossBananaSplit"
CASE GGSM_TEXDICT_BOSS_DR_DANK RETURN "MpGoGoSpaceBossDrDank"
CASE GGSM_TEXDICT_BOSS_GRANANA RETURN "MpGoGoSpaceBossGranana"
CASE GGSM_TEXDICT_BOSS_MARINE RETURN "MpGoGoSpaceBossMarine"
CASE GGSM_TEXDICT_BOSS_SMOOTHIE RETURN "MpGoGoSpaceBossSmoothie"
CASE GGSM_TEXDICT_CAVERN_STAGE RETURN "MpGoGoSpaceCavernStage"
CASE GGSM_TEXDICT_DIALOG RETURN "MpGoGoSpaceDialog"
CASE GGSM_TEXDICT_GAME RETURN "MpGoGoSpaceCommon"
CASE GGSM_TEXDICT_RESIDENT RETURN "MpGoGoSpaceResident"
CASE GGSM_TEXDICT_FRONTEND RETURN "MpGoGoSpaceFrontEnd"
CASE GGSM_TEXDICT_PORTRAITS RETURN "MpGoGoSpacePortraits"
CASE GGSM_TEXDICT_PSA RETURN "MpGoGoSpacePSA"
ENDSWITCH
CASSERTLN(DEBUG_MINIGAME, "GGSM_GET_TEXTURE_DICT - DOESN'T HAVE NAME:", GGSM_TEXDICT_TO_STRING(eTexDict))
RETURN "MpGoGoResident"
ENDFUNC
FUNC GGSM_TEXDICT GGSM_GET_TEXDICT_FOR_STAGE_TILES(INT iStage)
IF (iStage = GGSM_SECTOR_YELLOW_CLAM)
RETURN GGSM_TEXDICT_CAVERN_STAGE
ENDIF
RETURN GGSM_TEXDICT_NONE
ENDFUNC
FUNC BOOL GGSM_LOAD_TEXTURE_DICT(GGSM_TEXDICT eTexDict)
STRING str = GGSM_GET_TEXTURE_DICT(eTexDict)
REQUEST_STREAMED_TEXTURE_DICT(str)
IF NOT HAS_STREAMED_TEXTURE_DICT_LOADED(str)
CDEBUG1LN(DEBUG_MINIGAME, "[GGSM] GGSM_LOAD_TEXTURE_DICT - Loading ", str)
RETURN FALSE
ENDIF
SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eLoadedTextureFlags, eTexDict)
CDEBUG1LN(DEBUG_MINIGAME, "[GGSM] GGSM_LOAD_TEXTURE_DICT - Loading ", str, " Complete")
RETURN TRUE
ENDFUNC
PROC GGSM_RELEASE_TEXTURE_DICT(GGSM_TEXDICT eTexDict)
STRING str = GGSM_GET_TEXTURE_DICT(eTexDict)
IF IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eLoadedTextureFlags, eTexDict)
CDEBUG1LN(DEBUG_MINIGAME, "[GGSM] GGSM_RELEASE_TEXTURE_DICT - Releasing ", str)
SET_STREAMED_TEXTURE_DICT_AS_NO_LONGER_NEEDED(str)
CLEAR_BITMASK_ENUM_AS_ENUM(sGGSMData.eLoadedTextureFlags, eTexDict)
ENDIF
ENDPROC
FUNC BOOL GGSM_IS_TEXTURE_DICT_LOADED(GGSM_TEXDICT eTexDict)
RETURN IS_BITMASK_ENUM_AS_ENUM_SET(sGGSMData.eLoadedTextureFlags, eTexDict)
ENDFUNC
FUNC BOOL GGSM_LOAD_ALL_TEXTURE_DICTS()
INT i
REPEAT GGSM_MAX_TEXDICT i
IF NOT GGSM_LOAD_TEXTURE_DICT(INT_TO_ENUM(GGSM_TEXDICT, SHIFT_LEFT(1, i)))
RETURN FALSE
ENDIF
ENDREPEAT
RETURN TRUE
ENDFUNC
PROC GGSM_RELEASE_ALL_TEXTURE_DICTS()
INT i
REPEAT GGSM_MAX_TEXDICT i
GGSM_RELEASE_TEXTURE_DICT(INT_TO_ENUM(GGSM_TEXDICT, SHIFT_LEFT(1, i)))
ENDREPEAT
ENDPROC
//-------------------------------------------------
// SPRITE DATA
//-------------------------------------------------
/// PURPOSE:
/// Gets sprite name from enum
/// PARAMS:
/// eSprite -
/// iAnimFrame -
/// RETURNS:
///
FUNC GGSM_TEXDICT GGSM_GET_SPRITE_DICT(GGSM_SPRITE_TYPE eSprite)
// we assume that everything lives in the common directory unless stated
SWITCH (eSprite)
CASE GGSM_SPRITE_BOSS_BREAD
CASE GGSM_SPRITE_BOSS_BREAD_FACE
CASE GGSM_SPRITE_BOSS_BREAD_EYEBROWS
CASE GGSM_SPRITE_BOSS_BREAD_BOTTOM_LEFT
CASE GGSM_SPRITE_BOSS_BREAD_BOTTOM_RIGHT
CASE GGSM_SPRITE_BOSS_BREAD_TOP_LEFT
CASE GGSM_SPRITE_BOSS_BREAD_TOP_RIGHT
RETURN GGSM_TEXDICT_BOSS_BREAD
CASE GGSM_SPRITE_BOSS_BANANA_SPLIT
RETURN GGSM_TEXDICT_BOSS_BANANA_SPLIT
CASE GGSM_SPRITE_SMALL_SMOOTHIE
CASE GGSM_SPRITE_BOSS_SMOOTHIE
RETURN GGSM_TEXDICT_BOSS_SMOOTHIE
CASE GGSM_SPRITE_BOSS_GRANANA
CASE GGSM_SPRITE_BOSS_GRANANA_GLASSES
CASE GGSM_SPRITE_BOSS_GRANANA_HAIR
RETURN GGSM_TEXDICT_BOSS_GRANANA
CASE GGSM_SPRITE_BOSS_DR_DANK_TOP
CASE GGSM_SPRITE_BOSS_DR_DANK_MIDDLE
CASE GGSM_SPRITE_BOSS_DR_DANK_BOTTOM
RETURN GGSM_TEXDICT_BOSS_DR_DANK
CASE GGSM_SPRITE_BOSS_MARINE
CASE GGSM_SPRITE_BOSS_MARINE_ALIEN
RETURN GGSM_TEXDICT_BOSS_MARINE
CASE GGSM_SPRITE_PIC_BREAD_MAIN
CASE GGSM_SPRITE_PIC_DR_DANK_FAIL
CASE GGSM_SPRITE_PIC_DR_DANK_MAIN
CASE GGSM_SPRITE_PIC_GRANANA_MAIN
CASE GGSM_SPRITE_PIC_MARINE_MAIN
CASE GGSM_SPRITE_PIC_MONKEY_ASTEROID
CASE GGSM_SPRITE_PIC_MONKEY_FAIL
CASE GGSM_SPRITE_PIC_MONKEY_MAIN
CASE GGSM_SPRITE_PIC_SMOOTHIE_MAIN
CASE GGSM_SPRITE_PIC_BREAD_64
CASE GGSM_SPRITE_PIC_GRANANA_64
CASE GGSM_SPRITE_PIC_SMOOTHIE_64
CASE GGSM_SPRITE_PIC_MARINE_64
CASE GGSM_SPRITE_PIC_DR_DANK_64
RETURN GGSM_TEXDICT_PORTRAITS
CASE GGSM_SPRITE_BOX_LVL1_BOSS_FAIL
CASE GGSM_SPRITE_BOX_LVL1_BOSS_START
CASE GGSM_SPRITE_BOX_LVL1_BOSS_WIN
CASE GGSM_SPRITE_BOX_LVL1_MONKEY_START
CASE GGSM_SPRITE_BOX_LVL1_MONKEY_FAIL
CASE GGSM_SPRITE_BOX_LVL1_MONKEY_WIN
CASE GGSM_SPRITE_BOX_LVL2_BOSS_FAIL
CASE GGSM_SPRITE_BOX_LVL2_BOSS_START
CASE GGSM_SPRITE_BOX_LVL2_BOSS_WIN
CASE GGSM_SPRITE_BOX_LVL2_MONKEY_FAIL
CASE GGSM_SPRITE_BOX_LVL2_MONKEY_START
CASE GGSM_SPRITE_BOX_LVL2_MONKEY_WIN
CASE GGSM_SPRITE_BOX_LVL3_BOSS_FAIL
CASE GGSM_SPRITE_BOX_LVL3_BOSS_START
CASE GGSM_SPRITE_BOX_LVL3_BOSS_WIN
CASE GGSM_SPRITE_BOX_LVL3_MONKEY_FAIL
CASE GGSM_SPRITE_BOX_LVL3_MONKEY_START
CASE GGSM_SPRITE_BOX_LVL3_MONKEY_WIN
CASE GGSM_SPRITE_BOX_LVL4_BOSS_FAIL
CASE GGSM_SPRITE_BOX_LVL4_BOSS_START
CASE GGSM_SPRITE_BOX_LVL4_BOSS_WIN
CASE GGSM_SPRITE_BOX_LVL4_MONKEY_FAIL
CASE GGSM_SPRITE_BOX_LVL4_MONKEY_START
CASE GGSM_SPRITE_BOX_LVL4_MONKEY_WIN
CASE GGSM_SPRITE_BOX_LVL5_BOSS_FAIL
CASE GGSM_SPRITE_BOX_LVL5_BOSS_START
CASE GGSM_SPRITE_BOX_LVL5_BOSS_START2
CASE GGSM_SPRITE_BOX_LVL5_BOSS_WIN
CASE GGSM_SPRITE_BOX_LVL5_BOSS_WIN2
CASE GGSM_SPRITE_BOX_LVL5_MONKEY_START
CASE GGSM_SPRITE_BOX_LVL5_MONKEY_START2
CASE GGSM_SPRITE_BOX_LVL5_MONKEY_FAIL
CASE GGSM_SPRITE_BOX_LVL5_MONKEY_WIN
CASE GGSM_SPRITE_BOX_ASTEROID_LEAVING
CASE GGSM_SPRITE_BOX_ASTEROID_NEARING
CASE GGSM_SPRITE_BOX_FAILSCRN_BOSS1
CASE GGSM_SPRITE_BOX_FAILSCRN_BOSS2
CASE GGSM_SPRITE_BOX_FAILSCRN_BOSS3
CASE GGSM_SPRITE_BOX_FAILSCRN_BOSS4
CASE GGSM_SPRITE_BOX_FAILSCRN_BOSS5
CASE GGSM_SPRITE_BOX_FAILSCRN_BOSS6
CASE GGSM_SPRITE_BOX_FAILSCRN_MONKEY_1
CASE GGSM_SPRITE_BOX_FAILSCRN_MONKEY_2
CASE GGSM_SPRITE_BOX_FAILSCRN_MONKEY_3
CASE GGSM_SPRITE_BOX_FAILSCRN_MONKEY_4
CASE GGSM_SPRITE_BOX_FAILSCRN_MONKEY_5
CASE GGSM_SPRITE_BOX_FAILSCRN_MONKEY_6
RETURN GGSM_TEXDICT_DIALOG
CASE GGSM_SPRITE_BG_LAYER_BREAD_PLANET
CASE GGSM_SPRITE_BG_LAYER_BOSS_PLANET
CASE GGSM_SPRITE_BG_LAYER_CRATERS
CASE GGSM_SPRITE_BG_LAYER_EARTH
CASE GGSM_SPRITE_BG_LAYER_PINK_PLANET
CASE GGSM_SPRITE_BG_SPACE
CASE GGSM_SPRITE_BG_STARS
CASE GGSM_SPRITE_BG_MAP
RETURN GGSM_TEXDICT_BG
CASE GGSM_SPRITE_FBI_WARN
CASE GGSM_SPRITE_PSA
RETURN GGSM_TEXDICT_PSA
CASE GGSM_SPRITE_GAME_OVER_SCREEN
CASE GGSM_SPRITE_LEVEL_SCREEN_BANANASTAR
CASE GGSM_SPRITE_LEVEL_SCREEN_CAVERN
CASE GGSM_SPRITE_LEVEL_SCREEN_DOUGHBALL
CASE GGSM_SPRITE_LEVEL_SCREEN_EARTH
CASE GGSM_SPRITE_LEVEL_SCREEN_METEORS
CASE GGSM_SPRITE_LEVEL_SCREEN_PINK
CASE GGSM_SPRITE_LEVEL_SCREEN_DASH
CASE GGSM_SPRITE_OPENING_TEXT_1
CASE GGSM_SPRITE_OPENING_TEXT_2
CASE GGSM_SPRITE_OPENING_TEXT_3
CASE GGSM_SPRITE_OPENING_TEXT_4
CASE GGSM_SPRITE_OPENING_TEXT_5
CASE GGSM_SPRITE_OPENING_TEXT_6
CASE GGSM_SPRITE_OPENING_TEXT_7
CASE GGSM_SPRITE_OPENING_TEXT_8
CASE GGSM_SPRITE_OPENING_TEXT_9
CASE GGSM_SPRITE_PRESS_START
CASE GGSM_SPRITE_MONKEY_CONGRATS
RETURN GGSM_TEXDICT_FRONTEND
CASE GGSM_SPRITE_FACADE
RETURN GGSM_TEXDICT_RESIDENT
ENDSWITCH
RETURN GGSM_TEXDICT_GAME
ENDFUNC
FUNC STRING GGSM_GET_SPRITE_DICT_NAME(GGSM_SPRITE_TYPE eSprite)
RETURN GGSM_GET_TEXTURE_DICT(GGSM_GET_SPRITE_DICT(eSprite))
ENDFUNC
FUNC BOOL GGSM_LOAD_TEXTURE_DICT_FOR_SPRITE(GGSM_SPRITE_TYPE eSprite)
GGSM_TEXDICT eTexDict = GGSM_GET_SPRITE_DICT(eSprite)
STRING str = GGSM_GET_TEXTURE_DICT(eTexDict)
REQUEST_STREAMED_TEXTURE_DICT(str)
IF NOT HAS_STREAMED_TEXTURE_DICT_LOADED(str)
CDEBUG1LN(DEBUG_MINIGAME, "[GGSM] GGSM_LOAD_TEXTURE_DICT_FOR_SPRITE - Loading ", str)
RETURN FALSE
ENDIF
SET_BITMASK_ENUM_AS_ENUM(sGGSMData.eLoadedTextureFlags, eTexDict)
CDEBUG1LN(DEBUG_MINIGAME, "[GGSM] GGSM_LOAD_TEXTURE_DICT_FOR_SPRITE - Loading ", str, " Complete")
RETURN TRUE
ENDFUNC
/// PURPOSE:
/// Gets sprite name from enum
/// PARAMS:
/// eSprite -
/// iAnimFrame -
/// RETURNS:
///
FUNC STRING GGSM_GET_SPRITE_NAME(GGSM_SPRITE_TYPE eSprite, INT iAnimFrame = 0, BOOL bPained = FALSE, BOOL bBroken = FALSE)
SWITCH (eSprite)
CASE GGSM_SPRITE_ACID RETURN "ACID"
CASE GGSM_SPRITE_ACID_BLUE RETURN "ACID_BLUE"
CASE GGSM_SPRITE_BANANA_GREEN RETURN "BANANA_GREEN"
CASE GGSM_SPRITE_BANANA_RED RETURN "BANANA_RED"
CASE GGSM_SPRITE_BANANA_YELLOW RETURN "BANANA_YELLOW"
CASE GGSM_SPRITE_BANANA_JETPAC_GREEN RETURN "BANANA_JETPAC_GREEN"
CASE GGSM_SPRITE_BANANA_JETPAC_RED RETURN "BANANA_JETPAC_RED"
CASE GGSM_SPRITE_BANANA_JETPAC_YELLOW RETURN "BANANA_JETPAC_YELLOW"
CASE GGSM_SPRITE_BANANA_RED_ATTACK
IF (iAnimFrame = 1)
RETURN "BANANA_RED_ATTACK"
ENDIF
RETURN "BANANA_RED"
CASE GGSM_SPRITE_BANANA_SLICE RETURN "BANANA_SLICE"
CASE GGSM_SPRITE_BANANA_SLICE_BACK RETURN "BANANA_SLICE_BACK"
CASE GGSM_SPRITE_BANANA_SLICE_FRONT RETURN "BANANA_SLICE_FRONT"
CASE GGSM_SPRITE_BANDANA_RED RETURN "RED_BANDANA"
CASE GGSM_SPRITE_BANDANA_GREEN RETURN "GREEN_BANDANA"
CASE GGSM_SPRITE_BIG_SMOKE RETURN "BIG_SMOKE"
CASE GGSM_SPRITE_BOMB_EXPLOSION
IF (iAnimFrame = 0)
RETURN "BOMB_EXPLOSION_ANIM_1"
ELIF (iAnimFrame = 1)
RETURN "BOMB_EXPLOSION_ANIM_2"
ELIF (iAnimFrame = 2)
RETURN "BOMB_EXPLOSION_ANIM_3"
ELIF (iAnimFrame = 3)
RETURN "BOMB_EXPLOSION_ANIM_4"
ELIF (iAnimFrame = 4)
RETURN "BOMB_EXPLOSION_ANIM_5"
ENDIF
RETURN ""
CASE GGSM_SPRITE_CHERRY_BOMB RETURN "CHERRYBOMB"
CASE GGSM_SPRITE_CIRCLE_SHIP_GREEN RETURN "CIRCLE_SHIP_GREEN"
CASE GGSM_SPRITE_CIRCLE_SHIP_YELLOW RETURN "CIRCLE_SHIP"
CASE GGSM_SPRITE_CIRCLE_SHIP_RED RETURN "CIRCLE_SHIP_RED"
CASE GGSM_SPRITE_CRUMB_MEDIUM RETURN "CRUMB_MEDIUM"
CASE GGSM_SPRITE_CRUMB_SMALL RETURN "CRUMB_SMALL"
CASE GGSM_SPRITE_ENEMY_BULLET_BLUE RETURN "ENEMY_BULLET_BLUE"
CASE GGSM_SPRITE_ENEMY_BULLET_PURPLE RETURN "ENEMY_BULLET_PURPLE"
CASE GGSM_SPRITE_ENEMY_BULLET_RED RETURN "ENEMY_BULLET_RED"
CASE GGSM_SPRITE_ENEMY_BULLET_YELLOW RETURN "ENEMY_BULLET_YELLOW"
CASE GGSM_SPRITE_EXP_SHELL RETURN "EXP_SHELL"
CASE GGSM_SPRITE_EXPLOSION
IF (iAnimFrame = 0)
RETURN "EXPLOSION_FRAME_1"
ELIF (iAnimFrame = 1)
RETURN "EXPLOSION_FRAME_2"
ELIF (iAnimFrame = 2)
RETURN "EXPLOSION_FRAME_3"
ELIF (iAnimFrame = 3)
RETURN "EXPLOSION_FRAME_4"
ELIF (iAnimFrame = 4)
RETURN "EXPLOSION_FRAME_5"
ELIF (iAnimFrame = 5)
RETURN "EXPLOSION_FRAME_6"
ELIF (iAnimFrame = 6)
RETURN "EXPLOSION_FRAME_7"
ELIF (iAnimFrame = 7)
RETURN "EXPLOSION_FRAME_8"
ENDIF
RETURN ""
CASE GGSM_SPRITE_FLAME
iAnimFrame = iAnimFrame % 3
IF (iAnimFrame = 0)
RETURN "FLAME_1"
ELIF (iAnimFrame = 1)
RETURN "FLAME_2"
ELIF (iAnimFrame = 2)
RETURN "FLAME_3"
ENDIF
RETURN "FLAME_1"
CASE GGSM_SPRITE_FRUITBOWL RETURN "FRUITBOWL"
CASE GGSM_SPRITE_LIVES_REMAINING RETURN "LIVES_REMAINING"
CASE GGSM_SPRITE_METEOR_BIG RETURN "METEOR_BIG"
CASE GGSM_SPRITE_METEOR_MEDIUM RETURN "METEOR_MEDIUM"
CASE GGSM_SPRITE_METEOR_SMALL RETURN "METEOR_SMALL"
CASE GGSM_SPRITE_METEOR_VERY_BIG RETURN "METEOR_VERYBIG"
CASE GGSM_SPRITE_METEOR_HUGE RETURN "METEOR_HUGE"
CASE GGSM_SPRITE_MONKEY
IF (iAnimFrame = 1)
RETURN "MONKEY_TILT_UP"
ELIF (iAnimFrame = 2)
RETURN "MONKEY_TILT_DOWN"
ENDIF
RETURN "MONKEY"
CASE GGSM_SPRITE_PEANUT_METEOR RETURN "PEANUT_METEOR"
CASE GGSM_SPRITE_POWER_UP_BEAM RETURN "POWER_UP_BEAM"
CASE GGSM_SPRITE_POWER_UP_FORWARD_BACK RETURN "POWER_UP_FORWARD_BACK"
CASE GGSM_SPRITE_POWER_UP_BOLT RETURN "POWER_UP_BOLT"
CASE GGSM_SPRITE_POWER_UP_DECOY RETURN "POWER_UP_DECOY"
CASE GGSM_SPRITE_POWER_UP_DUALARCH RETURN "POWER_UP_DUEL_ARCH_BEAM"
CASE GGSM_SPRITE_POWER_UP_EXPLOSION RETURN "POWER_UP_EXPLOSION"
CASE GGSM_SPRITE_POWER_UP_EXTRALIFE RETURN "POWER_UP_EXTRA_LIFE"
CASE GGSM_SPRITE_POWER_UP_HEALTH RETURN "POWER_UP_HEALTH"
CASE GGSM_SPRITE_POWER_UP_NUKE RETURN "POWER_UP_NUKE"
CASE GGSM_SPRITE_POWER_UP_REPULSE RETURN "POWER_UP_REPULSE"
CASE GGSM_SPRITE_POWER_UP_ROCKET RETURN "POWER_UP_ROCKET"
CASE GGSM_SPRITE_POWER_UP_SCATTER RETURN "POWER_UP_SCATTER"
CASE GGSM_SPRITE_POWER_UP_SHIELD RETURN "POWER_UP_SHIELD"
CASE GGSM_SPRITE_POWER_UP_STUN RETURN "POWER_UP_STUN"
CASE GGSM_SPRITE_POWER_UP_WAVE RETURN "POWER_UP_WAVE"
CASE GGSM_SPRITE_PROJ_BEAM_PURPLE RETURN "RAIL_GUN_FIRE_RED"
CASE GGSM_SPRITE_RAIL_GUN_FIRE_BLUE RETURN "RAIL_GUN_FIRE_BLUE"
CASE GGSM_SPRITE_RAIL_GUN_FIRE_PURPLE RETURN "RAIL_GUN_FIRE_PURPLE"
CASE GGSM_SPRITE_RAIL_GUN_FIRE_RED RETURN "RAIL_GUN_FIRE_RED"
CASE GGSM_SPRITE_RAIL_GUN_FIRE_YELLOW RETURN "RAIL_GUN_FIRE_YELLOW"
CASE GGSM_SPRITE_ROCKET RETURN "ROCKET"
CASE GGSM_SPRITE_ROCKET_BLUE RETURN "ROCKET_BLUE"
CASE GGSM_SPRITE_SHIELD RETURN "SHIELD"
CASE GGSM_SPRITE_SHOT_LONG_BLUE RETURN "SHOT_BLUE_LONG"
CASE GGSM_SPRITE_SHOT_LONG_PURPLE RETURN "SHOT_PURPLE_LONG"
CASE GGSM_SPRITE_SHOT_LONG_RED RETURN "SHOT_RED_LONG"
CASE GGSM_SPRITE_SHOT_LONG_YELLOW RETURN "SHOT_YELLOW_LONG"
CASE GGSM_SPRITE_SHOT_ROUND_BLUE RETURN "SHOT_BLUE_ROUND"
CASE GGSM_SPRITE_SHOT_ROUND_PURPLE RETURN "SHOT_PURPLE_ROUND"
CASE GGSM_SPRITE_SHOT_ROUND_RED RETURN "SHOT_RED_ROUND"
CASE GGSM_SPRITE_SHOT_ROUND_YELLOW RETURN "SHOT_YELLOW_ROUND"
CASE GGSM_SPRITE_SMALL_SMOKE RETURN "SMALL_SMOKE"
CASE GGSM_SPRITE_BOSS_BREAD
IF (bPained)
IF (iAnimFrame = 0)
RETURN "BOSS_BREAD_1_NORMAL"
ELIF (iAnimFrame = 1)
RETURN "BOSS_BREAD_2_NORMAL"
ELIF (iAnimFrame = 2)
RETURN "BOSS_BREAD_3_NORMAL"
ELIF (iAnimFrame = 3)
RETURN "BOSS_BREAD_4_NORMAL"
ELIF (iAnimFrame = 4)
RETURN "BOSS_BREAD_5_NORMAL"
ENDIF
ELSE
IF (iAnimFrame = 0)
RETURN "BOSS_BREAD_1_PAINED"
ELIF (iAnimFrame = 1)
RETURN "BOSS_BREAD_2_PAINED"
ELIF (iAnimFrame = 2)
RETURN "BOSS_BREAD_3_PAINED"
ELIF (iAnimFrame = 3)
RETURN "BOSS_BREAD_4_PAINED"
ELIF (iAnimFrame = 4)
RETURN "BOSS_BREAD_5_PAINED"
ENDIF
ENDIF
RETURN "BOSS_BREAD_1_NORMAL"
CASE GGSM_SPRITE_BOSS_BREAD_EYEBROWS
IF (iAnimFrame = 0)
RETURN "EYEBROW_ANIM_1"
ELIF (iAnimFrame = 1)
RETURN "EYEBROW_ANIM_2"
ELIF (iAnimFrame = 2)
RETURN "EYEBROW_ANIM_3"
ELIF (iAnimFrame = 3)
RETURN "EYEBROW_ANIM_4"
ENDIF
RETURN "EYEBROW_ANIM_1"
CASE GGSM_SPRITE_BOSS_BREAD_FACE
IF (bPained)
RETURN "BOSS_BREAD_YELLOW_PAINED"
ENDIF
RETURN "BOSS_BREAD_YELLOW"
CASE GGSM_SPRITE_BOSS_BREAD_BOTTOM_LEFT
RETURN "BOSS_BREAD_BOTTOM_LEFT"
CASE GGSM_SPRITE_BOSS_BREAD_BOTTOM_RIGHT
RETURN "BOSS_BREAD_BOTTOM_RIGHT"
CASE GGSM_SPRITE_BOSS_BREAD_TOP_LEFT
RETURN "BOSS_BREAD_TOP_LEFT"
CASE GGSM_SPRITE_BOSS_BREAD_TOP_RIGHT
RETURN "BOSS_BREAD_TOP_RIGHT"
CASE GGSM_SPRITE_BOSS_BANANA_SPLIT
IF (iAnimFrame = 0)
RETURN "BANANA_SPLIT_1"
ELIF (iAnimFrame = 1)
RETURN "BANANA_SPLIT_2"
ELIF (iAnimFrame = 2)
RETURN "BANANA_SPLIT_3"
ELIF (iAnimFrame = 3)
RETURN "BANANA_SPLIT_4"
ENDIF
RETURN ""
CASE GGSM_SPRITE_BOSS_DR_DANK_TOP
IF (bBroken)
RETURN "DR_DANK_TOP_BROKEN"
ENDIF
RETURN "DR_DANK_TOP"
CASE GGSM_SPRITE_BOSS_DR_DANK_MIDDLE
IF (bBroken)
RETURN "DR_DANK_MIDDLE_BROKEN"
ENDIF
RETURN "DR_DANK_MIDDLE"
CASE GGSM_SPRITE_BOSS_DR_DANK_BOTTOM
IF (bBroken)
RETURN "DR_DANK_BOTTOM_BROKEN"
ENDIF
IF (iAnimFrame = 0)
RETURN "DR_DANK_BOTTOM"
ELIF (iAnimFrame = 1)
RETURN "DR_DANK_BOTTOM_2"
ENDIF
RETURN "DR_DANK_BOTTOM"
CASE GGSM_SPRITE_BOSS_GRANANA
IF (iAnimFrame = 0)
RETURN "BOSS_GRANANA_ANIM1"
ELIF (iAnimFrame = 1)
RETURN "BOSS_GRANANA_ANIM2"
ELIF (iAnimFrame = 2)
RETURN "BOSS_GRANANA_ANIM3"
ELIF (iAnimFrame = 3)
RETURN "BOSS_GRANANA_ANIM4"
ENDIF
RETURN "BOSS_GRANANA_ANIM1"
CASE GGSM_SPRITE_BOSS_GRANANA_GLASSES
IF (iAnimFrame = 0)
RETURN "BOSS_GRANANA_GLASSES_BLUE"
ELIF (iAnimFrame = 1)
RETURN "BOSS_GRANANA_GLASSES_RED"
ELIF (iAnimFrame = 2)
RETURN "BOSS_GRANANA_GLASSES_BLUE_CRACK"
ELIF (iAnimFrame = 3)
RETURN "BOSS_GRANANA_GLASSES_RED_CRACK"
ENDIF
RETURN ""
CASE GGSM_SPRITE_BOSS_GRANANA_HAIR RETURN "BOSS_GRANANA_HAIR"
CASE GGSM_SPRITE_BOSS_MARINE
CASE GGSM_SPRITE_BOSS_MARINE_ALIEN
IF (iAnimFrame = 0)
RETURN "BOSS_MARINE_ANIM1"
ELIF (iAnimFrame = 1)
RETURN "BOSS_MARINE_ANIM2"
ELIF (iAnimFrame = 2)
RETURN "BOSS_MARINE_ANIM3"
ELIF (iAnimFrame = 3)
RETURN "BOSS_MARINE_ANIM4"
ELIF (iAnimFrame = 4)
RETURN "BOSS_ALIEN_ANIM1"
ELIF (iAnimFrame = 5)
RETURN "BOSS_ALIEN_ANIM2"
ELIF (iAnimFrame = 6)
RETURN "BOSS_ALIEN_ANIM3"
ELIF (iAnimFrame = 7)
RETURN "BOSS_ALIEN_ANIM4"
ENDIF
RETURN ""
CASE GGSM_SPRITE_SMALL_SMOOTHIE
CASE GGSM_SPRITE_BOSS_SMOOTHIE
IF (bPained)
RETURN "BOSS_SMOOTHIE_PAINED"
ENDIF
IF (iAnimFrame = 0)
RETURN "BOSS_SMOOTHIE_ANIM1"
ELIF (iAnimFrame = 1)
RETURN "BOSS_SMOOTHIE_ANIM2"
ELIF (iAnimFrame = 2)
RETURN "BOSS_SMOOTHIE_ANIM3"
ELIF (iAnimFrame = 3)
RETURN "BOSS_SMOOTHIE_ANIM4"
ENDIF
RETURN "BOSS_SMOOTHIE_ANIM1"
CASE GGSM_SPRITE_BOSS_TEXT RETURN "BOSS_TEXT"
CASE GGSM_SPRITE_PIC_BREAD_MAIN RETURN "BREAD_PORTRAIT_MAIN"
CASE GGSM_SPRITE_PIC_DR_DANK_FAIL RETURN "DRDANK_PORTRAIT_FAIL_SCREEN"
CASE GGSM_SPRITE_PIC_DR_DANK_MAIN RETURN "DRDANK_PORTRAIT_MAIN"
CASE GGSM_SPRITE_PIC_GRANANA_MAIN RETURN "GRANANA_PORTRAIT_MAIN"
CASE GGSM_SPRITE_PIC_MARINE_MAIN RETURN "MARINE_PORTRAIT_MAIN"
CASE GGSM_SPRITE_PIC_MONKEY_ASTEROID RETURN "MONKEY_PORTRAIT_ASTEROIDS"
CASE GGSM_SPRITE_PIC_MONKEY_FAIL RETURN "MONKEY_PORTRAIT_FAIL_SCREEN"
CASE GGSM_SPRITE_PIC_MONKEY_MAIN RETURN "MONKEY_PORTRAIT_MAIN"
CASE GGSM_SPRITE_PIC_SMOOTHIE_MAIN RETURN "SMOOTHIE_PORTRAIT_MAIN"
CASE GGSM_SPRITE_PIC_BREAD_64 RETURN "BREAD_64"
CASE GGSM_SPRITE_PIC_GRANANA_64 RETURN "GRANANA_64"
CASE GGSM_SPRITE_PIC_SMOOTHIE_64 RETURN "SMOOTHIE_64"
CASE GGSM_SPRITE_PIC_MARINE_64 RETURN "MARINE_64"
CASE GGSM_SPRITE_PIC_DR_DANK_64 RETURN "DANK_64"
CASE GGSM_SPRITE_HEALTH_BAR_BOSS RETURN "HEALTH_BAR_BOSS"
CASE GGSM_SPRITE_HEALTH_BAR_MONKEY RETURN "HEALTH_BAR_MONKEY"
CASE GGSM_SPRITE_HEALTH_BOX_BOSS RETURN "HEALTH_BOX_BOSS"
CASE GGSM_SPRITE_HEALTH_BOX_MONKEY RETURN "HEALTH_BOX_MONKEY"
CASE GGSM_SPRITE_WEAPON_BOX RETURN "WEAPON_BOX"
CASE GGSM_SPRITE_BOX_LVL1_BOSS_FAIL RETURN "BOX_LEVEL1_BOSS_FAIL"
CASE GGSM_SPRITE_BOX_LVL1_BOSS_START RETURN "BOX_LEVEL1_BOSS_START"
CASE GGSM_SPRITE_BOX_LVL1_BOSS_WIN RETURN "BOX_LEVEL1_BOSS_WIN"
CASE GGSM_SPRITE_BOX_LVL1_MONKEY_START RETURN "BOX_LEVEL2_MONKEY_START"
CASE GGSM_SPRITE_BOX_LVL1_MONKEY_FAIL RETURN "BOX_LEVEL1_MONKEY_FAIL"
CASE GGSM_SPRITE_BOX_LVL1_MONKEY_WIN RETURN "BOX_LEVEL1_MONKEY_WIN"
CASE GGSM_SPRITE_BOX_LVL2_BOSS_FAIL RETURN "BOX_LEVEL2_BOSS_FAIL"
CASE GGSM_SPRITE_BOX_LVL2_BOSS_START RETURN "BOX_LEVEL2_BOSS_START"
CASE GGSM_SPRITE_BOX_LVL2_BOSS_WIN RETURN "BOX_LEVEL2_BOSS_WIN"
CASE GGSM_SPRITE_BOX_LVL2_MONKEY_FAIL RETURN "BOX_LEVEL2_MONKEY_FAIL"
CASE GGSM_SPRITE_BOX_LVL2_MONKEY_START RETURN "BOX_LEVEL2_MONKEY_START"
CASE GGSM_SPRITE_BOX_LVL2_MONKEY_WIN RETURN "BOX_LEVEL2_MONKEY_WIN"
CASE GGSM_SPRITE_BOX_LVL3_BOSS_FAIL RETURN "BOX_LEVEL3_BOSS_FAIL"
CASE GGSM_SPRITE_BOX_LVL3_BOSS_START RETURN "BOX_LEVEL3_BOSS_START"
CASE GGSM_SPRITE_BOX_LVL3_BOSS_WIN RETURN "BOX_LEVEL3_BOSS_WIN"
CASE GGSM_SPRITE_BOX_LVL3_MONKEY_FAIL RETURN "BOX_LEVEL3_MONKEY_FAIL"
CASE GGSM_SPRITE_BOX_LVL3_MONKEY_START RETURN "BOX_LEVEL3_MONKEY_START"
CASE GGSM_SPRITE_BOX_LVL3_MONKEY_WIN RETURN "BOX_LEVEL3_MONKEY_WIN"
CASE GGSM_SPRITE_BOX_LVL4_BOSS_FAIL RETURN "BOX_LEVEL4_BOSS_FAIL"
CASE GGSM_SPRITE_BOX_LVL4_BOSS_START RETURN "BOX_LEVEL4_BOSS_START"
CASE GGSM_SPRITE_BOX_LVL4_BOSS_WIN RETURN "BOX_LEVEL4_BOSS_WIN"
CASE GGSM_SPRITE_BOX_LVL4_MONKEY_FAIL RETURN "BOX_LEVEL4_MONKEY_FAIL"
CASE GGSM_SPRITE_BOX_LVL4_MONKEY_START RETURN "BOX_LEVEL4_MONKEY_START"
CASE GGSM_SPRITE_BOX_LVL4_MONKEY_WIN RETURN "BOX_LEVEL4_MONKEY_WIN"
CASE GGSM_SPRITE_BOX_LVL5_BOSS_FAIL RETURN "BOX_LEVEL5_BOSS_FAIL"
CASE GGSM_SPRITE_BOX_LVL5_BOSS_START RETURN "BOX_LEVEL5_BOSS_START"
CASE GGSM_SPRITE_BOX_LVL5_BOSS_START2 RETURN "BOX_LEVEL5_BOSS_START2"
CASE GGSM_SPRITE_BOX_LVL5_BOSS_WIN RETURN "BOX_LEVEL5_BOSS_WIN"
CASE GGSM_SPRITE_BOX_LVL5_BOSS_WIN2 RETURN "BOX_LEVEL5_BOSS_WIN2"
CASE GGSM_SPRITE_BOX_LVL5_MONKEY_FAIL RETURN "BOX_LEVEL5_MONKEY_FAIL"
CASE GGSM_SPRITE_BOX_LVL5_MONKEY_START RETURN "BOX_LEVEL5_MONKEY_START"
CASE GGSM_SPRITE_BOX_LVL5_MONKEY_START2 RETURN "BOX_LEVEL5_MONKEY_START2"
CASE GGSM_SPRITE_BOX_LVL5_MONKEY_WIN RETURN "BOX_LEVEL5_MONKEY_WIN"
CASE GGSM_SPRITE_BOX_ASTEROID_LEAVING RETURN "ASTEROID_TEXT_LEAVING"
CASE GGSM_SPRITE_BOX_ASTEROID_NEARING RETURN "ASTEROID_TEXT_NEARING"
CASE GGSM_SPRITE_BOX_FAILSCRN_BOSS1 RETURN "FAIL_SCREEN_BOSS_1"
CASE GGSM_SPRITE_BOX_FAILSCRN_BOSS2 RETURN "FAIL_SCREEN_BOSS_2"
CASE GGSM_SPRITE_BOX_FAILSCRN_BOSS3 RETURN "FAIL_SCREEN_BOSS_3"
CASE GGSM_SPRITE_BOX_FAILSCRN_BOSS4 RETURN "FAIL_SCREEN_BOSS_4"
CASE GGSM_SPRITE_BOX_FAILSCRN_BOSS5 RETURN "FAIL_SCREEN_BOSS_5"
CASE GGSM_SPRITE_BOX_FAILSCRN_BOSS6 RETURN "FAIL_SCREEN_BOSS_6"
CASE GGSM_SPRITE_BOX_FAILSCRN_MONKEY_1 RETURN "FAIL_SCREEN_MONKEY_1"
CASE GGSM_SPRITE_BOX_FAILSCRN_MONKEY_2 RETURN "FAIL_SCREEN_MONKEY_2"
CASE GGSM_SPRITE_BOX_FAILSCRN_MONKEY_3 RETURN "FAIL_SCREEN_MONKEY_3"
CASE GGSM_SPRITE_BOX_FAILSCRN_MONKEY_4 RETURN "FAIL_SCREEN_MONKEY_4"
CASE GGSM_SPRITE_BOX_FAILSCRN_MONKEY_5 RETURN "FAIL_SCREEN_MONKEY_5"
CASE GGSM_SPRITE_BOX_FAILSCRN_MONKEY_6 RETURN "FAIL_SCREEN_MONKEY_6"
CASE GGSM_SPRITE_BG_LAYER_BREAD_PLANET RETURN "BREAD_PLANET"
CASE GGSM_SPRITE_BG_LAYER_BOSS_PLANET RETURN "BOSS_PLANET"
CASE GGSM_SPRITE_BG_LAYER_CRATERS RETURN "CRATERS"
CASE GGSM_SPRITE_BG_LAYER_EARTH RETURN "EARTH_BG"
CASE GGSM_SPRITE_BG_LAYER_PINK_PLANET RETURN "PINK_PLANET"
CASE GGSM_SPRITE_BG_SPACE RETURN "SPACE_BG"
CASE GGSM_SPRITE_BG_STARS RETURN "STARS_BG"
CASE GGSM_SPRITE_BG_MAP RETURN "MAP_BACKGROUND"
CASE GGSM_SPRITE_FACADE RETURN "FACADE"
CASE GGSM_SPRITE_FBI_WARN RETURN "FIB_WARN"
CASE GGSM_SPRITE_PSA RETURN "PSA_SCREEN"
CASE GGSM_SPRITE_GAME_OVER_SCREEN RETURN "GAME_OVER_SCREEN"
CASE GGSM_SPRITE_LEVEL_SCREEN_BANANASTAR RETURN "LEVEL_SCREEN_BANANASTAR"
CASE GGSM_SPRITE_LEVEL_SCREEN_CAVERN RETURN "LEVEL_SCREEN_CAVERN"
CASE GGSM_SPRITE_LEVEL_SCREEN_DOUGHBALL RETURN "LEVEL_SCREEN_DOUGHBALL"
CASE GGSM_SPRITE_LEVEL_SCREEN_EARTH RETURN "LEVEL_SCREEN_EARTH"
CASE GGSM_SPRITE_LEVEL_SCREEN_METEORS RETURN "LEVEL_SCREEN_METEORS"
CASE GGSM_SPRITE_LEVEL_SCREEN_PINK RETURN "LEVEL_SCREEN_PINK"
CASE GGSM_SPRITE_LEVEL_SCREEN_DASH RETURN "DASHES"
CASE GGSM_SPRITE_OPENING_TEXT_1 RETURN "OPENING_TEXT_LINE_1"
CASE GGSM_SPRITE_OPENING_TEXT_2 RETURN "OPENING_TEXT_LINE_2"
CASE GGSM_SPRITE_OPENING_TEXT_3 RETURN "OPENING_TEXT_LINE_3"
CASE GGSM_SPRITE_OPENING_TEXT_4 RETURN "OPENING_TEXT_LINE_4"
CASE GGSM_SPRITE_OPENING_TEXT_5 RETURN "OPENING_TEXT_LINE_5"
CASE GGSM_SPRITE_OPENING_TEXT_6 RETURN "OPENING_TEXT_LINE_6"
CASE GGSM_SPRITE_OPENING_TEXT_7 RETURN "OPENING_TEXT_LINE_7"
CASE GGSM_SPRITE_OPENING_TEXT_8 RETURN "OPENING_TEXT_LINE_8"
CASE GGSM_SPRITE_OPENING_TEXT_9 RETURN "OPENING_TEXT_LINE_9"
CASE GGSM_SPRITE_MONKEY_CONGRATS RETURN "SPACE_MONKEY_BIG"
CASE GGSM_SPRITE_PRESS_START RETURN "PRESS_START"
ENDSWITCH
RETURN "debugbox"
UNUSED_PARAMETER(bPained)
ENDFUNC
/// PURPOSE:
/// Gets sprite name from enum
/// PARAMS:
/// eSprite -
/// iAnimFrame -
/// RETURNS:
///
FUNC VECTOR_2D GGSM_GET_SPRITE_SIZE(GGSM_SPRITE_TYPE eSprite, INT iAnimFrame = 0)
SWITCH (eSprite)
CASE GGSM_SPRITE_ACID
CASE GGSM_SPRITE_ACID_BLUE
RETURN INIT_VECTOR_2D(32, 64)
CASE GGSM_SPRITE_BANANA_GREEN
CASE GGSM_SPRITE_BANANA_RED
CASE GGSM_SPRITE_BANANA_YELLOW
RETURN INIT_VECTOR_2D(128, 128)
CASE GGSM_SPRITE_BANANA_JETPAC_GREEN
CASE GGSM_SPRITE_BANANA_JETPAC_RED
CASE GGSM_SPRITE_BANANA_JETPAC_YELLOW
RETURN INIT_VECTOR_2D(128, 128)
CASE GGSM_SPRITE_BANANA_RED_ATTACK RETURN INIT_VECTOR_2D(128, 128)
CASE GGSM_SPRITE_BANANA_SLICE RETURN INIT_VECTOR_2D(96, 96)
CASE GGSM_SPRITE_BANANA_SLICE_BACK RETURN INIT_VECTOR_2D(192, 192)
CASE GGSM_SPRITE_BANANA_SLICE_FRONT RETURN INIT_VECTOR_2D(192, 192)
CASE GGSM_SPRITE_BANDANA_RED
CASE GGSM_SPRITE_BANDANA_GREEN
RETURN INIT_VECTOR_2D(64, 128)
CASE GGSM_SPRITE_BIG_SMOKE RETURN INIT_VECTOR_2D(80, 72)
CASE GGSM_SPRITE_BOMB_EXPLOSION RETURN INIT_VECTOR_2D(64, 64)
CASE GGSM_SPRITE_BOSS_TEXT RETURN INIT_VECTOR_2D(84, 20)
CASE GGSM_SPRITE_CHERRY_BOMB RETURN INIT_VECTOR_2D(96, 96)
CASE GGSM_SPRITE_CIRCLE_SHIP_RED
CASE GGSM_SPRITE_CIRCLE_SHIP_YELLOW
CASE GGSM_SPRITE_CIRCLE_SHIP_GREEN
RETURN INIT_VECTOR_2D(96, 96)
CASE GGSM_SPRITE_CRUMB_MEDIUM RETURN INIT_VECTOR_2D(96, 96)
CASE GGSM_SPRITE_CRUMB_SMALL RETURN INIT_VECTOR_2D(64, 64)
CASE GGSM_SPRITE_ENEMY_BULLET_BLUE
CASE GGSM_SPRITE_ENEMY_BULLET_PURPLE
CASE GGSM_SPRITE_ENEMY_BULLET_RED
CASE GGSM_SPRITE_ENEMY_BULLET_YELLOW
RETURN INIT_VECTOR_2D(32, 32)
CASE GGSM_SPRITE_EXP_SHELL RETURN INIT_VECTOR_2D(16, 32)
CASE GGSM_SPRITE_EXPLOSION RETURN INIT_VECTOR_2D(128, 128)
CASE GGSM_SPRITE_FLAME RETURN INIT_VECTOR_2D(32, 16)
CASE GGSM_SPRITE_FRUITBOWL RETURN INIT_VECTOR_2D(128, 128)
CASE GGSM_SPRITE_LIVES_REMAINING RETURN INIT_VECTOR_2D(64, 64)
CASE GGSM_SPRITE_METEOR_SMALL RETURN INIT_VECTOR_2D(96, 96)
CASE GGSM_SPRITE_METEOR_MEDIUM RETURN INIT_VECTOR_2D(160, 160)
CASE GGSM_SPRITE_METEOR_BIG RETURN INIT_VECTOR_2D(200, 200)
CASE GGSM_SPRITE_METEOR_VERY_BIG RETURN INIT_VECTOR_2D(250, 250)
CASE GGSM_SPRITE_METEOR_HUGE RETURN INIT_VECTOR_2D(300, 300)
CASE GGSM_SPRITE_MONKEY RETURN INIT_VECTOR_2D(128, 128)
CASE GGSM_SPRITE_PEANUT_METEOR RETURN INIT_VECTOR_2D(96, 96)
CASE GGSM_SPRITE_POWER_UP_BEAM
CASE GGSM_SPRITE_POWER_UP_FORWARD_BACK
CASE GGSM_SPRITE_POWER_UP_BOLT
CASE GGSM_SPRITE_POWER_UP_DECOY
CASE GGSM_SPRITE_POWER_UP_DUALARCH
CASE GGSM_SPRITE_POWER_UP_EXPLOSION
CASE GGSM_SPRITE_POWER_UP_EXTRALIFE
CASE GGSM_SPRITE_POWER_UP_HEALTH
CASE GGSM_SPRITE_POWER_UP_NUKE
CASE GGSM_SPRITE_POWER_UP_REPULSE
CASE GGSM_SPRITE_POWER_UP_ROCKET
CASE GGSM_SPRITE_POWER_UP_SCATTER
CASE GGSM_SPRITE_POWER_UP_SHIELD
CASE GGSM_SPRITE_POWER_UP_STUN
CASE GGSM_SPRITE_POWER_UP_WAVE
RETURN INIT_VECTOR_2D(64, 64)
CASE GGSM_SPRITE_RAIL_GUN_FIRE_BLUE
CASE GGSM_SPRITE_RAIL_GUN_FIRE_RED
CASE GGSM_SPRITE_RAIL_GUN_FIRE_PURPLE
CASE GGSM_SPRITE_RAIL_GUN_FIRE_YELLOW
RETURN INIT_VECTOR_2D(48, 192)
CASE GGSM_SPRITE_PROJ_BEAM_PURPLE RETURN INIT_VECTOR_2D(48, 192)
CASE GGSM_SPRITE_ROCKET RETURN INIT_VECTOR_2D(32, 64)
CASE GGSM_SPRITE_ROCKET_BLUE RETURN INIT_VECTOR_2D(32, 64)
CASE GGSM_SPRITE_SHIELD RETURN INIT_VECTOR_2D(128, 128)
CASE GGSM_SPRITE_SHOT_LONG_BLUE
CASE GGSM_SPRITE_SHOT_LONG_PURPLE
CASE GGSM_SPRITE_SHOT_LONG_RED
CASE GGSM_SPRITE_SHOT_LONG_YELLOW
RETURN INIT_VECTOR_2D(16, 64)
CASE GGSM_SPRITE_SHOT_ROUND_RED
CASE GGSM_SPRITE_SHOT_ROUND_BLUE
CASE GGSM_SPRITE_SHOT_ROUND_PURPLE
CASE GGSM_SPRITE_SHOT_ROUND_YELLOW
RETURN INIT_VECTOR_2D(32, 64)
CASE GGSM_SPRITE_SMALL_SMOKE RETURN INIT_VECTOR_2D(64, 64)
CASE GGSM_SPRITE_SMALL_SMOOTHIE RETURN INIT_VECTOR_2D(113, 143)
CASE GGSM_SPRITE_BOSS_BREAD_EYEBROWS RETURN INIT_VECTOR_2D(256, 128)
CASE GGSM_SPRITE_BOSS_BREAD
CASE GGSM_SPRITE_BOSS_BREAD_FACE
CASE GGSM_SPRITE_BOSS_BREAD_BOTTOM_LEFT
CASE GGSM_SPRITE_BOSS_BREAD_BOTTOM_RIGHT
CASE GGSM_SPRITE_BOSS_BREAD_TOP_LEFT
CASE GGSM_SPRITE_BOSS_BREAD_TOP_RIGHT
RETURN INIT_VECTOR_2D(512, 512)
CASE GGSM_SPRITE_BOSS_BANANA_SPLIT RETURN INIT_VECTOR_2D(128, 128)
CASE GGSM_SPRITE_BOSS_MARINE RETURN INIT_VECTOR_2D(512, 1024)
CASE GGSM_SPRITE_BOSS_DR_DANK_BOTTOM RETURN INIT_VECTOR_2D(512, 256)
CASE GGSM_SPRITE_BOSS_DR_DANK_MIDDLE RETURN INIT_VECTOR_2D(512, 512)
CASE GGSM_SPRITE_BOSS_DR_DANK_TOP RETURN INIT_VECTOR_2D(512, 512)
CASE GGSM_SPRITE_BOSS_GRANANA RETURN INIT_VECTOR_2D(512, 512)
CASE GGSM_SPRITE_BOSS_GRANANA_GLASSES RETURN INIT_VECTOR_2D(128, 64)
CASE GGSM_SPRITE_BOSS_GRANANA_HAIR RETURN INIT_VECTOR_2D(128, 128)
CASE GGSM_SPRITE_BOSS_SMOOTHIE RETURN INIT_VECTOR_2D(512, 512)
CASE GGSM_SPRITE_PIC_BREAD_MAIN
CASE GGSM_SPRITE_PIC_DR_DANK_MAIN
CASE GGSM_SPRITE_PIC_GRANANA_MAIN
CASE GGSM_SPRITE_PIC_MARINE_MAIN
CASE GGSM_SPRITE_PIC_MONKEY_MAIN
CASE GGSM_SPRITE_PIC_SMOOTHIE_MAIN
RETURN INIT_VECTOR_2D(256, 256)
CASE GGSM_SPRITE_PIC_BREAD_64
CASE GGSM_SPRITE_PIC_GRANANA_64
CASE GGSM_SPRITE_PIC_SMOOTHIE_64
CASE GGSM_SPRITE_PIC_MARINE_64
CASE GGSM_SPRITE_PIC_DR_DANK_64
RETURN INIT_VECTOR_2D(64, 64)
CASE GGSM_SPRITE_PIC_MONKEY_ASTEROID
CASE GGSM_SPRITE_PIC_DR_DANK_FAIL
CASE GGSM_SPRITE_PIC_MONKEY_FAIL
RETURN INIT_VECTOR_2D(128, 128)
CASE GGSM_SPRITE_HEALTH_BAR_BOSS
CASE GGSM_SPRITE_HEALTH_BAR_MONKEY
RETURN INIT_VECTOR_2D(256, 32)
CASE GGSM_SPRITE_HEALTH_BOX_BOSS
CASE GGSM_SPRITE_HEALTH_BOX_MONKEY
RETURN INIT_VECTOR_2D(256, 32)
CASE GGSM_SPRITE_WEAPON_BOX RETURN INIT_VECTOR_2D(64, 64)
CASE GGSM_SPRITE_BOX_LVL1_BOSS_FAIL
CASE GGSM_SPRITE_BOX_LVL1_BOSS_START
CASE GGSM_SPRITE_BOX_LVL1_BOSS_WIN
CASE GGSM_SPRITE_BOX_LVL1_MONKEY_START
CASE GGSM_SPRITE_BOX_LVL1_MONKEY_FAIL
CASE GGSM_SPRITE_BOX_LVL1_MONKEY_WIN
CASE GGSM_SPRITE_BOX_LVL2_BOSS_FAIL
CASE GGSM_SPRITE_BOX_LVL2_BOSS_START
CASE GGSM_SPRITE_BOX_LVL2_BOSS_WIN
CASE GGSM_SPRITE_BOX_LVL2_MONKEY_FAIL
CASE GGSM_SPRITE_BOX_LVL2_MONKEY_START
CASE GGSM_SPRITE_BOX_LVL2_MONKEY_WIN
CASE GGSM_SPRITE_BOX_LVL3_BOSS_FAIL
CASE GGSM_SPRITE_BOX_LVL3_BOSS_START
CASE GGSM_SPRITE_BOX_LVL3_BOSS_WIN
CASE GGSM_SPRITE_BOX_LVL3_MONKEY_FAIL
CASE GGSM_SPRITE_BOX_LVL3_MONKEY_START
CASE GGSM_SPRITE_BOX_LVL3_MONKEY_WIN
CASE GGSM_SPRITE_BOX_LVL4_BOSS_FAIL
CASE GGSM_SPRITE_BOX_LVL4_BOSS_START
CASE GGSM_SPRITE_BOX_LVL4_BOSS_WIN
CASE GGSM_SPRITE_BOX_LVL4_MONKEY_FAIL
CASE GGSM_SPRITE_BOX_LVL4_MONKEY_START
CASE GGSM_SPRITE_BOX_LVL4_MONKEY_WIN
CASE GGSM_SPRITE_BOX_LVL5_BOSS_FAIL
CASE GGSM_SPRITE_BOX_LVL5_BOSS_START
CASE GGSM_SPRITE_BOX_LVL5_BOSS_START2
CASE GGSM_SPRITE_BOX_LVL5_BOSS_WIN
CASE GGSM_SPRITE_BOX_LVL5_BOSS_WIN2
CASE GGSM_SPRITE_BOX_LVL5_MONKEY_START
CASE GGSM_SPRITE_BOX_LVL5_MONKEY_START2
CASE GGSM_SPRITE_BOX_LVL5_MONKEY_FAIL
CASE GGSM_SPRITE_BOX_LVL5_MONKEY_WIN
RETURN INIT_VECTOR_2D(1024, 128)
CASE GGSM_SPRITE_BOX_ASTEROID_NEARING
CASE GGSM_SPRITE_BOX_ASTEROID_LEAVING
CASE GGSM_SPRITE_BOX_FAILSCRN_BOSS1
CASE GGSM_SPRITE_BOX_FAILSCRN_BOSS2
CASE GGSM_SPRITE_BOX_FAILSCRN_BOSS3
CASE GGSM_SPRITE_BOX_FAILSCRN_BOSS4
CASE GGSM_SPRITE_BOX_FAILSCRN_BOSS5
CASE GGSM_SPRITE_BOX_FAILSCRN_BOSS6
CASE GGSM_SPRITE_BOX_FAILSCRN_MONKEY_1
CASE GGSM_SPRITE_BOX_FAILSCRN_MONKEY_2
CASE GGSM_SPRITE_BOX_FAILSCRN_MONKEY_3
CASE GGSM_SPRITE_BOX_FAILSCRN_MONKEY_4
CASE GGSM_SPRITE_BOX_FAILSCRN_MONKEY_5
CASE GGSM_SPRITE_BOX_FAILSCRN_MONKEY_6
RETURN INIT_VECTOR_2D(512, 128)
CASE GGSM_SPRITE_BG_LAYER_BREAD_PLANET
CASE GGSM_SPRITE_BG_LAYER_BOSS_PLANET
CASE GGSM_SPRITE_BG_LAYER_CRATERS
CASE GGSM_SPRITE_BG_LAYER_EARTH
CASE GGSM_SPRITE_BG_LAYER_PINK_PLANET
RETURN INIT_VECTOR_2D(512, 256)
CASE GGSM_SPRITE_BG_SPACE RETURN INIT_VECTOR_2D(1024, 1024)
CASE GGSM_SPRITE_BG_STARS RETURN INIT_VECTOR_2D(1264, 930)
CASE GGSM_SPRITE_BG_MAP RETURN INIT_VECTOR_2D(1500, 1000)
CASE GGSM_SPRITE_FACADE RETURN INIT_VECTOR_2D(2048, 1080)
CASE GGSM_SPRITE_FBI_WARN RETURN INIT_VECTOR_2D(1024, 1024)
CASE GGSM_SPRITE_PSA RETURN INIT_VECTOR_2D(1024, 1024)
CASE GGSM_SPRITE_GAME_OVER_SCREEN RETURN INIT_VECTOR_2D(1264, 132)
CASE GGSM_SPRITE_LEVEL_SCREEN_DASH RETURN INIT_VECTOR_2D(16.0, 128.0)
CASE GGSM_SPRITE_LEVEL_SCREEN_BANANASTAR
CASE GGSM_SPRITE_LEVEL_SCREEN_CAVERN
CASE GGSM_SPRITE_LEVEL_SCREEN_DOUGHBALL
CASE GGSM_SPRITE_LEVEL_SCREEN_EARTH
CASE GGSM_SPRITE_LEVEL_SCREEN_METEORS
CASE GGSM_SPRITE_LEVEL_SCREEN_PINK
RETURN INIT_VECTOR_2D(384.0, 384.0)
CASE GGSM_SPRITE_OPENING_TEXT_1
CASE GGSM_SPRITE_OPENING_TEXT_2
CASE GGSM_SPRITE_OPENING_TEXT_3
CASE GGSM_SPRITE_OPENING_TEXT_4
CASE GGSM_SPRITE_OPENING_TEXT_5
CASE GGSM_SPRITE_OPENING_TEXT_6
CASE GGSM_SPRITE_OPENING_TEXT_7
CASE GGSM_SPRITE_OPENING_TEXT_8
CASE GGSM_SPRITE_OPENING_TEXT_9
RETURN INIT_VECTOR_2D(1024.0, 32.0)
CASE GGSM_SPRITE_PRESS_START RETURN INIT_VECTOR_2D(512.0, 32.0)
CASE GGSM_SPRITE_MONKEY_CONGRATS RETURN INIT_VECTOR_2D(256.0, 256.0)
ENDSWITCH
RETURN INIT_VECTOR_2D(64, 64)
UNUSED_PARAMETER(iAnimFrame)
ENDFUNC
FUNC FLOAT GGSM_GET_DOMINANT_SPRITE_SIZE(GGSM_SPRITE_TYPE spr)
VECTOR_2D size = GGSM_GET_SPRITE_SIZE(spr)
RETURN FMAX(size.x, size.y)
ENDFUNC
FUNC VECTOR_2D GGSM_GET_SPRITE_BG_LAYER_SIZE_FOR_STAGE(INT iStage)
SWITCH (iStage)
CASE GGSM_SECTOR_EARTH RETURN GGSM_GET_SPRITE_SIZE(GGSM_SPRITE_BG_LAYER_EARTH)
CASE GGSM_SECTOR_ASTEROID_BELT RETURN INIT_VECTOR_2D(0, 0)
CASE GGSM_SECTOR_PINK_RING RETURN GGSM_GET_SPRITE_SIZE(GGSM_SPRITE_BG_LAYER_PINK_PLANET)
CASE GGSM_SECTOR_YELLOW_CLAM RETURN INIT_VECTOR_2D(0, 0) // RETURN GGSM_GET_SPRITE_SIZE(GGSM_SPRITE_BG_LAYER_CRATERS)
CASE GGSM_SECTOR_DOUGHBALL RETURN GGSM_GET_SPRITE_SIZE(GGSM_SPRITE_BG_LAYER_BREAD_PLANET)
CASE GGSM_SECTOR_BANANASTAR RETURN GGSM_GET_SPRITE_SIZE(GGSM_SPRITE_BG_LAYER_BOSS_PLANET)
ENDSWITCH
RETURN INIT_VECTOR_2D(0, 0)
ENDFUNC
FUNC STRING GGSM_GET_SPRITE_BG_LAYER_NAME_FOR_STAGE(INT iStage)
SWITCH (iStage)
CASE GGSM_SECTOR_EARTH RETURN GGSM_GET_SPRITE_NAME(GGSM_SPRITE_BG_LAYER_EARTH)
CASE GGSM_SECTOR_ASTEROID_BELT RETURN ""
CASE GGSM_SECTOR_PINK_RING RETURN GGSM_GET_SPRITE_NAME(GGSM_SPRITE_BG_LAYER_PINK_PLANET)
CASE GGSM_SECTOR_YELLOW_CLAM RETURN "" // RETURN GGSM_GET_SPRITE_NAME(GGSM_SPRITE_BG_LAYER_CRATERS)
CASE GGSM_SECTOR_DOUGHBALL RETURN GGSM_GET_SPRITE_NAME(GGSM_SPRITE_BG_LAYER_BREAD_PLANET)
CASE GGSM_SECTOR_BANANASTAR RETURN GGSM_GET_SPRITE_NAME(GGSM_SPRITE_BG_LAYER_BOSS_PLANET)
ENDSWITCH
RETURN ""
ENDFUNC
FUNC BOOL GGSM_GET_SPRITE_ANIM_DATA(GGSM_SPRITE_ANIM eAnim, GGSM_SPRITE_ANIM_DATA &data)
data.eSound = ARCADE_GAMES_SOUND_END
SWITCH (eAnim)
CASE GGSM_SPRITE_ANIM_DANK_CANNON
data.eSprite = GGSM_SPRITE_BOSS_DR_DANK_BOTTOM
data.eAnimFlags = GGSM_ANIM_BIT_LOOP
data.fStartFrame = 0.0
data.fEndFrame = 1.0
data.fAnimTime = 0.0625
BREAK
CASE GGSM_SPRITE_ANIM_EXPLOSION
data.eSprite = GGSM_SPRITE_EXPLOSION
data.eSound = ARCADE_GAMES_SOUND_GGSM_EXP_ENEMY_DESTROYED
data.eAnimFlags = GGSM_ANIM_BIT_NONE
SET_BITMASK_ENUM_AS_ENUM(data.eAnimFlags, GGSM_ANIM_BIT_DESTROY_AT_END)
data.fStartFrame = 0.0
data.fEndFrame = 7.0
data.fAnimTime = 0.5
BREAK
CASE GGSM_SPRITE_ANIM_BOMB_EXPLOSION
data.eSprite = GGSM_SPRITE_BOMB_EXPLOSION
data.eAnimFlags = GGSM_ANIM_BIT_NONE
SET_BITMASK_ENUM_AS_ENUM(data.eAnimFlags, GGSM_ANIM_BIT_DESTROY_AT_END)
data.fStartFrame = 0.0
data.fEndFrame = 4.0
data.fAnimTime = 0.25
BREAK
CASE GGSM_SPRITE_ANIM_GRANANA
data.eSprite = GGSM_SPRITE_BOSS_GRANANA
data.eAnimFlags = GGSM_ANIM_BIT_LOOP
data.fStartFrame = 0.0
data.fEndFrame = 3.0
data.fAnimTime = 0.5
BREAK
CASE GGSM_SPRITE_ANIM_MARINE
data.eSprite = GGSM_SPRITE_BOSS_MARINE
data.eAnimFlags = GGSM_ANIM_BIT_LOOP
data.fStartFrame = 0.0
data.fEndFrame = 3.0
data.fAnimTime = 0.25
BREAK
CASE GGSM_SPRITE_ANIM_MARINE_ALIEN
data.eSprite = GGSM_SPRITE_BOSS_MARINE
data.eAnimFlags = GGSM_ANIM_BIT_LOOP
data.fStartFrame = 4.0
data.fEndFrame = 7.0
data.fAnimTime = 0.25
BREAK
CASE GGSM_SPRITE_ANIM_PLYR_EXPLOSION
data.eSprite = GGSM_SPRITE_EXPLOSION
data.eSound = ARCADE_GAMES_SOUND_GGSM_EXP_PLAYER_DESTROYED
data.eAnimFlags = GGSM_ANIM_BIT_NONE
SET_BITMASK_ENUM_AS_ENUM(data.eAnimFlags, GGSM_ANIM_BIT_DESTROY_AT_END)
data.fStartFrame = 0.0
data.fEndFrame = 7.0
data.fAnimTime = 0.5
BREAK
CASE GGSM_SPRITE_ANIM_SMOOTHIE
data.eSprite = GGSM_SPRITE_BOSS_SMOOTHIE
data.eAnimFlags = GGSM_ANIM_BIT_LOOP
data.fStartFrame = 0.0
data.fEndFrame = 3.0
data.fAnimTime = 0.25
BREAK
CASE GGSM_SPRITE_ANIM_SMALL_SMOOTHIE
data.eSprite = GGSM_SPRITE_SMALL_SMOOTHIE
data.eAnimFlags = GGSM_ANIM_BIT_LOOP
data.fStartFrame = 0.0
data.fEndFrame = 3.0
data.fAnimTime = 0.25
BREAK
CASE GGSM_SPRITE_ANIM_GRAN_GLASS
data.eSprite = GGSM_SPRITE_BOSS_GRANANA_GLASSES
data.eSound = ARCADE_GAMES_SOUND_GGSM_BOSS_GRAN_ATTACK_EYE_LASER_CHARGE_LOOP
data.eAnimFlags = GGSM_ANIM_BIT_LOOP
data.fStartFrame = 0.0
data.fEndFrame = 1.0
data.fAnimTime = 0.025
BREAK
CASE GGSM_SPRITE_ANIM_GRAN_GLASSCRACK
data.eSprite = GGSM_SPRITE_BOSS_GRANANA_GLASSES
data.eSound = ARCADE_GAMES_SOUND_GGSM_BOSS_GRAN_ATTACK_EYE_LASER_CHARGE_LOOP
data.eAnimFlags = GGSM_ANIM_BIT_LOOP
data.fStartFrame = 2.0
data.fEndFrame = 3.0
data.fAnimTime = 0.0125
BREAK
CASE GGSM_SPRITE_ANIM_BREAD_EYEBROWS
data.eSprite = GGSM_SPRITE_BOSS_BREAD_EYEBROWS
data.eAnimFlags = GGSM_ANIM_BIT_LOOP
data.fStartFrame = 0.0
data.fEndFrame = 3.0
data.fAnimTime = 0.1
BREAK
DEFAULT
RETURN FALSE
ENDSWITCH
data.fFrameRange = data.fEndFrame - data.fStartFrame
RETURN TRUE
ENDFUNC
//-------------------------------------------------
// SECTOR MAP FUNCTIONS
//-------------------------------------------------
FUNC VECTOR_2D GGSM_GET_SPRITE_POSITION_FOR_STAGE_MAP(INT iStage)
SWITCH (iStage)
CASE 0 RETURN INIT_VECTOR_2D(GGSM_PX_SECTOR_MAP_MIN_X, GGSM_PX_SECTOR_MAP_MIN_Y)
CASE 1 RETURN INIT_VECTOR_2D(GGSM_PX_SECTOR_MAP_MIN_X, GGSM_PX_SECTOR_MAP_MIN_Y + GGSM_PX_SECTOR_MAP_Y_SPREAD)
CASE 2 RETURN INIT_VECTOR_2D(GGSM_PX_SECTOR_MAP_MIN_X + GGSM_PX_SECTOR_MAP_X_SPREAD, GGSM_PX_SECTOR_MAP_MIN_Y + GGSM_PX_SECTOR_MAP_Y_SPREAD)
CASE 3 RETURN INIT_VECTOR_2D(GGSM_PX_SECTOR_MAP_MIN_X + GGSM_PX_SECTOR_MAP_X_SPREAD, GGSM_PX_SECTOR_MAP_MIN_Y)
CASE 4 RETURN INIT_VECTOR_2D(GGSM_PX_SECTOR_MAP_MIN_X + (GGSM_PX_SECTOR_MAP_X_SPREAD * 2), GGSM_PX_SECTOR_MAP_MIN_Y)
CASE 5 RETURN INIT_VECTOR_2D(GGSM_PX_SECTOR_MAP_MIN_X + (GGSM_PX_SECTOR_MAP_X_SPREAD * 2), GGSM_PX_SECTOR_MAP_MIN_Y + GGSM_PX_SECTOR_MAP_Y_SPREAD)
ENDSWITCH
RETURN INIT_VECTOR_2D(cfBASE_SCREEN_HALF_WIDTH, cfBASE_SCREEN_HALF_HEIGHT)
ENDFUNC
FUNC VECTOR_2D GGSM_GET_SPRITE_DASH_POSITION_FOR_STAGE_MAP(INT iStage)
VECTOR_2D v1, v2
IF (iStage = 0) OR (iStage > 5)
RETURN INIT_VECTOR_2D(0, 0)
ENDIF
v1 = GGSM_GET_SPRITE_POSITION_FOR_STAGE_MAP(iStage - 1)
v2 = GGSM_GET_SPRITE_POSITION_FOR_STAGE_MAP(iStage)
RETURN LERP_VECTOR_2D(v1, v2, 0.5)
ENDFUNC
FUNC FLOAT GGSM_GET_SPRITE_DASH_ROTATION_FOR_STAGE_MAP(INT iStage)
IF (iStage % 2 = 0)
RETURN 90.0
ENDIF
RETURN 0.0
ENDFUNC
FUNC BOOL GGSM_IS_SPRITE_DASH_HORIZONTAL_FOR_STAGE_MAP(INT iStage)
IF (iStage % 2 = 0)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Gets sprite name from enum
/// PARAMS:
/// iStage
/// RETURNS:
///
FUNC STRING GGSM_GET_SPRITE_NAME_FOR_STAGE_MAP(INT iStage)
// we assume that everything lives in the common directory unless stated
SWITCH (iStage)
CASE GGSM_SECTOR_EARTH RETURN "LEVEL_SCREEN_EARTH"
CASE GGSM_SECTOR_ASTEROID_BELT RETURN "LEVEL_SCREEN_METEORS"
CASE GGSM_SECTOR_PINK_RING RETURN "LEVEL_SCREEN_PINK"
CASE GGSM_SECTOR_YELLOW_CLAM RETURN "LEVEL_SCREEN_CAVERN"
CASE GGSM_SECTOR_DOUGHBALL RETURN "LEVEL_SCREEN_DOUGHBALL"
CASE GGSM_SECTOR_BANANASTAR RETURN "LEVEL_SCREEN_BANANASTAR"
ENDSWITCH
RETURN ""
ENDFUNC
FUNC VECTOR_2D GGSM_GET_SPRITE_SIZE_FOR_STAGE_MAP(INT iStage)
// we assume that everything lives in the common directory unless stated
SWITCH (iStage)
CASE GGSM_SECTOR_EARTH //RETURN INIT_VECTOR_2D(148.0, 140.0)
CASE GGSM_SECTOR_ASTEROID_BELT //RETURN INIT_VECTOR_2D(160.0, 140.0)
CASE GGSM_SECTOR_PINK_RING //RETURN INIT_VECTOR_2D(168.0, 140.0)
CASE GGSM_SECTOR_YELLOW_CLAM //RETURN INIT_VECTOR_2D(140.0, 140.0)
CASE GGSM_SECTOR_DOUGHBALL //RETURN INIT_VECTOR_2D(192.0, 160.0)
CASE GGSM_SECTOR_BANANASTAR //RETURN INIT_VECTOR_2D(156.0, 156.0)
RETURN INIT_VECTOR_2D(256.0, 256.0)
ENDSWITCH
RETURN INIT_VECTOR_2D(0.0, 0.0)
ENDFUNC
FUNC VECTOR_2D GGSM_GET_TEXT_POSITION_FOR_STAGE_MAP(INT iStage)
// we assume that everything lives in the common directory unless stated
VECTOR_2D pos = GGSM_GET_SPRITE_POSITION_FOR_STAGE_MAP(iStage)
SWITCH (iStage)
CASE 0
CASE 3
CASE 4
pos.y -= 150.0
BREAK
DEFAULT
pos.y += 150.0
BREAK
ENDSWITCH
RETURN pos
ENDFUNC
//-------------------------------------------------
// ENTITY DATA
//-------------------------------------------------
FUNC BOOL GGSM_ENTITY_TYPE_IS_PLAYER_ALLIED(GGSM_ENTITY_TYPE eType)
IF (eType = GGSM_ENTITY_PLAYERSHIP)
RETURN TRUE
ENDIF
IF (eType = GGSM_ENTITY_PLAYERDECOY)
RETURN TRUE
ENDIF
RETURN (eType = GGSM_ENTITY_PLAYERSHIELD)
ENDFUNC
FUNC GGSM_ENTITY_DATA GGSM_ENTITY_DATA_INIT(GGSM_ENTITY_TYPE eType)
GGSM_ENTITY_DATA data
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_EXP_ENEMY_DESTROYED
data.sGunPos.fRotation = 90.0 // we generally assume most enemies come from the right
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_ENEMY_DAMAGED
data.fTotalExplodeTime = 0.0
data.fExplodeDelay = 0.125
data.iMaxHP = GGSM_BASE_ENEMY_HP
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(0, 0), INIT_VECTOR_2D(0, 0), 20)
SWITCH (eType)
CASE GGSM_ENTITY_PLAYERSHIP
data.eSpriteType = GGSM_SPRITE_MONKEY
data.fBaseSpeed = 540.0
data.iMaxHP = GGSM_MAX_PLAYER_HP
data.fTotalExplodeTime = GGSM_PLAYER_EXPLOSION_TIME
data.sGunPos.vPosition = INIT_VECTOR_2D(28, 15)
data.sGunPos.fRotation = 270.0
data.eWeaponType = GGSM_WEAPON_PLYRVULCAN
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_PLAYER_DAMAGED
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_EXP_PLAYER_DESTROYED
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(-3, -10), INIT_VECTOR_2D(-3, 1), 10)
BREAK
CASE GGSM_ENTITY_PLAYERDECOY
data.eSpriteType = GGSM_SPRITE_MONKEY
data.fBaseSpeed = 540.0
data.iMaxHP = 999
data.sGunPos.vPosition = INIT_VECTOR_2D(28, 15)
data.sGunPos.fRotation = 270.0
data.eWeaponType = GGSM_WEAPON_NONE
data.eDamageSound = ARCADE_GAMES_SOUND_END
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_ABIL_PLAYER_DEACTIVATE_DECOY
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(-3, -19), INIT_VECTOR_2D(-3, 18), 18)
BREAK
CASE GGSM_ENTITY_PLAYERSHIELD
data.eSpriteType = GGSM_SPRITE_SHIELD
data.fBaseSpeed = 0.0
data.iMaxHP = 3
data.eDieSound = ARCADE_GAMES_SOUND_END
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(0, 0), 60)
BREAK
CASE GGSM_ENTITY_BANDANA_GREEN
data.eSpriteType = GGSM_SPRITE_BANDANA_GREEN
data.fBaseSpeed = 400.0
data.sGunPos.vPosition = INIT_VECTOR_2D(-24, 2)
data.eWeaponType = GGSM_WEAPON_ENEMYSHOT
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_DAMAGE_BANANA_ASTRONAUT
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_EXP_BANANA_ASTRONAUT
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(0, -30), INIT_VECTOR_2D(-0, 28), 20)
BREAK
CASE GGSM_ENTITY_BANDANA_RED
data.eSpriteType = GGSM_SPRITE_BANDANA_RED
data.fBaseSpeed = 600.0
data.sGunPos.vPosition = INIT_VECTOR_2D(-24, 2)
data.eWeaponType = GGSM_WEAPON_ENEMYVULCAN
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_DAMAGE_BANANA_ASTRONAUT
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_EXP_BANANA_ASTRONAUT
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(0, -30), INIT_VECTOR_2D(-0, 28), 20)
BREAK
CASE GGSM_ENTITY_BANANAGREEN
data.eSpriteType = GGSM_SPRITE_BANANA_GREEN
data.fBaseSpeed = 400.0
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_DAMAGE_SPACESHIP
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_EXP_SPACESHIP
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(2, -4), 42)
BREAK
CASE GGSM_ENTITY_BANANAYELLOW
data.eSpriteType = GGSM_SPRITE_BANANA_YELLOW
data.fBaseSpeed = 500.0
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_DAMAGE_SPACESHIP
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_EXP_SPACESHIP
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(2, -4), 42)
BREAK
CASE GGSM_ENTITY_BANANARED
data.eSpriteType = GGSM_SPRITE_BANANA_RED
data.fBaseSpeed = 500.0
data.iMaxHP = 1
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_DAMAGE_SPACESHIP
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_EXP_SPACESHIP
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(2, -4), 42)
BREAK
CASE GGSM_ENTITY_BANANARED_ATTACK
data.eSpriteType = GGSM_SPRITE_BANANA_RED_ATTACK
data.fBaseSpeed = 450.0
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_DAMAGE_SPACESHIP
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_EXP_SPACESHIP
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(2, -4), 42)
BREAK
CASE GGSM_ENTITY_BANANAJETPAC
data.eSpriteType = GGSM_SPRITE_BANANA_JETPAC_YELLOW
data.fBaseSpeed = 500.0
data.sGunPos.vPosition = INIT_VECTOR_2D(-22, 15)
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_DAMAGE_BANANA_ASTRONAUT
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_EXP_BANANA_ASTRONAUT
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(0, -21), INIT_VECTOR_2D(-3, 24), 23)
BREAK
CASE GGSM_ENTITY_BANANAJETPAC_RED
data.eSpriteType = GGSM_SPRITE_BANANA_JETPAC_RED
data.fBaseSpeed = 500.0
data.eWeaponType = GGSM_WEAPON_ENEMYVULCAN
data.sGunPos.vPosition = INIT_VECTOR_2D(-22, 15)
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_DAMAGE_BANANA_ASTRONAUT
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_EXP_BANANA_ASTRONAUT
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(0, -21), INIT_VECTOR_2D(-3, 24), 23)
BREAK
CASE GGSM_ENTITY_BANANAJETPAC_GREEN
data.eSpriteType = GGSM_SPRITE_BANANA_JETPAC_GREEN
data.fBaseSpeed = 500.0
data.eWeaponType = GGSM_WEAPON_ENEMYSHOT
data.sGunPos.vPosition = INIT_VECTOR_2D(-22, 15)
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_DAMAGE_BANANA_ASTRONAUT
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_EXP_BANANA_ASTRONAUT
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(0, -21), INIT_VECTOR_2D(-3, 24), 23)
BREAK
CASE GGSM_ENTITY_CHERRYBOMB
data.eSpriteType = GGSM_SPRITE_CHERRY_BOMB
data.fBaseSpeed = 500.0
data.iMaxHP = 3
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_BOSS_SMOOTHIE_EXP_APPLE
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(0, 8), 30)
BREAK
CASE GGSM_ENTITY_CIRCLE_SHIP_RED
data.eSpriteType = GGSM_SPRITE_CIRCLE_SHIP_RED
data.fBaseSpeed = 750.0
data.iMaxHP = 1
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_DAMAGE_UFO
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_EXP_UFO
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(0, 0), 32)
BREAK
CASE GGSM_ENTITY_CIRCLE_SHIP_YELLOW
data.eSpriteType = GGSM_SPRITE_CIRCLE_SHIP_YELLOW
data.fBaseSpeed = 600.0
data.iMaxHP = 1
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_DAMAGE_UFO
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_EXP_UFO
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(0, 0), 32)
BREAK
CASE GGSM_ENTITY_CIRCLE_SHIP_GREEN
data.eSpriteType = GGSM_SPRITE_CIRCLE_SHIP_GREEN
data.fBaseSpeed = 500.0
data.iMaxHP = 1
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_DAMAGE_UFO
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_EXP_UFO
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(0, 0), 32)
BREAK
CASE GGSM_ENTITY_ARMOUR_FRUITBOWL
data.eSpriteType = GGSM_SPRITE_FRUITBOWL
data.fBaseSpeed = 200.0
data.iMaxHP = 25
data.eWeaponType = GGSM_WEAPON_ENEMYCLUSTERBOMB
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_DAMAGE_SPACESHIP
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_EXP_SPACESHIP
data.fTotalExplodeTime = GGSM_SUB_BOSS_EXPLOSION_TIME
data.vExplodeVelocity = INIT_VECTOR_2D(0.0, 1.0)
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(-6, 0), 48)
BREAK
CASE GGSM_ENTITY_FRUITBOWL
data.eSpriteType = GGSM_SPRITE_FRUITBOWL
data.fBaseSpeed = 400.0
data.sGunPos.vPosition = INIT_VECTOR_2D(-48, 25)
data.eWeaponType = GGSM_WEAPON_FRUITBOWL
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_DAMAGE_SPACESHIP
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_EXP_SPACESHIP
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(-6, 0), 48)
BREAK
CASE GGSM_ENTITY_CRUMB_METEOR
data.eSpriteType = GGSM_SPRITE_CRUMB_MEDIUM
data.fBaseSpeed = 400.0
data.iMaxHP = 3
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(0, 0), 32)
BREAK
CASE GGSM_ENTITY_METEOR_HUGE
data.eSpriteType = GGSM_SPRITE_METEOR_HUGE
data.fBaseSpeed = 200.0
data.iMaxHP = 5
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(0, 0), 72)
BREAK
CASE GGSM_ENTITY_METEOR_VERY_BIG
data.eSpriteType = GGSM_SPRITE_METEOR_VERY_BIG
data.fBaseSpeed = 200.0
data.iMaxHP = 5
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(0, 0), 72)
BREAK
CASE GGSM_ENTITY_METEOR_BIG
data.eSpriteType = GGSM_SPRITE_METEOR_BIG
data.fBaseSpeed = 200.0
data.iMaxHP = 5
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(0, 0), 72)
BREAK
CASE GGSM_ENTITY_METEOR_MEDIUM
data.eSpriteType = GGSM_SPRITE_METEOR_MEDIUM
data.fBaseSpeed = 400.0
data.iMaxHP = 3
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(0, 0), 48)
BREAK
CASE GGSM_ENTITY_METEOR_SMALL
data.eSpriteType = GGSM_SPRITE_METEOR_SMALL
data.fBaseSpeed = 800.0
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(0, 0), 20)
BREAK
CASE GGSM_ENTITY_PEANUT_METEOR
data.eSpriteType = GGSM_SPRITE_PEANUT_METEOR
data.fBaseSpeed = 900.0
data.iMaxHP = 3
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(-13, -18), INIT_VECTOR_2D(13, 12), 23)
BREAK
CASE GGSM_ENTITY_SMALL_SMOOTHIE
data.eSpriteType = GGSM_SPRITE_SMALL_SMOOTHIE
data.fBaseSpeed = 400.0
data.iMaxHP = 2
BREAK
CASE GGSM_ENTITY_BANANASLICE_FRONT
data.eSpriteType = GGSM_SPRITE_BANANA_SLICE_FRONT
data.fBaseSpeed = 500.0
data.iMaxHP = 25
data.sGunPos.vPosition = INIT_VECTOR_2D(-44, 30)
data.fTotalExplodeTime = GGSM_SUB_BOSS_EXPLOSION_TIME
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(-15, 7), INIT_VECTOR_2D(20, -13), 41)
BREAK
CASE GGSM_ENTITY_BANANASLICE
data.eSpriteType = GGSM_SPRITE_BANANA_SLICE
data.fBaseSpeed = 400.0
data.iMaxHP = 5
data.fTotalExplodeTime = GGSM_SUB_BOSS_EXPLOSION_TIME
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(0, 11), INIT_VECTOR_2D(0, -14), 28)
BREAK
CASE GGSM_ENTITY_BANANASLICE_BACK
data.eSpriteType = GGSM_SPRITE_BANANA_SLICE_BACK
data.fBaseSpeed = 400.0
data.iMaxHP = 8
data.fSpriteRotationFix = -90.0
data.fTotalExplodeTime = GGSM_SUB_BOSS_EXPLOSION_TIME
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(-32, -12), INIT_VECTOR_2D(23, 11), 36)
BREAK
CASE GGSM_ENTITY_BANANASPLIT_1
data.eSpriteType = GGSM_SPRITE_BOSS_BANANA_SPLIT
data.fBaseSpeed = 700.0
data.iMaxHP = 8
data.sGunPos.vPosition = INIT_VECTOR_2D(-15, 27)
data.fTotalExplodeTime = GGSM_SUB_BOSS_EXPLOSION_TIME
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(9, 22), INIT_VECTOR_2D(-13, -23), 36)
BREAK
CASE GGSM_ENTITY_BANANASPLIT_2
data.eSpriteType = GGSM_SPRITE_BOSS_BANANA_SPLIT
data.iDefaultAnimFrame = 1
data.fBaseSpeed = 700.0
data.iMaxHP = 3
data.sGunPos.vPosition = INIT_VECTOR_2D(-14, 9)
data.fTotalExplodeTime = GGSM_SUB_BOSS_EXPLOSION_TIME
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(10, 0), 45)
BREAK
CASE GGSM_ENTITY_BANANASPLIT_3
data.eSpriteType = GGSM_SPRITE_BOSS_BANANA_SPLIT
data.iDefaultAnimFrame = 2
data.fBaseSpeed = 700.0
data.iMaxHP = 3
data.sGunPos.vPosition = INIT_VECTOR_2D(-18, 19)
data.fTotalExplodeTime = GGSM_SUB_BOSS_EXPLOSION_TIME
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(10, 13), INIT_VECTOR_2D(9, -17), 36)
BREAK
CASE GGSM_ENTITY_BANANASPLIT_4
data.eSpriteType = GGSM_SPRITE_BOSS_BANANA_SPLIT
data.iDefaultAnimFrame = 3
data.fBaseSpeed = 700.0
data.iMaxHP = 3
data.sGunPos.vPosition = INIT_VECTOR_2D(-34, 2)
data.fTotalExplodeTime = GGSM_SUB_BOSS_EXPLOSION_TIME
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(-9, 8), INIT_VECTOR_2D(-9, -26), 36)
BREAK
CASE GGSM_ENTITY_BOSS_SMOOTHIE
data.eSpriteType = GGSM_SPRITE_BOSS_SMOOTHIE
data.fBaseSpeed = 200.0
data.fTotalExplodeTime = GGSM_BOSS_EXPLOSION_TIME
data.iMaxHP = 125
data.sGunPos.vPosition = INIT_VECTOR_2D(-142, 62)
data.eWeaponType = GGSM_WEAPON_SMOOTHIESPREAD
data.iPackedDefaultLocation = GGSM_PACK_VECTOR_2D_TO_INT_EXPLICIT(1300, 540)
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_BOSS_SMOOTHIE_DAMAGE
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_BOSS_SMOOTHIE_DIED
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(12, -84), INIT_VECTOR_2D(13, 71), 95)
BREAK
CASE GGSM_ENTITY_BOSS_MARINE
data.eSpriteType = GGSM_SPRITE_BOSS_MARINE
data.fBaseSpeed = 140.0
data.iMaxHP = 260
data.fTotalExplodeTime = GGSM_BOSS_EXPLOSION_TIME
data.sGunPos.vPosition = INIT_VECTOR_2D(-170, 7)
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_BOSS_MARINE_DAMAGE
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_BOSS_MARINE_DIED
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(29, 145), INIT_VECTOR_2D(9, -176), 100)
BREAK
CASE GGSM_ENTITY_BOSS_GRANANA
data.eSpriteType = GGSM_SPRITE_BOSS_GRANANA
data.fBaseSpeed = 140.0
data.iMaxHP = 310
data.sGunPos.vPosition = INIT_VECTOR_2D(-56, -57)
data.fTotalExplodeTime = GGSM_BOSS_EXPLOSION_TIME
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_BOSS_GRAN_DAMAGE
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_BOSS_GRAN_DIED
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(-1, -83), INIT_VECTOR_2D(-23, 124), 55)
BREAK
CASE GGSM_ENTITY_BOSS_BREAD_FACE
data.eSpriteType = GGSM_SPRITE_BOSS_BREAD_FACE
data.fBaseSpeed = 300.0
data.iMaxHP = 120
data.sGunPos.vPosition = INIT_VECTOR_2D(-58, 70)
data.fTotalExplodeTime = GGSM_BOSS_EXPLOSION_TIME
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_BOSS_BREAD_DAMAGE
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_BOSS_BREAD_DIED
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(-38, 76), INIT_VECTOR_2D(-38, -67), 78)
BREAK
CASE GGSM_ENTITY_BOSS_DR_DANK_TOP
data.eSpriteType = GGSM_SPRITE_BOSS_DR_DANK_TOP
data.fBaseSpeed = 140.0
data.iMaxHP = 200
data.eWeaponType = GGSM_WEAPON_DANK_SCATTER
data.fTotalExplodeTime = GGSM_UBER_BOSS_EXPLOSION_TIME
data.sGunPos.vPosition = INIT_VECTOR_2D(-181, -130)
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_BOSS_DR_DANK_DAMAGE
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_BOSS_DR_DANK_DIED
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(-106, -120), INIT_VECTOR_2D(60, 124), 55)
BREAK
CASE GGSM_ENTITY_BOSS_BREAD_EYEBROWS
data.eSpriteType = GGSM_SPRITE_BOSS_BREAD_EYEBROWS
data.fBaseSpeed = 140.0
data.iMaxHP = 0
data.sGunPos.vPosition = INIT_VECTOR_2D(-56, -57)
data.fTotalExplodeTime = GGSM_SUB_BOSS_EXPLOSION_TIME
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_BOSS_BREAD_DAMAGE
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(-89, 0), INIT_VECTOR_2D(88, 0), 20)
BREAK
CASE GGSM_ENTITY_BOSS_BREAD_TOP_LEFT
data.eSpriteType = GGSM_SPRITE_BOSS_BREAD_TOP_LEFT
data.fBaseSpeed = 500.0
data.iMaxHP = 20
data.sGunPos.vPosition = INIT_VECTOR_2D(-56, -57)
data.fTotalExplodeTime = GGSM_SUB_BOSS_EXPLOSION_TIME
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_BOSS_BREAD_DAMAGE
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_BOSS_BREAD_CHIP
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(-112, -110), 80)
BREAK
CASE GGSM_ENTITY_BOSS_BREAD_TOP_RIGHT
data.eSpriteType = GGSM_SPRITE_BOSS_BREAD_TOP_RIGHT
data.fBaseSpeed = 500.0
data.iMaxHP = 20
data.sGunPos.vPosition = INIT_VECTOR_2D(-56, -57)
data.fTotalExplodeTime = GGSM_SUB_BOSS_EXPLOSION_TIME
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_BOSS_BREAD_DAMAGE
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_BOSS_BREAD_CHIP
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(-5, -53), INIT_VECTOR_2D(96, -83), 95)
BREAK
CASE GGSM_ENTITY_BOSS_BREAD_BOTTOM_LEFT
data.eSpriteType = GGSM_SPRITE_BOSS_BREAD_BOTTOM_LEFT
data.fBaseSpeed = 500.0
data.iMaxHP = 20
data.sGunPos.vPosition = INIT_VECTOR_2D(-56, 136)
data.fTotalExplodeTime = GGSM_SUB_BOSS_EXPLOSION_TIME
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_BOSS_BREAD_DAMAGE
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_BOSS_BREAD_CHIP
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(-95, 23), INIT_VECTOR_2D(-73, 82), 85)
BREAK
CASE GGSM_ENTITY_BOSS_BREAD_BOTTOM_RIGHT
data.eSpriteType = GGSM_SPRITE_BOSS_BREAD_BOTTOM_RIGHT
data.fBaseSpeed = 500.0
data.iMaxHP = 20
data.sGunPos.vPosition = INIT_VECTOR_2D(-56, 136)
data.fTotalExplodeTime = GGSM_SUB_BOSS_EXPLOSION_TIME
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_BOSS_BREAD_DAMAGE
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_BOSS_BREAD_CHIP
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(72, 96), 101)
BREAK
CASE GGSM_ENTITY_BOSS_GRANANA_HAIR
data.eSpriteType = GGSM_SPRITE_BOSS_GRANANA_HAIR
data.fBaseSpeed = 300.0
data.iMaxHP = 0
data.fTotalExplodeTime = GGSM_SUB_BOSS_EXPLOSION_TIME
data.iPackedDefaultLocation = GGSM_PACK_VECTOR_2D_TO_INT_EXPLICIT(-80, -160)
GGSM_COLLISION_DATA_SET_AS_CIRCLE(data.sCollisionData, INIT_VECTOR_2D(0, 0), 40)
BREAK
CASE GGSM_ENTITY_BOSS_GRANANA_GLASSES
data.eSpriteType = GGSM_SPRITE_BOSS_GRANANA_GLASSES
data.fBaseSpeed = 140.0
data.iMaxHP = 0
data.sGunPos.vPosition = INIT_VECTOR_2D(-41, 0)
data.iPackedDefaultLocation = GGSM_PACK_VECTOR_2D_TO_INT_EXPLICIT(-20, -60)
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(0, 0), INIT_VECTOR_2D(-41, 0), 20)
BREAK
CASE GGSM_ENTITY_BOSS_DR_DANK_MIDDLE
data.eSpriteType = GGSM_SPRITE_BOSS_DR_DANK_MIDDLE
data.fBaseSpeed = 140.0
data.iMaxHP = 100
data.fTotalExplodeTime = GGSM_UBER_BOSS_EXPLOSION_TIME
data.eWeaponType = GGSM_WEAPON_ENEMYCLUSTERBOMB
data.sGunPos.vPosition = INIT_VECTOR_2D(-157, -96)
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_BOSS_DR_DANK_DAMAGE
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_BOSS_DR_DANK_DIED
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(91, -77), INIT_VECTOR_2D(-113, -77), 55)
BREAK
CASE GGSM_ENTITY_BOSS_DR_DANK_BOTTOM
data.eSpriteType = GGSM_SPRITE_BOSS_DR_DANK_BOTTOM
data.fBaseSpeed = 450.0
data.iMaxHP = 50
data.eWeaponType = GGSM_WEAPON_DANK_CANNON
data.fTotalExplodeTime = GGSM_UBER_BOSS_EXPLOSION_TIME
data.sGunPos.vPosition = INIT_VECTOR_2D(-170, 7)
data.eDamageSound = ARCADE_GAMES_SOUND_GGSM_BOSS_DR_DANK_DAMAGE
data.eDieSound = ARCADE_GAMES_SOUND_GGSM_BOSS_DR_DANK_DIED
GGSM_COLLISION_DATA_SET_AS_CAPSULE(data.sCollisionData, INIT_VECTOR_2D(-121, 6), INIT_VECTOR_2D(125, 6), 69)
BREAK
CASE GGSM_ENTITY_BOSS_DR_DANK_RLAUNCHER
data.eSpriteType = GGSM_SPRITE_NONE
data.fBaseSpeed = 0.0
data.iMaxHP = 0
data.eWeaponType = GGSM_WEAPON_DANK_ROCKET
data.sGunPos.vPosition = INIT_VECTOR_2D(0, 0)
data.eDamageSound = ARCADE_GAMES_SOUND_END
data.eDieSound = ARCADE_GAMES_SOUND_END
BREAK
CASE GGSM_ENTITY_BOSS_DR_DANK_RHLAUNCHER
data.eSpriteType = GGSM_SPRITE_NONE
data.fBaseSpeed = 0.0
data.iMaxHP = 0
data.eWeaponType = GGSM_WEAPON_DANK_HROCKET
data.sGunPos.vPosition = INIT_VECTOR_2D(0, 0)
data.eDamageSound = ARCADE_GAMES_SOUND_END
data.eDieSound = ARCADE_GAMES_SOUND_END
BREAK
CASE GGSM_ENTITY_BOSS_MARINE_LAUNCHER
data.eSpriteType = GGSM_SPRITE_NONE
data.fBaseSpeed = 0.0
data.iMaxHP = 0
data.eWeaponType = GGSM_WEAPON_MARINE_LAUNCHER
data.sGunPos.vPosition = INIT_VECTOR_2D(0, 0)
data.eDamageSound = ARCADE_GAMES_SOUND_END
data.eDieSound = ARCADE_GAMES_SOUND_END
BREAK
ENDSWITCH
#IF GGSM_EASY_ENEMIES
IF NOT GGSM_ENTITY_TYPE_IS_PLAYER_ALLIED(eType)
data.iMaxHP = 1
ENDIF
#ENDIF
RETURN data
ENDFUNC
FUNC BOOL GGSM_ENTITY_TYPE_IS_MAIN_BOSS_SECTION(GGSM_ENTITY_TYPE eType)
IF (eType = GGSM_ENTITY_BOSS_BREAD_FACE)
RETURN TRUE
ENDIF
IF (eType = GGSM_ENTITY_BOSS_GRANANA)
RETURN TRUE
ENDIF
IF (eType = GGSM_ENTITY_BOSS_MARINE)
RETURN TRUE
ENDIF
IF (eType = GGSM_ENTITY_BOSS_SMOOTHIE)
RETURN TRUE
ENDIF
IF (eType = GGSM_ENTITY_BOSS_DR_DANK_TOP)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC INT GGSM_ENTITY_GET_SCORE_FROM_TYPE(GGSM_ENTITY_TYPE eType)
IF GGSM_ENTITY_TYPE_IS_MAIN_BOSS_SECTION(eType)
RETURN 10000
ENDIF
RETURN 200
ENDFUNC
#IF IS_DEBUG_BUILD
#IF GGSM_ENTITY_EDITOR_ACTIVE
PROC GGSM_ENTITY_DATA_INIT_DEBUG_ARRAY()
GGSM_ENTITY_TYPE eType
REPEAT NUM_GGSM_ENTITY_TYPE eType
sGGSMData.sDebugEntityEditor.sDebugEntData[eType] = GGSM_ENTITY_DATA_INIT(eType)
ENDREPEAT
ENDPROC
#ENDIF
#ENDIF
FUNC GGSM_ENTITY_DATA GGSM_ENTITY_DATA_GET(GGSM_ENTITY_TYPE eType)
#IF IS_DEBUG_BUILD
#IF GGSM_ENTITY_EDITOR_ACTIVE
RETURN sGGSMData.sDebugEntityEditor.sDebugEntData[eType]
#ENDIF
#ENDIF
RETURN GGSM_ENTITY_DATA_INIT(eType)
ENDFUNC
//-------------------------------------------------
// PROJECTILE DATA FUNCTIONS
//-------------------------------------------------
FUNC GGSM_PROJECTILE_DATA GGSM_PROJECTILE_DATA_INIT(GGSM_PROJECTILE_TYPE eType)
GGSM_PROJECTILE_DATA data
data.fShotReloadTime = 0.125
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_WPN_ENEMY_DEFAULT
SWITCH (eType)
CASE GGSM_PROJECTILE_BOMB_EXPLOSION
data.eAlliedSprite = GGSM_SPRITE_BOMB_EXPLOSION
data.fBaseSpeed = 0
data.fShotReloadTime = 0.125
data.fRadius = 64.0
data.fLength = 0.0
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_WPN_PLAYER_ROCKET_EXPLODE
BREAK
CASE GGSM_PROJECTILE_EXP_SHELL
data.eAlliedSprite = GGSM_SPRITE_EXP_SHELL
data.fBaseSpeed = 800.0
data.fShotReloadTime = 0.125
data.fRadius = 12.0
data.fLength = 24.0
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_WPN_PLAYER_ROCKET
BREAK
CASE GGSM_PROJECTILE_HOMING_ROCKET
data.eAlliedSprite = GGSM_SPRITE_ROCKET_BLUE
data.eEnemySprite = GGSM_SPRITE_ROCKET
data.fBaseSpeed = 800.0
data.fRadius = 12.0
data.fLength = 24.0
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_WPN_PLAYER_ROCKET
BREAK
CASE GGSM_PROJECTILE_SCATTER
data.eAlliedSprite = GGSM_SPRITE_SHOT_ROUND_BLUE
data.eEnemySprite = GGSM_SPRITE_SHOT_ROUND_RED
data.fBaseSpeed = 800.0
data.fShotReloadTime = 0.125
data.fRadius = 16.0
data.fLength = 64.0
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_WPN_PLAYER_SCATTER
BREAK
CASE GGSM_PROJECTILE_WAVE
data.eAlliedSprite = GGSM_SPRITE_SHOT_ROUND_BLUE
data.eEnemySprite = GGSM_SPRITE_SHOT_ROUND_RED
data.fBaseSpeed = 1200.0
data.fShotReloadTime = 0.0625
data.fRadius = 16.0
data.fLength = 64.0
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_WPN_PLAYER_TRIPLE
BREAK
CASE GGSM_PROJECTILE_DUAL_ARCH
data.eAlliedSprite = GGSM_SPRITE_SHOT_LONG_BLUE
data.eEnemySprite = GGSM_SPRITE_SHOT_LONG_RED
data.fBaseSpeed = 1400.0
data.fShotReloadTime = 0.125
data.fRadius = 10.0
data.fLength = 80.0
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_WPN_PLAYER_DOUBLE
BREAK
CASE GGSM_PROJECTILE_VULKAN
data.eAlliedSprite = GGSM_SPRITE_SHOT_LONG_BLUE
data.eEnemySprite = GGSM_SPRITE_SHOT_LONG_RED
data.fBaseSpeed = 1400.0
data.fShotReloadTime = 0.125
data.fRadius = 10.0
data.fLength = 80.0
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_WPN_PLAYER_DEFAULT
BREAK
CASE GGSM_PROJECTILE_ENEMY_BEAM
data.eAlliedSprite = GGSM_SPRITE_PROJ_BEAM_BLUE
data.eEnemySprite = GGSM_SPRITE_PROJ_BEAM_PURPLE
data.fBaseSpeed = 0.0
data.fShotReloadTime = 0.125
data.fRadius = 24.0
data.fLength = 0.0
BREAK
CASE GGSM_PROJECTILE_ENEMY_LASER
data.eAlliedSprite = GGSM_SPRITE_RAIL_GUN_FIRE_BLUE
data.eEnemySprite = GGSM_SPRITE_RAIL_GUN_FIRE_RED
data.fBaseSpeed = 2000.0
data.fShotReloadTime = 0.25
data.fRadius = 12.0
data.fLength = 180.0
BREAK
CASE GGSM_PROJECTILE_ENEMY_LASER_PURPLE
data.eAlliedSprite = GGSM_SPRITE_RAIL_GUN_FIRE_BLUE
data.eEnemySprite = GGSM_SPRITE_RAIL_GUN_FIRE_PURPLE
data.fBaseSpeed = 2000.0
data.fShotReloadTime = 0.05
data.fRadius = 12.0
data.fLength = 360.0
BREAK
CASE GGSM_PROJECTILE_ENEMY_ROUND_RED
data.eAlliedSprite = GGSM_SPRITE_ENEMY_BULLET_BLUE
data.eEnemySprite = GGSM_SPRITE_ENEMY_BULLET_RED
data.fBaseSpeed = 400.0
data.fShotReloadTime = 0.5
data.fRadius = 24.0
data.fLength = 0.0
BREAK
CASE GGSM_PROJECTILE_ENEMY_ROUND_PURPLE
data.eAlliedSprite = GGSM_SPRITE_ENEMY_BULLET_BLUE
data.eEnemySprite = GGSM_SPRITE_ENEMY_BULLET_PURPLE
data.fBaseSpeed = 400.0
data.fShotReloadTime = 0.5
data.fRadius = 24.0
data.fLength = 0.0
BREAK
CASE GGSM_PROJECTILE_ENEMY_SHOT
data.eAlliedSprite = GGSM_SPRITE_SHOT_ROUND_BLUE
data.eEnemySprite = GGSM_SPRITE_SHOT_ROUND_RED
data.fBaseSpeed = 500.0
data.fShotReloadTime = 0.5
data.fRadius = 16.0
data.fLength = 32.0
BREAK
CASE GGSM_PROJECTILE_ENEMY_SHOT_RAPID
data.eAlliedSprite = GGSM_SPRITE_SHOT_ROUND_BLUE
data.eEnemySprite = GGSM_SPRITE_SHOT_ROUND_RED
data.fBaseSpeed = 500.0
data.fShotReloadTime = 0.25
data.fRadius = 16.0
data.fLength = 32.0
BREAK
CASE GGSM_PROJECTILE_ENEMY_SHOT_PURPLE
data.eAlliedSprite = GGSM_SPRITE_SHOT_ROUND_BLUE
data.eEnemySprite = GGSM_SPRITE_SHOT_ROUND_PURPLE
data.fBaseSpeed = 500.0
data.fShotReloadTime = 0.5
data.fRadius = 16.0
data.fLength = 32.0
BREAK
CASE GGSM_PROJECTILE_ENEMY_SHOT_YELLOW
data.eAlliedSprite = GGSM_SPRITE_SHOT_ROUND_BLUE
data.eEnemySprite = GGSM_SPRITE_SHOT_ROUND_YELLOW
data.fBaseSpeed = 500.0
data.fShotReloadTime = 0.5
data.fRadius = 16.0
data.fLength = 32.0
BREAK
CASE GGSM_PROJECTILE_ENEMY_VULKAN
data.eAlliedSprite = GGSM_SPRITE_SHOT_LONG_BLUE
data.eEnemySprite = GGSM_SPRITE_SHOT_LONG_RED
data.fBaseSpeed = 850.0
data.fShotReloadTime = 0.175
data.fRadius = 10.0
data.fLength = 80.0
BREAK
CASE GGSM_PROJECTILE_ENEMY_CLUSTER_BOMB
data.eAlliedSprite = GGSM_SPRITE_ENEMY_BULLET_BLUE
data.eEnemySprite = GGSM_SPRITE_ENEMY_BULLET_PURPLE
data.fBaseSpeed = 300.0
data.fShotReloadTime = 1.0
data.fRadius = 30.0
data.fLength = 0.0
BREAK
CASE GGSM_PROJECTILE_SMOOTHIE_SPREAD
data.eAlliedSprite = GGSM_SPRITE_SHOT_ROUND_BLUE
data.eEnemySprite = GGSM_SPRITE_SHOT_ROUND_PURPLE
data.fBaseSpeed = 500.0
data.fShotReloadTime = 0.3
data.fRadius = 16.0
data.fLength = 32.0
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_BOSS_SMOOTHIE_ATTACK
BREAK
CASE GGSM_PROJECTILE_SMOOTHIE_VULKAN
data.eAlliedSprite = GGSM_SPRITE_SHOT_LONG_BLUE
data.eEnemySprite = GGSM_SPRITE_SHOT_LONG_RED
data.fBaseSpeed = 1000.0
data.fShotReloadTime = 0.0625
data.fRadius = 10.0
data.fLength = 80.0
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_BOSS_SMOOTHIE_ATTACK_SPECIAL
BREAK
CASE GGSM_PROJECTILE_BREAD_CRUMB
data.eAlliedSprite = GGSM_SPRITE_CRUMB_SMALL
data.fBaseSpeed = 500.0
data.fShotReloadTime = 0.125
data.fRadius = 40.0
data.fLength = 0.0
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_BOSS_BREAD_ATTACK
BREAK
CASE GGSM_PROJECTILE_ACID
data.eAlliedSprite = GGSM_SPRITE_ACID_BLUE
data.eEnemySprite = GGSM_SPRITE_ACID
data.fBaseSpeed = 500.0
data.fShotReloadTime = 0.35
data.fRadius = 20.0
data.fLength = 40.0
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_BOSS_MARINE_ATTACK_SPECIAL
BREAK
CASE GGSM_PROJECTILE_ACID_VULKAN
data.eAlliedSprite = GGSM_SPRITE_ACID_BLUE
data.eEnemySprite = GGSM_SPRITE_ACID
data.fBaseSpeed = 650.0
data.fShotReloadTime = 0.125
data.fRadius = 20.0
data.fLength = 40.0
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_BOSS_MARINE_ATTACK_SPECIAL
BREAK
CASE GGSM_PROJECTILE_MARINE_SPREAD
data.eAlliedSprite = GGSM_SPRITE_SHOT_ROUND_BLUE
data.eEnemySprite = GGSM_SPRITE_SHOT_ROUND_PURPLE
data.fBaseSpeed = 650.0
data.fShotReloadTime = 0.2
data.fRadius = 16.0
data.fLength = 32.0
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_BOSS_MARINE_ATTACK
BREAK
CASE GGSM_PROJECTILE_MARINE_LAUNCHER
data.eAlliedSprite = GGSM_SPRITE_ROCKET_BLUE
data.eEnemySprite = GGSM_SPRITE_ROCKET
data.fBaseSpeed = 500.0
data.fRadius = 24.0
data.fLength = 48.0
data.fShotReloadTime = 0.25
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_BOSS_MARINE_ATTACK
BREAK
CASE GGSM_PROJECTILE_DANK_ROCKET
data.eAlliedSprite = GGSM_SPRITE_ROCKET_BLUE
data.eEnemySprite = GGSM_SPRITE_ROCKET
data.fBaseSpeed = 450.0
data.fRadius = 12.0
data.fLength = 24.0
data.fShotReloadTime = 0.18
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_BOSS_DR_DANK_ROCKETS
BREAK
CASE GGSM_PROJECTILE_DANK_HOMING_ROCKET
data.eAlliedSprite = GGSM_SPRITE_ROCKET_BLUE
data.eEnemySprite = GGSM_SPRITE_ROCKET
data.fBaseSpeed = 400.0
data.fRadius = 12.0
data.fLength = 24.0
data.fShotReloadTime = 0.25
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_BOSS_DR_DANK_ROCKETS
BREAK
CASE GGSM_PROJECTILE_DANK_SCATTER
data.eAlliedSprite = GGSM_SPRITE_SHOT_ROUND_BLUE
data.eEnemySprite = GGSM_SPRITE_SHOT_ROUND_RED
data.fBaseSpeed = 700.0
data.fShotReloadTime = 0.25
data.fRadius = 16.0
data.fLength = 64.0
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_BOSS_DR_DANK_ATTACK
BREAK
CASE GGSM_PROJECTILE_DANK_VULCAN
data.eAlliedSprite = GGSM_SPRITE_SHOT_LONG_BLUE
data.eEnemySprite = GGSM_SPRITE_SHOT_LONG_RED
data.fBaseSpeed = 1200.0
data.fShotReloadTime = 0.125
data.fRadius = 10.0
data.fLength = 80.0
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_BOSS_DR_DANK_ATTACK_MINIGUN
BREAK
CASE GGSM_PROJECTILE_DANK_CLUSTERBOMB
data.eAlliedSprite = GGSM_SPRITE_ENEMY_BULLET_BLUE
data.eEnemySprite = GGSM_SPRITE_ENEMY_BULLET_PURPLE
data.fBaseSpeed = 300.0
data.fShotReloadTime = 0.7
data.fRadius = 30.0
data.fLength = 0.0
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_BOSS_DR_DANK_ATTACK_SPECIAL
BREAK
CASE GGSM_PROJECTILE_DANK_SPREAD
data.eAlliedSprite = GGSM_SPRITE_ENEMY_BULLET_BLUE
data.eEnemySprite = GGSM_SPRITE_ENEMY_BULLET_YELLOW
data.fBaseSpeed = 300.0
data.fShotReloadTime = 0.7
data.fRadius = 30.0
data.fLength = 0.0
data.eProjSound = ARCADE_GAMES_SOUND_GGSM_BOSS_DR_DANK_ATTACK
BREAK
ENDSWITCH
IF (data.eEnemySprite = GGSM_SPRITE_NONE)
data.eEnemySprite = data.eAlliedSprite
ENDIF
RETURN data
ENDFUNC
FUNC GGSM_PROJECTILE_DATA GGSM_PROJECTILE_DATA_GET(GGSM_PROJECTILE_TYPE eType)
RETURN GGSM_PROJECTILE_DATA_INIT(eType)
ENDFUNC
//-------------------------------------------------
// WEAPON DATA FUNCTIONS
//-------------------------------------------------
FUNC GGSM_WEAPON_DATA GGSM_WEAPON_DATA_INIT(GGSM_WEAPON_TYPE eType)
GGSM_WEAPON_DATA data
SWITCH (eType)
CASE GGSM_WEAPON_ENEMYBEAM
data.eProjectileType = GGSM_PROJECTILE_ENEMY_BEAM
data.eSpreadType = GGSM_SPREAD_LINEAR
data.fSpreadValue = 0
data.iNumShots = 1
BREAK
CASE GGSM_WEAPON_ENEMYCONESPREAD
data.eProjectileType = GGSM_PROJECTILE_ENEMY_SHOT
data.eSpreadType = GGSM_SPREAD_CONE
data.fSpreadValue = 60.0
data.iNumShots = 3
data.iNumBursts = 2
data.fBurstReloadTime = 1.0
BREAK
CASE GGSM_WEAPON_ENEMYLASER
data.eProjectileType = GGSM_PROJECTILE_ENEMY_LASER
data.eSpreadType = GGSM_SPREAD_LINEAR
data.iNumShots = 1
data.iNumBursts = 4
data.fBurstReloadTime = 0.5
BREAK
CASE GGSM_WEAPON_ENEMYSHOT
data.eProjectileType = GGSM_PROJECTILE_ENEMY_SHOT
data.eSpreadType = GGSM_SPREAD_LINEAR
data.iNumShots = 1
data.iNumBursts = 1
data.fBurstReloadTime = 1.0
BREAK
CASE GGSM_WEAPON_ENEMYSHOT_RAPID
data.eProjectileType = GGSM_PROJECTILE_ENEMY_SHOT_RAPID
data.eSpreadType = GGSM_SPREAD_LINEAR
data.iNumShots = 1
data.iNumBursts = 1
data.fBurstReloadTime = 1.0
BREAK
CASE GGSM_WEAPON_ENEMYSPREAD
data.eProjectileType = GGSM_PROJECTILE_ENEMY_SHOT_PURPLE
data.eSpreadType = GGSM_SPREAD_RADIAL
data.fSpreadValue = 30.0
data.iNumShots = 6
data.iNumBursts = 1
data.fBurstReloadTime = 1.0
BREAK
CASE GGSM_WEAPON_ENEMYCLUSTERBOMB
data.eProjectileType = GGSM_PROJECTILE_ENEMY_CLUSTER_BOMB
data.eSpreadType = GGSM_SPREAD_CONE
data.fSpreadValue = 60.0
data.iNumShots = 2
BREAK
CASE GGSM_WEAPON_ENEMYTIMEDSPREAD
data.eProjectileType = GGSM_PROJECTILE_ENEMY_ROUND_PURPLE
data.eSpreadType = GGSM_SPREAD_RADIAL
data.fSpreadValue = 30.0
data.iNumShots = 8
data.iNumBursts = 2
data.fBurstReloadTime = 1.5
BREAK
CASE GGSM_WEAPON_ENEMYVULCAN
data.eProjectileType = GGSM_PROJECTILE_ENEMY_VULKAN
data.eSpreadType = GGSM_SPREAD_LINEAR
data.iNumShots = 1
data.iNumBursts = 2
data.fBurstReloadTime = 1.25
BREAK
CASE GGSM_WEAPON_FRUITBOWL
data.eProjectileType = GGSM_PROJECTILE_ENEMY_SHOT
data.eSpreadType = GGSM_SPREAD_RADIAL
data.fSpreadValue = 30.0
data.iNumShots = 6
data.iNumBursts = 2
data.fBurstReloadTime = 1.5
BREAK
CASE GGSM_WEAPON_GRANANAHAIR
data.eProjectileType = GGSM_PROJECTILE_ENEMY_SHOT_YELLOW
data.eSpreadType = GGSM_SPREAD_RADIAL
data.fSpreadValue = 30.0
data.iNumShots = 5
data.iNumBursts = 2
data.fBurstReloadTime = 0.5
BREAK
CASE GGSM_WEAPON_GRANANAGLASSES
data.eProjectileType = GGSM_PROJECTILE_ENEMY_LASER
data.eSpreadType = GGSM_SPREAD_LINEAR
data.fSpreadValue = 45.0
data.iNumShots = 1
data.iNumBursts = 1
data.fBurstReloadTime = 0.125
BREAK
CASE GGSM_WEAPON_GRANANAGLASSES2
data.eProjectileType = GGSM_PROJECTILE_ENEMY_LASER_PURPLE
data.eSpreadType = GGSM_SPREAD_LINEAR
data.fSpreadValue = 45.0
data.iNumShots = 1
data.iNumBursts = 4
data.fBurstReloadTime = 0.125
BREAK
CASE GGSM_WEAPON_GRANANASPREAD1
data.eProjectileType = GGSM_PROJECTILE_ENEMY_SHOT
data.eSpreadType = GGSM_SPREAD_CONE
data.fSpreadValue = 60.0
data.iNumShots = 3
BREAK
CASE GGSM_WEAPON_GRANANASPREAD1A
data.eProjectileType = GGSM_PROJECTILE_ENEMY_SHOT_PURPLE
data.eSpreadType = GGSM_SPREAD_CONE
data.fSpreadValue = 60.0
data.iNumShots = 3
BREAK
CASE GGSM_WEAPON_PLYRVULCAN
data.eProjectileType = GGSM_PROJECTILE_VULKAN
data.eSpreadType = GGSM_SPREAD_LINEAR
data.iNumShots = 1
BREAK
CASE GGSM_WEAPON_PLYREXPSHELL
data.eProjectileType = GGSM_PROJECTILE_EXP_SHELL
data.eSpreadType = GGSM_SPREAD_LINEAR
data.fSpreadValue = 0.0
data.iNumShots = 1
data.iNumBursts = 4
data.fBurstReloadTime = 0.6
BREAK
CASE GGSM_WEAPON_PLYRSCATTER
data.eProjectileType = GGSM_PROJECTILE_SCATTER
data.eSpreadType = GGSM_SPREAD_CONE
data.fSpreadValue = 30.0
data.iNumShots = 3
data.iNumBursts = 3
data.fBurstReloadTime = 0.3
BREAK
CASE GGSM_WEAPON_PLYRHOMINGROCKET
data.eProjectileType = GGSM_PROJECTILE_HOMING_ROCKET
data.eSpreadType = GGSM_SPREAD_LINEAR
data.iNumShots = 1
BREAK
CASE GGSM_WEAPON_PLYRDUALARCH
data.eProjectileType = GGSM_PROJECTILE_DUAL_ARCH
data.eSpreadType = GGSM_SPREAD_DUALARCH
data.fSpreadValue = 30.0
data.iNumShots = 2
data.iNumBursts = 0
data.fBurstReloadTime = 0.5
BREAK
CASE GGSM_WEAPON_PLYRWAVEBLASTER
data.eProjectileType = GGSM_PROJECTILE_WAVE
data.eSpreadType = GGSM_SPREAD_WAVE
data.fSpreadValue = 60.0
data.iNumShots = 3
data.iNumBursts = 3
data.fBurstReloadTime = 0.125
BREAK
CASE GGSM_WEAPON_PLYRBACKVULCAN
data.eProjectileType = GGSM_PROJECTILE_VULKAN
data.eSpreadType = GGSM_SPREAD_BACKVULCAN
data.fSpreadValue = 60.0
data.iNumShots = 3
data.iNumBursts = 3
data.fBurstReloadTime = 0.125
BREAK
CASE GGSM_WEAPON_SMOOTHIEVULCAN
data.eProjectileType = GGSM_PROJECTILE_SMOOTHIE_VULKAN
data.eSpreadType = GGSM_SPREAD_CONE
data.fSpreadValue = 0
data.iNumShots = 1
data.iNumBursts = 8
data.fBurstReloadTime = 0.5
BREAK
CASE GGSM_WEAPON_BREADSPREAD
data.eProjectileType = GGSM_PROJECTILE_BREAD_CRUMB
data.eSpreadType = GGSM_SPREAD_RADIAL
data.fSpreadValue = 60.0
data.iNumShots = 10
data.iNumBursts = 3
data.fBurstReloadTime = 2.0
BREAK
CASE GGSM_WEAPON_SMOOTHIESPREAD
data.eProjectileType = GGSM_PROJECTILE_SMOOTHIE_SPREAD
data.eSpreadType = GGSM_SPREAD_CONE
data.fSpreadValue = 60.0
data.iNumShots = 6
data.iNumBursts = 3
data.fBurstReloadTime = 2.0
BREAK
CASE GGSM_WEAPON_DANK_CANNON
data.eProjectileType = GGSM_PROJECTILE_DANK_VULCAN
data.eSpreadType = GGSM_SPREAD_DUALARCH
data.fSpreadValue = 30.0
data.iNumShots = 2
data.iNumBursts = 3
data.fBurstReloadTime = 0.5
BREAK
CASE GGSM_WEAPON_DANK_ROCKET
data.eProjectileType = GGSM_PROJECTILE_DANK_ROCKET
data.eSpreadType = GGSM_SPREAD_LINEAR
data.iNumShots = 1
data.iNumBursts = 2
data.fBurstReloadTime = 3.0
BREAK
CASE GGSM_WEAPON_DANK_HROCKET
data.eProjectileType = GGSM_PROJECTILE_DANK_HOMING_ROCKET
data.eSpreadType = GGSM_SPREAD_CONE
data.fSpreadValue = 120.0
data.iNumShots = 2
data.iNumBursts = 2
data.fBurstReloadTime = 4.0
BREAK
CASE GGSM_WEAPON_DANK_SCATTER
data.eProjectileType = GGSM_PROJECTILE_DANK_SCATTER
data.eSpreadType = GGSM_SPREAD_CONE
data.fSpreadValue = 60.0
data.iNumShots = 3
data.iNumBursts = 2
data.fBurstReloadTime = 1.0
BREAK
CASE GGSM_WEAPON_DANK_CLUSTERBOMB
data.eProjectileType = GGSM_PROJECTILE_DANK_CLUSTERBOMB
data.eSpreadType = GGSM_SPREAD_CONE
data.fSpreadValue = 60.0
data.iNumShots = 2
BREAK
CASE GGSM_WEAPON_DANK_SPREAD
data.eProjectileType = GGSM_PROJECTILE_DANK_SPREAD
data.eSpreadType = GGSM_SPREAD_CONE
data.fSpreadValue = 60.0
data.iNumShots = 2
BREAK
CASE GGSM_WEAPON_ACID
data.eProjectileType = GGSM_PROJECTILE_ACID
data.eSpreadType = GGSM_SPREAD_CONE
data.fSpreadValue = 100.0
data.iNumShots = 5
data.iNumBursts = 3
data.fBurstReloadTime = 1.0
BREAK
CASE GGSM_WEAPON_ACID_VULKAN
data.eProjectileType = GGSM_PROJECTILE_ACID_VULKAN
data.eSpreadType = GGSM_SPREAD_CONE
data.fSpreadValue = 120.0
data.iNumShots = 12
data.iNumBursts = 3
data.fBurstReloadTime = 1.0
BREAK
CASE GGSM_WEAPON_MARINE_LAUNCHER
data.eProjectileType = GGSM_PROJECTILE_MARINE_LAUNCHER
data.eSpreadType = GGSM_SPREAD_LINEAR
data.fSpreadValue = 0.0
data.iNumShots = 1
data.iNumBursts = 4
data.fBurstReloadTime = 2.0
BREAK
CASE GGSM_WEAPON_MARINE_SPREAD
data.eProjectileType = GGSM_PROJECTILE_MARINE_SPREAD
data.eSpreadType = GGSM_SPREAD_CONE
data.fSpreadValue = 40.0
data.iNumShots = 3
data.iNumBursts = 4
data.fBurstReloadTime = 1.0
BREAK
DEFAULT
data.eProjectileType = GGSM_PROJECTILE_INVALID
data.eSpreadType = GGSM_SPREAD_LINEAR
BREAK
ENDSWITCH
RETURN data
ENDFUNC
FUNC GGSM_WEAPON_DATA GGSM_WEAPON_DATA_GET(GGSM_WEAPON_TYPE eType)
RETURN GGSM_WEAPON_DATA_INIT(eType)
ENDFUNC
//-------------------------------------------------
// PATH SETTING FUNCTIONS
//-------------------------------------------------
PROC GGSM_PATH_DATA_RESET(GGSM_PATH_DATA &data)
INT i
REPEAT COUNT_OF(data.iPackedPathPoints) i
data.iPackedPathPoints[i] = 0
ENDREPEAT
data.iNumPoints = 0
ENDPROC
PROC GGSM_PATH_DATA_SET_NUM_POINTS(GGSM_PATH_DATA &data, INT iNumPoints)
data.iNumPoints = iNumPoints
ENDPROC
FUNC INT GGSM_PATH_DATA_GET_NUM_POINTS(GGSM_PATH_DATA &data)
RETURN data.iNumPoints
ENDFUNC
PROC GGSM_PATH_DATA_SET_POINT(GGSM_PATH_DATA &dat, INT iPoint, FLOAT x, FLOAT y)
IF (iPoint < 0) OR (iPoint >= GGSM_MAX_PATH_POINTS)
EXIT
ENDIF
// We pack 2 points into each int
// Points are packed as followed
// (0 - 5) X Pos (position is in a grid)
// (6 - 12) Y Pos (position is in a grid)
// (13 - 15) Reserved for future crap
INT iIndex = iPoint / 2
INT iBitStart = 0
IF (iPoint % 2 != 0)
iBitStart += GGSM_PATH_BIT_WIDTH
ENDIF
SET_BITS_IN_RANGE(dat.iPackedPathPoints[iIndex], iBitStart + GGSM_PATH_X_POS_BIT_START, iBitStart + GGSM_PATH_X_POS_BIT_END, FLOOR(x / TO_FLOAT(GGSM_PATH_GRID_SEPERATION)))
SET_BITS_IN_RANGE(dat.iPackedPathPoints[iIndex], iBitStart + GGSM_PATH_Y_POS_BIT_START, iBitStart + GGSM_PATH_Y_POS_BIT_END, FLOOR(y / TO_FLOAT(GGSM_PATH_GRID_SEPERATION)))
IF (dat.iNumPoints < iPoint)
dat.iNumPoints = iPoint
ENDIF
ENDPROC
FUNC VECTOR_2D GGSM_PATH_DATA_GET_POINT(GGSM_PATH_DATA &dat, INT iPoint)
IF (iPoint < 0) OR (iPoint >= GGSM_MAX_PATH_POINTS)
RETURN INIT_VECTOR_2D(0, 0)
ENDIF
INT iIndex = iPoint / 2
INT iBitStart = 0
IF (iPoint % 2 != 0)
iBitStart += GGSM_PATH_BIT_WIDTH
ENDIF
VECTOR_2D out
out.x = TO_FLOAT(GET_BITS_IN_RANGE(dat.iPackedPathPoints[iIndex], iBitStart + GGSM_PATH_X_POS_BIT_START, iBitStart + GGSM_PATH_X_POS_BIT_END) * GGSM_PATH_GRID_SEPERATION)
out.y = TO_FLOAT(GET_BITS_IN_RANGE(dat.iPackedPathPoints[iIndex], iBitStart + GGSM_PATH_Y_POS_BIT_START, iBitStart + GGSM_PATH_Y_POS_BIT_END) * GGSM_PATH_GRID_SEPERATION)
RETURN out
ENDFUNC
PROC GGSM_RESET_PATH_DATA_ARRAY(GGSM_PATH_DATA &array[])
INT i
REPEAT COUNT_OF(array) i
GGSM_PATH_DATA_RESET(array[i])
ENDREPEAT
ENDPROC
//-------------------------------------------------
// FORMATION SETTING FUNCTIONS
//-------------------------------------------------
PROC GGSM_FORMATION_SET_SCROLL_DISTANCE(GGSM_FORMATION_DATA &form, FLOAT dist)
form.fScrollDistance = dist
ENDPROC
FUNC FLOAT GGSM_FORMATION_GET_SCROLL_DISTANCE(GGSM_FORMATION_DATA &form)
RETURN form.fScrollDistance
ENDFUNC
PROC GGSM_FORMATION_SET_TYPE(GGSM_FORMATION_DATA &form, GGSM_FORMATION_TYPE eType)
SET_BITS_IN_RANGE(form.iPackedTypeData, 0, 7, (ENUM_TO_INT(eType) & 255))
ENDPROC
FUNC GGSM_FORMATION_TYPE GGSM_FORMATION_GET_TYPE(GGSM_FORMATION_DATA &form)
RETURN INT_TO_ENUM(GGSM_FORMATION_TYPE, GET_BITS_IN_RANGE(form.iPackedTypeData, 0, 7) & 255)
ENDFUNC
PROC GGSM_FORMATION_SET_ENTITY_TYPE(GGSM_FORMATION_DATA &form, GGSM_ENTITY_TYPE eType)
SET_BITS_IN_RANGE(form.iPackedTypeData, 8, 15, (ENUM_TO_INT(eType) & 255))
ENDPROC
FUNC GGSM_ENTITY_TYPE GGSM_FORMATION_GET_ENTITY_TYPE(GGSM_FORMATION_DATA &form)
RETURN INT_TO_ENUM(GGSM_ENTITY_TYPE, GET_BITS_IN_RANGE(form.iPackedTypeData, 8, 15) & 255)
ENDFUNC
PROC GGSM_FORMATION_SET_MOVEMENT_TYPE(GGSM_FORMATION_DATA &form, GGSM_MOVEMENT_TYPE eType)
SET_BITS_IN_RANGE(form.iPackedTypeData, 16, 23, (ENUM_TO_INT(eType) & 255))
ENDPROC
FUNC GGSM_MOVEMENT_TYPE GGSM_FORMATION_GET_MOVEMENT_TYPE(GGSM_FORMATION_DATA &form)
RETURN INT_TO_ENUM(GGSM_MOVEMENT_TYPE, GET_BITS_IN_RANGE(form.iPackedTypeData, 16, 23) & 255)
ENDFUNC
PROC GGSM_FORMATION_SET_WEAPON_TYPE(GGSM_FORMATION_DATA &form, GGSM_WEAPON_TYPE eType)
SET_BITS_IN_RANGE(form.iPackedTypeData, 24, 31, (ENUM_TO_INT(eType) & 255))
ENDPROC
FUNC GGSM_WEAPON_TYPE GGSM_FORMATION_GET_WEAPON_TYPE(GGSM_FORMATION_DATA &form)
RETURN INT_TO_ENUM(GGSM_WEAPON_TYPE, GET_BITS_IN_RANGE(form.iPackedTypeData, 24, 31) & 255)
ENDFUNC
PROC GGSM_FORMATION_SET_MEMBER_COUNT(GGSM_FORMATION_DATA &form, INT n)
form.iFormationMembers = n
ENDPROC
FUNC INT GGSM_FORMATION_GET_MEMBER_COUNT(GGSM_FORMATION_DATA &form)
RETURN form.iFormationMembers
ENDFUNC
PROC GGSM_FORMATION_SET_PATH_INDEX(GGSM_FORMATION_DATA &form, INT n)
form.iPathNumber = n
ENDPROC
FUNC INT GGSM_FORMATION_GET_PATH_INDEX(GGSM_FORMATION_DATA &form)
RETURN form.iPathNumber
ENDFUNC
FUNC GGSM_SPRITE_TYPE GGSM_FORMATION_GET_POWER_UP_SPRITE(GGSM_FORMATION_DATA &form)
GGSM_FORMATION_TYPE eType = GGSM_FORMATION_GET_TYPE(form)
IF (eType != GGSM_FORMATION_POWER_UP)
RETURN GGSM_SPRITE_NONE
ENDIF
RETURN INT_TO_ENUM(GGSM_SPRITE_TYPE, ENUM_TO_INT(GGSM_SPRITE_POWER_UP_BEAM) + form.iPathNumber)
ENDFUNC
PROC GGSM_FORMATION_SET_POWER_UP_SPRITE(GGSM_FORMATION_DATA &form, GGSM_SPRITE_TYPE eSprite)
GGSM_FORMATION_TYPE eType = GGSM_FORMATION_GET_TYPE(form)
IF (eType != GGSM_FORMATION_POWER_UP)
EXIT
ENDIF
IF (eSprite < GGSM_SPRITE_POWER_UP_BEAM) OR (eSprite > GGSM_SPRITE_POWER_UP_WAVE)
EXIT
ENDIF
form.iPathNumber = ENUM_TO_INT(eSprite) - ENUM_TO_INT(GGSM_SPRITE_POWER_UP_BEAM)
ENDPROC
PROC GGSM_FORMATION_SET_START_POSITION(GGSM_FORMATION_DATA &data, FLOAT x, FLOAT y)
data.iPackedBasePosition = GGSM_PACK_VECTOR_2D_TO_INT_EXPLICIT(x, y)
ENDPROC
FUNC VECTOR_2D GGSM_FORMATION_GET_START_POSITION(GGSM_FORMATION_DATA &data)
RETURN GGSM_UNPACK_VECTOR_2D(data.iPackedBasePosition)
ENDFUNC
PROC GGSM_FORMATION_SET_START_DIRECTION(GGSM_FORMATION_DATA &data, FLOAT x, FLOAT y)
data.iPackedBaseDirection = GGSM_PACK_DIRECTION_2D_TO_INT_EXPLICIT(x, y)
ENDPROC
PROC GGSM_FORMATION_SET_START_DIRECTION_AS_ANGLE(GGSM_FORMATION_DATA &data, FLOAT ang)
VECTOR_2D v = GGSM_GET_VECTOR_FROM_HEADING(ang)
data.iPackedBaseDirection = GGSM_PACK_DIRECTION_2D_TO_INT_EXPLICIT(v.x, v.y)
ENDPROC
FUNC VECTOR_2D GGSM_FORMATION_GET_START_DIRECTION(GGSM_FORMATION_DATA &data)
RETURN GGSM_UNPACK_DIRECTION_2D(data.iPackedBaseDirection)
ENDFUNC
FUNC FLOAT GGSM_FORMATION_GET_START_DIRECTION_AS_ANGLE(GGSM_FORMATION_DATA &data)
VECTOR_2D v = GGSM_UNPACK_DIRECTION_2D(data.iPackedBaseDirection)
RETURN GET_HEADING_FROM_VECTOR_2D(v.x, v.y)
ENDFUNC
PROC GGSM_FORMATION_SET_SPACING(GGSM_FORMATION_DATA &data, FLOAT hSpacing, FLOAT vSpacing)
data.vSpacing.x = hSpacing
data.vSpacing.y = vSpacing
ENDPROC
FUNC VECTOR_2D GGSM_FORMATION_GET_SPACING(GGSM_FORMATION_DATA &data)
RETURN data.vSpacing
ENDFUNC
FUNC BOOL GGSM_FORMATION_IS_VALID(GGSM_FORMATION_DATA &data)
RETURN (data.fScrollDistance > 0.0) AND (data.fScrollDistance != MAX_FLOAT)
ENDFUNC
FUNC VECTOR_2D GGSM_FORMATION_GET_POSITION_FOR_LINE_EXPLICT(VECTOR_2D root, VECTOR_2D dir, INT ind, VECTOR_2D entSize, VECTOR_2D spacing)
FLOAT dist = (entSize.x * spacing.x) * TO_FLOAT(ind)
RETURN INIT_VECTOR_2D(root.x - (dir.x * dist), root.y - (dir.y * dist))
ENDFUNC
FUNC VECTOR_2D GGSM_FORMATION_GET_POSITION_FOR_LINE(GGSM_FORMATION_DATA &data, INT ind, VECTOR_2D entSize)
VECTOR_2D root = GGSM_FORMATION_GET_START_POSITION(data)
VECTOR_2D dir = GGSM_FORMATION_GET_START_DIRECTION(data)
RETURN GGSM_FORMATION_GET_POSITION_FOR_LINE_EXPLICT(root, dir, ind, entSize, data.vSpacing)
ENDFUNC
FUNC VECTOR_2D GGSM_FORMATION_GET_POSITION_FOR_FLYING_V_EXPLICT(VECTOR_2D root, VECTOR_2D dir, INT ind, VECTOR_2D entSize, VECTOR_2D spacing)
INT iRow = (ind + 1) / 2
IF (ind = 0)
RETURN root
ENDIF
// if the index is even rotate by 135 else rotate by -135
IF (ind % 2 = 0)
dir = GGSM_ROTATE_VECTOR_2D_ABOUT_Z(dir, -135.0)
ELSE
dir = GGSM_ROTATE_VECTOR_2D_ABOUT_Z(dir, 135.0)
ENDIF
root.x += ((entSize.x * spacing.x) * TO_FLOAT(iRow)) * dir.x
root.y += ((entSize.y * spacing.y) * TO_FLOAT(iRow)) * dir.y
RETURN root
ENDFUNC
FUNC VECTOR_2D GGSM_FORMATION_GET_POSITION_FOR_FLYING_V(GGSM_FORMATION_DATA &data, INT ind, VECTOR_2D entSize)
VECTOR_2D root = GGSM_FORMATION_GET_START_POSITION(data)
VECTOR_2D dir = GGSM_FORMATION_GET_START_DIRECTION(data)
RETURN GGSM_FORMATION_GET_POSITION_FOR_FLYING_V_EXPLICT(root, dir, ind, entSize, data.vSpacing)
ENDFUNC
FUNC VECTOR_2D GGSM_FORMATION_GET_POSITION_FOR_DELAYED_LINE_EXPLICIT(VECTOR_2D root, VECTOR_2D dir, INT ind, VECTOR_2D entSize, VECTOR_2D spacing)
FLOAT fDistBetweenUnits = FMAX(ABSF(entSize.x), ABSF(entSize.y)) * spacing.x
GGSM_TRANSLATE_VECTOR_BY_DIRECTION(root, dir, ind * fDistBetweenUnits)
RETURN root
ENDFUNC
FUNC VECTOR_2D GGSM_FORMATION_GET_POSITION_FOR_DELAYED_LINE(GGSM_FORMATION_DATA &data, VECTOR_2D lineDir, INT ind, VECTOR_2D entSize)
VECTOR_2D root = GGSM_FORMATION_GET_START_POSITION(data)
RETURN GGSM_FORMATION_GET_POSITION_FOR_DELAYED_LINE_EXPLICIT(root, lineDir, ind, entSize, data.vSpacing)
ENDFUNC
FUNC VECTOR_2D GGSM_FORMATION_GET_POSITION_FOR_UNIT(GGSM_FORMATION_DATA &data, INT ind, VECTOR_2D entSize)
GGSM_FORMATION_TYPE formType = GGSM_FORMATION_GET_TYPE(data)
SWITCH (formType)
CASE GGSM_FORMATION_FLYING_V
RETURN GGSM_FORMATION_GET_POSITION_FOR_FLYING_V(data, ind, entSize)
CASE GGSM_FORMATION_DELAYED_HLINE
RETURN GGSM_FORMATION_GET_POSITION_FOR_DELAYED_LINE(data, INIT_VECTOR_2D(1, 0), ind, entSize)
CASE GGSM_FORMATION_DELAYED_VLINE
RETURN GGSM_FORMATION_GET_POSITION_FOR_DELAYED_LINE(data, INIT_VECTOR_2D(0, 1), ind, entSize)
CASE GGSM_FORMATION_LINE
RETURN GGSM_FORMATION_GET_POSITION_FOR_LINE(data, ind, entSize)
ENDSWITCH
RETURN GGSM_FORMATION_GET_START_POSITION(data)
ENDFUNC
PROC GGSM_RESET_FORMATION_DATA(GGSM_FORMATION_DATA &data)
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_NONE)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_START_DIRECTION(data, -1, 0)
GGSM_FORMATION_SET_START_POSITION(data, 2000, 540)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 0)
GGSM_FORMATION_SET_SPACING(data, 1.25, 1.25)
data.fScrollDistance = MAX_FLOAT
ENDPROC
FUNC INT GGSM_GET_FREE_FORMATION_SLOT(GGSM_FORMATION_DATA &array[])
INT i
REPEAT COUNT_OF(array) i
IF NOT GGSM_FORMATION_IS_VALID(array[i])
RETURN i
ENDIF
ENDREPEAT
RETURN -1
ENDFUNC
FUNC INT GGSM_FIND_FORMATION_SLOT_AT_DISTANCE(GGSM_FORMATION_DATA &array[], FLOAT fDist)
INT i
REPEAT COUNT_OF(array) i
IF (array[i].fScrollDistance >= fDist)
RETURN i
ENDIF
ENDREPEAT
RETURN -1
ENDFUNC
/// PURPOSE:
/// Sort Z Sort Array
/// PARAMS:
/// sArray - Array to sort
/// iLeft - left index
/// iRight - right index
PROC GGSM_QUICK_SORT_FORMATION_DATA_ARRAY(GGSM_FORMATION_DATA &sArray[])
INT n = COUNT_OF(sArray) - 1
GGSM_FORMATION_DATA tmp
INT i, j
FOR i = 0 TO n STEP 1
FOR j = (i + 1) TO n STEP 1
IF (sArray[i].fScrollDistance > sArray[j].fScrollDistance)
tmp = sArray[i]
sArray[i] = sArray[j]
sArray[j] = tmp
ENDIF
ENDFOR
ENDFOR
ENDPROC
PROC GGSM_RESET_FORMATION_DATA_ARRAY(GGSM_FORMATION_DATA &sArray[])
INT i
REPEAT COUNT_OF(sArray) i
GGSM_RESET_FORMATION_DATA(sArray[i])
ENDREPEAT
ENDPROC
PROC GGSM_SHIFT_FORMATION_DATA_ARRAY(GGSM_FORMATION_DATA &sArray[], FLOAT fAmount, INT iAfterIndex = -1)
INT i
FLOAT fDist
REPEAT COUNT_OF(sArray) i
IF (i > iAfterIndex)
fDist = GGSM_FORMATION_GET_SCROLL_DISTANCE(sArray[i])
GGSM_FORMATION_SET_SCROLL_DISTANCE(sArray[i], fDist + fAmount)
ENDIF
ENDREPEAT
GGSM_QUICK_SORT_FORMATION_DATA_ARRAY(sArray)
ENDPROC
//-------------------------------------------------
// TILEMAP DEFINITION FUNCTIONS
//-------------------------------------------------
/// PURPOSE:
/// Calculate which tile a particular position in screen coords is over
/// PARAMS:
/// cam - camera struct
/// vScreenPos - screen pos
/// tx - tile x
/// ty - tile y
PROC GGSM_CAMERA_GET_SCREEN_POSITION_IN_TILE_MAP(GGSM_CAMERA &cam, GGSM_TILEMAP &tm, VECTOR_2D vScreenPos, INT &tx, INT &ty)
tx = FLOOR((vScreenPos.x + cam.vWorldPosition.x) / tm.fTileSize)
ty = FLOOR((vScreenPos.y + cam.vWorldPosition.y) / tm.fTileSize)
ENDPROC
/// PURPOSE:
/// Calculate which tile a particular position in screen coords is over
/// PARAMS:
/// cam - camera struct
/// vScreenPos - screen pos
/// tx - tile x
/// ty - tile y
PROC GGSM_WORLD_POSITION_IN_TILE_MAP(GGSM_TILEMAP &tm, VECTOR_2D vPos, INT &tx, INT &ty)
tx = FLOOR(vPos.x / tm.fTileSize)
ty = FLOOR(vPos.y / tm.fTileSize)
ENDPROC
/// PURPOSE:
/// Give a tilemap coord give us the top left pos in world sapce
/// PARAMS:
/// tm - tilemap
/// iMx - map coord x
/// iMy - map coord y
/// RETURNS:
/// World Position of Top Left Corner of tile
FUNC VECTOR_2D GGSM_TILEMAP_GET_TOP_LEFT_WORLD_POSITION_FOR_TILE(GGSM_TILEMAP &tm, INT iMx, INT iMy)
VECTOR_2D vec
vec.x = iMx * tm.fTileSize
vec.y = iMy * tm.fTileSize
RETURN vec
ENDFUNC
PROC GGSM_TILEMAP_SET_DATA(GGSM_TILEMAP &tm, INT x, INT y, INT iTile, BOOL hFlip = FALSE, BOOL vFlip = FALSE)
IF (x < 0) OR (x >= GGSM_MAX_TILEMAP_SIZE_X)
EXIT
ENDIF
IF (y < 0) OR (y >= GGSM_MAX_TILEMAP_SIZE_Y)
EXIT
ENDIF
INT iData = iTile
IF (hFlip)
SET_BIT(iData, GGSM_TILE_BIT_H_FLIP)
ENDIF
IF (vFlip)
SET_BIT(iData, GGSM_TILE_BIT_Y_FLIP)
ENDIF
SET_PACKED_BITFIELD_VALUE_IN_ARRAY(tm.sMapRow[y].iData, x, GGSM_TILE_MAP_ENTRY_BIT_WIDTH, iData)
ENDPROC
FUNC BOOL GGSM_TILEMAP_GET_DATA(GGSM_TILEMAP &tm, INT iMx, INT iMy, INT &iTile, BOOL &hFlip, BOOL &vFlip)
INT iData
iTile = 0
hFlip = FALSE
vFlip = FALSE
// if it isn't wrapped just return zero
IF (!tm.bWrapped)
IF (iMx < 0) OR (iMx >= tm.iMapWidth) OR (iMy < 0) OR (iMy >= tm.iMapHeight)
RETURN TRUE
ENDIF
ENDIF
// wrap
IF (iMx < 0)
iMx += tm.iMapWidth
ENDIF
IF (iMy < 0)
iMy += tm.iMapHeight
ENDIF
iMx = iMx % tm.iMapWidth
iMy = iMy % tm.iMapHeight
// now we access the data - unpack it
iData = GET_PACKED_BITFIELD_VALUE_FROM_ARRAY(tm.sMapRow[iMy].iData, iMx, GGSM_TILE_MAP_ENTRY_BIT_WIDTH)
// get the tile from the first 5 bits - get the flip for the last 2
iTile = GET_BITS_IN_RANGE(iData, 0, 5)
hFlip = IS_BIT_SET(iData, GGSM_TILE_BIT_H_FLIP)
vFlip = IS_BIT_SET(iData, GGSM_TILE_BIT_Y_FLIP)
RETURN TRUE
ENDFUNC
FUNC BOOL GGSM_TILEMAP_IS_TILE_HORIZONTAL_FLIPPED(GGSM_TILEMAP &tm, INT x, INT y)
INT tile
BOOL hflip, vflip
GGSM_TILEMAP_GET_DATA(tm, x, y, tile, hflip, vflip)
RETURN hflip
ENDFUNC
FUNC BOOL GGSM_TILEMAP_IS_TILE_VERTICAL_FLIPPED(GGSM_TILEMAP &tm, INT x, INT y)
INT tile
BOOL hflip, vflip
GGSM_TILEMAP_GET_DATA(tm, x, y, tile, hflip, vflip)
RETURN vflip
ENDFUNC
PROC GGSM_TILEMAP_SET_INDEX(GGSM_TILEMAP &tm, INT x, INT y, INT ind)
INT tile
BOOL hflip, vflip
IF (x < 0) OR (x >= GGSM_MAX_TILEMAP_SIZE_X)
EXIT
ENDIF
IF (y < 0) OR (y >= GGSM_MAX_TILEMAP_SIZE_Y)
EXIT
ENDIF
GGSM_TILEMAP_GET_DATA(tm, x, y, tile, hflip, vflip)
GGSM_TILEMAP_SET_DATA(tm, x, y, ind, hflip, vflip)
ENDPROC
PROC GGSM_TILEMAP_SET_HORIZONTAL_FLIP(GGSM_TILEMAP &tm, INT x, INT y, BOOL bTrue = TRUE)
INT tile
BOOL hflip, vflip
GGSM_TILEMAP_GET_DATA(tm, x, y, tile, hflip, vflip)
GGSM_TILEMAP_SET_DATA(tm, x, y, tile, bTrue, vflip)
ENDPROC
PROC GGSM_TILEMAP_SET_VERTICAL_FLIP(GGSM_TILEMAP &tm, INT x, INT y, BOOL bTrue = TRUE)
INT tile
BOOL hflip, vflip
GGSM_TILEMAP_GET_DATA(tm, x, y, tile, hflip, vflip)
GGSM_TILEMAP_SET_DATA(tm, x, y, tile, hflip, bTrue)
ENDPROC
PROC GGSM_TILE_SET_FLIP(GGSM_TILEMAP &tm, INT x, INT y, INT iFlipBits)
GGSM_TILEMAP_SET_HORIZONTAL_FLIP(tm, x, y, IS_BIT_SET(iFlipBits, 0))
GGSM_TILEMAP_SET_VERTICAL_FLIP(tm, x, y, IS_BIT_SET(iFlipBits, 1))
ENDPROC
/// PURPOSE:
/// Clears a tile map completely
/// PARAMS:
/// tm -
PROC GGSM_TILEMAP_RESET(GGSM_TILEMAP &tm)
INT x, y
REPEAT GGSM_MAX_TILEMAP_SIZE_X x
REPEAT GGSM_MAX_TILEMAP_SIZE_Y y
GGSM_TILEMAP_SET_DATA(tm, x, y, 0)
ENDREPEAT
ENDREPEAT
REPEAT GGSM_MAX_TILES_IN_TILE_SET x
tm.sCollisionData[x].eType = GGSM_TILE_COLLISION_NONE
tm.sCollisionData[x].iNumPoints = 0
REPEAT GGSM_MAX_TILE_POLYPOINTS y
tm.sCollisionData[x].vCollisionVectors[y].x = 0
tm.sCollisionData[x].vCollisionVectors[y].y = 0
ENDREPEAT
ENDREPEAT
ENDPROC
/// PURPOSE:
/// Initializes the tile map
/// PARAMS:
/// tm - tile map
/// sTileDirectory - dictionary
/// sBaseName - base name
/// iTileSize - Tile Size in pixels
/// iMaxTile - Max Tiles Used for Map
PROC GGSM_TILEMAP_INIT(GGSM_TILEMAP &tm, FLOAT fTileSize = 128.0, INT iMaxTile = GGSM_MAX_TILES_IN_TILE_SET, STRING sTileDirectory = NULL, STRING sBaseName = NULL)
tm.sTileSetBaseName = sBaseName
tm.sTileDirectory = sTileDirectory
tm.iMaxTiles = iMaxTile
tm.fTileSize = fTileSize
tm.fTileDrawSize = 0.0
GGSM_TILEMAP_RESET(tm)
ENDPROC
/// PURPOSE:
/// Returns a rect in tile coords telling use what to draw
/// RETURNS:
/// Rect int
PROC GGSM_TILEMAP_SET_RENDERABLE_TILE_BOUNDS(GGSM_TILEMAP &tileMap, GGSM_CAMERA &cam)
VECTOR_2D vTopLeft = ADD_VECTOR_2D(cam.vWorldPosition, cam.vWorldViewportOffset)
VECTOR_2D vBaseRight = ADD_VECTOR_2D(vTopLeft, cam.vViewportSize)
INT farx, fary
// work out top corner of where we should be on tile map
tileMap.sVisibleTileRect.x = FLOOR(vTopLeft.x / tileMap.fTileSize)
tileMap.sVisibleTileRect.y = FLOOR(vTopLeft.y / tileMap.fTileSize)
// work out bottom corner
farx = CEIL(vBaseRight.x / tileMap.fTileSize)
fary = CEIL(vBaseRight.y / tileMap.fTileSize)
// work out the extents
tileMap.sVisibleTileRect.w = farx - tileMap.sVisibleTileRect.x
tileMap.sVisibleTileRect.h = fary - tileMap.sVisibleTileRect.y
ENDPROC
/// PURPOSE:
/// Tells us if a screen position (all ships and projectiles are in screen space) has collided with map
/// PARAMS:
/// vScreenPos - Screen Pos
/// RETURNS:
///
FUNC BOOL GGSM_IS_SCREEN_POSITION_COLLIDED_WITH_TILE_MAP(VECTOR_2D vScreenPos)
INT mx, my
INT iTile
BOOL bHFlip, bVFlip
GGSM_CAMERA_GET_SCREEN_POSITION_IN_TILE_MAP(sGGSMData.sCamera, sGGSMData.sTileMap, vScreenPos, mx, my)
IF NOT GGSM_TILEMAP_GET_DATA(sGGSMData.sTileMap, mx, my, iTile, bHFlip, bVFlip)
RETURN FALSE
ENDIF
IF (iTile = 0)
RETURN FALSE
ENDIF
IF (sGGSMData.sTileMap.sCollisionData[iTile].eType = GGSM_TILE_COLLISION_FULLBOX)
RETURN TRUE
ENDIF
GGSM_TILE_COLLISION_DATA tmp
VECTOR_2D vec = GGSM_TILEMAP_GET_TOP_LEFT_WORLD_POSITION_FOR_TILE(sGGSMData.sTileMap, mx, my)
vec.x -= sGGSMData.sCamera.vWorldPosition.x
vec.y -= sGGSMData.sCamera.vWorldPosition.y
IF (bHFlip OR bVFlip)
GGSM_TILEMAP_FLIP_COLLISION(sGGSMData.sTileMap, iTile, tmp, bHFlip, bVFlip)
RETURN GGSM_TILE_COLLISION_IN_POINT_IN_TILE(vScreenPos, vec, tmp)
ENDIF
RETURN GGSM_TILE_COLLISION_IN_POINT_IN_TILE(vScreenPos, vec, sGGSMData.sTileMap.sCollisionData[iTile])
ENDFUNC
//-------------------------------------------------
// MAP DATA
//-------------------------------------------------
/// PURPOSE:
/// Gets a tile collder for level 1
/// PARAMS:
/// data - tile data array
/// iTileIndex - palette tile to get collision for
PROC GGSM_GET_TILE_COLLISION_DATA_FOR_EMPTY_MAP(GGSM_TILE_COLLISION_DATA &data, INT iTileIndex)
UNUSED_PARAMETER(data)
UNUSED_PARAMETER(iTileIndex)
ENDPROC
PROC GGSM_GET_TILE_MAP_DATA_FOR_EMPTY_MAP(GGSM_TILEMAP &data)
// Tile Map Dimensions
data.iMapWidth = 0
data.iMapHeight = 0
data.iMaxTiles = 0
data.fTileSize = 256.0000
data.fTileDrawSize = 261.0000
data.bWrapped = TRUE
ENDPROC
/// PURPOSE:
/// Gets a tile collder for level 1
/// PARAMS:
/// data - tile data array
/// iTileIndex - palette tile to get collision for
PROC GGSM_GET_TILE_COLLISION_DATA_FOR_EARTH_SECTOR(GGSM_TILE_COLLISION_DATA &data, INT iTileIndex)
UNUSED_PARAMETER(data)
UNUSED_PARAMETER(iTileIndex)
ENDPROC
PROC GGSM_GET_TILE_MAP_DATA_FOR_EARTH_SECTOR(GGSM_TILEMAP &data)
// Tile Map Dimensions
data.iMapWidth = 0
data.iMapHeight = 0
data.iMaxTiles = 0
data.fTileSize = 256.0000
data.fTileDrawSize = 261.0000
data.bWrapped = TRUE
ENDPROC
/// PURPOSE:
/// Gets a tile collder for level 1
/// PARAMS:
/// data - tile data array
/// iTileIndex - palette tile to get collision for
PROC GGSM_GET_TILE_COLLISION_DATA_FOR_YELLOW_CLAM(GGSM_TILE_COLLISION_DATA &data, INT iTileIndex)
// Tile Colliders
SWITCH (iTileIndex)
CASE 0 // Tile Collision Data
data.eType = GGSM_TILE_COLLISION_NONE
data.iNumPoints = 0
BREAK
CASE 1 // Tile Collision Data
data.eType = GGSM_TILE_COLLISION_POLYGON
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 0, 0.0000, 150.3005)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 1, 0.0000, 256.0000)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 2, 256.0000, 256.0000)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 3, 256.0000, 85.9883)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 4, 176.2818, 0.0000)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 5, 116.5771, 9.3526)
data.iNumPoints = 6
BREAK
CASE 2 // Tile Collision Data
data.eType = GGSM_TILE_COLLISION_POLYGON
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 0, 0.0000, 256.0000)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 1, 256.0000, 256.0000)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 2, 256.0000, 154.1782)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 3, 162.5250, 54.2983)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 4, 101.5943, 54.0883)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 5, 0.0000, 154.7257)
data.iNumPoints = 6
BREAK
CASE 3 // Tile Collision Data
data.eType = GGSM_TILE_COLLISION_POLYGON
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 0, 0.0000, 144.4315)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 1, 0.0000, 256.0000)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 2, 256.0000, 256.0000)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 3, 256.0000, 161.6841)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 4, 200.3127, 105.0080)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 5, 61.6703, 104.8637)
data.iNumPoints = 6
BREAK
CASE 4 // Tile Collision Data
data.eType = GGSM_TILE_COLLISION_POLYGON
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 0, 0.0000, 134.3873)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 1, 256.0000, 157.6073)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 2, 256.0000, 256.0000)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 3, 0.0000, 256.0000)
data.iNumPoints = 4
BREAK
CASE 5 // Tile Collision Data
data.eType = GGSM_TILE_COLLISION_POLYGON
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 0, 0.0000, 256.0000)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 1, 256.0000, 256.0000)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 2, 238.0651, 172.0537)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 3, 44.6565, 87.2523)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 4, 0.0000, 145.6503)
data.iNumPoints = 5
BREAK
CASE 6 // Tile Collision Data
data.eType = GGSM_TILE_COLLISION_POLYGON
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 0, 241.2662, 61.1125)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 1, 256.0000, 256.0000)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 2, 0.0000, 256.0000)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 3, 0.0000, 155.3188)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 4, 39.4136, 77.3982)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 5, 123.9532, 105.0678)
data.iNumPoints = 6
BREAK
CASE 7 // Tile Collision Data
data.eType = GGSM_TILE_COLLISION_POLYGON
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 0, 0.0000, 256.0000)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 1, 1.1886, 149.0535)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 2, 62.8181, 91.8640)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 3, 212.7052, 108.1814)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 4, 251.7001, 158.4413)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 5, 256.0000, 256.0000)
data.iNumPoints = 6
BREAK
CASE 8 // Tile Collision Data
data.eType = GGSM_TILE_COLLISION_POLYGON
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 0, 0.0000, 256.0000)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 1, 256.0000, 256.0000)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 2, 251.8729, 127.4646)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 3, 207.0582, 76.8475)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 4, 94.9670, 89.4194)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 5, 0.0000, 216.5755)
data.iNumPoints = 6
BREAK
CASE 9 // Tile Collision Data
data.eType = GGSM_TILE_COLLISION_POLYGON
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 0, 3.7238, 163.1078)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 1, 116.5266, 209.8779)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 2, 256.0000, 215.2173)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 3, 254.8834, 43.3265)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 4, 105.6755, 51.5779)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 5, 8.7276, 110.8403)
data.iNumPoints = 6
BREAK
CASE 10 // Tile Collision Data
data.eType = GGSM_TILE_COLLISION_POLYGON
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 0, 1.5006, 212.2412)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 1, 252.8283, 205.8661)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 2, 252.7192, 41.0821)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 3, 1.7632, 42.0741)
data.iNumPoints = 4
BREAK
CASE 11 // Tile Collision Data
data.eType = GGSM_TILE_COLLISION_POLYGON
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 0, 246.1125, 109.5481)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 1, 247.1098, 167.5226)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 2, 97.5659, 215.2353)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 3, 0.0000, 211.6201)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 4, 0.0000, 53.6619)
GGSM_TILE_COLLISION_DATA_SET_COLLISION_VECTOR(data, 5, 140.3455, 42.8085)
data.iNumPoints = 6
BREAK
ENDSWITCH
ENDPROC
PROC GGSM_GET_TILE_MAP_DATA_FOR_YELLOW_CLAM(GGSM_TILEMAP &data)
// Tile Map Dimensions
data.iMapWidth = 57
data.iMapHeight = 4
data.iMaxTiles = 12
data.fTileSize = 256.0000
data.fTileDrawSize = 256.0000
data.bWrapped = TRUE
// Tile Directories
data.sTileDirectory = "MpGoGoSpaceCavernStage"
data.sTileSetBaseName = "BANANA_CAVERN_"
// Tile Map Data
GGSM_TILEMAP_SET_DATA(data, 0, 0, 5, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 1, 0, 1, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 2, 0, 3, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 3, 0, 3, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 4, 0, 3, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 5, 0, 3, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 6, 0, 1, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 7, 0, 4, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 8, 0, 4, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 9, 0, 3, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 10, 0, 1, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 11, 0, 3, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 12, 0, 4, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 13, 0, 1, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 14, 0, 5, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 16, 0, 5, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 17, 0, 4, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 18, 0, 7, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 19, 0, 4, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 20, 0, 5, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 24, 0, 5, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 25, 0, 4, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 26, 0, 4, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 27, 0, 7, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 28, 0, 3, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 29, 0, 4, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 30, 0, 1, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 31, 0, 2, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 32, 0, 5, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 35, 0, 5, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 36, 0, 6, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 37, 0, 8, TRUE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 39, 0, 8, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 40, 0, 1, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 41, 0, 4, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 42, 0, 5, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 44, 0, 8, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 45, 0, 4, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 46, 0, 4, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 47, 0, 7, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 48, 0, 2, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 49, 0, 7, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 50, 0, 4, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 51, 0, 4, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 52, 0, 3, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 53, 0, 6, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 54, 0, 6, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 55, 0, 5, FALSE, TRUE)
GGSM_TILEMAP_SET_DATA(data, 0, 3, 8, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 1, 3, 4, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 2, 3, 2, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 3, 3, 3, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 4, 3, 3, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 5, 3, 1, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 6, 3, 2, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 7, 3, 3, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 8, 3, 3, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 9, 3, 4, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 10, 3, 7, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 11, 3, 4, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 12, 3, 4, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 13, 3, 4, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 14, 3, 1, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 15, 3, 4, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 16, 3, 7, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 17, 3, 1, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 18, 3, 5, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 23, 3, 8, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 24, 3, 4, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 25, 3, 4, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 26, 3, 4, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 27, 3, 1, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 28, 3, 3, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 29, 3, 4, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 30, 3, 1, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 31, 3, 6, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 32, 3, 5, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 40, 3, 8, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 41, 3, 6, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 42, 3, 5, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 44, 3, 8, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 45, 3, 2, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 46, 3, 5, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 48, 3, 8, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 49, 3, 2, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 50, 3, 4, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 51, 3, 5, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 53, 3, 8, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 54, 3, 1, FALSE, FALSE)
GGSM_TILEMAP_SET_DATA(data, 55, 3, 5, FALSE, FALSE)
INT i
REPEAT data.iMaxTiles i
GGSM_GET_TILE_COLLISION_DATA_FOR_YELLOW_CLAM(data.sCollisionData[i], i)
ENDREPEAT
ENDPROC
PROC GGSM_GET_STAGE_TILE_MAP(GGSM_TILEMAP &data, INT iStage = 0)
GGSM_TILEMAP_RESET(data)
SWITCH (iStage)
CASE GGSM_SECTOR_EARTH
GGSM_GET_TILE_MAP_DATA_FOR_EARTH_SECTOR(data)
BREAK
CASE GGSM_SECTOR_YELLOW_CLAM
GGSM_GET_TILE_MAP_DATA_FOR_YELLOW_CLAM(data)
BREAK
DEFAULT
GGSM_GET_TILE_MAP_DATA_FOR_EMPTY_MAP(data)
BREAK
ENDSWITCH
ENDPROC
//-------------------------------------------------
// FORMATION DATA
//-------------------------------------------------
FUNC BOOL GGSM_GET_FORMATION_DATA_FOR_EARTH_SECTOR(GGSM_FORMATION_DATA &data, INT iSpawnIndex)// Spawn Definitions
// Formation Definitions
SWITCH (iSpawnIndex)
CASE 0 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1920.0000, 713.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 239.5084)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL GGSM_GET_FORMATION_DATA_FOR_ASTEROID_BELT(GGSM_FORMATION_DATA &data, INT iSpawnIndex)
// Formation Definitions
SWITCH (iSpawnIndex)
CASE 0 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1920.0000, 713.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 239.5084)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 1 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1670.0000, 304.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 785.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 2 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1665.0000, 540.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 1102.7141)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_DUALARCH)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 8)
RETURN TRUE
CASE 3 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_MIRROR_Y)
GGSM_FORMATION_SET_START_POSITION(data, 1920.0000, 501.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 1378.5645)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 8)
RETURN TRUE
CASE 4 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1920.0000, 300.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 1714.8989)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 5 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1691.0000, 735.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 2138.0479)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 6 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 237.0000, 236.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 2534.4946)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED_ATTACK)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 2.8750)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 7 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_FLYING_V)
GGSM_FORMATION_SET_START_POSITION(data, 1683.0000, 1088.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -0.5505, -0.8349)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 2986.4946)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAYELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.1250, 1.1250)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 8 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1690.0000, 351.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 3329.4946)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_HEALTH)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 9 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1675.0000, 539.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 3570.4946)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 2.8750)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 10 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_FLYING_V)
GGSM_FORMATION_SET_START_POSITION(data, 1661.0000, 7.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -0.8482, 0.5297)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4055.4946)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAJETPAC)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYCONESPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.7500, 1.8750)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 11 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1729.0000, 803.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4362.4946)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 2.8750)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 12 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1669.0000, 234.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4590.4946)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 2.8750)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 13 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1667.0000, 357.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4910.4946)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_FORWARD_THEN_BACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYTIMEDSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 2.8750)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 14 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1667.0000, 711.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4914.4946)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_FORWARD_THEN_BACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYTIMEDSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 2.8750)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 15 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1753.0000, 442.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 5304.4946)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_SCATTER)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 16 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_VERTLINE)
GGSM_FORMATION_SET_START_POSITION(data, 1687.0000, 666.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 5362.4946)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAYELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.1250)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 17 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1693.0000, 182.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 5562.4946)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.1250)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 18 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_FLYING_V)
GGSM_FORMATION_SET_START_POSITION(data, 1889.0000, 502.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 5625.3398)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED_ATTACK)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 2.2500, 1.8750)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 19 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1920.0000, 555.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 5900.9907)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_FORWARD_THEN_BACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYCLUSTERBOMB)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 2.8750)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 20 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1679.0000, 201.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 6075.6450)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 2.8750)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 21 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1679.0000, 832.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 6079.6450)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 2.8750)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 22 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_ARMOUR_FRUITBOWL)
GGSM_FORMATION_SET_START_POSITION(data, 1686.0000, 537.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 6464.6616)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_RANDOM_WANDER)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 2.8750)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 23 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1672.0000, 263.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 6971.4878)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_ARC_TOP_RIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 0.1250)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 6)
RETURN TRUE
CASE 24 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1674.0000, 9.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -0.8010, 0.5986)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 7555.6484)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYTIMEDSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 0.1250)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 25 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_MIRROR_Y)
GGSM_FORMATION_SET_START_POSITION(data, 1671.0000, 343.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 8154.4146)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANDANA_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 26 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 669.0000, 1080.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 0.5368, -0.8437)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 8422.2002)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAJETPAC_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 27 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 549.0000, 30.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 0.4350, 0.9004)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 8901.8740)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAJETPAC_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 28 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_VERTLINE)
GGSM_FORMATION_SET_START_POSITION(data, 1839.0000, 485.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 9188.9707)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_FORWARD_THEN_BACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYTIMEDSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 29 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1716.0000, 725.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 9671.2656)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED_ATTACK)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 6)
RETURN TRUE
CASE 30 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1656.0000, 403.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, -0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 9897.0693)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_HEALTH)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 31 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_MIRROR_Y)
GGSM_FORMATION_SET_START_POSITION(data, 1723.0000, 826.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 9950.0400)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED_ATTACK)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 32 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_MIRROR_Y)
GGSM_FORMATION_SET_START_POSITION(data, 1688.0000, 678.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 10083.6328)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED_ATTACK)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 33 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1655.0000, 710.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, -0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 10366.2080)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_NUKE)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 8)
RETURN TRUE
CASE 34 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_MIRROR_Y)
GGSM_FORMATION_SET_START_POSITION(data, 1688.0000, 288.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 10983.6328)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 35 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_MIRROR_Y)
GGSM_FORMATION_SET_START_POSITION(data, 1680.0000, 484.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 11211.6328)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_YELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 36 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1691.0000, 522.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 11682.0244)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_FRUITBOWL)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 37 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1270.0000, 16.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -0.6612, 0.7502)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 12042.2969)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAYELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, 7)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 38 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1661.0000, 362.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 12430.3164)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_HEALTH)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 39 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1708.0000, 665.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 13067.2969)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, 0)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 40 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1673.0000, 731.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, -0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 13091.0449)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_REPULSE)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 41 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_BOSS_SMOOTHIE)
GGSM_FORMATION_SET_START_POSITION(data, 1800.0000, 526.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 14058.2949)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BOSS_SMOOTHIE)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_PLYRWAVEBLASTER)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL GGSM_GET_FORMATION_DATA_FOR_PINK_RING(GGSM_FORMATION_DATA &data, INT iSpawnIndex)
// Formation Definitions
SWITCH (iSpawnIndex)
CASE 0 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1834.0000, 789.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 800.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED_ATTACK)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 1 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 211.0000, 285.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 1428.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_ARC_TOP_LEFT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 2 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1743.0000, -137.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -0.6903, 0.7235)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 1996.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 3 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1690.0000, 511.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 2184.1279)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_DUALARCH)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 4 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1717.0000, 225.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 2864.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 5 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1739.0000, 537.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 3280.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_FORWARD_THEN_BACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYCLUSTERBOMB)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 6 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 224.0000, 822.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 3358.8789)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 2.6250)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 7 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1668.0000, 751.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0027)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 3464.7039)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_FORWARD_BACK)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 8 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1708.0000, 312.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 3822.8789)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 2.6250)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 9 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1744.0000, 718.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4398.8789)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 2.6250)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 10 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1744.0000, 333.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4403.8789)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_DECOY)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 11 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1324.0000, -331.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 0.0000, 1.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4930.8789)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAJETPAC_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_FORWARD_THEN_BACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYTIMEDSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 2.6250)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 12 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 568.0000, 1399.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 0.0000, -1.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 5259.8789)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAJETPAC_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_FORWARD_THEN_BACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYTIMEDSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 2.6250)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 13 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1769.0000, 311.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 5598.8789)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_YELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_ARC_TOP_RIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 2.6250)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 14 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_BANANASNAKE)
GGSM_FORMATION_SET_START_POSITION(data, 1677.0000, 1032.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 6422.8789)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANASLICE_FRONT)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_RANDOM_WANDER)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 14)
RETURN TRUE
CASE 15 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1677.0000, 610.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, -0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 6982.6431)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_EXTRALIFE)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 9)
RETURN TRUE
CASE 16 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_DELAYED_VLINE)
GGSM_FORMATION_SET_START_POSITION(data, 1677.0000, 199.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 7121.0801)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, 6)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 17 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1725.0000, 292.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 7492.3901)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, 6)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 6)
RETURN TRUE
CASE 18 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1547.0000, -33.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -0.4394, 0.8983)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 8235.1182)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED_ATTACK)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, 6)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 19 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1661.0000, 672.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 8575.1182)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_STUN)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 20 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1654.0000, 322.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 9053.6807)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_ARC_TOP_RIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, 6)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 21 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_MIRROR_Y)
GGSM_FORMATION_SET_START_POSITION(data, 1689.0000, 184.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 9726.1182)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAJETPAC_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYVULCAN)
GGSM_FORMATION_SET_PATH_INDEX(data, 0)
GGSM_FORMATION_SET_SPACING(data, 0.6250, 2.5000)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 22 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_MIRROR_Y)
GGSM_FORMATION_SET_START_POSITION(data, 238.0000, 203.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 9898.6807)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_YELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, 6)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 23 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1920.0000, 66.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -0.9319, 0.3628)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 10283.6807)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAYELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, 6)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 24 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1666.0000, 447.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 10379.2109)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_SCATTER)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 25 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1920.0000, 843.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 10828.6807)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYCLUSTERBOMB)
GGSM_FORMATION_SET_PATH_INDEX(data, 6)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 26 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_DELAYED_HLINE)
GGSM_FORMATION_SET_START_POSITION(data, 715.0000, -406.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 0.0000, 1.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 11340.3564)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAYELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_FORWARD_THEN_BACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, 6)
GGSM_FORMATION_SET_SPACING(data, 2.0000, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 27 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1668.0000, 773.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 11345.3564)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_NUKE)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 28 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_DELAYED_VLINE)
GGSM_FORMATION_SET_START_POSITION(data, 1703.0000, 228.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 11858.6807)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED_ATTACK)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, 6)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 29 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1703.0000, 231.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 12373.6807)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYTIMEDSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, 6)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 30 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 244.0000, 817.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 12723.6807)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_ARC_BASE_LEFT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, 6)
GGSM_FORMATION_SET_SPACING(data, 2.0000, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 31 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1701.0000, 178.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 13168.6807)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_YELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYVULCAN)
GGSM_FORMATION_SET_PATH_INDEX(data, 6)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 32 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_DELAYED_HLINE)
GGSM_FORMATION_SET_START_POSITION(data, 948.0000, -309.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 0.0000, 1.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 13370.0273)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_FORWARD_THEN_BACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, 6)
GGSM_FORMATION_SET_SPACING(data, 1.8750, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 33 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_DELAYED_VLINE)
GGSM_FORMATION_SET_START_POSITION(data, 1701.0000, 290.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 13991.1689)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANDANA_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYVULCAN)
GGSM_FORMATION_SET_PATH_INDEX(data, 6)
GGSM_FORMATION_SET_SPACING(data, 2.0000, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 34 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1701.0000, 444.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 14141.1689)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYVULCAN)
GGSM_FORMATION_SET_PATH_INDEX(data, 6)
GGSM_FORMATION_SET_SPACING(data, 2.0000, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 35 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1709.0000, 733.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 14368.6807)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, 6)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 36 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1361.0000, -456.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 0.0000, 1.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 14568.6807)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_YELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYVULCAN)
GGSM_FORMATION_SET_PATH_INDEX(data, 6)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 37 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1691.0000, 686.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 14573.6807)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_WAVE)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 38 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1709.0000, 312.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 14684.9648)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, 6)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 39 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1652.0000, 284.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, -0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 15521.8525)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_SHIELD)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 40 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_BOSS_MARINE)
GGSM_FORMATION_SET_START_POSITION(data, 1907.0000, 533.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, -0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 15705.7256)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BOSS_MARINE)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL GGSM_GET_FORMATION_DATA_FOR_YELLOW_CLAM(GGSM_FORMATION_DATA &data, INT iSpawnIndex)
// Formation Definitions
SWITCH (iSpawnIndex)
CASE 0 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1677.0000, 480.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 255.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 1 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1654.0000, 613.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, -0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 260.4437)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_NUKE)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 2 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1677.0000, 561.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 660.7986)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 3 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1686.0000, 654.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, -0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 945.0073)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 4 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 235.0000, 423.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 1194.2844)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 5 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1684.0000, 412.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, -0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 1643.2697)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_WAVE)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 6 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1800.0000, 653.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 1674.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 7 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1694.0000, 598.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 2100.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_FORWARD_THEN_BACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYCONESPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 8 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1718.0000, 402.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 2233.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 9 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1740.0000, 705.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 2872.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 10 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 239.0000, 370.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 3125.2627)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_ARC_TOP_LEFT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 11 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1654.0000, 297.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 3438.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAJETPAC)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYVULCAN)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 12 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1666.0000, 825.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 3904.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAJETPAC)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYVULCAN)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 13 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1684.0000, 433.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4044.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 14 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1745.0000, 715.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4158.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 15 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1705.0000, 359.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4357.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYCONESPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 16 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1708.0000, 582.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4736.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 17 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1250.0000, 14.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 0.0000, 1.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4789.6748)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED_ATTACK)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, 10)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 18 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_DELAYED_VLINE)
GGSM_FORMATION_SET_START_POSITION(data, 227.0000, 332.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4862.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAJETPAC)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, 13)
GGSM_FORMATION_SET_SPACING(data, 1.6250, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 19 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_DELAYED_VLINE)
GGSM_FORMATION_SET_START_POSITION(data, 1688.0000, 410.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 5826.3867)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAYELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 20 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1688.0000, 496.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, -0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 6091.9116)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_EXTRALIFE)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 21 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_ARMOUR_FRUITBOWL1)
GGSM_FORMATION_SET_START_POSITION(data, 1717.0000, 558.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 6334.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_MIDDLE_Y_RANGE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 22 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 221.0000, 366.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 7055.7451)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYCLUSTERBOMB)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 23 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1669.0000, 785.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 7169.9199)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_SHIELD)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 24 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1697.0000, 694.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 7589.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAJETPAC_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 25 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_MIRROR_Y)
GGSM_FORMATION_SET_START_POSITION(data, 258.0000, 350.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 8056.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_YELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 8)
RETURN TRUE
CASE 26 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1653.0000, 827.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 8059.5645)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_HEALTH)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 27 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_MIRROR_Y)
GGSM_FORMATION_SET_START_POSITION(data, 1664.0000, 438.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 8376.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 2.5000, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 28 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1108.0000, 22.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -0.3599, 0.9330)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 8897.2012)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 29 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_DELAYED_VLINE)
GGSM_FORMATION_SET_START_POSITION(data, 1715.0000, 398.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 9097.2012)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED_ATTACK)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 30 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_DELAYED_VLINE)
GGSM_FORMATION_SET_START_POSITION(data, 1715.0000, 247.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 9340.3320)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED_ATTACK)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 2.1250, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 31 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1587.0000, 1060.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -0.7014, -0.7128)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 9924.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 32 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1686.0000, 690.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 10129.0000)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_STUN)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 33 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1690.0000, 324.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -0.9878, 0.1559)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 10266.6758)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAJETPAC_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYVULCAN)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 34 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1669.0000, 499.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 10862.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAJETPAC_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYVULCAN)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 35 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1393.0000, 1138.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -0.4484, -0.8939)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 10966.5254)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAYELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 36 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_DELAYED_VLINE)
GGSM_FORMATION_SET_START_POSITION(data, 1798.0000, 288.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 11019.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_FORWARD_THEN_BACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYCLUSTERBOMB)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.5000, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 37 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1687.0000, 588.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -0.9944, -0.1054)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 11698.5254)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 38 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1669.0000, 373.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 11832.0000)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_DECOY)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 39 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_MIRROR_Y)
GGSM_FORMATION_SET_START_POSITION(data, 1670.0000, 330.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 12220.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANDANA_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYVULCAN)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 40 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_VERTLINE)
GGSM_FORMATION_SET_START_POSITION(data, 1708.0000, 435.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 12752.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 41 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1674.0000, 419.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 13082.2100)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_NUKE)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 42 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1681.0000, 382.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 13437.4365)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED_ATTACK)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 43 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1690.0000, 693.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 13915.4746)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED_ATTACK)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 44 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_DELAYED_VLINE)
GGSM_FORMATION_SET_START_POSITION(data, 1690.0000, 367.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 14496.2080)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAYELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYCONESPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 2.8750, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 45 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1676.0000, 441.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 14880.0000)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_HEALTH)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 46 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1858.0000, 260.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -0.9331, 0.3597)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 15079.0664)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 47 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1709.0000, 833.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -0.9358, -0.3527)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 15506.8115)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 48 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 246.0000, 801.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 16069.3896)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_ARC_BASE_LEFT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.8750, 0.6250)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 49 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_DELAYED_VLINE)
GGSM_FORMATION_SET_START_POSITION(data, 1668.0000, 371.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 16858.6348)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANDANA_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.5000, 0.6250)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 50 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1730.0000, 379.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 17054.3906)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAJETPAC_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 0.6250)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 51 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1686.0000, 743.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 17144.4746)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_EXPLOSION)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 52 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_DELAYED_VLINE)
GGSM_FORMATION_SET_START_POSITION(data, 1698.0000, 287.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 17869.3906)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANDANA_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 0.5000)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 53 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 223.0000, 319.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 18424.3906)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_YELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_ARC_TOP_LEFT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 0.5000)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 54 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1439.0000, 1097.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -0.5553, -0.8316)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 18584.3906)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYCLUSTERBOMB)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 0.5000)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 55 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1661.0000, 382.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 19692.3965)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_HEALTH)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 56 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_BOSS_GRANANA)
GGSM_FORMATION_SET_START_POSITION(data, 1825.0000, 509.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 20210.7305)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BOSS_GRANANA)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_NONE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYTIMEDSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL GGSM_GET_FORMATION_DATA_FOR_DOUGH_BALL(GGSM_FORMATION_DATA &data, INT iSpawnIndex)
// Formation Definitions
SWITCH (iSpawnIndex)
CASE 0 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1699.0000, 544.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 135.6943)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_DUALARCH)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 1 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1699.0000, 544.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 355.0135)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAYELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 2 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1699.0000, 364.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 629.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 3 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1702.0000, 772.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 995.9887)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 4 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_MIRROR_Y)
GGSM_FORMATION_SET_START_POSITION(data, 1699.0000, 312.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 1528.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 5 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_MIRROR_Y)
GGSM_FORMATION_SET_START_POSITION(data, 1699.0000, 418.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 1658.0190)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 6 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1695.0000, 241.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 2045.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_ARC_TOP_RIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 7 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1699.0000, 626.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 2250.0134)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_REPULSE)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 8 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1699.0000, 510.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 2341.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_FORWARD_THEN_BACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_FRUITBOWL)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 9 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1695.0000, 830.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 2457.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_ARC_BASE_RIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 10 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_MIRROR_Y)
GGSM_FORMATION_SET_START_POSITION(data, 1695.0000, 387.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 2992.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED_ATTACK)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 11 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_VERTLINE)
GGSM_FORMATION_SET_START_POSITION(data, 1695.0000, 473.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 3196.9429)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAJETPAC_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYVULCAN)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 12 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1456.0000, -14.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -0.5186, 0.8550)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 3596.9429)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAJETPAC_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 13 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1699.0000, 547.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 3833.1934)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 14 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_MIRROR_Y)
GGSM_FORMATION_SET_START_POSITION(data, 1699.0000, 364.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 3880.9429)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 15 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1699.0000, 547.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4573.1934)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYCLUSTERBOMB)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 16 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1699.0000, 371.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4828.1934)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_SCATTER)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 17 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_MIRROR_Y)
GGSM_FORMATION_SET_START_POSITION(data, 1707.0000, 290.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4869.2280)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAYELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, 0)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 18 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1710.0000, -37.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -0.9180, 0.3966)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 5477.2280)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYTIMEDSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, 1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 19 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1710.0000, 797.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 5773.2280)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_ARC_BASE_RIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, 1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 20 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_VERTLINE)
GGSM_FORMATION_SET_START_POSITION(data, 1684.0000, 307.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 6163.2280)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANDANA_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 21 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1684.0000, 294.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 6469.2280)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED_ATTACK)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 22 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1669.0000, 531.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, -0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 6691.5386)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_EXTRALIFE)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 23 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1684.0000, 794.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 6793.2280)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED_ATTACK)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 24 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1481.0000, -206.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -0.4738, 0.8806)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 7292.2280)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAYELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 25 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1664.0000, 697.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 7477.2280)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_FORWARD_BACK)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 26 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 215.0000, 324.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 7500.1187)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 27 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 215.0000, 773.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 7505.1187)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 28 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1420.0000, 1098.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 0.0000, -1.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 7805.2280)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAYELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 29 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 243.0000, 204.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 8386.0361)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYCLUSTERBOMB)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 30 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1706.0000, 375.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 9069.7656)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 31 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1706.0000, 568.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 9148.9521)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 32 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_MIRROR_Y)
GGSM_FORMATION_SET_START_POSITION(data, 1706.0000, 341.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 9514.7197)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAYELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 33 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_MIRROR_Y)
GGSM_FORMATION_SET_START_POSITION(data, 1790.0000, 256.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 9937.2285)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANARED_ATTACK)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_NONE)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 34 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1392.0000, -249.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 0.0000, 1.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 10218.8311)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_FORWARD_THEN_BACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYTIMEDSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 35 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1663.0000, 430.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 10407.2285)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_HEALTH)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 36 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1702.0000, 525.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 10600.2285)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_FORWARD_THEN_BACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYTIMEDSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 37 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1392.0000, 1279.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 0.0000, -1.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 10921.8867)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_FRUITBOWL)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_FORWARD_THEN_BACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYTIMEDSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 38 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1659.0000, 418.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 11518.3506)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_ROCKET)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 39 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 219.0000, 299.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 12179.1396)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_ARC_TOP_LEFT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 40 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_DELAYED_HLINE)
GGSM_FORMATION_SET_START_POSITION(data, 630.0000, 1097.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, 0.5255, -0.8508)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 12484.1396)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAJETPAC_GREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_STRAIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 5)
RETURN TRUE
CASE 41 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1694.0000, 146.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 12931.3271)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_CIRCLE_SHIP_YELLOW)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_ARC_TOP_RIGHT)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSHOT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 4)
RETURN TRUE
CASE 42 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1717.0000, 779.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 14018.2617)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAGREEN)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_BG_ATTACK)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 3)
RETURN TRUE
CASE 43 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_STANDARD)
GGSM_FORMATION_SET_START_POSITION(data, 1694.0000, 450.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 14246.3271)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BANANAJETPAC_RED)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_KAMAZAKE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_ENEMYSPREAD)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 44 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1694.0000, 600.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 14405.3271)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_WAVE)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 45 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1694.0000, 364.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 14626.3271)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_HEALTH)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 2)
RETURN TRUE
CASE 46 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_BOSS_BREAD)
GGSM_FORMATION_SET_START_POSITION(data, 1825.0000, 509.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 15170.1084)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BOSS_BREAD_FACE)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL GGSM_GET_FORMATION_DATA_FOR_BANANA_STAR(GGSM_FORMATION_DATA &data, INT iSpawnIndex)
// Formation Definitions
SWITCH (iSpawnIndex)
CASE 0 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1825.0000, 509.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 300.0000)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_DUALARCH)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 1 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1662.0000, 639.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, -0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 305.7207)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_EXTRALIFE)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 2 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_BOSS_SMOOTHIE)
GGSM_FORMATION_SET_START_POSITION(data, 1825.0000, 509.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 1000.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BOSS_SMOOTHIE)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 3 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1652.0000, 346.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 1482.5034)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_EXPLOSION)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 4 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1825.0000, 509.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 1800.0000)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_HEALTH)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 5 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1646.0000, 775.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 1849.4717)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_STUN)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 6 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_BOSS_MARINE)
GGSM_FORMATION_SET_START_POSITION(data, 1825.0000, 509.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 2228.1382)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BOSS_MARINE)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 7 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1709.0000, 315.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 2591.8416)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_FORWARD_BACK)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 8 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1659.0000, 619.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 2745.7954)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_HEALTH)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 9 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1682.0000, 512.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 2961.2610)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_DECOY)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 10 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_BOSS_GRANANA)
GGSM_FORMATION_SET_START_POSITION(data, 1825.0000, 509.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 3000.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BOSS_GRANANA)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 11 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1653.0000, 268.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 3365.1082)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_WAVE)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 12 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1673.0000, 737.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 3805.0000)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_NUKE)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 13 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_BOSS_BREAD)
GGSM_FORMATION_SET_START_POSITION(data, 1825.0000, 509.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4000.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BOSS_BREAD_FACE)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 14 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1674.0000, 711.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4413.1465)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_HEALTH)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 15 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1653.0000, 715.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4575.0337)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_SCATTER)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 16 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_POWER_UP)
GGSM_FORMATION_SET_START_POSITION(data, 1661.0000, 350.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4805.0000)
GGSM_FORMATION_SET_POWER_UP_SPRITE(data, GGSM_SPRITE_POWER_UP_EXTRALIFE)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 17 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_BOSS_DR_DANK)
GGSM_FORMATION_SET_START_POSITION(data, 1825.0000, 509.0000)
GGSM_FORMATION_SET_START_DIRECTION(data, -1.0000, 0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 5000.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BOSS_DR_DANK_TOP)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_SPACING(data, 1.2500, 1.2500)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL GGSM_GET_FORMATION_DATA_FOR_BOSS_RUSH(GGSM_FORMATION_DATA &data, INT iSpawnIndex)
SWITCH (iSpawnIndex)
CASE 0 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_BOSS_SMOOTHIE)
GGSM_FORMATION_SET_START_POSITION(data,1825.0000,509.0000)
GGSM_FORMATION_SET_START_DIRECTION(data,-1.0000,0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 1000.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BOSS_SMOOTHIE)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 1 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_BOSS_MARINE)
GGSM_FORMATION_SET_START_POSITION(data,1825.0000,509.0000)
GGSM_FORMATION_SET_START_DIRECTION(data,-1.0000,0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 2000.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BOSS_MARINE)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 2 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_BOSS_GRANANA)
GGSM_FORMATION_SET_START_POSITION(data,1825.0000,509.0000)
GGSM_FORMATION_SET_START_DIRECTION(data,-1.0000,0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 3000.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BOSS_GRANANA)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 3 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_BOSS_BREAD)
GGSM_FORMATION_SET_START_POSITION(data,1825.0000,509.0000)
GGSM_FORMATION_SET_START_DIRECTION(data,-1.0000,0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 4000.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BOSS_BREAD_FACE)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
CASE 4 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_BOSS_DR_DANK)
GGSM_FORMATION_SET_START_POSITION(data,1825.0000,509.0000)
GGSM_FORMATION_SET_START_DIRECTION(data,-1.0000,0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 5000.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BOSS_DR_DANK_TOP)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL GGSM_GET_FORMATION_DATA_FOR_BOSS_TEST(GGSM_FORMATION_DATA &data, INT iSpawnIndex)
SWITCH (iSpawnIndex)
CASE 0 // Formation Data
GGSM_FORMATION_SET_TYPE(data, GGSM_FORMATION_BOSS_BREAD)
GGSM_FORMATION_SET_START_POSITION(data,1825.0000,509.0000)
GGSM_FORMATION_SET_START_DIRECTION(data,-1.0000,0.0000)
GGSM_FORMATION_SET_SCROLL_DISTANCE(data, 1000.0000)
GGSM_FORMATION_SET_ENTITY_TYPE(data, GGSM_ENTITY_BOSS_BREAD_FACE)
GGSM_FORMATION_SET_MOVEMENT_TYPE(data, GGSM_MOVEMENT_SIN_WAVE)
GGSM_FORMATION_SET_WEAPON_TYPE(data, GGSM_WEAPON_DEFAULT)
GGSM_FORMATION_SET_PATH_INDEX(data, -1)
GGSM_FORMATION_SET_MEMBER_COUNT(data, 1)
RETURN TRUE
ENDSWITCH
RETURN FALSE
ENDFUNC
PROC GGSM_GET_STAGE_FORMATION_DATA_ARRAY(GGSM_FORMATION_DATA &array[], INT iStage = 0)
INT i
GGSM_RESET_FORMATION_DATA_ARRAY(array)
sGGSMData.iSpawnsUsed = 0
SWITCH (iStage)
CASE GGSM_SECTOR_EARTH
REPEAT COUNT_OF(array) i
IF GGSM_GET_FORMATION_DATA_FOR_EARTH_SECTOR(array[i], i)
sGGSMData.iSpawnsUsed ++
ENDIF
ENDREPEAT
BREAK
CASE GGSM_SECTOR_ASTEROID_BELT
REPEAT COUNT_OF(array) i
IF GGSM_GET_FORMATION_DATA_FOR_ASTEROID_BELT(array[i], i)
sGGSMData.iSpawnsUsed ++
ENDIF
ENDREPEAT
BREAK
CASE GGSM_SECTOR_PINK_RING
REPEAT COUNT_OF(array) i
IF GGSM_GET_FORMATION_DATA_FOR_PINK_RING(array[i], i)
sGGSMData.iSpawnsUsed ++
ENDIF
ENDREPEAT
BREAK
CASE GGSM_SECTOR_YELLOW_CLAM
REPEAT COUNT_OF(array) i
IF GGSM_GET_FORMATION_DATA_FOR_YELLOW_CLAM(array[i], i)
sGGSMData.iSpawnsUsed ++
ENDIF
ENDREPEAT
BREAK
CASE GGSM_SECTOR_DOUGHBALL
REPEAT COUNT_OF(array) i
IF GGSM_GET_FORMATION_DATA_FOR_DOUGH_BALL(array[i], i)
sGGSMData.iSpawnsUsed ++
ENDIF
ENDREPEAT
BREAK
CASE GGSM_SECTOR_BANANASTAR
REPEAT COUNT_OF(array) i
IF GGSM_GET_FORMATION_DATA_FOR_BANANA_STAR(array[i], i)
sGGSMData.iSpawnsUsed ++
ENDIF
ENDREPEAT
BREAK
CASE GGSM_SECTOR_BOSSRUSH
REPEAT COUNT_OF(array) i
IF GGSM_GET_FORMATION_DATA_FOR_BOSS_RUSH(array[i], i)
sGGSMData.iSpawnsUsed ++
ENDIF
ENDREPEAT
BREAK
CASE GGSM_SECTOR_BOSS_TEST
REPEAT COUNT_OF(array) i
IF GGSM_GET_FORMATION_DATA_FOR_BOSS_TEST(array[i], i)
sGGSMData.iSpawnsUsed ++
ENDIF
ENDREPEAT
BREAK
DEFAULT
REPEAT COUNT_OF(array) i
IF GGSM_GET_FORMATION_DATA_FOR_EARTH_SECTOR(array[i], i)
sGGSMData.iSpawnsUsed ++
ENDIF
ENDREPEAT
BREAK
ENDSWITCH
ENDPROC
//-------------------------------------------------
// PATH DATA
//-------------------------------------------------
FUNC BOOL GGSM_GET_PATH_DATA_FROM_ARRAY(GGSM_PATH_DATA &data, INT iPathIndex)
// Path Definitions
SWITCH (iPathIndex)
CASE 0 // Path Data
GGSM_PATH_DATA_SET_NUM_POINTS(data, 3)
GGSM_PATH_DATA_SET_POINT(data, 0, 1664.0000, 320.0000)
GGSM_PATH_DATA_SET_POINT(data, 1, 768.0000, 320.0000)
GGSM_PATH_DATA_SET_POINT(data, 2, 256.0000, 640.0000)
RETURN TRUE
CASE 1 // Path Data
GGSM_PATH_DATA_SET_NUM_POINTS(data, 3)
GGSM_PATH_DATA_SET_POINT(data, 0, 1408.0000, 64.0000)
GGSM_PATH_DATA_SET_POINT(data, 1, 1408.0000, 448.0000)
GGSM_PATH_DATA_SET_POINT(data, 2, 256.0000, 448.0000)
RETURN TRUE
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC GGSM_PATH_DATA GGSM_PATH_DATA_GET(INT iIndex)
GGSM_PATH_DATA dat
IF (iIndex < 0) OR (iIndex >= GGSM_MAX_PATH_LIBRARY)
RETURN dat
ENDIF
#IF IS_DEBUG_BUILD
/*
#IF GGSM_PATH_EDITOR_ACTIVE
RETURN sGGSMData.sDebugPathData[iIndex]
#ENDIF
*/
#ENDIF
GGSM_GET_PATH_DATA_FROM_ARRAY(dat, iIndex)
RETURN dat
ENDFUNC
PROC GGSM_POPULATE_PATH_DATA_ARRAY(GGSM_PATH_DATA &array[])
INT i
GGSM_RESET_PATH_DATA_ARRAY(array)
REPEAT COUNT_OF(array) i
GGSM_GET_PATH_DATA_FROM_ARRAY(array[i], i)
ENDREPEAT
ENDPROC