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; } } } }
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(); }
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); } } }
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 } } }
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 * }*/ }