Example #1
0
        public void savemapstoromNEW(MapSave[] allmaps)
        {
            int pos        = 0x19FE20;
            int pointerPos = 0x19FE20;

            for (int i = 0; i < 159; i++)
            {
                pointerPos = 0x19FE20 + (i * 3);
                pos        = 0x1A0000 + (i * 2048);
                int snesPos = Addresses.pctosnes(pos);
                ROM.DATA[pointerPos + 0] = (byte)(snesPos & 0xFF);
                ROM.DATA[pointerPos + 1] = (byte)((snesPos >> 8) & 0xFF);
                ROM.DATA[pointerPos + 2] = (byte)((snesPos >> 16) & 0xFF);

                for (int y = 0; y < 32; y++)
                {
                    for (int x = 0; x < 32; x++)
                    {
                        ROM.DATA[pos + 1] = (byte)((allmaps[i].tiles[x, y] >> 8) & 0xFF);
                        ROM.DATA[pos]     = (byte)((allmaps[i].tiles[x, y]) & 0xFF);
                        pos += 2;
                    }
                }
            }
        }
Example #2
0
        public void savemapstorom()
        {
            int pos = 0x1A0000;

            for (int i = 0; i < 160; i++)
            {
                int npos = 0;
                byte[]
                singlemap1 = new byte[256],
                singlemap2 = new byte[256];
                for (int y = 0; y < 16; y++)
                {
                    for (int x = 0; x < 16; x++)
                    {
                        singlemap1[npos] = (byte)(t32[npos + (i * 256)] & 0xFF);
                        singlemap2[npos] = (byte)((t32[npos + (i * 256)] >> 8) & 0xFF);
                        npos++;
                    }
                }

                int snesPos = Addresses.pctosnes(pos);
                ROM.DATA[(ConstantsReader.GetAddress("compressedAllMap32PointersHigh")) + 0 + (int)(3 * i)] = (byte)(snesPos & 0xFF);
                ROM.DATA[(ConstantsReader.GetAddress("compressedAllMap32PointersHigh")) + 1 + (int)(3 * i)] = (byte)((snesPos >> 8) & 0xFF);
                ROM.DATA[(ConstantsReader.GetAddress("compressedAllMap32PointersHigh")) + 2 + (int)(3 * i)] = (byte)((snesPos >> 16) & 0xFF);

                ROM.DATA[pos]     = 0xE0;
                ROM.DATA[pos + 1] = 0xFF;
                pos += 2;
                for (int j = 0; j < 256; j++)
                {
                    ROM.DATA[pos] = singlemap2[j];
                    pos          += 1;
                }
                ROM.DATA[pos] = 0xFF;
                pos          += 1;
                snesPos       = Addresses.pctosnes(pos);
                ROM.DATA[(ConstantsReader.GetAddress("compressedAllMap32PointersLow")) + 0 + (int)(3 * i)] = (byte)((snesPos >> 00) & 0xFF);
                ROM.DATA[(ConstantsReader.GetAddress("compressedAllMap32PointersLow")) + 1 + (int)(3 * i)] = (byte)((snesPos >> 08) & 0xFF);
                ROM.DATA[(ConstantsReader.GetAddress("compressedAllMap32PointersLow")) + 2 + (int)(3 * i)] = (byte)((snesPos >> 16) & 0xFF);

                ROM.DATA[pos]     = 0xE0;
                ROM.DATA[pos + 1] = 0xFF;
                pos += 2;
                for (int j = 0; j < 256; j++)
                {
                    ROM.DATA[pos] = singlemap1[j];
                    pos          += 1;
                }
                ROM.DATA[pos] = 0xFF;
                pos          += 1;
            }
            Console.WriteLine();
            Save32Tiles();
        }
