public MapObject(Room_Object rObj) { Name = rObj.Name; Permanent = rObj.Permanent; Passible = false; ObjShape = new RectangleObj(new mPoint(rObj.Origin_U, rObj.Origin_V), rObj.Width_U, rObj.Length_V); }
public void loadLayout(int layout) { int pointer = ROM.ReadLong(Constants.room_object_layout_pointer); pointer = Utils.SnesToPc(pointer); int layout_address = ROM.ReadLong(pointer + (layout * 3)); int layout_location = Utils.SnesToPc(layout_address); int pos = layout_location; byte b1 = 0; byte b2 = 0; byte b3 = 0; byte posX = 0; byte posY = 0; byte sizeX = 0; byte sizeY = 0; byte sizeXY = 0; short oid = 0; int layer = 0; while (true) { b1 = ROM.DATA[pos]; b2 = ROM.DATA[pos + 1]; if (b1 == 0xFF && b2 == 0xFF) { break; } b3 = ROM.DATA[pos + 2]; pos += 3; //we jump to layer2 if (b3 >= 0xF8) { oid = (short)((b3 << 4) | 0x80 + (((b2 & 0x03) << 2) + ((b1 & 0x03)))); posX = (byte)((b1 & 0xFC) >> 2); posY = (byte)((b2 & 0xFC) >> 2); sizeXY = (byte)((((b1 & 0x03) << 2) + (b2 & 0x03))); } else //subtype1 { oid = b3; posX = (byte)((b1 & 0xFC) >> 2); posY = (byte)((b2 & 0xFC) >> 2); sizeX = (byte)((b1 & 0x03)); sizeY = (byte)((b2 & 0x03)); sizeXY = (byte)(((sizeX << 2) + sizeY)); } if (b1 >= 0xFC) //subtype2 (not scalable? ) { oid = (short)((b3 & 0x3F) + 0x100); posX = (byte)(((b2 & 0xF0) >> 4) + ((b1 & 0x3) << 4)); posY = (byte)(((b2 & 0x0F) << 2) + ((b3 & 0xC0) >> 6)); sizeXY = 0; } Room_Object r = addObject(oid, posX, posY, sizeXY, (byte)layer); if (r != null) { r.options |= ObjectOption.Bgr; tilesLayoutObjects.Add(r); } } }
protected virtual void Door_Room_Setup() { //Spawn 4 Walls Room_Object ro = null; Quaternion room_Rotation; //Remember to Set the Correct Rect in accordance with how a rectangle is oriented Rectangle bounds = new Rectangle(20, 2); //Far Left Wall if (door_West == 0) { ro = new Wall(); } else if (door_West == 1) { ro = new Door(); } room_Rotation = Quaternion.Euler(-180, 0, 90); ro.Setup(globalPos_X - 14, globalPos_Y, room_Rotation, bounds); room_Objects.Add(ro); //Far Right Wall if (door_East == 0) { ro = new Wall(); } else if (door_East == 1) { ro = new Door(); } room_Rotation = Quaternion.Euler(-180, 0, 90); ro.Setup(globalPos_X + 14, globalPos_Y, room_Rotation, bounds); room_Objects.Add(ro); bounds = new Rectangle(2, 20); //Far North Wall if (door_North == 0) { ro = new Wall(); } else if (door_North == 1) { ro = new Door(); } room_Rotation = Quaternion.Euler(-180, 0, 0); ro.Setup(globalPos_X, globalPos_Y + 14, room_Rotation, bounds); room_Objects.Add(ro); //Far South Wall if (door_South == 0) { ro = new Wall(); } else if (door_South == 1) { ro = new Door(); } room_Rotation = Quaternion.Euler(-180, 0, 0); ro.Setup(globalPos_X, globalPos_Y - 14, room_Rotation, bounds); room_Objects.Add(ro); }