Path: blob/master/Sonic 2/Scripts/ARZ/EggmanHammer.txt
1487 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Eggman Hammer Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value0 : object.originPos.x12private alias object.value1 : object.originPos.y13private alias object.value2 : object.oscillationAngle14private alias object.value3 : object.timer15private alias object.value4 : object.boundsR16private alias object.value5 : object.boundsL17// value6 is unused18private alias object.value7 : object.boundsOffset19private alias object.value8 : object.hideFlames20private alias object.value9 : object.flameFrame21private alias object.value10 : object.flameAnimTimer22private alias object.value11 : object.arrowSlot23private alias object.value12 : object.arrowVelocity24private alias object.value13 : object.hammerOffset.x25private alias object.value14 : object.hammerOffset.y2627// States28private alias 0 : EGGMANHAMMER_ENTEREGGMAN29private alias 1 : EGGMANHAMMER_MOVING30private alias 2 : EGGMANHAMMER_PREPARESLAM31private alias 3 : EGGMANHAMMER_SLAM32private alias 4 : EGGMANHAMMER_DESTROYED33private alias 5 : EGGMANHAMMER_DEBRIS3435// EggmanTotemPole Aliases36private alias object.value3 : eggmanTotemPole.timer37private alias object.value8 : eggmanTotemPole.offset38private alias object.value9 : eggmanTotemPole.eyePos3940// EggmanArrow Aliases41private alias object.value0 : eggmanArrow.targetPos.x42private alias object.value1 : eggmanArrow.parent4344private alias 0 : EGGMANARROW_MOVING454647// ========================48// Function Declarations49// ========================5051reserve function EggmanHammer_Oscillate525354// ========================55// Tables56// ========================5758private table EggmanHammer_arrowOffsets59-0x280000, -0x80000, 0x180000, 0x38000060end table616263// ========================64// Function Definitions65// ========================6667private function EggmanHammer_Oscillate68object.ypos = object.originPos.y69Sin256(temp0, object.oscillationAngle)70temp0 <<= 1071object.ypos += temp072object.oscillationAngle += 273object.oscillationAngle &= 2557475object[-1].xpos = object.xpos76object[-1].ypos = object.ypos77object[-1].direction = object.direction78end function798081// ========================82// Events83// ========================8485event ObjectUpdate86switch object.state87case EGGMANHAMMER_ENTEREGGMAN88object.originPos.y += 0x100008990object.timer--91if object.timer == 092object.state++93end if9495CallFunction(EggmanHammer_Oscillate)96break9798case EGGMANHAMMER_MOVING99object.animationTimer = 0100if object.direction == FLIP_NONE101if object.xpos > object.boundsR102object.xpos -= object.boundsOffset103else104object.state++105end if106else107if object.xpos < object.boundsL108object.xpos += object.boundsOffset109else110object.state = EGGMANHAMMER_PREPARESLAM111end if112end if113114CallFunction(EggmanHammer_Oscillate)115break116117case EGGMANHAMMER_PREPARESLAM118CallFunction(EggmanHammer_Oscillate)119if object.oscillationAngle == 0xC0120object.state = EGGMANHAMMER_SLAM121end if122break123124case EGGMANHAMMER_SLAM125object.animationTimer++126switch object.animationTimer127case 1128object.frame = 4129PlaySfx(SfxName[Crusher], false)130break131132case 7133object.frame = 5134135arrayPos0 = object.entityPos136if object.direction == FLIP_NONE137arrayPos0 += 4138else139arrayPos0 += 5140end if141object[arrayPos0].state = 2142eggmanTotemPole[arrayPos0].timer = 32143eggmanTotemPole[arrayPos0].offset = -0x10000144145arrayPos1 = object[+1].entityPos146arrayPos1 += object.arrowSlot147object.arrowSlot++148object.arrowSlot %= 3149150object[arrayPos1].type = TypeName[Eggman Arrow]151object[arrayPos1].xpos = object[arrayPos0].xpos152Rand(temp0, 4)153GetTableValue(object[arrayPos1].ypos, temp0, EggmanHammer_arrowOffsets)154eggmanTotemPole[arrayPos0].eyePos = object[arrayPos1].ypos155object[arrayPos1].ypos += object[arrayPos0].ypos156if object.direction == FLIP_NONE157eggmanArrow[arrayPos1].targetPos.x = object[+5].xpos158eggmanArrow[arrayPos1].targetPos.x -= 0x280000159object[arrayPos1].xpos += 0x100000160else161eggmanArrow[arrayPos1].targetPos.x = object[+4].xpos162eggmanArrow[arrayPos1].targetPos.x += 0x280000163object[arrayPos1].xpos -= 0x100000164end if165object[arrayPos1].direction = object.direction166object[arrayPos1].drawOrder = 2167eggmanArrow[arrayPos1].parent = object[+1].entityPos168eggmanArrow[arrayPos1].parent += object.arrowSlot169object[arrayPos1].yvel = 0170object[arrayPos1].frame = 0171object[arrayPos1].animation = 0172object[arrayPos1].animationTimer = 0173object[arrayPos1].xvel = object.arrowVelocity174object[arrayPos1].state = EGGMANARROW_MOVING175break176177case 13178foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)179if object.direction == FLIP_NONE180BoxCollisionTest(C_TOUCH, object.entityPos, -88, -24, -56, 24, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)181else182BoxCollisionTest(C_TOUCH, object.entityPos, 56, -24, 88, 24, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)183end if184185if checkResult == true186CallFunction(Player_Hit)187end if188next189break190191case 22192object.frame = 4193break194195case 29196object.frame = 3197break198199case 32200object.direction ^= FLIP_X201object.state = EGGMANHAMMER_MOVING202break203204end switch205206CallFunction(EggmanHammer_Oscillate)207break208209case EGGMANHAMMER_DESTROYED210break211212case EGGMANHAMMER_DEBRIS213object.hammerOffset.x += object.xvel214object.hammerOffset.y += object.yvel215object.yvel += 0x3800216break217218end switch219220object.flameAnimTimer++221object.flameAnimTimer &= 3222object.flameFrame = object.flameAnimTimer223object.flameFrame >>= 1224end event225226227event ObjectDraw228DrawSpriteFX(2, FX_FLIP, object.xpos, object.ypos)229if object.hideFlames != true230DrawSpriteFX(object.flameFrame, FX_FLIP, object.xpos, object.ypos)231end if232233if object.animation != 1234temp0 = object.xpos235if object.direction == FLIP_NONE236temp0 -= 0x280000237else238temp0 += 0x280000239end if240temp0 += object.hammerOffset.x241242temp1 = object.ypos243temp1 += 0x40000244temp1 += object.hammerOffset.y245DrawSpriteFX(object.frame, FX_ROTATE, temp0, temp1)246end if247end event248249250event ObjectStartup251CheckCurrentStageFolder("Zone03")252if checkResult == true253LoadSpriteSheet("ARZ/Objects.gif")254SpriteFrame(-15, 24, 46, 16, 78, 183) // Flames 1 - #0255SpriteFrame(-16, 24, 48, 8, 207, 162) // Flames 2 - #1256SpriteFrame(-44, -28, 76, 52, 1, 147) // EggMobile - #2257SpriteFrame(-50, -49, 54, 53, 1, 202) // Hammer (Idle) - #3258SpriteFrame(-49, -43, 49, 55, 56, 200) // Hammer (Slamming) - #4259SpriteFrame(-48, -24, 48, 48, 106, 207) // Hammer (Slammed) - #5260else261LoadSpriteSheet("MBZ/Objects.gif")262SpriteFrame(-15, 24, 46, 16, 299, 5) // Flames 1 - #0263SpriteFrame(-16, 24, 48, 8, 299, 22) // Flames 2 - #1264SpriteFrame(-44, -28, 76, 52, 222, 5) // EggMobile - #2265SpriteFrame(-50, -49, 54, 53, 255, 58) // Hammer (Idle) - #3266SpriteFrame(-49, -43, 49, 55, 310, 56) // Hammer (Slamming) - #4267SpriteFrame(-48, -24, 48, 48, 348, 1) // Hammer (Slammed) - #5268end if269end event270271272// ========================273// Editor Events274// ========================275276event RSDKDraw277DrawSprite(0)278end event279280281event RSDKLoad282CheckCurrentStageFolder("Zone03")283if checkResult == true284LoadSpriteSheet("ARZ/Objects.gif")285SpriteFrame(-44, -28, 76, 52, 1, 147) // EggMobile286else287LoadSpriteSheet("MBZ/Objects.gif")288SpriteFrame(-44, -28, 76, 52, 222, 5) // EggMobile, but duller!289end if290291SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")292end event293294295