Path: blob/main/Scripts/R4/HOBlocks3.txt
1319 views
//------------Sonic CD Horizontal Blocks 3 Script-------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value1 : Object.XDrawPos6#alias Object.Value2 : Object.XOffSet7#alias Object.Value3 : Object.Angle8#alias Object.Value4 : Object.AgainstBlock910// HUD alias11#alias Object[24].PropertyValue : HUD.CurrentTimePeriod1213// Property Values14#alias 0 : ONE_BLOCK15#alias 1 : TWO_BLOCKS16#alias 2 : THREE_BLOCKS17#alias 3 : FOUR_BLOCKS1819// Collision20#alias 1 : PLAYER_COL_FLOOR21#alias 2 : PLAYER_COL_LWALL22#alias 3 : PLAYER_COL_RWALL2324// Time Periods25#alias 0 : TIME_PRESENT26#alias 1 : TIME_PAST27#alias 2 : TIME_GOOD_FUTURE28#alias 3 : TIME_BAD_FUTURE293031sub ObjectMain32Object.Angle = Oscillation33Object.Angle += Object.PropertyValue34Object.Angle <<= 135Cos(Object.XOffSet, Object.Angle)3637switch Object.PropertyValue38case ONE_BLOCK39Object.XOffSet <<= 1140break41case TWO_BLOCKS42Object.XOffSet <<= 1243break44case THREE_BLOCKS45Object.XOffSet *= 0x180046break47case FOUR_BLOCKS48Object.XOffSet <<= 1349break50end switch5152Object.XOffSet += Object.XPos53Object.XOffSet &= 0xFFFF0000 // Truncate the value54Object.XOffSet -= Object.XDrawPos55Object.AgainstBlock = 056end sub575859sub ObjectPlayerInteraction60TempValue0 = Object.XPos61Object.XPos = Object.XDrawPos6263switch Object.PropertyValue64case ONE_BLOCK65PlayerObjectCollision(C_BOX, -16, -16, 16, 16)66break67case TWO_BLOCKS68PlayerObjectCollision(C_BOX, -32, -16, 32, 16)69break70case THREE_BLOCKS71PlayerObjectCollision(C_BOX, -48, -16, 48, 16)72break73case FOUR_BLOCKS74PlayerObjectCollision(C_BOX, -64, -16, 64, 16)75break76end switch7778Object.XPos = TempValue07980switch CheckResult81case PLAYER_COL_FLOOR82Player.XPos += Object.XOffSet83break8485case PLAYER_COL_LWALL86PlayerObjectCollision(C_BOX, -160, -16, -128, 16)87if CheckResult == PLAYER_COL_RWALL88CallFunction(Player_Kill)89end if90break91end switch92end sub939495sub ObjectDraw96switch Object.PropertyValue97case ONE_BLOCK98Cos(Object.XDrawPos, Object.Angle)99Object.XDrawPos <<= 11100Object.XDrawPos += Object.XPos101Object.XDrawPos &= 0xFFFF0000 // Truncate the value102DrawSpriteXY(1, Object.XDrawPos, Object.YPos)103break104105case TWO_BLOCKS106Cos(Object.XDrawPos, Object.Angle)107Object.XDrawPos <<= 12108Object.XDrawPos += Object.XPos109Object.XDrawPos &= 0xFFFF0000 // Truncate the value110DrawSpriteXY(4, Object.XDrawPos, Object.YPos)111DrawSpriteXY(5, Object.XDrawPos, Object.YPos)112break113114case THREE_BLOCKS115Cos(Object.XDrawPos, Object.Angle)116Object.XDrawPos *= 0x1800117Object.XDrawPos += Object.XPos118Object.XDrawPos &= 0xFFFF0000 // Truncate the value119DrawSpriteXY(0, Object.XDrawPos, Object.YPos)120DrawSpriteXY(1, Object.XDrawPos, Object.YPos)121DrawSpriteXY(2, Object.XDrawPos, Object.YPos)122break123124case FOUR_BLOCKS125Cos(Object.XDrawPos, Object.Angle)126Object.XDrawPos <<= 13127Object.XDrawPos += Object.XPos128Object.XDrawPos &= 0xFFFF0000 // Truncate the value129DrawSpriteXY(3, Object.XDrawPos, Object.YPos)130DrawSpriteXY(4, Object.XDrawPos, Object.YPos)131DrawSpriteXY(5, Object.XDrawPos, Object.YPos)132DrawSpriteXY(6, Object.XDrawPos, Object.YPos)133break134end switch135end sub136137138sub ObjectStartup139switch HUD.CurrentTimePeriod140case TIME_PRESENT141LoadSpriteSheet("R4/Objects.gif")142TempValue0 = 163143TempValue1 = 1144TempValue2 = 196145break146147case TIME_PAST148LoadSpriteSheet("R4/Objects2.gif")149TempValue0 = 1150TempValue1 = 157151TempValue2 = 34152break153154case TIME_GOOD_FUTURE155LoadSpriteSheet("R4/Objects2.gif")156TempValue0 = 1157TempValue1 = 190158TempValue2 = 34159break160161case TIME_BAD_FUTURE162LoadSpriteSheet("R4/Objects2.gif")163TempValue0 = 1164TempValue1 = 223165TempValue2 = 34166break167end switch168169// R4 Blocks170SpriteFrame(-48, -16, 32, 32, TempValue0, TempValue1)171SpriteFrame(-16, -16, 32, 32, TempValue0, TempValue1)172SpriteFrame(16, -16, 32, 32, TempValue0, TempValue1)173SpriteFrame(-64, -16, 32, 32, TempValue0, TempValue1)174SpriteFrame(-32, -16, 32, 32, TempValue0, TempValue1)175SpriteFrame(0, -16, 32, 32, TempValue0, TempValue1)176SpriteFrame(32, -16, 32, 32, TempValue0, TempValue1)177end sub178179180// ========================181// Editor Subs182// ========================183184sub RSDKEdit185if Editor.ReturnVariable == true186switch Editor.VariableID187case EDIT_VAR_PROPVAL // Property Value188CheckResult = Object.PropertyValue189break190case 0 // blocks191CheckResult = Object.PropertyValue192break193end switch194else195switch Editor.VariableID196case EDIT_VAR_PROPVAL // Property Value197Object.PropertyValue = Editor.VariableValue198break199case 0 // blocks200Object.PropertyValue = Editor.VariableValue201break202end switch203end if204end sub205206207sub RSDKDraw208TempValue2 = Object.PropertyValue209TempValue2 <<= 1210211TempValue1 = Object.PropertyValue212TempValue1++213TempValue1 *= 0x100000214FlipSign(TempValue1)215TempValue1 += Object.XPos216217switch Object.PropertyValue218case ONE_BLOCK219Cos(TempValue0, TempValue2)220TempValue0 <<= 11221TempValue0 += Object.XPos222TempValue0 &= 0xFFFF0000 // Truncate the value223DrawSpriteXY(1, TempValue0, Object.YPos)224DrawArrow(TempValue0, Object.YPos, TempValue1, Object.YPos, 255, 255, 0)225226if Editor.ShowGizmos == true227Editor.DrawingOverlay = true228TempValue4 = Object.XPos229TempValue4 -= 0x200000230TempValue3 = Object.YPos231TempValue3 -= 0x100000232DrawRectOutline(TempValue4, TempValue3, 0x40, 0x20, 255, 255, 255, 255)233DrawRectOutline(TempValue1, TempValue3, 0x20, 0x20, 255, 255, 0, 255)234DrawArrow(TempValue1, Object.YPos, TempValue0, Object.YPos, 255, 255, 255)235Editor.DrawingOverlay = false236end if237break238239case TWO_BLOCKS240Cos(TempValue0, TempValue2)241TempValue0 <<= 12242TempValue0 += Object.XPos243TempValue0 &= 0xFFFF0000 // Truncate the value244DrawSpriteXY(4, TempValue0, Object.YPos)245DrawSpriteXY(5, TempValue0, Object.YPos)246247DrawArrow(TempValue0, Object.YPos, TempValue1, Object.YPos, 255, 255, 0)248249if Editor.ShowGizmos == true250Editor.DrawingOverlay = true251TempValue4 = Object.XPos252TempValue4 -= 0x400000253TempValue3 = Object.YPos254TempValue3 -= 0x100000255DrawRectOutline(TempValue4, TempValue3, 0x80, 0x20, 255, 255, 255, 255)256DrawRectOutline(TempValue1, TempValue3, 0x40, 0x20, 255, 255, 0, 255)257DrawArrow(TempValue1, Object.YPos, TempValue0, Object.YPos, 255, 255, 255)258Editor.DrawingOverlay = false259end if260break261262case THREE_BLOCKS263Cos(TempValue0, TempValue2)264TempValue0 *= 0x1800265TempValue0 += Object.XPos266TempValue0 &= 0xFFFF0000 // Truncate the value267DrawSpriteXY(0, TempValue0, Object.YPos)268DrawSpriteXY(1, TempValue0, Object.YPos)269DrawSpriteXY(2, TempValue0, Object.YPos)270271DrawArrow(TempValue0, Object.YPos, TempValue1, Object.YPos, 255, 255, 0)272273if Editor.ShowGizmos == true274Editor.DrawingOverlay = true275TempValue4 = Object.XPos276TempValue4 -= 0x600000277TempValue3 = Object.YPos278TempValue3 -= 0x100000279DrawRectOutline(TempValue4, TempValue3, 0x80, 0x20, 255, 255, 255, 255)280DrawRectOutline(TempValue1, TempValue3, 0x60, 0x20, 255, 255, 0, 255)281DrawArrow(TempValue1, Object.YPos, TempValue0, Object.YPos, 255, 255, 255)282Editor.DrawingOverlay = false283end if284break285286case FOUR_BLOCKS287Cos(TempValue0, TempValue2)288TempValue0 <<= 13289TempValue0 += Object.XPos290TempValue0 &= 0xFFFF0000 // Truncate the value291DrawSpriteXY(3, TempValue0, Object.YPos)292DrawSpriteXY(4, TempValue0, Object.YPos)293DrawSpriteXY(5, TempValue0, Object.YPos)294DrawSpriteXY(6, TempValue0, Object.YPos)295296DrawArrow(TempValue0, Object.YPos, TempValue1, Object.YPos, 255, 255, 0)297298if Editor.ShowGizmos == true299Editor.DrawingOverlay = true300TempValue4 = Object.XPos301TempValue4 -= 0x800000302TempValue3 = Object.YPos303TempValue3 -= 0x100000304DrawRectOutline(TempValue4, TempValue3, 0xC0, 0x20, 255, 255, 255, 255)305DrawRectOutline(TempValue1, TempValue3, 0x80, 0x20, 255, 255, 0, 255)306DrawArrow(TempValue1, Object.YPos, TempValue0, Object.YPos, 255, 255, 255)307Editor.DrawingOverlay = false308end if309break310end switch311end sub312313314sub RSDKLoad315CallFunction(EditorHelpers_FindTimePeriod)316switch CheckResult317case TIME_PRESENT318LoadSpriteSheet("R4/Objects.gif")319TempValue0 = 163320TempValue1 = 1321TempValue2 = 196322break323324case TIME_PAST325LoadSpriteSheet("R4/Objects2.gif")326TempValue0 = 1327TempValue1 = 157328TempValue2 = 34329break330331case TIME_GOOD_FUTURE332LoadSpriteSheet("R4/Objects2.gif")333TempValue0 = 1334TempValue1 = 190335TempValue2 = 34336break337338case TIME_BAD_FUTURE339LoadSpriteSheet("R4/Objects2.gif")340TempValue0 = 1341TempValue1 = 223342TempValue2 = 34343break344end switch345346// R4 Blocks347SpriteFrame(-48, -16, 32, 32, TempValue0, TempValue1)348SpriteFrame(-16, -16, 32, 32, TempValue0, TempValue1)349SpriteFrame(16, -16, 32, 32, TempValue0, TempValue1)350SpriteFrame(-64, -16, 32, 32, TempValue0, TempValue1)351SpriteFrame(-32, -16, 32, 32, TempValue0, TempValue1)352SpriteFrame(0, -16, 32, 32, TempValue0, TempValue1)353SpriteFrame(32, -16, 32, 32, TempValue0, TempValue1)354355AddEditorVariable("blocks")356SetActiveVariable("blocks")357AddEnumVariable("One block", ONE_BLOCK)358AddEnumVariable("Two blocks", TWO_BLOCKS)359AddEnumVariable("Three blocks", THREE_BLOCKS)360AddEnumVariable("Four blocks", FOUR_BLOCKS)361end sub362363364