//addrs saved in ram at 77-79-7E-81 public List <ObjectList> getObjectsJungleBook(int levelNo) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int objCount = lr.objCount; int objAddr = lr.objectsBeginAddr; var objects = new List <ObjectRec>(); for (int i = 0; i < objCount; i++) { byte x = Globals.romdata[objAddr - objCount * 2 + i]; byte y = Globals.romdata[objAddr - objCount * 1 + i]; byte v = Globals.romdata[objAddr + objCount * 0 + i]; byte data = Globals.romdata[objAddr + objCount * 1 + i]; int realx = x * 32 + 16; int realy = y * 32 + 16; var dataDict = new Dictionary <string, int>(); dataDict["data"] = data; var obj = new ObjectRec(v, 0, 0, realx, realy, dataDict); objects.Add(obj); } return(new List <ObjectList> { new ObjectList { objects = objects, name = "Objects" } }); }
public bool setObjectsJungleBook(int levelNo, List <ObjectList> objLists) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int objCount = lr.objCount; int objAddr = lr.objectsBeginAddr; var objects = objLists[0].objects; for (int i = 0; i < objects.Count; i++) { var obj = objects[i]; byte x = (byte)((obj.x - 16) / 32); byte y = (byte)((obj.y - 16) / 32); Globals.romdata[objAddr + objCount * 0 + i] = (byte)obj.type; Globals.romdata[objAddr + objCount * 1 + i] = (byte)obj.additionalData["data"]; Globals.romdata[objAddr - objCount * 2 + i] = x; Globals.romdata[objAddr - objCount * 1 + i] = y; } for (int i = objects.Count; i < objCount; i++) { Globals.romdata[objAddr + objCount * 0 + i] = 0xFF; Globals.romdata[objAddr + objCount * 1 + i] = 0xFF; Globals.romdata[objAddr - objCount * 2 + i] = 0xFF; Globals.romdata[objAddr - objCount * 1 + i] = 0xFF; } return(true); }
public static List <ObjectList> getItemsFromFile(int levelNo) { LevelRec lr = ConfigScript.getLevelRec(levelNo); byte[] data = Utils.loadDataFromFile("items.bin"); return(getItemsFromArray(data, 0, lr.objCount)); }
public static bool setObjectsNemo(int levelNo, List <ObjectList> objLists) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int addrBase = lr.objectsBeginAddr; int objCount = lr.objCount; var objects = objLists[0].objects; var screenIndexValues = new int[lr.width * lr.height]; for (int i = 0; i < objCount; i++) { var obj = objects[i]; Globals.romdata[addrBase + i * 2 + 0] = (byte)obj.type; int xy = ((obj.x / 16) << 4) | ((obj.y / 16) & 0x0F); Globals.romdata[addrBase + i * 2 + 1] = (byte)xy; int screenIndex = obj.sy * lr.width + obj.sx; screenIndexValues[screenIndex] += 1; } //write how many objects at every screen var objScreenAddr = ConfigScript.getPalBytesAddr(); //read screen sx/sy address int totalSx = 0; for (int screenIndex = 0; screenIndex < screenIndexValues.Length - 1; screenIndex++) { totalSx += screenIndexValues[screenIndex]; if (totalSx >= objCount) { break; } Globals.romdata[objScreenAddr + screenIndex + 1] = (byte)totalSx; } return(true); }
public bool setObjectsCad(int levelNo, List <ObjectList> objLists) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int levelDhack = (levelNo == 4) ? 1 : 0; int addrBase = lr.objectsBeginAddr; int objCount = lr.objCount; var objects = objLists[0].objects; try { for (int i = 0; i < objects.Count; i++) { var obj = objects[i]; Globals.romdata[addrBase + i] = (byte)obj.type; Globals.romdata[addrBase - 4 * objCount + levelDhack + i] = (byte)obj.sx; Globals.romdata[addrBase - 3 * objCount + levelDhack + i] = (byte)obj.x; Globals.romdata[addrBase - 2 * objCount + levelDhack + i] = (byte)obj.sy; Globals.romdata[addrBase - objCount + i] = (byte)obj.y; } for (int i = objects.Count; i < objCount; i++) { Globals.romdata[addrBase + i] = 0xFF; Globals.romdata[addrBase - 4 * objCount + levelDhack + i] = 0xFF; Globals.romdata[addrBase - 3 * objCount + levelDhack + i] = 0xFF; Globals.romdata[addrBase - 2 * objCount + levelDhack + i] = 0xFF; Globals.romdata[addrBase - objCount + levelDhack + i] = 0xFF; } return(true); } catch (System.IndexOutOfRangeException ex) { return(false); } }
public List <ObjectList> getObjectsCad(int levelNo) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int objCount = lr.objCount, addr = lr.objectsBeginAddr; var objects = new List <ObjectRec>(); for (int i = 0; i < objCount; i++) { byte v = Globals.romdata[addr + i]; if (levelNo != 4) { byte sx, sy, x, y; sx = Globals.romdata[addr - 4 * objCount + i]; x = Globals.romdata[addr - 3 * objCount + i]; sy = Globals.romdata[addr - 2 * objCount + i]; y = Globals.romdata[addr - objCount + i]; var obj = new ObjectRec(v, sx, sy, x, y); objects.Add(obj); } else //C&D LEVEL D EXCEPTION, unaligned pointers { byte sx = Globals.romdata[addr - 4 * objCount + 1 + i]; byte x = Globals.romdata[addr - 3 * objCount + 1 + i]; byte sy = Globals.romdata[addr - 2 * objCount + 1 + i]; byte y = Globals.romdata[addr - objCount + i]; var obj = new ObjectRec(v, sx, sy, x, y); objects.Add(obj); } } return(new List <ObjectList> { new ObjectList { objects = objects, name = "Objects" } }); }
public List <ObjectList> getObjects(int levelNo) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int objCount = lr.objCount; int baseAddr = lr.objectsBeginAddr; var objects = new List <ObjectRec>(); for (int i = 0; i < objCount; i++) { byte data = Globals.romdata[baseAddr + objCount * 0 + i]; byte x = Globals.romdata[baseAddr + objCount * 1 + i]; byte sx = (byte)(x & 0x0F); x = (byte)(x & 0xF0); byte y = Globals.romdata[baseAddr + objCount * 2 + i]; byte sy = (byte)(y & 0x0F); y = (byte)(y & 0xF0); int v = Utils.readWordUnsigned(Globals.romdata, baseAddr + objCount * 3 + i * 2); int enemyType = enemyNoToEnemyType[v]; var dataDict = new Dictionary <string, int>(); dataDict["data"] = data; var obj = new ObjectRec(enemyType, sx, sy, x, y, dataDict); objects.Add(obj); } return(new List <ObjectList> { new ObjectList { objects = objects, name = "Objects" } }); }
public bool setObjectsCad2(int levelNo, List <ObjectList> objLists) { //hack for prizes if (levelNo >= LEVEL_REC_COUNT) { return(setPrizesCad2(levelNo, objLists)); } LevelRec lr = ConfigScript.getLevelRec(levelNo); int addrBase = lr.objectsBeginAddr; int objCount = lr.objCount; var objects = objLists[0].objects; for (int i = 0; i < objects.Count; i++) { var obj = objects[i]; Globals.romdata[addrBase + i * 3 + 2] = (byte)obj.type; Globals.romdata[addrBase + i * 3 + 0] = (byte)((obj.x / 32) | (obj.sx << 4)); Globals.romdata[addrBase + i * 3 + 1] = (byte)((obj.y / 32) | (obj.sy << 4)); } for (int i = objects.Count; i < objCount; i++) { Globals.romdata[addrBase + i * 3 + 2] = 0xFF; Globals.romdata[addrBase + i * 3 + 0] = 0xFF; Globals.romdata[addrBase + i * 3 + 1] = 0xFF; } return(true); }
public List <ObjectList> getObjectsCad2(int levelNo) { //hack for prizes if (levelNo >= LEVEL_REC_COUNT) { return(getPrizesCad2(levelNo)); } LevelRec lr = ConfigScript.getLevelRec(levelNo); int addr = lr.objectsBeginAddr; int objCount = lr.objCount; var objects = new List <ObjectRec>(); for (int i = 0; i < objCount; i++) { int v = Globals.romdata[addr + i * 3 + 2]; int xx = Globals.romdata[addr + i * 3 + 0]; int yy = Globals.romdata[addr + i * 3 + 1]; int sx = (xx >> 4); int sy = (yy >> 4); int x = (xx & 0x0F) * 32; int y = (yy & 0x0F) * 32; var obj = new ObjectRec(v, sx, sy, x, y); objects.Add(obj); } return(new List <ObjectList> { new ObjectList { objects = objects, name = "Objects" } }); }
public static List <ObjectList> getObjectsLM2(int levelNo) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int objCount = lr.objCount, addr = lr.objectsBeginAddr; int addrSx = 0x13890; int addrX = 0x138C4; int addrY = addr - 1 * objCount; var objects = new List <ObjectRec>(); for (int i = 0; i < objCount; i++) { byte v = Globals.romdata[addr + i]; byte sx = Globals.romdata[addrSx + i]; byte x = Globals.romdata[addrX + i]; byte y = Globals.romdata[addrY + i]; byte sy = 0; var obj = new ObjectRec(v, sx, sy, x, y); objects.Add(obj); } return(new List <ObjectList> { new ObjectList { objects = objects, name = "Objects" } }); }
public List <ObjectList> getPrizesCad2(int levelNo) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int addr = lr.objectsBeginAddr; int objCount = lr.objCount; var objects = new List <ObjectRec>(); for (int i = 0; i < objCount; i++) { int xx = Globals.romdata[addr + i * 2 + 0]; int yy = Globals.romdata[addr + i * 2 + 1]; int sx = (xx >> 4); int v = (yy >> 4); int sy = 0; int x = (xx & 0x0F) * 32; int y = (yy & 0x0F) * 32; var obj = new ObjectRec(v, sx, sy, x, y); objects.Add(obj); } return(new List <ObjectList> { new ObjectList { objects = objects, name = "Items" } }); }
public bool setObjectsDwd(int levelNo, List <ObjectList> objLists) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int addrBase = lr.objectsBeginAddr; int objCount = lr.objCount; var objects = objLists[0].objects; for (int i = 0; i < objects.Count; i++) { var obj = objects[i]; Globals.romdata[addrBase + i] = (byte)obj.type; Globals.romdata[addrBase - 4 * objCount + i] = (byte)obj.sx; Globals.romdata[addrBase - 3 * objCount + i] = (byte)obj.x; Globals.romdata[addrBase - 2 * objCount + i] = (byte)obj.sy; Globals.romdata[addrBase - 1 * objCount + i] = (byte)obj.y; } for (int i = objects.Count; i < objCount; i++) { Globals.romdata[addrBase + i] = 0xFF; Globals.romdata[addrBase - 4 * objCount + i] = 0xFF; Globals.romdata[addrBase - 3 * objCount + i] = 0xFF; Globals.romdata[addrBase - 2 * objCount + i] = 0xFF; Globals.romdata[addrBase - 1 * objCount + i] = 0xFF; } return(true); }
public List <ObjectList> getObjectsDt(int levelNo) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int objCount = lr.objCount, addr = lr.objectsBeginAddr; var objects = new List <ObjectRec>(); var objLineOffsets = new byte[lr.height]; for (int i = 0; i < lr.height; i++) { objLineOffsets[i] = Globals.romdata[addr + i - lr.height]; } for (int i = 0; i < objCount; i++) { byte v = Globals.romdata[addr + i]; byte sx = Globals.romdata[addr - 3 * objCount + i - lr.height]; byte x = Globals.romdata[addr - 2 * objCount + i - lr.height]; byte y = Globals.romdata[addr - objCount + i - lr.height]; byte sy = convertObjectIndexToScreenYcoord(objLineOffsets, i); var obj = new ObjectRec(v, sx, sy, x, y); objects.Add(obj); } return(new List <ObjectList> { new ObjectList { objects = objects, name = "Objects" } }); }
public bool setObjects(int levelNo, List <ObjectList> objLists) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int objCount = lr.objCount; int baseAddr = lr.objectsBeginAddr; var objects = objLists[0].objects; for (int i = 0; i < objects.Count; i++) { var obj = objects[i]; byte x = (byte)((obj.x & 0xF0) | (obj.sx & 0x0F)); byte y = (byte)((obj.y & 0xF0) | (obj.sy & 0x0F)); int reversedType = enemyNoToEnemyType.FirstOrDefault(n => n.Value == obj.type).Key; byte data = (byte)obj.additionalData["data"]; Globals.romdata[baseAddr + objCount * 0 + i] = data; Globals.romdata[baseAddr + objCount * 1 + i] = x; Globals.romdata[baseAddr + objCount * 2 + i] = y; Utils.writeWord(Globals.romdata, baseAddr + objCount * 3 + i * 2, reversedType); } for (int i = objects.Count; i < objCount; i++) { Globals.romdata[baseAddr + objCount * 0 + i] = 0xFF; Globals.romdata[baseAddr + objCount * 1 + i] = 0xFF; Globals.romdata[baseAddr + objCount * 2 + i] = 0xFF; Globals.romdata[baseAddr + objCount * 3 + i * 2] = 0xFF; Globals.romdata[baseAddr + objCount * 3 + i * 2 + 1] = 0xFF; } return(true); }
public static bool setObjectsLM2(int levelNo, List <ObjectList> objLists) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int addrBase = lr.objectsBeginAddr; int objCount = lr.objCount; var objects = objLists[0].objects; int addrSx = 0x13890; int addrX = 0x138C4; int addrY = addrBase - 1 * objCount; for (int i = 0; i < objects.Count; i++) { var obj = objects[i]; Globals.romdata[addrBase + i] = (byte)obj.type; Globals.romdata[addrY + i] = (byte)obj.y; Globals.romdata[addrX + i] = (byte)obj.x; Globals.romdata[addrSx + i] = (byte)obj.sx; } for (int i = objects.Count; i < objCount; i++) { Globals.romdata[addrBase + i] = 0xFF; Globals.romdata[addrY + i] = 0xFF; Globals.romdata[addrX + i] = 0xFF; Globals.romdata[addrSx + i] = 0xFF; } return(true); }
public bool setObjects(int levelNo, List <ObjectList> objLists) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int objCount = lr.objCount; int baseAddr = lr.objectsBeginAddr; var objects = objLists[0].objects; for (int i = 0; i < objects.Count; i++) { var obj = objects[i]; Globals.romdata[baseAddr + 5 * i + 0] = (byte)obj.type; Globals.romdata[baseAddr + 5 * i + 1] = (byte)(obj.x / 2); Globals.romdata[baseAddr + 5 * i + 2] = (byte)obj.sx; Globals.romdata[baseAddr + 5 * i + 3] = (byte)(obj.y / 2); Globals.romdata[baseAddr + 5 * i + 4] = (byte)obj.sy; } for (int i = objects.Count; i < objCount; i++) { Globals.romdata[baseAddr + 5 * i + 0] = 0xff; Globals.romdata[baseAddr + 5 * i + 1] = 0xff; Globals.romdata[baseAddr + 5 * i + 2] = 0xff; Globals.romdata[baseAddr + 5 * i + 3] = 0xff; Globals.romdata[baseAddr + 5 * i + 4] = 0xff; } return(true); }
public static bool setObjects(int levelNo, List <ObjectList> objLists) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int objCount = lr.objCount; int baseAddr = lr.objectsBeginAddr; var objects = objLists[0].objects; int objSize = 6; for (int i = 0; i < objects.Count; i++) { var obj = objects[i]; var dict = obj.additionalData; int dirIndex = dict["direction"] | dict["index"]; int x = ((obj.sx + 1) << 4) | (obj.x / 16); int y = ((obj.sy + 1) << 4) | (obj.y / 16); Globals.romdata[baseAddr + objSize * i + 0] = (byte)dirIndex; Globals.romdata[baseAddr + objSize * i + 1] = (byte)obj.type; Globals.romdata[baseAddr + objSize * i + 2] = (byte)dict["flags1"]; Globals.romdata[baseAddr + objSize * i + 3] = (byte)x; Globals.romdata[baseAddr + objSize * i + 4] = (byte)dict["flags2"]; Globals.romdata[baseAddr + objSize * i + 5] = (byte)y; } for (int i = objects.Count; i < objCount; i++) { Globals.romdata[baseAddr + objSize * i + 0] = (byte)0xFF; Globals.romdata[baseAddr + objSize * i + 1] = (byte)0xFF; Globals.romdata[baseAddr + objSize * i + 2] = (byte)0xFF; Globals.romdata[baseAddr + objSize * i + 3] = (byte)0xFF; Globals.romdata[baseAddr + objSize * i + 4] = (byte)0xFF; Globals.romdata[baseAddr + objSize * i + 5] = (byte)0xFF; } return(true); }
public bool setObjectsDt(int levelNo, List <ObjectList> objLists) { //todo: add save sy coord to objLineOffsets array LevelRec lr = ConfigScript.getLevelRec(levelNo); int addrBase = lr.objectsBeginAddr; int objCount = lr.objCount; var objects = objLists[0].objects; for (int i = 0; i < objects.Count; i++) { var obj = objects[i]; Globals.romdata[addrBase + i] = (byte)obj.type; Globals.romdata[addrBase - 3 * objCount + i - lr.height] = (byte)obj.sx; Globals.romdata[addrBase - 2 * objCount + i - lr.height] = (byte)obj.x; Globals.romdata[addrBase - 1 * objCount + i - lr.height] = (byte)obj.y; } for (int i = objects.Count; i < objCount; i++) { Globals.romdata[addrBase + i] = 0xFF; Globals.romdata[addrBase - 3 * objCount + i - lr.height] = 0xFF; Globals.romdata[addrBase - 2 * objCount + i - lr.height] = 0xFF; Globals.romdata[addrBase - 1 * objCount + i - lr.height] = 0xFF; } return(true); }
public static ObjectList getItemsFromFile(int levelNo) { LevelRec lr = getItemsLayout(); byte[] data = Utils.loadDataFromFile("items.bin"); return(getItemsFromArray(data, 0, lr.objCount)); }
public bool setObjectsDt2(int levelNo, List <ObjectList> objLists) { LevelRec lr = ConfigScript.getLevelRec(levelNo); var objects = objLists[0].objects; int objCount = lr.objCount, addr = lr.objectsBeginAddr; var objsAtLine = new int[lr.height]; for (int i = 0; i < objects.Count; i++) { var obj = objects[i]; objsAtLine[obj.sy] += 1; } int curObjLine = 0; //start line 0 Globals.romdata[addr] = (byte)0xFF; Globals.romdata[addr + 1] = (byte)curObjLine; addr += 2; //pointers to floors int floorPtr = getPtrToFloorsAddr(levelNo); int objectsPtr = Utils.readWordUnsignedLE(Globals.romdata, floorPtr); int objIndex = 0; int totalCount = objsAtLine[curObjLine]; while (objIndex < objects.Count) { if (objIndex >= totalCount) { //write code of begin ptr Globals.romdata[addr] = (byte)0xFF; Globals.romdata[addr + 1] = (byte)(++curObjLine); addr += 2; objectsPtr += 2; totalCount += objsAtLine[curObjLine]; //patch ptrs to floors floorPtr += 2; //next floor Globals.romdata[floorPtr + 0] = (byte)(objectsPtr & 0xFF); Globals.romdata[floorPtr + 1] = (byte)(objectsPtr >> 8); continue; } var obj = objects[objIndex]; int x = (obj.sx << 5) | (obj.x >> 3); Globals.romdata[addr + 0] = (byte)x; Globals.romdata[addr + 1] = (byte)obj.y; Globals.romdata[addr + 2] = (byte)obj.type; addr += 3; objectsPtr += 3; objIndex++; } //write code of end objects Globals.romdata[addr] = 0xFF; Globals.romdata[addr + 1] = 0xFF; return(true); }
public static List <ObjectList> getItemsFromRom(int levelNo) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int baseAddr = lr.objectsBeginAddr; int objCount = lr.objCount; return(getItemsFromArray(Globals.romdata, baseAddr, objCount)); }
public static bool setItemsToRom(int levelNo, List <ObjectList> objects) { LevelRec lr = getItemsLayout(); int baseAddr = lr.objectsBeginAddr; int objCount = lr.objCount; return(setItemsToArray(objects, Globals.romdata, baseAddr, objCount)); }
public static ObjectList getItemsFromRom(int levelNo) { LevelRec lr = getItemsLayout(); int baseAddr = lr.objectsBeginAddr; int objCount = lr.objCount; return(getItemsFromArray(Globals.romdata, baseAddr, objCount)); }
public static bool setEnemiesToRom(int levelNo, List <ObjectList> objects) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int baseAddr = lr.objectsBeginAddr; int objCount = lr.objCount; return(setEnemiesToArray(objects, Globals.romdata, baseAddr, objCount)); }
public static bool setVictimsToFile(int levelNo, List <ObjectList> objects) { LevelRec lr = getVictimsLayout(); int baseAddr = 0; int objCount = lr.objCount; byte[] data = new byte[objCount * 12]; setVictimsToArray(objects, data, baseAddr, objCount); Utils.saveDataToFile("victims.bin", data); return(true); }
public static bool setEnemiesToFile(int levelNo, List <ObjectList> objects) { const int ENEMY_REC_LEN = 12; LevelRec lr = getEnemiesLayout(); int baseAddr = 0; int objCount = lr.objCount; byte[] data = new byte[objCount * ENEMY_REC_LEN]; setEnemiesToArray(objects, data, baseAddr, objCount); Utils.saveDataToFile("enemies.bin", data); return(true); }
public static bool setItemsToFile(int levelNo, List <ObjectList> objects) { const int ITEMS_REC_LEN = 6; LevelRec lr = getItemsLayout(); int baseAddr = 0; int objCount = lr.objCount; byte[] data = new byte[objCount * ITEMS_REC_LEN]; setItemsToArray(objects, data, baseAddr, objCount); Utils.saveDataToFile("items.bin", data); return(true); }
public static bool setObjects(int levelNo, List <ObjectList> objLists) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int objCount = lr.objCount, addr = lr.objectsBeginAddr; int curAddr = addr; var objects = objLists[0].objects; for (int i = 0; i < objects.Count; i++) { var obj = objects[i]; int v = obj.type; int baseAddr = curAddr; Utils.writeWord(Globals.romdata, baseAddr, v); if (v < 0xFF00) { int fromFloor = obj.additionalData["fromFloor"]; //Utils.writeWord(Globals.romdata, baseAddr + 2 , 0); //Utils.writeWord(Globals.romdata, baseAddr + 4 , 0); Utils.writeWord(Globals.romdata, baseAddr + 6, fromFloor); Globals.romdata[baseAddr + 12] = (byte)obj.additionalData["data1"]; Globals.romdata[baseAddr + 13] = (byte)obj.additionalData["data2"]; /*Globals.romdata[baseAddr + 2] = (byte)obj.additionalData["data3"]; * Globals.romdata[baseAddr + 3] = (byte)obj.additionalData["data4"]; * Globals.romdata[baseAddr + 4] = (byte)obj.additionalData["data5"]; * Globals.romdata[baseAddr + 5] = (byte)obj.additionalData["data6"];*/ if (fromFloor != 0) { Utils.writeWord(Globals.romdata, baseAddr + 2, obj.x); Utils.writeWord(Globals.romdata, baseAddr + 4, obj.y); Utils.writeWord(Globals.romdata, baseAddr + 8, obj.x); Utils.writeWord(Globals.romdata, baseAddr + 10, obj.y); } else { Utils.writeWord(Globals.romdata, baseAddr + 2, obj.x); Utils.writeWord(Globals.romdata, baseAddr + 4, obj.y); Utils.writeWord(Globals.romdata, baseAddr + 8, obj.additionalData["addX"]); Utils.writeWord(Globals.romdata, baseAddr + 10, obj.additionalData["addY"]); } curAddr += OBJ_SIZE; } else { saveCommandObject(objects[i], baseAddr); curAddr += commandDict[v] * 2; } } return(true); }
public List <ObjectList> getObjectsDt2(int levelNo) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int objCount = lr.objCount, addr = lr.objectsBeginAddr; var objects = new List <ObjectRec>(); int objectsReaded = 0; int currentHeight = 0; while (objectsReaded < objCount) { byte command = Globals.romdata[addr]; if (command == 0xFF) { currentHeight = Globals.romdata[addr + 1]; if (currentHeight == 0xFF) { break; } addr += 2; } else { byte v = Globals.romdata[addr + 2]; byte xbyte = Globals.romdata[addr + 0]; byte ybyte = Globals.romdata[addr + 1]; byte sx = (byte)(xbyte >> 5); byte x = (byte)((xbyte & 0x1F) << 3); byte sy = (byte)currentHeight; byte y = ybyte; var obj = new ObjectRec(v, sx, sy, x, y); objects.Add(obj); objectsReaded++; addr += 3; } } return(new List <ObjectList> { new ObjectList { objects = objects, name = "Objects" } }); }
public bool setPrizesCad2(int levelNo, List <ObjectList> objLists) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int addrBase = lr.objectsBeginAddr; int objCount = lr.objCount; var objects = objLists[0].objects; for (int i = 0; i < objects.Count; i++) { var obj = objects[i]; Globals.romdata[addrBase + i * 2 + 0] = (byte)((obj.x / 32) | (obj.sx << 4)); Globals.romdata[addrBase + i * 2 + 1] = (byte)((obj.y / 32) | (obj.type << 4)); } for (int i = objects.Count; i < objCount; i++) { Globals.romdata[addrBase + i * 2 + 0] = 0xFF; Globals.romdata[addrBase + i * 2 + 1] = 0xFF; } return(true); }