Path: blob/main/Scripts/R6/Semi.txt
1319 views
//-------------------Sonic CD Semi Script---------------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value0 : Object.Timer6#alias Object.Value1 : Object.XVelocity7#alias Object.Value2 : Object.YVelocity8#alias Object.Value3 : Object.XOriginPos9#alias Object.Value4 : Object.YOriginPos1011#alias Object.PropertyValue : Object.Quality1213// States14#alias 0 : SEMI_IDLE15#alias 1 : SEMI_START_FLY16#alias 2 : SEMI_BOMB_THROW17#alias 3 : SEMI_RESET1819// Badnik Quality / Property Values20#alias 0 : GOOD_QUALITY21#alias 1 : BAD_QUALITY2223// Priority24#alias 0 : PRIORITY_BOUNDS25#alias 1 : PRIORITY_ACTIVE262728sub ObjectMain29if Object.OutOfBounds == true30Object.State = SEMI_RESET31Object.Timer = 03233Object.XPos = Object.XOriginPos34Object.YPos = Object.YOriginPos35end if3637switch Object.State38case SEMI_START_FLY39Object.Priority = PRIORITY_ACTIVE4041Object.XPos += Object.XVelocity42Object.YPos += Object.YVelocity4344if Object.Timer < 9645Object.Timer++46else47Object.Timer = 048Object.State++49end if50break5152case SEMI_BOMB_THROW53Object.XPos += Object.XVelocity54if Object.Quality == GOOD_QUALITY55if Object.Timer == 056Object.Timer = 6057CreateTempObject(TypeName[Semi Bomb], 0, Object.XPos, Object.YPos)58Object[TempObjectPos].YPos += 0xC000059else60Object.Timer--61end if62end if63break6465case SEMI_RESET66if Object.OutOfBounds == true67Object.State = SEMI_IDLE68Object.Priority = PRIORITY_BOUNDS69end if70break71end switch7273// Check if this badnik should be a flower74CallFunction(StageSetup_CheckGoodFuture)75end sub767778sub ObjectPlayerInteraction79switch Object.State80case SEMI_IDLE81PlayerObjectCollision(C_TOUCH, -96, -128, 96, 128)82if CheckResult == true83Object.State = SEMI_START_FLY84if Object.XPos > Player.XPos85if Object.Quality == GOOD_QUALITY86Object.XVelocity = 0x1000087Object.YVelocity = -0x800088else89Object.XVelocity = 0xC00090Object.YVelocity = 0x600091end if92else93if Object.Quality == GOOD_QUALITY94Object.XVelocity = -0x1000095Object.YVelocity = -0x800096else97Object.XVelocity = -0xC00098Object.YVelocity = 0x600099end if100end if101end if102break103104case SEMI_START_FLY105case SEMI_BOMB_THROW106#platform: Use_Standalone107PlayerObjectCollision(C_TOUCH, -14, -12, 14, 12)108#endplatform109#platform: Use_Origins110PlayerObjectCollision(C_ENEMY, -14, -12, 14, 12)111#endplatform112if CheckResult == true113CallFunction(Player_BadnikBreak)114end if115break116end switch117end sub118119120sub ObjectDraw121switch Object.State122case SEMI_IDLE123DrawSprite(Object.Quality)124break125126case SEMI_START_FLY127case SEMI_BOMB_THROW128TempValue0 = Object.Frame129TempValue0 >>= 2130131if Object.Quality == GOOD_QUALITY132TempValue0 += 2133else134TempValue0 += 6135end if136137if Object.Frame > 7138Object.Direction = FACING_LEFT139else140Object.Direction = FACING_RIGHT141end if142143DrawSpriteFX(TempValue0, FX_FLIP, Object.XPos, Object.YPos)144Object.Frame++145Object.Frame &= 15146break147end switch148end sub149150151sub ObjectStartup152LoadSpriteSheet("R6/Objects.gif")153154// Good155SpriteFrame(-16, -16, 32, 32, 1, 224) // #0 - Semi156// Bad157SpriteFrame(-16, -16, 32, 32, 158, 166) // #1 - Semi158159// Good Rotation160SpriteFrame(-16, -16, 32, 32, 34, 224) // #2 - Semi Good Rotating frame 0161SpriteFrame(-20, -16, 40, 32, 67, 224) // #3 - Semi Good Rotating frame 1162SpriteFrame(-16, -16, 32, 32, 34, 224) // #4 - Semi Good Rotating frame 2163SpriteFrame(-20, -16, 40, 32, 67, 224) // #5 - Semi Good Rotating frame 3164165// Bad Rotation166SpriteFrame(-16, -16, 32, 32, 108, 224) // #7 - Semi Bad Rotating frame 0167SpriteFrame(-20, -16, 40, 32, 141, 224) // #8 - Semi Bad Rotating frame 1168SpriteFrame(-16, -16, 32, 32, 108, 224) // #9 - Semi Bad Rotating frame 2169SpriteFrame(-20, -16, 40, 32, 141, 224) // #10 - Semi Bad Rotating frame 3170171ArrayPos0 = 32172while ArrayPos0 < 1056173if Object[ArrayPos0].Type == TypeName[Semi]174Object[ArrayPos0].XOriginPos = Object[ArrayPos0].XPos175Object[ArrayPos0].YOriginPos = Object[ArrayPos0].YPos176Object[ArrayPos0].DrawOrder = 5177end if178ArrayPos0++179loop180end sub181182183// ========================184// Editor Subs185// ========================186187sub RSDKEdit188if Editor.ReturnVariable == true189switch Editor.VariableID190case EDIT_VAR_PROPVAL // Property Value191CheckResult = Object.PropertyValue192CheckResult &= 1193break194case 0 // condition195CheckResult = Object.PropertyValue196CheckResult &= 1197break198end switch199else200switch Editor.VariableID201case EDIT_VAR_PROPVAL // Property Value202Object.PropertyValue = Editor.VariableValue203Object.PropertyValue &= 1204break205case 0 // condition206Object.PropertyValue = Editor.VariableValue207Object.PropertyValue &= 1208break209end switch210end if211end sub212213sub RSDKDraw214DrawSprite(Object.PropertyValue)215end sub216217sub RSDKLoad218LoadSpriteSheet("R6/Objects.gif")219220// Good221SpriteFrame(-16, -16, 32, 32, 1, 224) // #0 - Semi222// Bad223SpriteFrame(-16, -16, 32, 32, 158, 166) // #1 - Semi224225AddEditorVariable("condition")226SetActiveVariable("condition")227AddEnumVariable("Good Quality", GOOD_QUALITY)228AddEnumVariable("Bad Quality", BAD_QUALITY)229end sub230231232