Path: blob/master/Sonic 2/Scripts/OOZ/GasPlatform.txt
1478 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Gas Platform Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value0 : object.timer12private alias object.value1 : object.centerPos.y13private alias object.value2 : object.collisionOffset.y14private alias object.value3 : object.launchPos.y15private alias object.value4 : object.flameActive1617// States18private alias 0 : GASPLATFORM_AWAITINTERVAL19private alias 1 : GASPLATFORM_POPPED20private alias 2 : GASPLATFORM_AWAITCONTACT21private alias 3 : GASPLATFORM_CONTACT_LAUNCHED22private alias 4 : GASPLATFORM_CONTACT_IDLE2324// Player Aliases25private alias object.state : player.state26private alias object.xpos : player.xpos27private alias object.ypos : player.ypos28private alias object.xvel : player.xvel29private alias object.yvel : player.yvel30private alias object.speed : player.speed31private alias object.gravity : player.gravity32private alias object.animationSpeed : player.animationSpeed33private alias object.animation : player.animation3435private alias object.value1 : player.timer36private alias object.value5 : player.rollAnimationSpeed373839// ========================40// Function Declarations41// ========================4243reserve function GasPlatform_DebugDraw44reserve function GasPlatform_DebugSpawn454647// ========================48// Function Definitions49// ========================5051private function GasPlatform_DebugDraw52DrawSprite(7)53end function545556private function GasPlatform_DebugSpawn57CreateTempObject(TypeName[Gas Platform], 0, object.xpos, object.ypos)58object[tempObjectPos].centerPos.y = object.ypos59end function606162// ========================63// Events64// ========================6566event ObjectUpdate67temp6 = object.ypos68switch object.state69case GASPLATFORM_AWAITINTERVAL70object.timer++71if object.timer == 12072object.timer = 073object.yvel = -0x9680074PlaySfx(SfxName[Gas Pop], false)75if object.priority != PRIORITY_XBOUNDS_DESTROY76object.priority = PRIORITY_ACTIVE77end if78object.state++79end if80break8182case GASPLATFORM_POPPED83object.ypos += object.yvel84object.yvel += 0x38008586if object.ypos >= object.centerPos.y87object.ypos = object.centerPos.y88if object.yvel < 0x1000089object.state = GASPLATFORM_AWAITINTERVAL90object.yvel = 091else92object.yvel >>= 293FlipSign(object.yvel)94end if95end if96break9798case GASPLATFORM_AWAITCONTACT99if object.priority != PRIORITY_XBOUNDS_DESTROY100object.priority = PRIORITY_ACTIVE101end if102break103104case GASPLATFORM_CONTACT_LAUNCHED105object.ypos += object.yvel106object.yvel += 0x3800107108if object.ypos <= object.launchPos.y109object.ypos = object.launchPos.y110object.state++111PlaySfx(SfxName[Spring], false)112foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)113BoxCollisionTest(C_TOUCH, object.entityPos, -24, -10, 24, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)114if checkResult == true115player[currentPlayer].xpos = object.xpos116player[currentPlayer].state = Player_State_Static117player[currentPlayer].gravity = 1118player[currentPlayer].timer = 0119player[currentPlayer].speed = 0120player[currentPlayer].xvel = 0121player[currentPlayer].yvel = -0x100000122player[currentPlayer].animation = ANI_JUMPING123player[currentPlayer].animationSpeed = 0xF0124player[currentPlayer].rollAnimationSpeed = 0xF0125end if126next127end if128break129130case GASPLATFORM_CONTACT_IDLE131break132133end switch134135temp0 = object.centerPos.y136temp0 -= object.ypos137if temp0 > 0x180000138object.flameActive = true139else140object.flameActive = false141end if142143temp0 = object.ypos144temp6 &= 0xFFFF0000145object.collisionOffset.y = object.ypos146object.collisionOffset.y &= 0xFFFF0000147object.collisionOffset.y -= temp6148149foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)150object.ypos = object.centerPos.y151BoxCollisionTest(C_SOLID, object.entityPos, -32, 8, 32, 48, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)152BoxCollisionTest(C_SOLID, object.entityPos, -16, 0, 16, 24, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)153if object.flameActive == true154BoxCollisionTest(C_TOUCH, object.entityPos, -16, -16, 16, 0, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)155if checkResult == true156CallFunction(Player_FireHit)157end if158end if159160if object.yvel < -0x60000161temp7 = player[currentPlayer].yvel162temp7 -= 0x20000163else164temp7 = -0x80000165end if166167if object.yvel < temp7168object.ypos = temp0169temp7 = player[currentPlayer].yvel170BoxCollisionTest(C_TOUCH, object.entityPos, -24, -10, 24, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)171if checkResult == true172player[currentPlayer].yvel = 0x10000173end if174175BoxCollisionTest(C_PLATFORM, object.entityPos, -24, -8, 24, 12, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)176switch checkResult177default178break179180case 4181if player[currentPlayer].gravity == 0182if object.yvel > 0183CallFunction(Player_Kill)184end if185end if186break187end switch188player[currentPlayer].yvel = temp7189else190object.ypos = temp6191BoxCollisionTest(C_SOLID2, object.entityPos, -24, -8, 24, 12, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)192switch checkResult193case COL_NONE194BoxCollisionTest(C_PLATFORM, object.entityPos, -24, -8, 24, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)195break196197case COL_TOP198player[currentPlayer].ypos += object.collisionOffset.y199if object.state == GASPLATFORM_AWAITCONTACT200player[currentPlayer].speed = 0201player[currentPlayer].xvel = 0202object.yvel = -0x96800203PlaySfx(SfxName[Gas Pop], false)204object.state++205end if206break207208case COL_BOTTOM209if player[currentPlayer].gravity == 0210if object.yvel > 0211CallFunction(Player_Kill)212end if213end if214break215end switch216end if217218object.ypos = object.centerPos.y219BoxCollisionTest(C_SOLID, object.entityPos, -16, 0, 16, 24, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)220next221object.ypos = temp0222223// Animate224object.frame = object.animationTimer225object.frame /= 3226object.animationTimer++227object.animationTimer %= 21228229if object.outOfBounds == true230temp0 = object.ypos231object.ypos = object.centerPos.y232if object.outOfBounds == true233if object.priority != PRIORITY_XBOUNDS_DESTROY234object.priority = PRIORITY_BOUNDS235object.timer = 0236object.animationTimer = 0237object.flameActive = false238object.xvel = 0239object.yvel = 0240if object.propertyValue == 1241object.state = GASPLATFORM_AWAITCONTACT242else243object.state = GASPLATFORM_AWAITINTERVAL244end if245end if246else247object.ypos = temp0248end if249end if250end event251252253event ObjectDraw254if object.flameActive == true255DrawSpriteXY(object.frame, object.xpos, object.centerPos.y)256end if257DrawSprite(7)258end event259260261event ObjectStartup262LoadSpriteSheet("OOZ/Objects.gif")263SpriteFrame(-14, -15, 28, 15, 104, 191)264SpriteFrame(-15, -24, 30, 24, 102, 133)265SpriteFrame(-14, -15, 28, 15, 104, 191)266SpriteFrame(-15, -24, 30, 24, 102, 133)267SpriteFrame(-14, -15, 28, 15, 104, 191)268SpriteFrame(-15, -24, 30, 24, 102, 133)269SpriteFrame(-15, -32, 30, 32, 102, 158)270SpriteFrame(-24, -8, 48, 12, 84, 108)271272foreach (TypeName[Gas Platform], arrayPos0, ALL_ENTITIES)273object[arrayPos0].centerPos.y = object[arrayPos0].ypos274if object[arrayPos0].propertyValue == 1275object[arrayPos0].state = GASPLATFORM_AWAITCONTACT276object[arrayPos0].launchPos.y = object[arrayPos0].ypos277object[arrayPos0].launchPos.y -= 0x780000278end if279next280281SetTableValue(TypeName[Gas Platform], DebugMode_ObjCount, DebugMode_TypesTable)282SetTableValue(GasPlatform_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)283SetTableValue(GasPlatform_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)284DebugMode_ObjCount++285end event286287288// ========================289// Editor Events290// ========================291292event RSDKEdit293if editor.returnVariable == true294switch editor.variableID295case EDIT_VAR_PROPVAL // property value296checkResult = object.propertyValue297break298299case 0 // type300checkResult = object.propertyValue301checkResult &= 1302break303304end switch305else306switch editor.variableID307case EDIT_VAR_PROPVAL // property value308object.propertyValue = editor.variableValue309break310311case 0 // type312editor.variableValue &= 1313object.propertyValue = editor.variableValue314break315316end switch317end if318end event319320321event RSDKDraw322DrawSprite(7)323324if editor.showGizmos == true325editor.drawingOverlay = true326327if object.propertyValue == 1328// Pop on Contact329temp0 = -120330else331// Pop on Interval332temp0 = -206333end if334temp0 <<= 16335temp0 += object.ypos336337object.inkEffect = INK_BLEND338DrawSpriteFX(7, FX_INK, object.xpos, temp0)339DrawArrow(object.xpos, object.ypos, object.xpos, temp0, 0x00, 0xFF, 0x00)340341editor.drawingOverlay = false342end if343end event344345346event RSDKLoad347LoadSpriteSheet("OOZ/Objects.gif")348SpriteFrame(-14, -15, 28, 15, 104, 191)349SpriteFrame(-15, -24, 30, 24, 102, 133)350SpriteFrame(-14, -15, 28, 15, 104, 191)351SpriteFrame(-15, -24, 30, 24, 102, 133)352SpriteFrame(-14, -15, 28, 15, 104, 191)353SpriteFrame(-15, -24, 30, 24, 102, 133)354SpriteFrame(-15, -32, 30, 32, 102, 158)355SpriteFrame(-24, -8, 48, 12, 84, 108)356357AddEditorVariable("type")358SetActiveVariable("type")359AddEnumVariable("Pop On Interval", 0)360AddEnumVariable("Pop On Contact", 1)361end event362363364