Path: blob/master/Sonic 2/Scripts/Mission/MissionAnimalPrison.txt
1483 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: MissionAnimalPrison Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// This Object is used in Mission "Animal Rescue" - M034 - Mission_Zone0589// ========================10// Aliases11// ========================1213private alias object.value0 : object.timer14private alias object.value2 : object.buttonPos15private alias object.value3 : object.lockPos.x16private alias object.value4 : object.lockPos.y17private alias object.value5 : object.debrisEdgeFrame18private alias object.value6 : object.debrisCenterFrame1920// States21private alias 0 : MISSIONANIMALPRISON_AWAITOPEN22private alias 1 : MISSIONANIMALPRISON_OPENING23private alias 2 : MISSIONANIMALPRISON_SHOWDEBRIS24private alias 3 : MISSIONANIMALPRISON_OPENED25private alias 4 : MISSIONANIMALPRISON_UNUSED // ANIMALPRISON_OPENED in the original object2627// Animal Aliases28private alias object.value1 : animal.randomizeDir2930// Player Aliases31private alias object.xpos : player.xpos32private alias object.ypos : player.ypos33private alias object.xvel : player.xvel34private alias object.speed : player.speed35private alias object.collisionRight : player.collisionRight36private alias object.collisionBottom : player.collisionBottom3738// Super States39private alias 1 : SUPERSTATE_SUPER40private alias 2 : SUPERSTATE_FADEOUT4142// Game Modes43private alias 2 : MODE_TIMEATTACK4445// Tracks46private alias 1 : TRACK_ACTFINISH474849// ========================50// Events51// ========================5253event ObjectUpdate54switch object.state55case MISSIONANIMALPRISON_AWAITOPEN56break5758case MISSIONANIMALPRISON_OPENING59object.timer++6061object.lockPos.x += object.xvel62object.lockPos.y += object.yvel63object.yvel += 0x40006465if object.timer == 3066temp1 = object.ypos67temp1 += 0x4000068temp2 = 069temp3 = 3070while temp2 < 3271Rand(temp0, 48)72temp0 >>= 273temp0 <<= 1874temp0 -= 0x18000075temp0 += object.xpos76temp4 = temp277temp4 &= 178if temp4 == false79CreateTempObject(animalType1, temp3, temp0, temp1)80else81CreateTempObject(animalType2, temp3, temp0, temp1)82end if83animal[tempObjectPos].randomizeDir = true84temp0 += 0x4000085temp2++86temp3 += 587loop88object.drawOrder = 489object.timer = 090object.state++91object.debrisEdgeFrame = 592object.debrisCenterFrame = 1793end if94break9596case MISSIONANIMALPRISON_SHOWDEBRIS97object.debrisEdgeFrame = object.timer98object.debrisEdgeFrame += 599object.debrisCenterFrame = object.timer100object.debrisCenterFrame >>= 1101object.debrisCenterFrame += 17102103if object.timer < 12104object.timer++105else106object.timer = 0107object.state++108CallNativeFunction2(NotifyCallback, NOTIFY_KILL_ENEMY, KILL_ENEMY_ATTR_ANIMALPRISON)109end if110break111112case MISSIONANIMALPRISON_OPENED113break114115end switch116117object.buttonPos = object.ypos118object.buttonPos -= 0x300000119120temp2 = object.buttonPos121temp2 += 0x80000122123// Check collision with players124foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)125BoxCollisionTest(C_SOLID, object.entityPos, -32, -24, 32, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)126BoxCollisionTest(C_SOLID, object.entityPos, -16, -40, 16, -24, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)127if object.state == MISSIONANIMALPRISON_AWAITOPEN128if checkResult == COL_TOP129object.state = MISSIONANIMALPRISON_OPENING130131if Player_superState == SUPERSTATE_SUPER132Player_superState = SUPERSTATE_FADEOUT133end if134135object.xvel = 0x80000136object.yvel = -0x40000137object.lockPos.x = object.xpos138object.lockPos.y = object.ypos139CreateTempObject(TypeName[Smoke Puff], 0, object.xpos, object.ypos)140object[tempObjectPos].ypos -= 0x180000141PlaySfx(SfxName[Destroy], false)142end if143end if144145BoxCollisionTest(C_TOUCH, object.entityPos, -15, -48, 15, -24, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)146if checkResult == true147temp0 = player[currentPlayer].collisionBottom148temp0 <<= 16149temp0 += player[currentPlayer].ypos150if temp0 > object.buttonPos151if temp0 <= temp2152object.buttonPos = temp0153end if154end if155end if156next157end event158159160event ObjectDraw161switch object.state162case MISSIONANIMALPRISON_AWAITOPEN163DrawSpriteXY(2, object.xpos, object.buttonPos)164DrawSprite(0)165DrawSprite(4)166break167168case MISSIONANIMALPRISON_OPENING169DrawSpriteXY(2, object.xpos, object.buttonPos)170DrawSprite(0)171DrawSpriteXY(4, object.lockPos.x, object.lockPos.y)172break173174case MISSIONANIMALPRISON_SHOWDEBRIS175DrawSpriteXY(2, object.xpos, object.buttonPos)176DrawSprite(1)177178DrawSprite(object.debrisEdgeFrame)179180object.direction = FLIP_X181DrawSpriteFX(object.debrisEdgeFrame, FX_FLIP, object.xpos, object.ypos)182183DrawSprite(object.debrisCenterFrame)184break185186case MISSIONANIMALPRISON_OPENED187case MISSIONANIMALPRISON_UNUSED188DrawSpriteXY(2, object.xpos, object.buttonPos)189DrawSprite(1)190break191192end switch193end event194195196event ObjectStartup197LoadSpriteSheet("Global/Items2.gif")198SpriteFrame(-32, -32, 64, 64, 83, 1) // capsule (closed) - #0199SpriteFrame(-32, -32, 64, 64, 148, 1) // capsule (open) - #1200SpriteFrame(-16, 0, 32, 16, 213, 1) // button (closed) - #2201SpriteFrame(-16, -48, 32, 16, 213, 1) // button (open) - #3202SpriteFrame(-8, -31, 16, 16, 213, 18) // lock - #4203SpriteFrame(-32, -16, 24, 24, 83, 17) // debris - #5204SpriteFrame(-32, -14, 24, 22, 83, 17) // debris - #6205SpriteFrame(-32, -12, 24, 20, 83, 17) // debris - #7206SpriteFrame(-32, -10, 24, 18, 83, 17) // debris - #8207SpriteFrame(-32, -8, 24, 16, 83, 17) // debris - #9208SpriteFrame(-32, -6, 24, 14, 83, 17) // debris - #10209SpriteFrame(-32, -4, 24, 12, 83, 17) // debris - #11210SpriteFrame(-32, -2, 24, 10, 83, 17) // debris - #12211SpriteFrame(-32, 0, 24, 8, 83, 17) // debris - #13212SpriteFrame(-32, 2, 24, 6, 83, 17) // debris - #14213SpriteFrame(-32, 4, 24, 4, 83, 17) // debris - #15214SpriteFrame(-32, 6, 24, 2, 83, 17) // debris - #16215SpriteFrame(-8, -16, 16, 24, 107, 17) // debris - #17216SpriteFrame(-8, -16, 16, 20, 107, 17) // debris - #18217SpriteFrame(-8, -16, 16, 16, 107, 17) // debris - #19218SpriteFrame(-8, -16, 16, 12, 107, 17) // debris - #20219SpriteFrame(-8, -16, 16, 8, 107, 17) // debris - #21220SpriteFrame(-8, -16, 16, 4, 107, 17) // debris - #22221222// huh?223// This might've been TypeName[Animal Prison] in the original source, but that didn't resolve right and now we got this...224foreach (TypeName[Blank Object], arrayPos0, ALL_ENTITIES)225object[arrayPos0].priority = PRIORITY_XBOUNDS226next227228end event229230231// ========================232// Editor Events233// ========================234235event RSDKDraw236DrawSprite(0)237DrawSprite(1)238DrawSprite(2)239end event240241242event RSDKLoad243LoadSpriteSheet("Global/Items2.gif")244SpriteFrame(-16, -48, 32, 16, 213, 1) // TODO:245SpriteFrame(-32, -32, 64, 64, 83, 1)246SpriteFrame(-8, -31, 16, 16, 213, 18)247248SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")249end event250251252