コード例 #1
0
        /// <summary>
        /// Shuffle which Robot Master awards which weapon.
        /// </summary>
        public void Randomize(Patch in_Patch, ISeed in_Seed)
        {
            IList <BossRoomRandomComponent> bossRoomComponents = in_Seed.Shuffle(this.Components);

            //DEBUG test a boss in a particular boss room, also comment out the corresponding boss from the Components list above
            //Components.Insert(3, BubbleManComponent);

            // Write in new boss positions
            for (Int32 i = 0; i < 8; i++)
            {
                BossRoomRandomComponent bossroom = bossRoomComponents[i];
                in_Patch.Add(0x02C15E + i, bossroom.IntroValue, $"Boss Intro Value for Boss Room {i}");
                in_Patch.Add(0x02C057 + i, bossroom.AIPtrByte1, $"Boss AI Ptr Byte1 for Boss Room {i}");
                in_Patch.Add(0x02C065 + i, bossroom.AIPtrByte2, $"Boss AI Ptr Byte2 for Boss Room {i}");
                in_Patch.Add(0x02E4E9 + i, bossroom.GfxFix1, $"Boss GFX Fix 1 for Boss Room {i}");
                in_Patch.Add(0x02C166 + i, bossroom.GfxFix1, $"Boss GFX Fix 2 for Boss Room {i}");
                in_Patch.Add(0x02C14E + i, bossroom.YPosFix1, $"Boss Y-Pos Fix1 for Boss Room {i}");
                in_Patch.Add(0x02C156 + i, bossroom.YPosFix2, $"Boss Y-Pos Fix2 for Boss Room {i}");
            }

            // Adjust sprite banks for each boss room
            Int32[] spriteBankBossRoomAddresses =
            {
                0x0034A6, // Heat room
                0x0074A6, // Air room
                0x00B4DC, // Wood room
                0x00F4A6, // Bubble room
                0x0134B8, // Quick room
                0x0174A6, // Flash room
                0x01B494, // Metal room
                0x01F4DC, // Clash room
            };

            for (Int32 i = 0; i < spriteBankBossRoomAddresses.Length; i++)
            {
                for (Int32 j = 0; j < bossRoomComponents[i].SpriteBankSlotRowsBytes.Length; j++)
                {
                    in_Patch.Add(spriteBankBossRoomAddresses[i] + j,
                                 bossRoomComponents[i].SpriteBankSlotRowsBytes[j],
                                 $"Boss Room {i} Sprite Bank Swap {j}");
                }
            }

            // Undo shuffling of damage values for each boss room
            Int32 contactDmgTbl = 0x2E9C2;

            Byte[] originalDmgVals = new Byte[] { 08, 08, 08, 04, 04, 04, 06, 04 };
            Byte[] newDmgVals      = new Byte[8];

            for (Int32 i = 0; i < bossRoomComponents.Count; i++)
            {
                newDmgVals[i] = originalDmgVals[bossRoomComponents[i].OriginalBossIndex];
                in_Patch.Add(contactDmgTbl + i, newDmgVals[i]);
            }


            this.Components = bossRoomComponents;
        }