Example #3
0
        public void LoadOverworldSprites()
        {
            Room_Sprite[][] all_spritesOW = new Room_Sprite[3][];
            all_spritesOW[0] = JsonConvert.DeserializeObject <Room_Sprite[]>(File.ReadAllText(path + @"//Overworld//Sprites//Beginning Sprites.json"));
            all_spritesOW[1] = JsonConvert.DeserializeObject <Room_Sprite[]>(File.ReadAllText(path + @"//Overworld//Sprites//ZeldaRescued Sprites.json"));
            all_spritesOW[2] = JsonConvert.DeserializeObject <Room_Sprite[]>(File.ReadAllText(path + @"//Overworld//Sprites//AgahnimDefeated Sprites.json"));

            //Restore sprites by room //64, 143
            for (int i = 0; i < 64; i++)
            {
                roomSpritesBeginning[i] = new List <Room_Sprite>();
                for (int j = 0; j < all_spritesOW[0].Length; j++)
                {
                    if (all_spritesOW[0][j].roomMapId == i)
                    {
                        roomSpritesBeginning[i].Add(all_spritesOW[0][j]);
                    }
                }
            }

            for (int i = 0; i < 143; i++)
            {
                roomSpritesZelda[i]   = new List <Room_Sprite>();
                roomSpritesAgahnim[i] = new List <Room_Sprite>();

                for (int j = 0; j < all_spritesOW[1].Length; j++)
                {
                    if (all_spritesOW[1][j].roomMapId == i)
                    {
                        roomSpritesZelda[i].Add(all_spritesOW[1][j]);
                    }
                }

                for (int j = 0; j < all_spritesOW[2].Length; j++)
                {
                    if (all_spritesOW[2][j].roomMapId == i)
                    {
                        roomSpritesAgahnim[i].Add(all_spritesOW[2][j]);
                    }
                }
            }



            //data location range spritedata = AED length : 2797
            //0x4CB41 starting data location (1st is just a FF for empty pointers)
            //real starting location = 0x4CB42
            //ROM.DATA[0x4CB41] = 0xFF;//Ensure the first data is a return so maps with no sprites can use that
            ROM.DATA[(0x1F0001 + DataOffset)] = 0xFF; ROM.DATA[(0x1F0000 + DataOffset)] = 0xFF;
            int emptyPointer = 0x0000;

            int dataPos = (0x1F0002 + DataOffset);
            //int dataPos = 0x4CB42;
            int beginningPointers = ConstantsReader.GetAddress("overworldSpritesBegining");
            int zeldaPointers     = ConstantsReader.GetAddress("overworldSpritesZelda");
            int agahnimPointers   = ConstantsReader.GetAddress("overworldSpritesAgahnim");

            for (int i = 0; i < 64; i++)
            {
                if (roomSpritesBeginning[i].Count != 0)
                {
                    int snesaddr = Addresses.pctosnes(dataPos);
                    ROM.DATA[beginningPointers + (i * 2) + 1] = (byte)((snesaddr >> 8) & 0xFF);
                    ROM.DATA[beginningPointers + (i * 2)]     = (byte)((snesaddr) & 0xFF);
                    foreach (Room_Sprite spr in roomSpritesBeginning[i])
                    {
                        byte b1 = spr.y;
                        byte b2 = spr.x;
                        byte b3 = spr.id;
                        ROM.DATA[dataPos++] = b1;
                        ROM.DATA[dataPos++] = b2;
                        ROM.DATA[dataPos++] = b3;
                    }
                    //add FF to end the room
                    ROM.DATA[dataPos++] = 0xFF;

                    if (dataPos >= ((0x1F1200 + DataOffset)))
                    {
                        Console.WriteLine("Too many Overworld sprites !");
                        break;
                    }
                }
                else
                {
                    int snesaddr = Addresses.pctosnes(emptyPointer);
                    ROM.DATA[beginningPointers + (i * 2) + 1] = (byte)((snesaddr >> 8) & 0xFF);
                    ROM.DATA[beginningPointers + (i * 2)]     = (byte)((snesaddr) & 0xFF);
                }
            }

            for (int i = 0; i < 143; i++)
            {
                if (roomSpritesZelda[i].Count != 0)
                {
                    int snesaddr = Addresses.pctosnes(dataPos);
                    ROM.DATA[zeldaPointers + (i * 2) + 1] = (byte)((snesaddr >> 8) & 0xFF);
                    ROM.DATA[zeldaPointers + (i * 2)]     = (byte)((snesaddr) & 0xFF);
                    foreach (Room_Sprite spr in roomSpritesZelda[i])
                    {
                        byte b1 = spr.y;
                        byte b2 = spr.x;
                        byte b3 = spr.id;
                        ROM.DATA[dataPos++] = b1;
                        ROM.DATA[dataPos++] = b2;
                        ROM.DATA[dataPos++] = b3;
                    }
                    //add FF to end the room
                    ROM.DATA[dataPos++] = 0xFF;

                    if (dataPos >= (0x1F1200 + DataOffset))
                    {
                        Console.WriteLine("Too many Overworld sprites ! (Zelda)");
                        break;
                    }
                }
                else
                {
                    int snesaddr = Addresses.pctosnes(emptyPointer);
                    ROM.DATA[zeldaPointers + (i * 2) + 1] = (byte)((snesaddr >> 8) & 0xFF);
                    ROM.DATA[zeldaPointers + (i * 2)]     = (byte)((snesaddr) & 0xFF);
                }
            }


            for (int i = 0; i < 143; i++)
            {
                if (roomSpritesAgahnim[i].Count != 0)
                {
                    int snesaddr = Addresses.pctosnes(dataPos);
                    ROM.DATA[agahnimPointers + (i * 2) + 1] = (byte)((snesaddr >> 8) & 0xFF);
                    ROM.DATA[agahnimPointers + (i * 2)]     = (byte)((snesaddr) & 0xFF);
                    foreach (Room_Sprite spr in roomSpritesAgahnim[i])
                    {
                        byte b1 = spr.y;
                        byte b2 = spr.x;
                        byte b3 = spr.id;
                        ROM.DATA[dataPos++] = b1;
                        ROM.DATA[dataPos++] = b2;
                        ROM.DATA[dataPos++] = b3;
                    }
                    //add FF to end the room
                    ROM.DATA[dataPos++] = 0xFF;

                    if (dataPos >= (0x1F1200 + DataOffset))
                    {
                        Console.WriteLine("Too many Overworld sprites ! (Agah) room : " + i);
                        break;
                    }
                }
                else
                {
                    int snesaddr = Addresses.pctosnes(emptyPointer);
                    ROM.DATA[agahnimPointers + (i * 2) + 1] = (byte)((snesaddr >> 8) & 0xFF);
                    ROM.DATA[agahnimPointers + (i * 2)]     = (byte)((snesaddr) & 0xFF);
                }
            }
        }
