public static void defaultDrawObject(Graphics g, ObjectRec curObject, int listNo, bool isSelected, float curScale, ImageList objectSprites, bool inactive, int leftMargin, int topMargin) { int x = curObject.x, y = curObject.y; var myFont = new Font(FontFamily.GenericSansSerif, 6.0f); var selectRect = new Rectangle((int)(x * curScale) - 8 + leftMargin, (int)(y * curScale) - 8 + topMargin, 16, 16); if (curObject.type < objectSprites.Images.Count) { g.DrawImage(objectSprites.Images[curObject.type], new Point((int)(x * curScale) - 8 + leftMargin, (int)(y * curScale) - 8 + topMargin)); } else { g.FillRectangle(Brushes.Black, new Rectangle((int)(x * curScale) - 8 + leftMargin, (int)(y * curScale) - 8 + topMargin, 16, 16)); g.DrawString(curObject.type.ToString("X3"), myFont, Brushes.White, new Point((int)(x * curScale) - 8 + leftMargin, (int)(y * curScale) - 8 + topMargin)); } if (isSelected) { g.DrawRectangle(new Pen(Brushes.Red, 2.0f), selectRect); } else { g.DrawRectangle(new Pen(Brushes.White, 1.0f), selectRect); } if (inactive) { g.FillRectangle(new SolidBrush(Color.FromArgb(128, 255, 255, 255)), selectRect); g.DrawRectangle(new Pen(Brushes.Black, 1.0f), selectRect); } }
private String makeStringForObject(ObjectRec obj) { int screenNo = coordToScreenNo(obj); String ans = String.Format("{0} <{1:X}>", obj.ToString(), screenNo); return(ans); }
//------------------------------------------------------------------------------- public List<ObjectRec> getCheese(int levelNo) { var objects = new List<ObjectRec>(); int baseAddr = getCheeseAddr(); if (baseAddr == -1) { return objects; } int curAddr = baseAddr; byte objType = 0; while(objects.Count < 255) { byte b = Globals.romdata[curAddr]; if (b == 0xFF) { break; } if (b == 0xFE) { curAddr++; objType = Globals.romdata[curAddr++]; } byte x = Globals.romdata[curAddr++]; byte y = Globals.romdata[curAddr++]; var obj = new ObjectRec(objType, 0, 0, x*32, y*32); objects.Add(obj); } return objects; }
private int coordToScreenNo(ObjectRec obj) { int index = obj.sy * curLevelLayerData.width + obj.sx; if (index < 0 || index >= curLevelLayerData.width * curLevelLayerData.height) { return(-1); } return(index); }
public static void drawObjectBig(Graphics g, ObjectRec curObject, int listNo, bool selected, float curScale, Image[] objectSprites, bool inactive, int leftMargin, int topMargin) { if (drawObjectBigFunc != null) { drawObjectBigFunc(g, curObject, listNo, selected, curScale, objectSprites, inactive, leftMargin, topMargin); } else { Utils.defaultDrawObjectBig(g, curObject, listNo, selected, curScale, objectSprites, inactive, leftMargin, topMargin); } }
private bool isUndefindedObj(ObjectRec obj) { int scrNo = coordToScreenNo(obj); if (scrNo == -1) { return(false); } return((obj.type != 0xFF) && (curLevelLayerData.layer[scrNo] == 0)); }
public static List<ObjectList> getObjectsLM(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]; byte sx = Globals.romdata[addr - 3 * objCount + i]; byte x = Globals.romdata[addr - 2 * objCount + i]; byte y = Globals.romdata[addr - 1 * objCount + 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" } }; }
//addrs saved in ram at DD-DF-E1-E3 public List<ObjectList> getObjects(int levelNo) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int objCount = lr.objCount; var objects = new List<ObjectRec>(); for (int i = 0; i < objCount; i++) { byte x = Globals.romdata[0x14D84 + i]; byte y = Globals.romdata[0x14D9C + i]; int realx = x * 8; int realy = y * 8; byte v = Globals.romdata[0x14DB4 + i]; var obj = new ObjectRec(v, 0, 0, realx, realy); objects.Add(obj); } return new List<ObjectList> { new ObjectList { objects = objects, name = "Objects" } }; }
public List<ObjectList> getObjectsDwdAdvanceLastLevel(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]; byte sx, sy, x, y; sx = Globals.romdata[addr + 1 * objCount + i]; x = Globals.romdata[addr + 2 * objCount + i]; sy = Globals.romdata[addr + 3 * objCount + i]; y = Globals.romdata[addr - +4 * objCount + i]; var obj = new ObjectRec(v, sx, sy, x, y); objects.Add(obj); } return new List<ObjectList> { new ObjectList { objects = objects, name = "Objects" } }; }
//Read only standart enemies (5 bytes per enemy) //other types: //0x0D - Bags (+1 byte) //0x1B - Fly chairs (+1 byte) //0xFF - var length (checkpoints, pointers to next rooms) //0x12 - arrow between rooms (7 bytes per arrow) public List<ObjectRec> 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++) { int v = Globals.romdata[baseAddr + 5*i + 0]; int x = Globals.romdata[baseAddr + 5*i + 1] * 2; int sx = Globals.romdata[baseAddr + 5*i + 2]; int y = Globals.romdata[baseAddr + 5*i + 3] * 2; int sy = Globals.romdata[baseAddr + 5*i + 4]; var obj = new ObjectRec(v, sx, sy, x, y); objects.Add(obj); } return objects; }
public List<ObjectRec> getObjectsDwd(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]; 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); } return objects; }
public List<ObjectRec> 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 x = Globals.romdata[baseAddr + objCount*0 + i + 1]; byte y = Globals.romdata[baseAddr + objCount*1 + i + 2]; byte v = Globals.romdata[baseAddr + objCount*2 + i + 2]; int scrx = x >> 4; scrx &= 0x7; //if bit 8 set, that something happen int realx = (x &0x0F)*16; int realy = y; var obj = new ObjectRec(v, scrx, 0, realx, realy); objects.Add(obj); } return objects; }
public static List<ObjectList> getObjectsTT(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++) { int v = Globals.romdata[addr + i * 3 + 0]; int xx = Globals.romdata[addr + i * 3 + 1]; int yy = Globals.romdata[addr + i * 3 + 2]; int sx = xx >> 4; int sy = 0; int x = (xx & 0x0F) * 16; int y = yy * 16; 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<ObjectRec> getEnemiesFromArray(byte[] romdata, int baseAddr, int objCount) { var objects = new List<ObjectRec>(); const int ENEMY_REC_LEN = 12; for (int i = 0; i < objCount; i++) { int r = Utils.readWord(romdata, baseAddr + i * ENEMY_REC_LEN + 0); int x = Utils.readWord(romdata, baseAddr + i * ENEMY_REC_LEN + 2); int y = Utils.readWord(romdata, baseAddr + i * ENEMY_REC_LEN + 4); int t = Utils.readWord(romdata, baseAddr + i * ENEMY_REC_LEN + 6); int enemyAddr = Utils.readInt (romdata, baseAddr + i * ENEMY_REC_LEN + 8); int victimNo = enemyAddrToEnemyNo(enemyAddr); var dataDict = new Dictionary<string,int>(); dataDict["R"] = r; dataDict["T"] = t; var obj = new ObjectRec(victimNo, 0, 0, x/2, y/2, dataDict); objects.Add(obj); } return objects; }
//addrs saved in ram at D7-D9-DC-DC public static 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 x = Globals.romdata[baseAddr + objCount*0 + i]; byte y = Globals.romdata[baseAddr + objCount*2 + i]; int realx = x * 8; int realy = y * 8; byte v = Globals.romdata[baseAddr + objCount*3 + i]; byte data = Globals.romdata[baseAddr + objCount*1 + i]; 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 List<ObjectRec> getObjects(int levelNo) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int baseAddr = lr.objectsBeginAddr; int objCount = lr.objCount; var objects = new List<ObjectRec>(); for (int i = 0; i < objCount; i++) { byte x = Globals.romdata[baseAddr + i*4 + 0]; byte y = Globals.romdata[baseAddr + i*4 + 1]; int realx = x* 32; int realy = y* 32; byte v = Globals.romdata[baseAddr + i*4 + 3]; byte data = Globals.romdata[baseAddr + i*4 + 2]; var dataDict = new Dictionary<string,int>(); dataDict["data"] = data; var obj = new ObjectRec(v, 0, 0, realx, realy, dataDict); objects.Add(obj); } return objects; }
public static void drawObject(Graphics g, ObjectRec curObject, bool isSelected, float curScale, ImageList objectSprites) { //don't render commands if (curObject.type >= 0xFF00) return; var dict = curObject.additionalData; var myFont = new Font(FontFamily.GenericSansSerif, 6.0f); int x = curObject.x, y = curObject.y; int addX = dict["addX"]; int addY = dict["addY"]; int fromFloor = dict["fromFloor"]; /*if (curObject.type < objectSprites.Images.Count) { var p1 = new Point((int)(x * curScale) - 8, (int)(y * curScale) - 8); var p2 = new Point(p1.X + (int)(addX/2 * curScale) - 8, p1.Y + (int)(addY/2 * curScale) - 8); g.DrawImage(objectSprites.Images[curObject.type], p1); if (fromFloor == 0) { g.DrawImage(objectSprites.Images[curObject.type],p2); g.DrawLine(new Pen(Brushes.Red), p1, p2); } } else*/ { var p1 = new Point((int)(x * curScale) - 8, (int)(y * curScale) - 8); g.FillRectangle(Brushes.Black, new Rectangle(p1, new Size(16, 16))); g.DrawString(curObject.type.ToString("X3"), myFont, Brushes.White, p1); if (fromFloor == 0) { var p2 = new Point(p1.X + (int)(addX/2 * curScale) - 8, p1.Y + (int)(addY/2 * curScale) - 8); g.FillRectangle(Brushes.Green, new Rectangle(p2, new Size(16, 16))); g.DrawString(curObject.type.ToString("X3"), myFont, Brushes.White, p2); g.DrawLine(new Pen(Brushes.Red), p1, p2); } } if (isSelected) g.DrawRectangle(new Pen(Brushes.Red, 2.0f), new Rectangle((int)(x * curScale) - 8, (int)(y * curScale) - 8, 16, 16)); }
public static void defaultDrawObjectBig(Graphics g, ObjectRec curObject, int listNo, bool isSelected, float curScale, Image[] objectSpritesBig, bool inactive, int leftMargin, int topMargin) { int x = curObject.x, y = curObject.y; int xsize = objectSpritesBig[curObject.type].Size.Width; int ysize = objectSpritesBig[curObject.type].Size.Height; var rect = new Rectangle((int)((x - xsize / 2) * curScale) + leftMargin, (int)((y - ysize / 2) * curScale) + topMargin, (int)(xsize * curScale), (int)(ysize * curScale)); if (curObject.type < objectSpritesBig.Length) { g.DrawImage(objectSpritesBig[curObject.type], rect); } if (isSelected) { g.DrawRectangle(new Pen(Brushes.Red, 2.0f), rect); } if (inactive) { g.FillRectangle(new SolidBrush(Color.FromArgb(128, 255, 255, 255)), rect); g.DrawRectangle(new Pen(Brushes.Black, 1.0f), rect); } }
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" } }; }
//copy-paste //addrs saved in ram at 77-79-7E-81 public List<ObjectRec> getObjectsJungleBook2(int levelNo) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int objCount = lr.objCount; var objects = new List<ObjectRec>(); for (int i = 0; i < objCount; i++) { byte y = Globals.romdata[0x187E8 + i]; byte x = Globals.romdata[0x187BB + i]; byte data = Globals.romdata[0x18842 + i]; byte v = Globals.romdata[0x18815 + 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 objects; }
public List<ObjectRec> 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 objects; }
public static List<ObjectRec> getVictimsFromArray(byte[] romdata, int baseAddr, int objCount) { var objects = new List<ObjectRec>(); for (int i = 0; i < objCount; i++) { int x = Utils.readWord(romdata, baseAddr + i * 12 + 0); int y = Utils.readWord(romdata, baseAddr + i * 12 + 2); int data = Utils.readWord(romdata, baseAddr + i * 12 + 6); int victimAddr = Utils.readInt(romdata, baseAddr + i * 12 + 8); int victimNo = victimAddrToVictimNo(victimAddr); var dataDict = new Dictionary<string,int>(); dataDict["no"] = data; var obj = new ObjectRec(victimNo, 0, 0, x/2, y/2, dataDict); objects.Add(obj); } return objects; }
public List<ObjectRec> 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 objects; }
public static List<ObjectRec> getItemsFromArray(byte[] romdata, int baseAddr, int objCount) { var objects = new List<ObjectRec>(); const int ITEM_REC_LEN = 6; for (int i = 0; i < objCount; i++) { int x = Utils.readWord(romdata, baseAddr + i * ITEM_REC_LEN + 0); int y = Utils.readWord(romdata, baseAddr + i * ITEM_REC_LEN + 2); int t = Utils.readWord(romdata, baseAddr + i * ITEM_REC_LEN + 4); var obj = new ObjectRec(t, 0, 0, x/2, y/2); objects.Add(obj); } return objects; }
private void mapScreen_MouseClick(object sender, MouseEventArgs e) { Point coord = screenNoToCoord(); int type = curActiveBlock; int sx = coord.X, sy = coord.Y; int x = (int)(e.X / curScale); int y = (int)(e.Y / curScale); if (curTool == ToolType.Create) { int scrLevelNo = getLevelRecForGameType().levelNo; int coordXCount = (ConfigScript.getMaxObjCoordX() != -1) ? ConfigScript.getMaxObjCoordX() : ConfigScript.getScreenWidth(scrLevelNo) * 32; int coordYCount = (ConfigScript.getMaxObjCoordY() != -1) ? ConfigScript.getMaxObjCoordY() : ConfigScript.getScreenHeight(scrLevelNo) * 32; int minCoordX = ConfigScript.getMinObjCoordX(); int minCoordY = ConfigScript.getMinObjCoordY(); if (!ConfigScript.getScreenVertical()) { if (x >= coordXCount || y >= coordYCount || x < minCoordX || y < minCoordY) return; } else { if (y >= coordXCount || x >= coordYCount || y < minCoordX || x < minCoordY) return; } dirty = true; if (bindToAxis) { x = (x / 8) * 8; y = (y / 8) * 8; } var dictionary = ConfigScript.getObjectDictionary(type); var obj = new ObjectRec(type, sx, sy, x, y, dictionary); int insertPos = lvObjects.SelectedItems.Count > 0 ? lvObjects.SelectedIndices[0] + 1 : lvObjects.Items.Count; objects.Insert(insertPos, obj); lvObjects.Items.Insert(insertPos, new ListViewItem(makeStringForObject(obj), obj.type)); lbObjectsCount.Text = String.Format("Objects count: {0}/{1}", lvObjects.Items.Count, getLevelRecForGameType().objCount); } else if (curTool == ToolType.Delete) { for (int i = objects.Count - 1; i >= 0; i--) { var obj = objects[i]; if ((obj.sx == sx) && (obj.sy == sy) && (Math.Abs(obj.x - x) < 8) && (Math.Abs(obj.y - y) < 8)) { if (MessageBox.Show("Do you really want to delete object?", "Confirm", MessageBoxButtons.YesNo) != DialogResult.Yes) return; dirty = true; objects.RemoveAt(i); fillObjectsListBox(); break; } } lvObjects.Select(); } mapScreen.Invalidate(); }
private bool isUndefindedObj(ObjectRec obj) { int scrNo = coordToScreenNo(obj); if (scrNo == -1) return false; return (obj.type != 0xFF) && (curLevelLayerData.layer[scrNo] == 0); }
public static List<ObjectList> getObjects(int levelNo) { LevelRec lr = ConfigScript.getLevelRec(levelNo); int objCount = lr.objCount, addr = lr.objectsBeginAddr; var objects = new List<ObjectRec>(); int curAddr = addr; while (objects.Count != objCount) { int baseAddr = curAddr; int v = Utils.readWordUnsigned(Globals.romdata, baseAddr); var dataDict = new Dictionary<string,int>(); if (v < 0xFF00) { int sx, sy, x, y, fromFloor, addX, addY; sx = 0; sy = 0; addX = 0; addY = 0; x = Utils.readWord(Globals.romdata, baseAddr + 8); y = Utils.readWord(Globals.romdata, baseAddr + 10); fromFloor = Utils.readWord(Globals.romdata, baseAddr + 6); if (fromFloor == 0) { x = Utils.readWord(Globals.romdata, baseAddr + 2); //x += Utils.readWord(Globals.romdata, baseAddr + 8)/2; y = Utils.readWord(Globals.romdata, baseAddr + 4); //y += Utils.readWord(Globals.romdata, baseAddr + 10)/2; addX = Utils.readWord(Globals.romdata, baseAddr + 8); addY = Utils.readWord(Globals.romdata, baseAddr + 10); } int data1 = Globals.romdata[baseAddr + 12]; int data2 = Globals.romdata[baseAddr + 13]; //read flags field dataDict["data1"] = data1; dataDict["data2"] = data2; //We don't read it as BYTE, must be WORD, but for now CadEditor can't show WORD in object's data comboBox //read addX field dataDict["data3"] = Globals.romdata[baseAddr + 2]; dataDict["data4"] = Globals.romdata[baseAddr + 3]; //read addY field dataDict["data5"] = Globals.romdata[baseAddr + 4]; dataDict["data6"] = Globals.romdata[baseAddr + 5]; //read real pos Fields as WORDs dataDict["fromFloor"] = fromFloor; dataDict["addX"] = addX; dataDict["addY"] = addY; var obj = new ObjectRec(v, sx, sy, x, y, dataDict); objects.Add(obj); curAddr += OBJ_SIZE; } else { objects.Add(makeCommandObject(v, curAddr)); curAddr += commandDict[v]*2; } } return new List<ObjectList> { new ObjectList { objects = objects, name = "Objects" } }; }
private int coordToScreenNo(ObjectRec obj) { int index = obj.sy * curLevelLayerData.width + obj.sx; if (index < 0 || index >= curLevelLayerData.width * curLevelLayerData.height) return -1; return index; }
private static void saveCommandObject(ObjectRec obj, int baseAddr) { int v = obj.type; var dataDict = obj.additionalData; Utils.writeWord(Globals.romdata, baseAddr, v); for (int i = 0; i < commandDict[v]*2 - 2; i++) Globals.romdata[baseAddr+2+i] = (byte)dataDict[String.Format("data{0}", i)]; }
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 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" } }; }
private void mapScreen_MouseClick(object sender, MouseEventArgs e) { var mouseCoord = new Point(e.X, e.Y); Point coord = mouseCoordToSxSyCoord(mouseCoord); Point ocoord = mouseCoordToCoordInsideScreen(mouseCoord); int type = curActiveBlock; int sx = coord.X, sy = coord.Y; int x = (int)(ocoord.X / curScale); int y = (int)(ocoord.Y / curScale); if (curTool == ToolType.Create) { int scrLevelNo = getLevelRecForGameType().levelNo; int coordXCount = ConfigScript.getScreenWidth(scrLevelNo) * 32; int coordYCount = ConfigScript.getScreenHeight(scrLevelNo) * 32; int minCoordX = 0; int minCoordY = 0; if (!ConfigScript.getScreenVertical()) { if (x >= coordXCount || y >= coordYCount || x < minCoordX || y < minCoordY) { return; } } else { if (y >= coordXCount || x >= coordYCount || y < minCoordX || x < minCoordY) { return; } } setDirty(); if (bindToAxis) { x = (x / 8) * 8; y = (y / 8) * 8; } var dictionary = ConfigScript.getObjectDictionary(curActiveObjectListIndex, type); var obj = new ObjectRec(type, sx, sy, x, y, dictionary); int insertPos = dgvObjects.SelectedRows.Count > 0 ? dgvObjects.SelectedRows[0].Index + 1 : dgvObjects.RowCount; var activeObjectList = objectLists[curActiveObjectListIndex]; activeObjectList.objects.Insert(insertPos, obj); dgvObjects.DataSource = null; fillObjectsDataGrid(); } else if (curTool == ToolType.Delete) { var activeObjectList = objectLists[curActiveObjectListIndex]; //TODO: all for (int i = activeObjectList.objects.Count - 1; i >= 0; i--) { var obj = activeObjectList.objects[i]; if ((obj.sx == sx) && (obj.sy == sy) && (Math.Abs(obj.x - x) < 8) && (Math.Abs(obj.y - y) < 8)) { if (MessageBox.Show("Do you really want to delete object?", "Confirm", MessageBoxButtons.YesNo) != DialogResult.Yes) { return; } setDirty(); dgvObjects.DataSource = null; activeObjectList.objects.RemoveAt(i); fillObjectsDataGrid(); break; } } } mapScreen.Invalidate(); }
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" } }; }
private bool isMouseInside(ObjectRec obj, int x, int y, Image[] sprites) { var bigObject = sprites[obj.type]; return((x > (obj.x - bigObject.Width / 2)) && (x < obj.x + bigObject.Width / 2) && (y > (obj.y - bigObject.Height / 2)) && (y < obj.y + bigObject.Height / 2)); }
private String makeStringForObject(ObjectRec obj) { int screenNo = coordToScreenNo(obj); String ans = String.Format("{0} <{1:X}>", obj.ToString(), screenNo); return ans; }