コード例 #2
0
        public RBossRoom()
        {
            // Initialize BossRoomRandomComponents, and add to "Components" list.
            // This list is still needed even if this module isn't enabled; it just won't get shuffled.
            BossRoomRandomComponent HeatManComponent = new BossRoomRandomComponent(
                original: 0,
                introValue: 0x0F, // 0x02C15E
                aiPtr1: 0xC5,     // 0x02C057
                aiPtr2: 0x80,     // 0x02C065
                gfxfix1: 0x50,    // 0x02E4E9
                gfxfix2: 0x51,    // 0x02C166
                yFix1: 0x09,      // 0x02C14E
                yFix2: 0x0C,      // 0x02C156
                spriteBankSlotRows: new Byte[] {
                0x98, 0x06,
                0x99, 0x06,
                0x9A, 0x06,
                0x9B, 0x06,
                0x9C, 0x06,
                0x9D, 0x06,
            });

            BossRoomRandomComponent AirManComponent = new BossRoomRandomComponent(
                original: 1,
                introValue: 0x0F,
                aiPtr1: 0xE3,
                aiPtr2: 0x82,
                gfxfix1: 0x66,
                gfxfix2: 0x67,
                yFix1: 0x0C,
                yFix2: 0x10,
                spriteBankSlotRows: new Byte[] {
                0xAB, 0x05,
                0xAC, 0x05,
                0xAD, 0x05,
                0xAA, 0x06,
                0xAB, 0x06,
                0xAC, 0x06,
            });

            BossRoomRandomComponent WoodManComponent = new BossRoomRandomComponent(
                original: 2,
                introValue: 0x0B,
                aiPtr1: 0xFB,
                aiPtr2: 0x84,
                gfxfix1: 0x6C,
                gfxfix2: 0x6D,
                yFix1: 0x0F,
                yFix2: 0x10,
                spriteBankSlotRows: new Byte[] {
                0xAC, 0x06,
                0xAD, 0x06,
                0xAE, 0x06,
                0xAF, 0x06,
                0xB0, 0x06,
                0xB1, 0x06,
            });

            BossRoomRandomComponent BubbleManComponent = new BossRoomRandomComponent(
                original: 3,
                introValue: 0x05,
                aiPtr1: 0x56,
                aiPtr2: 0x86,
                gfxfix1: 0x60,
                gfxfix2: 0x61,
                yFix1: 0x0A,
                yFix2: 0x0C,
                spriteBankSlotRows: new Byte[] {
                0x98, 0x07,
                0x99, 0x07,
                0x9A, 0x07,
                0x9B, 0x07,
                0x9C, 0x07,
                0x9D, 0x07,
            });

            BossRoomRandomComponent QuickManComponent = new BossRoomRandomComponent(
                original: 4,
                introValue: 0x09,
                aiPtr1: 0x9E,
                aiPtr2: 0x87,
                gfxfix1: 0x54,
                gfxfix2: 0x55,
                yFix1: 0x09,
                yFix2: 0x0C,
                spriteBankSlotRows: new Byte[] {
                0x90, 0x07,
                0x91, 0x07,
                0x92, 0x07,
                0x93, 0x07,
                0x94, 0x07,
                0x95, 0x07,
            });

            BossRoomRandomComponent FlashManComponent = new BossRoomRandomComponent(
                original: 5,
                introValue: 0x07,
                aiPtr1: 0x56,
                aiPtr2: 0x89,
                gfxfix1: 0x5A,
                gfxfix2: 0x5C,
                yFix1: 0x09,
                yFix2: 0x0C,
                spriteBankSlotRows: new Byte[] {
                0x9E, 0x06,
                0x9F, 0x06,
                0x96, 0x07,
                0x97, 0x07,
                0x9E, 0x07,
                0x9F, 0x07,
            });

            BossRoomRandomComponent MetalManComponent = new BossRoomRandomComponent(
                original: 6,
                introValue: 0x05,
                aiPtr1: 0x20,
                aiPtr2: 0x8B,
                gfxfix1: 0x63,
                gfxfix2: 0x64,
                yFix1: 0x08,
                yFix2: 0x0C,
                spriteBankSlotRows: new Byte[] {
                0xB0, 0x03,
                0xB1, 0x03,
                0xB2, 0x03,
                0xB3, 0x03,
                0xAA, 0x05,
                0xAB, 0x05,
            });

            BossRoomRandomComponent CrashManComponent = new BossRoomRandomComponent(
                original: 7,
                introValue: 0x03,
                aiPtr1: 0xC3,
                aiPtr2: 0x8C,
                gfxfix1: 0x69,
                gfxfix2: 0x6A,
                yFix1: 0x08,
                yFix2: 0x0C,
                spriteBankSlotRows: new Byte[] {
                0xAE, 0x05,
                0xAF, 0x05,
                0xB0, 0x05,
                0xB1, 0x05,
                0xB2, 0x05,
                0xB3, 0x05,
            }
                );

            this.Components = new List <BossRoomRandomComponent>
            {
                HeatManComponent,
                AirManComponent,
                WoodManComponent,
                BubbleManComponent,
                QuickManComponent,
                FlashManComponent,
                MetalManComponent,
                CrashManComponent,
            };
        }
