Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions FF1Blazorizer/Tabs/AdjustmentsTab.razor
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@

<div class="col2">
<h4>Conveniences</h4>
<CheckBox UpdateAction="@UpdateAction" Id="trackerCheckBox" @bind-Value="Flags.Tracker">In-Game Tracker</CheckBox>
<CheckBox UpdateAction="@UpdateAction" Id="noPartyShuffleCheckBox" @bind-Value="Flags.NoPartyShuffle">No Party Shuffle</CheckBox>
<CheckBox UpdateAction="@UpdateAction" Id="speedHacksCheckBox" @bind-Value="Flags.SpeedHacks">Speed Hacks</CheckBox>
<CheckBox UpdateAction="@UpdateAction" Id="dashCheckBox" @bind-Value="Flags.Dash">Faster Walking Speed</CheckBox>
Expand Down
2 changes: 2 additions & 0 deletions FF1Blazorizer/Tabs/QoLTab.razor
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
<CheckBox UpdateAction="@UpdateAction" Id="uninterruptedMusicCheckBox" @bind-Value="Preferences.UninterruptedMusic">Uninterrupted Music</CheckBox>
<CheckBox UpdateAction="@UpdateAction" Id="lockRespondRateCheckBox" @bind-Value="Preferences.LockRespondRate">Lock Respond Rate</CheckBox>
<IntSlider UpdateAction="@UpdateAction" Indent Min="1" Max="8" Step="1" DisableTooltip IsEnabled="Preferences.LockRespondRate" Id="respondRate" @bind-Value="@Preferences.RespondRate">Respond Rate:</IntSlider>
<CheckBox UpdateAction="@UpdateAction" Id="orbLetterOverlays" @bind-Value="Preferences.OrbLetterOverlays">Overlay Orb Letters</CheckBox>
<CheckBox UpdateAction="@UpdateAction" Id="accessibleSpellNamesCheckBox" @bind-Value="Preferences.AccessibleSpellNames">Accessible Spell Names</CheckBox>
<CheckBox UpdateAction="@UpdateAction" Id="cleanBlursedEquipmentNamesCheckBox" @bind-Value="Preferences.CleanBlursedEquipmentNames">Cleaner Blursed Names</CheckBox>
<CheckBox UpdateAction="@UpdateAction" Id="shopInfoIconsCheckBox" @bind-Value="Preferences.ShopInfoIcons">Shop Information Icons</CheckBox>
Expand All @@ -24,6 +25,7 @@
<CheckBox UpdateAction="@UpdateAction" Id="quickJoy2Reset" @bind-Value="Preferences.QuickJoy2Reset">Quick Controller 2 Reset</CheckBox>
<div class="checkbox-cell"></div>
<h5>Remove Unwanted Features:</h5>
<CheckBox UpdateAction="@UpdateAction" Id="legacyShardDisplay" @bind-Value="Preferences.LegacyShardDisplay">Legacy Shard Display</CheckBox>
<CheckBox UpdateAction="@UpdateAction" Id="renounceAutosortCheckBox" @bind-Value="Preferences.RenounceAutosort">Renounce Autosort</CheckBox>
<CheckBox UpdateAction="@UpdateAction" Id="renounceChestInfoCheckBox" @bind-Value="Preferences.RenounceChestInfo">Renounce Chest Info</CheckBox>
<CheckBox UpdateAction="@UpdateAction" Id="renounceCantHoldRed" @bind-Value="Preferences.RenounceCantHoldRed">Renounce Can't Hold Red</CheckBox>
Expand Down
7 changes: 3 additions & 4 deletions FF1Lib/BankUsageRegister.md
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ ROM: 38000-3BFFF
0E 8DE4-8E10 Fix character stat rendering
OE 9079-90D9 Restore npc manip routines
0E 9273-92A3 Restore map object
0E 94E0-94F0 Moved Magic Menu Finalize Ouput
0E 94E0-94F0 Moved Magic Menu Finalize Output
0E 96B0-96F8 Item Jump Table
0E 9C54-9C7D Exit Boss
0E A360-A3AA Magic Shop Menu QoS
Expand All @@ -198,8 +198,7 @@ ROM: 3C000-3FFFF
0F 8D00-8D53 Autosort
0F 9100-91AC Progressive Scaling
0F B000-B300 Expanded Teleporter tables
0F F100-F200 Encounter RNG Table
0F FCF1-FDF1 Battle RNG Table


