Path: blob/master/Sonic 2/Scripts/WFZ/WFZSetup.txt
1479 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: WFZ Setup Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value1 : object.palCycleTimer12private alias object.value2 : object.palCycleTablePos13private alias object.value3 : object.paletteTimer1415// Player Aliases16private alias object.gravity : player.gravity17private alias object.animation : player.animation18private alias object.xvel : player.xvel19private alias object.yvel : player.yvel20private alias object.speed : player.speed21private alias object.up : player.up22private alias object.down : player.down23private alias object.ypos : player.ypos2425// Game Modes26private alias 0 : MODE_NOSAVE27private alias 1 : MODE_SAVEGAME28private alias 2 : MODE_TIMEATTACK2930// Tracks31private alias 0 : TRACK_STAGE32private alias 1 : TRACK_ACTFINISH33private alias 2 : TRACK_INVINCIBLE34private alias 3 : TRACK_CONTINUE35private alias 4 : TRACK_BOSS36private alias 5 : TRACK_GAMEOVER37private alias 6 : TRACK_DROWNING38private alias 7 : TRACK_SUPER3940// Reserved object slots41private alias 10 : SLOT_ZONESETUP42private alias 25 : SLOT_MUSICEVENT_CHANGE4344// Music Events45private alias 0 : MUSICEVENT_FADETOBOSS46private alias 1 : MUSICEVENT_FADETOSTAGE47private alias 2 : MUSICEVENT_TRANSITION4849private alias 0 : MUSICEVENT_FLAG_NOCHANGE50private alias 1 : MUSICEVENT_FLAG_SPEEDUP51private alias 2 : MUSICEVENT_FLAG_SLOWDOWN5253// Music Loops54private alias 99874 : MUSIC_LOOP_WFZ55private alias 80074 : MUSIC_LOOP_WFZ_F5657private alias 38679 : MUSIC_LOOP_INV58private alias 30897 : MUSIC_LOOP_INV_F596061// ========================62// Function Declarations63// ========================6465reserve function WFZSetup_State_Clinging6667reserve function WFZSetup_SpeedUpMusic68reserve function WFZSetup_SlowDownMusic697071// ========================72// Static Values73// ========================7475public value WFZSetup_scrollVelocity.x = 076public value WFZSetup_scrollVelocity.y = 07778public value WFZSetup_hPropellerFrame = 079public value WFZSetup_hPropellerTimer = 080public value WFZSetup_vPropellerFrame = 081public value WFZSetup_vPropellerTimer = 0828384// ========================85// Tables86// ========================8788private table WFZSetup_palCycleTable890xE0E040, 0xE0A020, 0xE06000, 0xC02000900xE0E0E0, 0xE0E040, 0xE0A020, 0xE06000910xE0E040, 0xE0A020, 0xE06000, 0xC02000920xE0A020, 0xE06000, 0xC02000, 0x80200093end table949596// ========================97// Function Definitions98// ========================99100// Custom state given to the player in this stage only, by the Wind Current objects101// Identical to the (unused) Player_State_Clinging function in the Player Object script102public function WFZSetup_State_Clinging103player.gravity = GRAVITY_AIR104105if player.animation != ANI_CLINGING106player.xvel = -0x80000107player.speed = -0x80000108else109player.xvel = 0110player.speed = 0111end if112113if player.up == true114player.ypos -= 0x10000115else116if player.down == true117player.ypos += 0x10000118end if119end if120121player.yvel = 0122end function123124125private function WFZSetup_SpeedUpMusic126CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])127temp0 = checkResult128CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)129temp0 &= checkResult130CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)131temp0 &= checkResult132if temp0 == false133switch music.currentTrack134case TRACK_STAGE135SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)136SwapMusicTrack("WingFortress_F.ogg", TRACK_STAGE, MUSIC_LOOP_WFZ_F, 8000)137break138139case TRACK_INVINCIBLE140SetMusicTrack("WingFortress_F.ogg", TRACK_STAGE, MUSIC_LOOP_WFZ_F)141SwapMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F, 8000)142break143144case TRACK_BOSS145case TRACK_DROWNING146case TRACK_SUPER147SetMusicTrack("WingFortress_F.ogg", TRACK_STAGE, MUSIC_LOOP_WFZ_F)148SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)149break150151end switch152else153stage.musicFlag = MUSICEVENT_FLAG_SPEEDUP154end if155end function156157158private function WFZSetup_SlowDownMusic159CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])160temp0 = checkResult161CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)162temp0 &= checkResult163CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)164temp0 &= checkResult165if temp0 == false166switch music.currentTrack167case TRACK_STAGE168SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)169SwapMusicTrack("WingFortress.ogg", TRACK_STAGE, MUSIC_LOOP_WFZ, 12500)170break171172case TRACK_INVINCIBLE173SetMusicTrack("WingFortress.ogg", TRACK_STAGE, MUSIC_LOOP_WFZ)174SwapMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV, 12500)175break176177case TRACK_BOSS178case TRACK_DROWNING179case TRACK_SUPER180SetMusicTrack("WingFortress.ogg", TRACK_STAGE, MUSIC_LOOP_WFZ)181SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)182break183184end switch185else186stage.musicFlag = MUSICEVENT_FLAG_SLOWDOWN187end if188end function189190191// ========================192// Events193// ========================194195event ObjectUpdate196object.palCycleTimer++197if object.palCycleTimer == 2198object.palCycleTimer = 0199200GetTableValue(temp0, object.palCycleTablePos, WFZSetup_palCycleTable)201SetPaletteEntry(0, 167, temp0)202object.palCycleTablePos++203object.palCycleTablePos &= 15204205GetTableValue(temp0, object.palCycleTablePos, WFZSetup_palCycleTable)206SetPaletteEntry(0, 168, temp0)207object.palCycleTablePos++208object.palCycleTablePos &= 15209210GetTableValue(temp0, object.palCycleTablePos, WFZSetup_palCycleTable)211SetPaletteEntry(0, 169, temp0)212object.palCycleTablePos++213object.palCycleTablePos &= 15214215GetTableValue(temp0, object.palCycleTablePos, WFZSetup_palCycleTable)216SetPaletteEntry(0, 170, temp0)217object.palCycleTablePos++218object.palCycleTablePos &= 15219end if220221object.paletteTimer++222if object.paletteTimer == 6223object.paletteTimer = 0224RotatePalette(0, 192, 195, true)225end if226227WFZSetup_hPropellerFrame = WFZSetup_hPropellerTimer228WFZSetup_hPropellerFrame >>= 1229WFZSetup_hPropellerTimer++230WFZSetup_hPropellerTimer %= 12231232WFZSetup_vPropellerFrame = WFZSetup_vPropellerTimer233WFZSetup_vPropellerFrame >>= 1234WFZSetup_vPropellerTimer++235WFZSetup_vPropellerTimer %= 6236end event237238239event ObjectStartup240SetMusicTrack("WingFortress.ogg", TRACK_STAGE, MUSIC_LOOP_WFZ)241242SpeedUpMusic = WFZSetup_SpeedUpMusic243SlowDownMusic = WFZSetup_SlowDownMusic244245animalType1 = TypeName[Locky]246animalType2 = TypeName[Wocky]247248// Reset the boss flash color to just be a solid black for now249SetPaletteEntry(0, 196, 0x000000)250251object[SLOT_ZONESETUP].type = TypeName[WFZ Setup]252object[SLOT_ZONESETUP].priority = PRIORITY_ACTIVE253254WFZSetup_scrollVelocity.x = 0255WFZSetup_scrollVelocity.y = 0256257WFZSetup_hPropellerFrame = 0258WFZSetup_hPropellerTimer = 0259WFZSetup_vPropellerFrame = 0260WFZSetup_vPropellerTimer = 0261262// This level has a special cutscene and all for the main game, remove Animal Capsules outside of TA so that we can watch it263foreach (TypeName[Animal Prison], arrayPos0, ALL_ENTITIES)264if options.gameMode != MODE_TIMEATTACK265ResetObjectEntity(arrayPos0, TypeName[Blank Object], 0, 0, 0)266end if267next268end event269270271// ========================272// Editor Events273// ========================274275event RSDKDraw276DrawSprite(0)277end event278279280event RSDKLoad281LoadSpriteSheet("Global/Display.gif")282SpriteFrame(-16, -16, 32, 32, 1, 143)283284SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")285end event286287288