コード例 #3
0
ファイル: RBossRoom.cs プロジェクト: KrissyButt/MM2Random
        /// <summary>
        /// Shuffle which Robot Master awards which weapon.
        /// </summary>
        public void Randomize(Patch Patch, Random r)
        {
            BossRoomRandomComponent HeatManComponent = new BossRoomRandomComponent(
                original: 0,
                introValue: 0x0F, // 0x02C15E
                aiPtr1: 0xC5,     // 0x02C057
                aiPtr2: 0x80,     // 0x02C065
                gfxfix1: 0x50,    // 0x02E4E9
                gfxfix2: 0x51,    // 0x02C166
                yFix1: 0x09,      // 0x02C14E
                yFix2: 0x0C,      // 0x02C156
                spriteBankSlotRows: new byte[] {
                0x98, 0x06,
                0x99, 0x06,
                0x9A, 0x06,
                0x9B, 0x06,
                0x9C, 0x06,
                0x9D, 0x06,
            });

            BossRoomRandomComponent AirManComponent = new BossRoomRandomComponent(
                original: 1,
                introValue: 0x0F,
                aiPtr1: 0xE3,
                aiPtr2: 0x82,
                gfxfix1: 0x66,
                gfxfix2: 0x67,
                yFix1: 0x0C,
                yFix2: 0x10,
                spriteBankSlotRows: new byte[] {
                0xAB, 0x05,
                0xAC, 0x05,
                0xAD, 0x05,
                0xAA, 0x06,
                0xAB, 0x06,
                0xAC, 0x06,
            });

            BossRoomRandomComponent WoodManComponent = new BossRoomRandomComponent(
                original: 2,
                introValue: 0x0B,
                aiPtr1: 0xFB,
                aiPtr2: 0x84,
                gfxfix1: 0x6C,
                gfxfix2: 0x6D,
                yFix1: 0x0F,
                yFix2: 0x10,
                spriteBankSlotRows: new byte[] {
                0xAC, 0x06,
                0xAD, 0x06,
                0xAE, 0x06,
                0xAF, 0x06,
                0xB0, 0x06,
                0xB1, 0x06,
            });

            BossRoomRandomComponent BubbleManComponent = new BossRoomRandomComponent(
                original: 3,
                introValue: 0x05,
                aiPtr1: 0x56,
                aiPtr2: 0x86,
                gfxfix1: 0x60,
                gfxfix2: 0x61,
                yFix1: 0x0A,
                yFix2: 0x0C,
                spriteBankSlotRows: new byte[] {
                0x98, 0x07,
                0x99, 0x07,
                0x9A, 0x07,
                0x9B, 0x07,
                0x9C, 0x07,
                0x9D, 0x07,
            });

            BossRoomRandomComponent QuickManComponent = new BossRoomRandomComponent(
                original: 4,
                introValue: 0x09,
                aiPtr1: 0x9E,
                aiPtr2: 0x87,
                gfxfix1: 0x54,
                gfxfix2: 0x55,
                yFix1: 0x09,
                yFix2: 0x0C,
                spriteBankSlotRows: new byte[] {
                0x90, 0x07,
                0x91, 0x07,
                0x92, 0x07,
                0x93, 0x07,
                0x94, 0x07,
                0x95, 0x07,
            });

            BossRoomRandomComponent FlashManComponent = new BossRoomRandomComponent(
                original: 5,
                introValue: 0x07,
                aiPtr1: 0x56,
                aiPtr2: 0x89,
                gfxfix1: 0x5A,
                gfxfix2: 0x5C,
                yFix1: 0x09,
                yFix2: 0x0C,
                spriteBankSlotRows: new byte[] {
                0x9E, 0x06,
                0x9F, 0x06,
                0x96, 0x07,
                0x97, 0x07,
                0x9E, 0x07,
                0x9F, 0x07,
            });

            BossRoomRandomComponent MetalManComponent = new BossRoomRandomComponent(
                original: 6,
                introValue: 0x05,
                aiPtr1: 0x20,
                aiPtr2: 0x8B,
                gfxfix1: 0x63,
                gfxfix2: 0x64,
                yFix1: 0x08,
                yFix2: 0x0C,
                spriteBankSlotRows: new byte[] {
                0xB0, 0x03,
                0xB1, 0x03,
                0xB2, 0x03,
                0xB3, 0x03,
                0xAA, 0x05,
                0xAB, 0x05,
            });

            BossRoomRandomComponent ClashManComponent = new BossRoomRandomComponent(
                original: 7,
                introValue: 0x03,
                aiPtr1: 0xC3,
                aiPtr2: 0x8C,
                gfxfix1: 0x69,
                gfxfix2: 0x6A,
                yFix1: 0x08,
                yFix2: 0x0C,
                spriteBankSlotRows: new byte[] {
                0xAE, 0x05,
                0xAF, 0x05,
                0xB0, 0x05,
                0xB1, 0x05,
                0xB2, 0x05,
                0xB3, 0x05,
            }
                );

            Components = new List <BossRoomRandomComponent>
            {
                HeatManComponent,
                AirManComponent,
                WoodManComponent,
                BubbleManComponent,
                QuickManComponent,
                FlashManComponent,
                MetalManComponent,
                ClashManComponent,
            };

            Components.Shuffle(r);
            //DEBUG test a boss in a particular boss room, also comment out the corresponding boss from the Components list above
            //Components.Insert(3, BubbleManComponent);

            // Write in new boss positions
            for (int i = 0; i < 8; i++)
            {
                var bossroom = Components[i];
                Patch.Add(0x02C15E + i, bossroom.IntroValue, $"Boss Intro Value for Boss Room {i}");
                Patch.Add(0x02C057 + i, bossroom.AIPtrByte1, $"Boss AI Ptr Byte1 for Boss Room {i}");
                Patch.Add(0x02C065 + i, bossroom.AIPtrByte2, $"Boss AI Ptr Byte2 for Boss Room {i}");
                Patch.Add(0x02E4E9 + i, bossroom.GfxFix1, $"Boss GFX Fix 1 for Boss Room {i}");
                Patch.Add(0x02C166 + i, bossroom.GfxFix1, $"Boss GFX Fix 2 for Boss Room {i}");
                Patch.Add(0x02C14E + i, bossroom.YPosFix1, $"Boss Y-Pos Fix1 for Boss Room {i}");
                Patch.Add(0x02C156 + i, bossroom.YPosFix2, $"Boss Y-Pos Fix2 for Boss Room {i}");
            }

            // Adjust sprite banks for each boss room
            int[] spriteBankBossRoomAddresses = new int[]
            {
                0x0034A6, // Heat room
                0x0074A6, // Air room
                0x00B4DC, // Wood room
                0x00F4A6, // Bubble room
                0x0134B8, // Quick room
                0x0174A6, // Flash room
                0x01B494, // Metal room
                0x01F4DC, // Clash room
            };
            for (int i = 0; i < spriteBankBossRoomAddresses.Length; i++)
            {
                for (int j = 0; j < Components[i].SpriteBankSlotRowsBytes.Length; j++)
                {
                    Patch.Add(spriteBankBossRoomAddresses[i] + j,
                              Components[i].SpriteBankSlotRowsBytes[j],
                              $"Boss Room {i} Sprite Bank Swap {j}");
                }
            }

            // Undo shuffling of damage values for each boss room
            int contactDmgTbl = 0x2E9C2;

            byte[] originalDmgVals = new byte[] { 08, 08, 08, 04, 04, 04, 06, 04 };
            byte[] newDmgVals      = new byte[8];
            for (int i = 0; i < Components.Count; i++)
            {
                newDmgVals[i] = originalDmgVals[Components[i].OriginalBossIndex];
                Patch.Add(contactDmgTbl + i, newDmgVals[i]);
            }
        }