ROM: 40000-43FFF
10 8000-BFFF Dialogues (whole bank is reserved)
Expand Down Expand Up @@ -304,7 +303,7 @@ ROM: 74000-77FFF
ROM: 78000-7BFFF
1E 8000-85B0 Moving routines from bank 0E to 1E (PartyGen and menu stuff)
1E 806B-8070 Battlestep to SRAM Jump
1E 85B0-85C1 Parry Permissions table
1E 85B0-85C1 Party Permissions table
1E 8680-86A7 New Icons routine
1E 86E0-B9F1 Encounter Table True PRNG
1E 8800-8933 Class Info Window
Expand Down
45 changes: 35 additions & 10 deletions FF1Lib/BlackOrb.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ private void BlackOrbMode(TalkRoutines talkRoutines, DialogueData dialogues, Fla
{
if (((bool)flags.Treasures) && flags.ShardHunt)
{
EnableShardHunt(rng, TalkRoutines, Dialogues, flags.ShardCount, pref.randomShardNames, flags.SpookyFlag, funRng);
EnableShardHunt(rng, TalkRoutines, Dialogues, flags.ShardCount, pref.randomShardNames, flags.SpookyFlag, pref.LegacyShardDisplay, funRng);
}

if (!flags.ShardHunt && (flags.GameMode != GameModes.DeepDungeon))
Expand All @@ -46,14 +46,27 @@ private void BlackOrbMode(TalkRoutines talkRoutines, DialogueData dialogues, Fla
"JEWEL", "PIECE", "CHUNK", "PRISM", "STONE", "SLICE", "WEDGE", "BIGGS", "SLIVR", "ORBLT", "ESPER", "FORCE",
};

public void addShardIcon(int bank, int address)
public async Task AddShardGraphics(int bank, int address, bool legacyShardDisplay, bool orbGraphicsInResourcePack)
{
// Replace the upper two tiles of the unlit orb with an empty and found shard.
// These are at tile address $76 and $77 respectively.
PutInBank(bank, address, Blob.FromHex("001C22414141221CFFE3DDBEBEBEDDE3001C3E7F7F7F3E1CFFFFE3CFDFDFFFFF"));
Console.WriteLine("Entering AddShardGraphics");
if (legacyShardDisplay)
{
// Replace the upper two tiles of the unlit orb with an empty and found shard.
// These are at tile address $76 and $77 respectively.
PutInBank(bank, address + 0x760, Blob.FromHex("001C22414141221CFFE3DDBEBEBEDDE3001C3E7F7F7F3E1CFFFFE3CFDFDFFFFF"));
}
else if (!orbGraphicsInResourcePack)
{
Console.WriteLine("AddShardGraphics Step 2");
var assembly = System.Reflection.Assembly.GetExecutingAssembly();
var shardGraphicsFile = assembly.GetManifestResourceNames()
.Single(str => str.EndsWith("orbs_shards.png"));
var shardGraphicsStream = assembly.GetManifestResourceStream(shardGraphicsFile);
await SetCustomOrbGraphics(shardGraphicsStream, bank, address + 0x640);
}
}

public void EnableShardHunt(MT19337 rng, TalkRoutines talkroutines, DialogueData dialogues, ShardCount count, bool RandomShardNames, bool skipFlavorText, MT19337 funRngSeed)
public void EnableShardHunt(MT19337 rng, TalkRoutines talkroutines, DialogueData dialogues, ShardCount count, bool RandomShardNames, bool skipFlavorText, bool LegacyShardDisplay, MT19337 funRngSeed)
{
int goal = 16;
switch (count) {
Expand All @@ -76,12 +89,24 @@ public void EnableShardHunt(MT19337 rng, TalkRoutines talkroutines, DialogueData
ItemsText[(int)Item.Shard] = shardName;

//addShardIcon(0xD, 0xB760);
if (LegacyShardDisplay)
{
int ppu = 0x2043;
ppu = ppu + (goal <= 24 ? 0x20 : 0x00);

int ppu = 0x2043;
ppu = ppu + (goal <= 24 ? 0x20 : 0x00);
// Fancy shard drawing code, see 0E_B8D7_DrawShardBox.asm
Put(0x3B87D, Blob.FromHex($"A9{ppu & 0xFF:X2}8511A9{(ppu & 0xFF00) >> 8:X2}8512A977A00048AD0220A5128D0620A51118692085118D0620900DAD0220E612A5128D0620A5118D062068A200CC3560D002A976C0{goal:X2}D001608D0720C8E8E006D0EB1890C1"));
}
else
{
byte[] ShardGoal = [(byte)goal, (byte)(goal/10 + 0x80), (byte)(goal%10 + 0x80)];
// New shard display
PutInBank(0x0E,0xBAA2,Blob.FromHex("01010A09"));
PutInBank(0x0E,0xB8A5,Blob.FromHex("A9A448A90248A91B4C03FEEAEAEAEAEAEAEA"));
PutInBank(0x1B,0xA400,ShardGoal);
PutInBank(0x1B,0xA403,Blob.FromHex("AD0220A9238D0620A9C98D0620A5178D0720A200A9639D106EE8A000AD3560C90AB00CA9FF9D106EE8AD35604C43A4C838E90AC90AB0F8489809809D106EE86809809D106EE8A97A9D106EE8AD01A49D106EE8AD02A49D106EA903853AA902853B20ABDCA200A9068510BD106EAC0220A4558C0620A4548C06208D0720E8E654C610D0E6A93FAC0220A0238C0620A0C08C06208D0720AD3560CD00A49012A9CFAC0220A0238C0620A0C18C06208D0720A90E4C03FE"));

// Fancy shard drawing code, see 0E_B8D7_DrawShardBox.asm
Put(0x3B87D, Blob.FromHex($"A9{ppu & 0xFF:X2}8511A9{(ppu & 0xFF00) >> 8:X2}8512A977A00048AD0220A5128D0620A51118692085118D0620900DAD0220E612A5128D0620A5118D062068A200CC3560D002A976C0{goal:X2}D001608D0720C8E8E006D0EB1890C1"));
}

// Black Orb Override to check for shards rather than ORBs.
BlackOrbChecksShardsCountFor(goal,talkroutines);
Expand Down
32 changes: 18 additions & 14 deletions FF1Lib/Classes/Lockpicking.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,35 +6,39 @@ public void EnableLockpicking()
{
//put in the base hack: see 1B_9300_LockpickDoors.asm for more info
PutInBank(0x1F, 0xCE53, Blob.FromHex("AA9848A91B2003FE200093C00168A88AB0ED"));
PutInBank(0x1B, 0x9300, Blob.FromHex("8A4A2903C902D059A2008645AE2560D050AE2661E009900BAE0061E001F042E007F03EAE6661E009900BAE4061E001F030E007F02CAEA661E009900BAE8061E001F01EE007F01AAEE661E009900BAEC061E001F00CE007F008A001AAA90E4C03FEA000AAA90E4C03FE"));
PutInBank(0x1B,0x9300,Blob.FromHex("8A4A29038D036EC902D026A2008645AE2560D01DA2008E046E204093A240204093A280204093A2C02040934901A84C3393A000AE036EA90E4C03FE00000E0107BD2661CD3D93900DBD0061CD3E93F009CD3F93F004A900F002A901A80D046E8D046E60"));
// PutInBank(0x1B, 0x9300, Blob.FromHex("8A4A2903C902D059A2008645AE2560D050AE2661E009900BAE0061E001F042E007F03EAE6661E009900BAE4061E001F030E007F02CAEA661E009900BAE8061E001F01EE007F01AAEE661E009900BAEC061E001F00CE007F008A001AAA90E4C03FEA000AAA90E4C03FE"));
}

public void SetLockpickingLevel(int requiredLevel)
{
//overlay the level requirement
if (requiredLevel > 0 && requiredLevel <= 50)
{
//level is stored zero based
PutInBank(0x1B, 0x9315, new byte[] { (byte)(requiredLevel - 1) });
PutInBank(0x1B, 0x9327, new byte[] { (byte)(requiredLevel - 1) });
PutInBank(0x1B, 0x9339, new byte[] { (byte)(requiredLevel - 1) });
PutInBank(0x1B, 0x934B, new byte[] { (byte)(requiredLevel - 1) });
// //level is stored zero based
// PutInBank(0x1B, 0x9315, new byte[] { (byte)(requiredLevel - 1) });
// PutInBank(0x1B, 0x9327, new byte[] { (byte)(requiredLevel - 1) });
// PutInBank(0x1B, 0x9339, new byte[] { (byte)(requiredLevel - 1) });
// PutInBank(0x1B, 0x934B, new byte[] { (byte)(requiredLevel - 1) });
PutInBank(0x1B, 0x933D, (byte)(requiredLevel - 1));
}
}

public void SetLockpickingClass(int requiredClass)
{
if (requiredClass >= 0 && requiredClass < 6)
{
PutInBank(0x1B, 0x9315 + 7, new byte[] { (byte)(requiredClass) });
PutInBank(0x1B, 0x9327 + 7, new byte[] { (byte)(requiredClass) });
PutInBank(0x1B, 0x9339 + 7, new byte[] { (byte)(requiredClass) });
PutInBank(0x1B, 0x934B + 7, new byte[] { (byte)(requiredClass) });
// PutInBank(0x1B, 0x9315 + 7, new byte[] { (byte)(requiredClass) });
// PutInBank(0x1B, 0x9327 + 7, new byte[] { (byte)(requiredClass) });
// PutInBank(0x1B, 0x9339 + 7, new byte[] { (byte)(requiredClass) });
// PutInBank(0x1B, 0x934B + 7, new byte[] { (byte)(requiredClass) });

PutInBank(0x1B, 0x9315 + 11, new byte[] { (byte)(requiredClass + 6) });
PutInBank(0x1B, 0x9327 + 11, new byte[] { (byte)(requiredClass + 6) });
PutInBank(0x1B, 0x9339 + 11, new byte[] { (byte)(requiredClass + 6) });
PutInBank(0x1B, 0x934B + 11, new byte[] { (byte)(requiredClass + 6) });
// PutInBank(0x1B, 0x9315 + 11, new byte[] { (byte)(requiredClass + 6) });
// PutInBank(0x1B, 0x9327 + 11, new byte[] { (byte)(requiredClass + 6) });
// PutInBank(0x1B, 0x9339 + 11, new byte[] { (byte)(requiredClass + 6) });
// PutInBank(0x1B, 0x934B + 11, new byte[] { (byte)(requiredClass + 6) });
PutInBank(0x1B, 0x933E, (byte)requiredClass);
PutInBank(0x1B, 0x933F, (byte)(requiredClass + 6));
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions FF1Lib/FF1Lib.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@
<EmbeddedResource Include="imagedata\icons\weapon_icons.png" />
<EmbeddedResource Include="imagedata\icons\spell_icons.png" />
<EmbeddedResource Include="imagedata\icons\elementstatus_icons.png" />
<EmbeddedResource Include="imagedata\icons\tracker_icons.png" />
<EmbeddedResource Include="imagedata\icons\orbs_shards.png" />

<EmbeddedResource Include="imagedata\customclasses\*.png" />

Expand Down
12 changes: 9 additions & 3 deletions FF1Lib/FF1Text.cs
Original file line number Diff line number Diff line change
Expand Up @@ -561,7 +561,7 @@ public static Blob TextToCopyrightLine(string text)
}

// Loads custom icons
public static void AddNewIcons(FF1Rom rom, Flags flags)
public static async Task AddNewIcons(FF1Rom rom, Flags flags, Preferences preferences, ResourcePackSettings resourcePackSettings)
{
// Icons have a 0x10 Control code indicating the next byte is pulled from the 0x00-0x7F tile reference instead of the 0x80-0xFF like regular fonts

Expand All @@ -578,8 +578,14 @@ public static void AddNewIcons(FF1Rom rom, Flags flags)
var tileset = rom.GetFromBank(0x0D, 0xB600, 0x0200); // Get font tileset
rom.PutInBank(0x12, 0x8800 + 0x600, tileset); // Put it in bank 12

if (flags.ShardHunt)
rom.addShardIcon(0x12, 0x8800 + 0x760); // If we're shard hunt, add the shard to tiles 0x76 and 0x77 because we missed em
if ((bool)flags.Treasures && flags.ShardHunt)
await rom.AddShardGraphics(0x12, 0x8800, preferences.LegacyShardDisplay, resourcePackSettings.OrbGraphics); // If we're in shard hunt, add the shard graphics.

if (flags.Tracker)
rom.AddTrackerIcons(flags);

if (preferences.OrbLetterOverlays)
rom.AddOrbLetterOverlays();

// Change where the ORBS are loaded from and to so we can piggyback our icons - Now we load 8 lines from Bank 12 into 0000 of the PPU
rom.PutInBank(0x1F, 0xEA9F, Blob.FromHex("2002EAA9122003FEA208A9008510A9888511A900"));
Expand Down
1 change: 1 addition & 0 deletions FF1Lib/Flags/Flags.cs
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,7 @@ public partial class Flags : IIncentiveFlags, IScaleFlags, IVictoryConditionFlag
public bool NPCSwatter { get; set; } = false;
public bool BattleMagicMenuWrapAround { get; set; } = false;
public bool MagicMenuSpellReordering { get; set; } = true;
public bool Tracker { get; set; } = true;
public bool InventoryAutosort { get; set; } = true;
public bool RepeatedPotionUse { get; set; } = true;
public bool AutoRetargeting { get; set; } = true;
Expand Down
3 changes: 3 additions & 0 deletions FF1Lib/Flags/FlagsCompute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -273,5 +273,8 @@ public LoosePlacementMode LoosePlacementMode

public bool IsAnythingLoose => (IncentivizedItemCountMax > IncentivizedLocationCountMin) || IncentivizeMainItems != true || IncentivizeFetchItems != true || (IncentivizeAirship != true && FreeAirship != true && NoFloater != true) || (IncentivizeCanoeItem != true && FreeCanoe != true) || (IncentivizeShipAndCanal != true && (FreeShip != true || FreeCanal != true)) || (IncentivizeBridgeItem != true && FreeBridge != true) || (IncentivizeTail != true && FreeTail != true && NoTail != true);


// changed in the randomizer, not in UI
public bool OrbGraphicsInResourcePack { get; set; } = false;
}
}
8 changes: 8 additions & 0 deletions FF1Lib/Flags/Preferences.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,12 @@ public class Preferences
public bool randomShardNames { get; set; } = false;
public Fate HurrayDwarfFate { get; set; } = Fate.Spare;
public bool FunFountainText { get; set; } = false;
public bool LegacyShardDisplay { get; set; } = false;
public bool RenounceAutosort { get; set; } = false;
public bool RenounceChestInfo { get; set; } = false;
public bool RenounceCantHoldRed { get; set; } = false;
public bool AccessibleSpellNames { get; set; } = false;
public bool OrbLetterOverlays { get; set; } = false;
public bool CleanBlursedEquipmentNames { get; set; } = false;
public bool ShopInfoIcons { get; set; } = false;
public bool MagicShopMenuChange { get; set; } = false;
Expand All @@ -55,4 +57,10 @@ public class Preferences
public bool NegativeHarmony { get; set; } = false;
public bool MapDerp { get; set; } = false;
}

public class ResourcePackSettings
{

public bool OrbGraphics{ get; set; } = false;
}
}
21 changes: 13 additions & 8 deletions FF1Lib/GlobalImprovements.cs
Original file line number Diff line number Diff line change
Expand Up @@ -125,16 +125,21 @@ public void EnableBuyQuantity(bool archipelagoenabled)
Put(0x39E00, Blob.FromHex("ad0a0385104c668eae0c03bd2060186d0a03c9649001609d206060a903203baaa9018d0a03a520290f856120909f2032aa2043a7a525d056a524d05aa520290fc561f0ed8561c900f0e7c904f02fc908f01ac901f00ace0a03d0d0ee0a03d0cbee0a03c964d0c4ce0a03d0bfad0a0318690a8d0a03c96490b2a96310f5ad0a0338e90af0021002a9018d0a03109d38a90085248525601890f6"));
Put(0x39E99, Blob.FromHex("a90e205baaa5620a0a0a186916aabd00038d0c0320b9ecae0a03a9008d0b038d0e038d0f0318ad0b0365108d0b03ad0e0365118d0e03ad0f0369008d0f03b005caf00dd0e1a9ff8d0b038d0e038d0f03ad0f038512ad0e038511ad0b03851020429f2032aa60"));
Put(0x39EFF, Blob.FromHex("ad1e60cd0f03f0049016b016ad1d60cd0e03f004900ab00aad1c60cd0b03b00238601860ad1c6038ed0b038d1c60ad1d60ed0e038d1d60ad1e60ed0f038d1e604cefa74c8e8e"));
Put(0x3A494, Blob.FromHex("201b9eb0e820999e20c2a8b0e0a562d0dc20ff9e9008a910205baa4c81a420089e9008a90c205baa4c81a420239fa913205baa4c81a4eaeaea"));
Put(0x3A494, Blob.FromHex("201b9eb0e820999e20c2a8b0e0a562d0dc20ff9e9008a910205baa4c81a420489f9008a90c205baa4c81a420239fa913205baa4c81a4eaeaea"));

PutInBank(0x0E, 0x9F90, Blob.FromHex("A5620A0A0A186916A8BE0003BC2060AD0A038CEF6A186DEF6AE963300EA963EDEF6AF0021002A9018D0A034C009E"));

if (archipelagoenabled)
{
//Replace NewCheckforSpace with patch in 0E_9F48_ItemShopCheckForSpace.asm
PutInBank(0x0E, 0xA4B2, Blob.FromHex("20489F"));
PutInBank(0x0E, 0x9F48, Blob.FromHex("AE0C03E016900CBD2060186D0A03C964900D60A2FFBD006209029D006218609D20601860"));
}



//Replace NewCheckforSpace with patch in 0E_9F48_ItemShopCheckForSpace.asm
/// in AP we want this asm routine to return before adding the item-shop key item to inventory, and let the client do that.
/// in normal seeds, we need to give the item instead, so we NOP out a return.

byte APReturnByte = archipelagoenabled? (byte)0x60 : (byte)0xEA;
// This is no longer needed -- added to the Blob string above. Do a search for 20489f to find it
//PutInBank(0x0E, 0xA4B2, Blob.FromHex("20489F"));
//PutInBank(0x0E, 0x9F48, Blob.FromHex($"AE0C03E016900CBD2060186D0A03C964900D60A0FFB90062090299006218{APReturnByte:X2}9D20601860"));
PutInBank(0x0E,0x9F48,Blob.FromHex($"AE0C03E016B00CA0FFB90062090299006218{APReturnByte:X2}BD2060186D0A03C9649001609D20601860"));
}

public void ChangeUnrunnableRunToWait()
Expand Down
5 changes: 3 additions & 2 deletions FF1Lib/Hacks.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,12 @@ private void MiscHacks(Flags flags, MT19337 rng)
EnableCanalBridge((bool)flags.MapCanalBridge);
}

public void DeepDungeonFloorIndicator()
public void DeepDungeonFloorIndicator(Flags flags, Preferences preferences)
{
byte FloorIndicatorDestY = (flags.ShardHunt && !preferences.LegacyShardDisplay) ? (byte)0x08 : (byte)0x02;
// Add Current Floor indicator above orbs, see 0E_9850_DrawOrbFloor.asm
PutInBank(0x0E, 0xB83D, Blob.FromHex("205098"));
PutInBank(0x0E, 0x9850, Blob.FromHex("2078B8A548C93CB018C908900638E9074C7398A8B9A698855AB9AE98855B4C8398A900851020668EA000B13E855AC8B13E855BA97A855CA985855DA982855EA900855FA95A853EA900853FA902853BA904853A4C44B98C998E968C909895B2B5AFA8B5A4B1A8"));
PutInBank(0x0E, 0x9850, Blob.FromHex($"2078B8A548C93CB018C908900638E9074C7398A8B9A698855AB9AE98855B4C8398A900851020668EA000B13E855AC8B13E855BA97A855CA985855DA982855EA900855FA95A853EA900853FA9{FloorIndicatorDestY:X2}853BA904853A4C44B98C998E968C909895B2B5AFA8B5A4B1A8"));
// Extend Orb Box
PutInBank(0x0E, 0xBAA2, Blob.FromHex("02010809"));
}
Expand Down
Loading