Example #4
0
        public void LoadOverworldItems()
        {
            roomPotSave[]        items     = JsonConvert.DeserializeObject <roomPotSave[]>(File.ReadAllText(path + @"//Overworld//Items//Items.json"));
            List <roomPotSave>[] roomItems = new List <roomPotSave> [128];

            for (int i = 0; i < 128; i++)
            {
                roomItems[i] = new List <roomPotSave>();
                for (int j = 0; j < items.Length; j++)
                {
                    if (i == items[j].roomMapId)
                    {
                        roomItems[i].Add(items[j]);
                    }
                }
            }

            ROM.DATA[(0x1F1201 + DataOffset)] = 0xFF; ROM.DATA[(0x1F1202 + DataOffset)] = 0xFF;
            short emptyPointer = 0x1201;
            int   dataPos      = (0x1F1203 + DataOffset);

            int pointeraddr = ConstantsReader.GetAddress("overworldItemsPointers");

            for (int i = 0; i < 128; i++)
            {
                if (roomItems[i].Count != 0)
                {
                    int snesaddr = Addresses.pctosnes(dataPos);
                    ROM.DATA[pointeraddr + (i * 2) + 1] = (byte)((snesaddr >> 8) & 0xFF);
                    ROM.DATA[pointeraddr + (i * 2)]     = (byte)((snesaddr) & 0xFF);
                    foreach (roomPotSave item in roomItems[i])
                    {
                        //Console.WriteLine(item.x);

                        short mapPos = (short)(((item.y << 6) + item.x) << 1);

                        byte b1 = (byte)((mapPos >> 8)); //1111 1111 0000 0000
                        byte b2 = (byte)(mapPos & 0xFF); //0000 0000 1111 1111
                        byte b3 = (byte)(item.id);

                        ROM.DATA[dataPos++] = b2;
                        ROM.DATA[dataPos++] = b1;
                        ROM.DATA[dataPos++] = b3;
                    }
                    ROM.DATA[dataPos++] = 0xFF;
                    ROM.DATA[dataPos]   = 0xFF;
                    if (dataPos >= (0x1F2800 + DataOffset))
                    {
                        Console.WriteLine("Too many Overworld items !");
                        break;
                    }
                    dataPos++;
                }
                else
                {
                    int snesaddr = Addresses.pctosnes(emptyPointer);
                    ROM.DATA[pointeraddr + (i * 2) + 1] = (byte)((snesaddr >> 8) & 0xFF);
                    ROM.DATA[pointeraddr + (i * 2)]     = (byte)((snesaddr) & 0xFF);
                    //Save Empty Pointer
                }
            }
        }
