//-------------------------------------------------------------------------------
    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);
    }
    public static List <ObjectList> 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(new List <ObjectList> {
            new ObjectList {
                objects = objects, name = "Objects"
            }
        });;
    }
Beispiel #3
0
    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 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"
            }
        });
    }
Beispiel #5
0
    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"
            }
        });
    }
    //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"
            }
        });
    }
Beispiel #7
0
    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"
            }
        });
    }
Beispiel #8
0
    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"
            }
        });
    }
Beispiel #9
0
    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"
            }
        });
    }
Beispiel #10
0
    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)];
        }
    }
Beispiel #11
0
    public static ObjectList 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(new ObjectList {
            objects = objects, name = "Items"
        });
    }
Beispiel #12
0
    public static void drawObject(Graphics g, ObjectRec curObject, int listNo, bool isSelected, float curScale, ImageList objectSprites, bool inactive, int leftMargin, int topMargin)
    {
        //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));
        }
    }
Beispiel #13
0
    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"
            }
        });
    }
Beispiel #14
0
    public static ObjectList 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(new ObjectList {
            objects = objects, name = "Victims"
        });
    }
Beispiel #15
0
    public static List <ObjectList> getObjectsNemo(int levelNo)
    {
        LevelRec lr = ConfigScript.getLevelRec(levelNo);
        int      objCount = lr.objCount, addr = lr.objectsBeginAddr;
        var      objects = new List <ObjectRec>();

        var objScreenAddr = ConfigScript.getPalBytesAddr(); //not palBytes, but object sx/sy decode
        int screenIndex   = 0;

        for (int i = 0; i < objCount; i++)
        {
            //read, how many objects at current screen
            while (true)
            {
                int curIndex  = Globals.romdata[objScreenAddr];
                int nextIndex = Globals.romdata[objScreenAddr + 1];
                if (i < nextIndex)
                {
                    break;
                }
                objScreenAddr++;
                screenIndex++;
            }
            int sx = screenIndex % lr.width;
            int sy = screenIndex / lr.width;
            //
            int v   = Globals.romdata[addr + i * 2 + 0];
            int xy  = Globals.romdata[addr + i * 2 + 1];
            int x   = (xy >> 4) * 16;
            int y   = (xy & 0x0F) * 16;
            var obj = new ObjectRec(v, sx, sy, x, y);
            objects.Add(obj);
            //hack for .NET optimizer(?). It fails to forever loop, if no this string
            var a = i.ToString();
        }
        return(new List <ObjectList> {
            new ObjectList {
                objects = objects, name = "Objects"
            }
        });
    }
    //-------------------------------------------------------------------------------
    public List <ObjectRec> getEnemies(int levelNo)
    {
        LevelRec lr       = ConfigScript.getLevelRec(levelNo);
        int      objCount = lr.objCount;
        var      objects  = new List <ObjectRec>();
        int      baseAddr = lr.objectsBeginAddr;

        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);
    }
Beispiel #17
0
    //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 * 16;
            int  realy = y * 16;
            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"
            }
        });
    }
Beispiel #18
0
    public static void drawObjectBig(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) * curScale) + leftMargin, (int)((y - ysize) * 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);
        }
    }
Beispiel #19
0
    public List <ObjectList> 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(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 <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++)
        {
            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(new List <ObjectList> {
            new ObjectList {
                objects = objects, name = "Objects"
            }
        });
    }
Beispiel #21
0
    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>();
        int      objSize  = 6;

        for (int i = 0; i < objCount; i++)
        {
            int dirIndex = Globals.romdata[baseAddr + objSize * i + 0];
            int type     = Globals.romdata[baseAddr + objSize * i + 1];
            int flags1   = Globals.romdata[baseAddr + objSize * i + 2];
            int x        = Globals.romdata[baseAddr + objSize * i + 3];
            int flags2   = Globals.romdata[baseAddr + objSize * i + 4];
            int y        = Globals.romdata[baseAddr + objSize * i + 5];

            int direction = dirIndex & 0x40;
            int index     = dirIndex & 0x3F;
            var dataDict  = new Dictionary <string, int>();
            dataDict["direction"] = direction;
            dataDict["index"]     = index;
            dataDict["flags1"]    = flags1;
            dataDict["flags2"]    = flags2;
            int scrX  = (x >> 4) - 1;
            int realX = (x & 0x0F) * 16;
            int scrY  = (y >> 4) - 1;
            int realY = (y & 0x0F) * 16;
            var obj   = new ObjectRec(type, scrX, scrY, realX, realY, dataDict);
            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 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(new List <ObjectList> {
            new ObjectList {
                objects = objects, name = "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"
            }
        });
    }
Beispiel #24
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"
            }
        });
    }
Beispiel #25
0
    public static bool selectObjectBig(ObjectRec obj, Image[] objectSprites, int x, int y)
    {
        var bigObject = objectSprites[obj.type];

        return((x > obj.x - bigObject.Width) && (x < obj.x) && (y > obj.y - bigObject.Height) && (y < obj.y));
    }