Example #5
0
        public void loadOverworldOverlays()
        {
            //first one == 0xFF 0xFF for the empty
            int dataPos  = ConstantsReader.GetAddress("overlayNewCode"); //empty pointer = overlayNewCode
            int emptyPos = ConstantsReader.GetAddress("overlayNewCode");;

            ROM.DATA[dataPos++] = 0xFF;
            ROM.DATA[dataPos++] = 0xFF;
            List <OverlayData>[] overlaysData = JsonConvert.DeserializeObject <List <OverlayData>[]>(File.ReadAllText(path + @"//Overworld//Overlays.json"));
            int pointeraddr = ConstantsReader.GetAddress("overlayPointers");

            for (int i = 0; i < 128; i++)
            {
                if (vanillaOverlays[i] == true)
                {
                    int snesaddr = Addresses.pctosnes(dataPos);
                    ROM.DATA[pointeraddr + (i * 2) + 1] = (byte)((snesaddr >> 8) & 0xFF);
                    ROM.DATA[pointeraddr + (i * 2)]     = (byte)((snesaddr) & 0xFF);
                    // Format: iiiipppp pppppppp iiiiiiii - p = position, i = tile id
                    foreach (OverlayData od in overlaysData[i])
                    {
                        short pos = (short)((((od.y * 64) + od.x)) << 1);
                        byte  b1  = (byte)((pos & 0xFF00) >> 8);
                        byte  b2  = (byte)((pos & 0x00FF));
                        byte  b3  = (byte)((od.tileId & 0xFF00) >> 8);
                        byte  b4  = (byte)(od.tileId & 0xFF);
                        ROM.DATA[dataPos++] = b2;
                        ROM.DATA[dataPos++] = b1;
                        ROM.DATA[dataPos++] = b4;
                        ROM.DATA[dataPos++] = b3;
                    }

                    ROM.DATA[dataPos++] = 0xFF;
                    ROM.DATA[dataPos++] = 0xFF;
                }
                else
                {
                    int snesaddr = Addresses.pctosnes(emptyPos);
                    ROM.DATA[pointeraddr + (i * 2) + 1] = (byte)((snesaddr >> 8) & 0xFF);
                    ROM.DATA[pointeraddr + (i * 2)]     = (byte)((snesaddr) & 0xFF);
                }
            }



            /*ROM.DATA[pointeraddr + (i * 2) + 1] = (byte)((snesaddr >> 8) & 0xFF);
             * ROM.DATA[pointeraddr + (i * 2)] = (byte)((snesaddr) & 0xFF);
             * foreach (roomPotSave item in roomItems[i])
             * {
             *
             *  //Console.WriteLine(item.x);
             *
             *  short mapPos = (short)(((item.y << 6) + item.x) << 1);
             *
             *  byte b1 = (byte)((mapPos >> 8));//1111 1111 0000 0000
             *  byte b2 = (byte)(mapPos & 0xFF);//0000 0000 1111 1111
             *  byte b3 = (byte)(item.id);
             *
             *  ROM.DATA[dataPos++] = b2;
             *  ROM.DATA[dataPos++] = b1;
             *  ROM.DATA[dataPos++] = b3;
             * }
             * ROM.DATA[dataPos++] = 0xFF;
             * ROM.DATA[dataPos] = 0xFF;
             * if (dataPos >= (0x1F2800 + DataOffset))
             * {
             *  Console.WriteLine("Too many Overworld items !");
             *  break;
             * }
             * dataPos++;
             *
             * }
             *  else
             *  {
             *      int snesaddr = Addresses.pctosnes(emptyPointer);
             * ROM.DATA[pointeraddr + (i * 2) + 1] = (byte) ((snesaddr >> 8) & 0xFF);
             *      ROM.DATA[pointeraddr + (i * 2)] = (byte) ((snesaddr) & 0xFF);
             *      //Save Empty Pointer
             *  }*/
        }