diff --git a/.gitignore b/.gitignore index 9ffc6eb..bf099f8 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ *.swp .DS_Store Build +Thumbs.db diff --git a/Assets/Dialog/SwampThang/SwampThang.script b/Assets/Dialog/SwampThang/SwampThang.script deleted file mode 100644 index e69de29..0000000 diff --git a/Data/Dialog/Talk/Indeed..gtx b/Data/Dialog/Talk/Indeed..gtx deleted file mode 100644 index e69de29..0000000 diff --git a/Data/Levels/L0001.lvl b/Data/Levels/L0001.lvl deleted file mode 100644 index 23a13a6..0000000 Binary files a/Data/Levels/L0001.lvl and /dev/null differ diff --git a/Data/Levels/L0002.lvl b/Data/Levels/L0002.lvl deleted file mode 100644 index 8e8f71f..0000000 Binary files a/Data/Levels/L0002.lvl and /dev/null differ diff --git a/Data/Levels/L0005.lvl b/Data/Levels/L0005.lvl deleted file mode 100644 index f20c3e5..0000000 Binary files a/Data/Levels/L0005.lvl and /dev/null differ diff --git a/Data/Levels/L0006_sunsetvill.lvl b/Data/Levels/L0006_sunsetvill.lvl deleted file mode 100644 index 025edd7..0000000 Binary files a/Data/Levels/L0006_sunsetvill.lvl and /dev/null differ diff --git a/Data/Levels/L0412_sunsethousedown.lvl b/Data/Levels/L0412_sunsethousedown.lvl deleted file mode 100644 index 48c687c..0000000 Binary files a/Data/Levels/L0412_sunsethousedown.lvl and /dev/null differ diff --git a/Data/Levels/L0412_sunsethouseup.lvl b/Data/Levels/L0412_sunsethouseup.lvl deleted file mode 100644 index f4f64d4..0000000 Binary files a/Data/Levels/L0412_sunsethouseup.lvl and /dev/null differ diff --git a/Data/Tiles/bgTiles1-228.bin b/Data/Tiles/bgTiles1-228.bin deleted file mode 100644 index 56dd56e..0000000 Binary files a/Data/Tiles/bgTiles1-228.bin and /dev/null differ diff --git a/Data/Tiles/fgTiles2048-2219.bin b/Data/Tiles/fgTiles2048-2219.bin deleted file mode 100644 index 5f6d7f7..0000000 Binary files a/Data/Tiles/fgTiles2048-2219.bin and /dev/null differ diff --git a/Data/Tiles/fgTiles2048-2253.bin b/Data/Tiles/fgTiles2048-2253.bin deleted file mode 100644 index 888e403..0000000 Binary files a/Data/Tiles/fgTiles2048-2253.bin and /dev/null differ diff --git a/Data/Tiles/fgTiles2048-2292.bin b/Data/Tiles/fgTiles2048-2292.bin deleted file mode 100644 index 803cfbf..0000000 Binary files a/Data/Tiles/fgTiles2048-2292.bin and /dev/null differ diff --git a/Data/Tiles/fgTiles2048-2296.bin b/Data/Tiles/fgTiles2048-2296.bin deleted file mode 100644 index 393b19a..0000000 Binary files a/Data/Tiles/fgTiles2048-2296.bin and /dev/null differ diff --git a/Data/Tiles/fgTiles2048-2297.bin b/Data/Tiles/fgTiles2048-2297.bin deleted file mode 100644 index 987da69..0000000 Binary files a/Data/Tiles/fgTiles2048-2297.bin and /dev/null differ diff --git a/Data/Tiles/fgTiles2048-2300.bin b/Data/Tiles/fgTiles2048-2300.bin deleted file mode 100644 index 7ad484f..0000000 Binary files a/Data/Tiles/fgTiles2048-2300.bin and /dev/null differ diff --git a/Media/DesignDocs/WorldMap.xls b/Media/DesignDocs/WorldMap.xls index f7d6b71..d04f906 100644 Binary files a/Media/DesignDocs/WorldMap.xls and b/Media/DesignDocs/WorldMap.xls differ diff --git a/Media/Levels/0000.png b/Media/Levels/0000.png new file mode 100644 index 0000000..6f5fa87 Binary files /dev/null and b/Media/Levels/0000.png differ diff --git a/Media/Levels/0001.png b/Media/Levels/0001.png new file mode 100644 index 0000000..0a85999 Binary files /dev/null and b/Media/Levels/0001.png differ diff --git a/Media/Levels/0002.png b/Media/Levels/0002.png new file mode 100644 index 0000000..6491c46 Binary files /dev/null and b/Media/Levels/0002.png differ diff --git a/Media/Levels/0003.png b/Media/Levels/0003.png new file mode 100644 index 0000000..bcf879a Binary files /dev/null and b/Media/Levels/0003.png differ diff --git a/Media/Levels/0004.png b/Media/Levels/0004.png new file mode 100644 index 0000000..363a24d Binary files /dev/null and b/Media/Levels/0004.png differ diff --git a/Media/Levels/0005.png b/Media/Levels/0005.png new file mode 100644 index 0000000..24bfef8 Binary files /dev/null and b/Media/Levels/0005.png differ diff --git a/Media/Levels/0006.png b/Media/Levels/0006.png new file mode 100644 index 0000000..7135c81 Binary files /dev/null and b/Media/Levels/0006.png differ diff --git a/Media/Levels/0007.png b/Media/Levels/0007.png new file mode 100644 index 0000000..d4e7b9f Binary files /dev/null and b/Media/Levels/0007.png differ diff --git a/Media/Levels/0008.png b/Media/Levels/0008.png new file mode 100644 index 0000000..b3f3be8 Binary files /dev/null and b/Media/Levels/0008.png differ diff --git a/Media/Levels/0009.png b/Media/Levels/0009.png new file mode 100644 index 0000000..5fddbec Binary files /dev/null and b/Media/Levels/0009.png differ diff --git a/Media/Levels/0010.png b/Media/Levels/0010.png new file mode 100644 index 0000000..ab7a644 Binary files /dev/null and b/Media/Levels/0010.png differ diff --git a/Media/Levels/0011.png b/Media/Levels/0011.png new file mode 100644 index 0000000..43bfb59 Binary files /dev/null and b/Media/Levels/0011.png differ diff --git a/Media/Levels/0012.png b/Media/Levels/0012.png new file mode 100644 index 0000000..5079bb0 Binary files /dev/null and b/Media/Levels/0012.png differ diff --git a/Media/Levels/0013.png b/Media/Levels/0013.png new file mode 100644 index 0000000..44ded68 Binary files /dev/null and b/Media/Levels/0013.png differ diff --git a/Media/Levels/0014.png b/Media/Levels/0014.png new file mode 100644 index 0000000..6c6f3bf Binary files /dev/null and b/Media/Levels/0014.png differ diff --git a/Media/Levels/0015.png b/Media/Levels/0015.png new file mode 100644 index 0000000..d18762f Binary files /dev/null and b/Media/Levels/0015.png differ diff --git a/Media/Levels/0100.png b/Media/Levels/0100.png new file mode 100644 index 0000000..609d313 Binary files /dev/null and b/Media/Levels/0100.png differ diff --git a/Media/Levels/0101.png b/Media/Levels/0101.png new file mode 100644 index 0000000..609d313 Binary files /dev/null and b/Media/Levels/0101.png differ diff --git a/Media/Levels/0102.png b/Media/Levels/0102.png new file mode 100644 index 0000000..1163f60 Binary files /dev/null and b/Media/Levels/0102.png differ diff --git a/Media/Levels/0103.png b/Media/Levels/0103.png new file mode 100644 index 0000000..e73c1c1 Binary files /dev/null and b/Media/Levels/0103.png differ diff --git a/Media/Levels/0104.png b/Media/Levels/0104.png new file mode 100644 index 0000000..7eb5bd5 Binary files /dev/null and b/Media/Levels/0104.png differ diff --git a/Media/Levels/0105.png b/Media/Levels/0105.png new file mode 100644 index 0000000..aadd07b Binary files /dev/null and b/Media/Levels/0105.png differ diff --git a/Media/Levels/0106.png b/Media/Levels/0106.png new file mode 100644 index 0000000..9372366 Binary files /dev/null and b/Media/Levels/0106.png differ diff --git a/Media/Levels/0107.png b/Media/Levels/0107.png new file mode 100644 index 0000000..fdadfb0 Binary files /dev/null and b/Media/Levels/0107.png differ diff --git a/Media/Levels/0108.png b/Media/Levels/0108.png new file mode 100644 index 0000000..0702994 Binary files /dev/null and b/Media/Levels/0108.png differ diff --git a/Media/Levels/0109.png b/Media/Levels/0109.png new file mode 100644 index 0000000..3248892 Binary files /dev/null and b/Media/Levels/0109.png differ diff --git a/Media/Levels/0110.png b/Media/Levels/0110.png new file mode 100644 index 0000000..3b3c760 Binary files /dev/null and b/Media/Levels/0110.png differ diff --git a/Media/Levels/0111.png b/Media/Levels/0111.png new file mode 100644 index 0000000..6cdaa37 Binary files /dev/null and b/Media/Levels/0111.png differ diff --git a/Media/Levels/0112.png b/Media/Levels/0112.png new file mode 100644 index 0000000..c669c02 Binary files /dev/null and b/Media/Levels/0112.png differ diff --git a/Media/Levels/0113.png b/Media/Levels/0113.png new file mode 100644 index 0000000..d75e2bc Binary files /dev/null and b/Media/Levels/0113.png differ diff --git a/Media/Levels/0114.png b/Media/Levels/0114.png new file mode 100644 index 0000000..0120492 Binary files /dev/null and b/Media/Levels/0114.png differ diff --git a/Media/Levels/0115.png b/Media/Levels/0115.png new file mode 100644 index 0000000..5226b6b Binary files /dev/null and b/Media/Levels/0115.png differ diff --git a/Media/Levels/0200.png b/Media/Levels/0200.png new file mode 100644 index 0000000..7991eaa Binary files /dev/null and b/Media/Levels/0200.png differ diff --git a/Media/Levels/0201.png b/Media/Levels/0201.png new file mode 100644 index 0000000..84d0f73 Binary files /dev/null and b/Media/Levels/0201.png differ diff --git a/Media/Levels/0202.png b/Media/Levels/0202.png new file mode 100644 index 0000000..1e82fd8 Binary files /dev/null and b/Media/Levels/0202.png differ diff --git a/Media/Levels/0203.png b/Media/Levels/0203.png new file mode 100644 index 0000000..609d313 Binary files /dev/null and b/Media/Levels/0203.png differ diff --git a/Media/Levels/0204.png b/Media/Levels/0204.png new file mode 100644 index 0000000..609d313 Binary files /dev/null and b/Media/Levels/0204.png differ diff --git a/Media/Levels/0205.png b/Media/Levels/0205.png new file mode 100644 index 0000000..38d097f Binary files /dev/null and b/Media/Levels/0205.png differ diff --git a/Media/Levels/0206.png b/Media/Levels/0206.png new file mode 100644 index 0000000..609d313 Binary files /dev/null and b/Media/Levels/0206.png differ diff --git a/Media/Levels/0207.png b/Media/Levels/0207.png new file mode 100644 index 0000000..609d313 Binary files /dev/null and b/Media/Levels/0207.png differ diff --git a/Media/Levels/0208.png b/Media/Levels/0208.png new file mode 100644 index 0000000..609d313 Binary files /dev/null and b/Media/Levels/0208.png differ diff --git a/Media/Levels/0209.png b/Media/Levels/0209.png new file mode 100644 index 0000000..609d313 Binary files /dev/null and b/Media/Levels/0209.png differ diff --git a/Media/Levels/0210.png b/Media/Levels/0210.png new file mode 100644 index 0000000..609d313 Binary files /dev/null and b/Media/Levels/0210.png differ diff --git a/Media/Levels/0211.png b/Media/Levels/0211.png new file mode 100644 index 0000000..67fddb6 Binary files /dev/null and b/Media/Levels/0211.png differ diff --git a/Media/Levels/0212.png b/Media/Levels/0212.png new file mode 100644 index 0000000..8d6eec6 Binary files /dev/null and b/Media/Levels/0212.png differ diff --git a/Media/Levels/0213.png b/Media/Levels/0213.png new file mode 100644 index 0000000..a203859 Binary files /dev/null and b/Media/Levels/0213.png differ diff --git a/Media/Levels/0214.png b/Media/Levels/0214.png new file mode 100644 index 0000000..e789db3 Binary files /dev/null and b/Media/Levels/0214.png differ diff --git a/Media/Levels/0215.png b/Media/Levels/0215.png new file mode 100644 index 0000000..cb59853 Binary files /dev/null and b/Media/Levels/0215.png differ diff --git a/Media/Levels/0300.png b/Media/Levels/0300.png new file mode 100644 index 0000000..94e0cf6 Binary files /dev/null and b/Media/Levels/0300.png differ diff --git a/Media/Levels/0301.png b/Media/Levels/0301.png new file mode 100644 index 0000000..08825d0 Binary files /dev/null and b/Media/Levels/0301.png differ diff --git a/Media/Levels/0302.png b/Media/Levels/0302.png new file mode 100644 index 0000000..1e5f19a Binary files /dev/null and b/Media/Levels/0302.png differ diff --git a/Media/Levels/0303.png b/Media/Levels/0303.png new file mode 100644 index 0000000..273656f Binary files /dev/null and b/Media/Levels/0303.png differ diff --git a/Media/Levels/0304.png b/Media/Levels/0304.png new file mode 100644 index 0000000..d0a7c8c Binary files /dev/null and b/Media/Levels/0304.png differ diff --git a/Media/Levels/0305.png b/Media/Levels/0305.png new file mode 100644 index 0000000..0fdf20d Binary files /dev/null and b/Media/Levels/0305.png differ diff --git a/Media/Levels/0306.png b/Media/Levels/0306.png new file mode 100644 index 0000000..bb25887 Binary files /dev/null and b/Media/Levels/0306.png differ diff --git a/Media/Levels/0307.png b/Media/Levels/0307.png new file mode 100644 index 0000000..0173b04 Binary files /dev/null and b/Media/Levels/0307.png differ diff --git a/Media/Levels/0308.png b/Media/Levels/0308.png new file mode 100644 index 0000000..d217c8c Binary files /dev/null and b/Media/Levels/0308.png differ diff --git a/Media/Levels/0309.png b/Media/Levels/0309.png new file mode 100644 index 0000000..50061e0 Binary files /dev/null and b/Media/Levels/0309.png differ diff --git a/Media/Levels/0310.png b/Media/Levels/0310.png new file mode 100644 index 0000000..4b966ea Binary files /dev/null and b/Media/Levels/0310.png differ diff --git a/Media/Levels/0311.png b/Media/Levels/0311.png new file mode 100644 index 0000000..6edfd88 Binary files /dev/null and b/Media/Levels/0311.png differ diff --git a/Media/Levels/0312.png b/Media/Levels/0312.png new file mode 100644 index 0000000..4fbe877 Binary files /dev/null and b/Media/Levels/0312.png differ diff --git a/Media/Levels/0313.png b/Media/Levels/0313.png new file mode 100644 index 0000000..96310c6 Binary files /dev/null and b/Media/Levels/0313.png differ diff --git a/Media/Levels/0314.png b/Media/Levels/0314.png new file mode 100644 index 0000000..d893293 Binary files /dev/null and b/Media/Levels/0314.png differ diff --git a/Media/Levels/0315.png b/Media/Levels/0315.png new file mode 100644 index 0000000..47c59a0 Binary files /dev/null and b/Media/Levels/0315.png differ diff --git a/Media/Levels/0400.png b/Media/Levels/0400.png new file mode 100644 index 0000000..78d3b8b Binary files /dev/null and b/Media/Levels/0400.png differ diff --git a/Media/Levels/0401.png b/Media/Levels/0401.png new file mode 100644 index 0000000..601f265 Binary files /dev/null and b/Media/Levels/0401.png differ diff --git a/Media/Levels/0402.png b/Media/Levels/0402.png new file mode 100644 index 0000000..25c13ce Binary files /dev/null and b/Media/Levels/0402.png differ diff --git a/Media/Levels/0403.png b/Media/Levels/0403.png new file mode 100644 index 0000000..6140cca Binary files /dev/null and b/Media/Levels/0403.png differ diff --git a/Media/Levels/0404.png b/Media/Levels/0404.png new file mode 100644 index 0000000..6ebbc14 Binary files /dev/null and b/Media/Levels/0404.png differ diff --git a/Media/Levels/0405.png b/Media/Levels/0405.png new file mode 100644 index 0000000..1f054a8 Binary files /dev/null and b/Media/Levels/0405.png differ diff --git a/Media/Levels/0406.png b/Media/Levels/0406.png new file mode 100644 index 0000000..d41ce05 Binary files /dev/null and b/Media/Levels/0406.png differ diff --git a/Media/Levels/0407.png b/Media/Levels/0407.png new file mode 100644 index 0000000..78a7811 Binary files /dev/null and b/Media/Levels/0407.png differ diff --git a/Media/Levels/0408.png b/Media/Levels/0408.png new file mode 100644 index 0000000..e141e4c Binary files /dev/null and b/Media/Levels/0408.png differ diff --git a/Media/Levels/0409.png b/Media/Levels/0409.png new file mode 100644 index 0000000..d6f2a14 Binary files /dev/null and b/Media/Levels/0409.png differ diff --git a/Media/Levels/0410.png b/Media/Levels/0410.png new file mode 100644 index 0000000..0f9854e Binary files /dev/null and b/Media/Levels/0410.png differ diff --git a/Media/Levels/0411.png b/Media/Levels/0411.png new file mode 100644 index 0000000..797764b Binary files /dev/null and b/Media/Levels/0411.png differ diff --git a/Media/Levels/0412.png b/Media/Levels/0412.png new file mode 100644 index 0000000..d901494 Binary files /dev/null and b/Media/Levels/0412.png differ diff --git a/Media/Levels/0500.png b/Media/Levels/0500.png new file mode 100644 index 0000000..ab0df7b Binary files /dev/null and b/Media/Levels/0500.png differ diff --git a/Media/Levels/0501.png b/Media/Levels/0501.png new file mode 100644 index 0000000..4879a42 Binary files /dev/null and b/Media/Levels/0501.png differ diff --git a/Media/Levels/0502.png b/Media/Levels/0502.png new file mode 100644 index 0000000..65e7c7e Binary files /dev/null and b/Media/Levels/0502.png differ diff --git a/Media/Levels/0503.png b/Media/Levels/0503.png new file mode 100644 index 0000000..5278f8e Binary files /dev/null and b/Media/Levels/0503.png differ diff --git a/Media/Levels/0504.png b/Media/Levels/0504.png new file mode 100644 index 0000000..a076a35 Binary files /dev/null and b/Media/Levels/0504.png differ diff --git a/Media/Levels/0505.png b/Media/Levels/0505.png new file mode 100644 index 0000000..2197e66 Binary files /dev/null and b/Media/Levels/0505.png differ diff --git a/Media/Levels/0506.png b/Media/Levels/0506.png new file mode 100644 index 0000000..cf0085b Binary files /dev/null and b/Media/Levels/0506.png differ diff --git a/Media/Levels/0507.png b/Media/Levels/0507.png new file mode 100644 index 0000000..a6c0f61 Binary files /dev/null and b/Media/Levels/0507.png differ diff --git a/Media/Levels/0508.png b/Media/Levels/0508.png new file mode 100644 index 0000000..bf64f1b Binary files /dev/null and b/Media/Levels/0508.png differ diff --git a/Media/Levels/0509.png b/Media/Levels/0509.png new file mode 100644 index 0000000..7567a52 Binary files /dev/null and b/Media/Levels/0509.png differ diff --git a/Media/Levels/0510.png b/Media/Levels/0510.png new file mode 100644 index 0000000..2b53ec3 Binary files /dev/null and b/Media/Levels/0510.png differ diff --git a/Media/Levels/0512.png b/Media/Levels/0512.png new file mode 100644 index 0000000..aea25c9 Binary files /dev/null and b/Media/Levels/0512.png differ diff --git a/Media/Levels/0600.png b/Media/Levels/0600.png new file mode 100644 index 0000000..7531d12 Binary files /dev/null and b/Media/Levels/0600.png differ diff --git a/Media/Levels/0601.png b/Media/Levels/0601.png new file mode 100644 index 0000000..8d93768 Binary files /dev/null and b/Media/Levels/0601.png differ diff --git a/Media/Levels/0602.png b/Media/Levels/0602.png new file mode 100644 index 0000000..4938b28 Binary files /dev/null and b/Media/Levels/0602.png differ diff --git a/Media/Levels/0603.png b/Media/Levels/0603.png new file mode 100644 index 0000000..dbb8f02 Binary files /dev/null and b/Media/Levels/0603.png differ diff --git a/Media/Levels/0604.png b/Media/Levels/0604.png new file mode 100644 index 0000000..b9d3ce2 Binary files /dev/null and b/Media/Levels/0604.png differ diff --git a/Media/Levels/0605.png b/Media/Levels/0605.png new file mode 100644 index 0000000..7683bc2 Binary files /dev/null and b/Media/Levels/0605.png differ diff --git a/Media/Levels/0606.png b/Media/Levels/0606.png new file mode 100644 index 0000000..a15d2bb Binary files /dev/null and b/Media/Levels/0606.png differ diff --git a/Media/Levels/0607.png b/Media/Levels/0607.png new file mode 100644 index 0000000..7dae9b7 Binary files /dev/null and b/Media/Levels/0607.png differ diff --git a/Media/Levels/0608.png b/Media/Levels/0608.png new file mode 100644 index 0000000..e4c8596 Binary files /dev/null and b/Media/Levels/0608.png differ diff --git a/Media/Levels/0609.png b/Media/Levels/0609.png new file mode 100644 index 0000000..3ac0831 Binary files /dev/null and b/Media/Levels/0609.png differ diff --git a/Media/Levels/0610.png b/Media/Levels/0610.png new file mode 100644 index 0000000..76b495c Binary files /dev/null and b/Media/Levels/0610.png differ diff --git a/Media/Levels/0612.png b/Media/Levels/0612.png new file mode 100644 index 0000000..db47ad6 Binary files /dev/null and b/Media/Levels/0612.png differ diff --git a/Media/Levels/0700.png b/Media/Levels/0700.png new file mode 100644 index 0000000..f787fcf Binary files /dev/null and b/Media/Levels/0700.png differ diff --git a/Media/Levels/0701.png b/Media/Levels/0701.png new file mode 100644 index 0000000..d859916 Binary files /dev/null and b/Media/Levels/0701.png differ diff --git a/Media/Levels/0702.png b/Media/Levels/0702.png new file mode 100644 index 0000000..22e6932 Binary files /dev/null and b/Media/Levels/0702.png differ diff --git a/Media/Levels/0703.png b/Media/Levels/0703.png new file mode 100644 index 0000000..f3c600d Binary files /dev/null and b/Media/Levels/0703.png differ diff --git a/Media/Levels/0704.png b/Media/Levels/0704.png new file mode 100644 index 0000000..df52784 Binary files /dev/null and b/Media/Levels/0704.png differ diff --git a/Media/Levels/0705.png b/Media/Levels/0705.png new file mode 100644 index 0000000..37f50fd Binary files /dev/null and b/Media/Levels/0705.png differ diff --git a/Media/Levels/0706.png b/Media/Levels/0706.png new file mode 100644 index 0000000..ab91969 Binary files /dev/null and b/Media/Levels/0706.png differ diff --git a/Media/Levels/0707.png b/Media/Levels/0707.png new file mode 100644 index 0000000..613668e Binary files /dev/null and b/Media/Levels/0707.png differ diff --git a/Media/Levels/0708.png b/Media/Levels/0708.png new file mode 100644 index 0000000..98ecd91 Binary files /dev/null and b/Media/Levels/0708.png differ diff --git a/Media/Levels/0709.png b/Media/Levels/0709.png new file mode 100644 index 0000000..3d79b8f Binary files /dev/null and b/Media/Levels/0709.png differ diff --git a/Media/Levels/0710.png b/Media/Levels/0710.png new file mode 100644 index 0000000..55ddd23 Binary files /dev/null and b/Media/Levels/0710.png differ diff --git a/Media/Levels/0711.png b/Media/Levels/0711.png new file mode 100644 index 0000000..877ea34 Binary files /dev/null and b/Media/Levels/0711.png differ diff --git a/Media/Levels/0712.png b/Media/Levels/0712.png new file mode 100644 index 0000000..29c54d4 Binary files /dev/null and b/Media/Levels/0712.png differ diff --git a/Media/Levels/0800.png b/Media/Levels/0800.png new file mode 100644 index 0000000..a591770 Binary files /dev/null and b/Media/Levels/0800.png differ diff --git a/Media/Levels/0801.png b/Media/Levels/0801.png new file mode 100644 index 0000000..0ed21df Binary files /dev/null and b/Media/Levels/0801.png differ diff --git a/Media/Levels/0802.png b/Media/Levels/0802.png new file mode 100644 index 0000000..531dca9 Binary files /dev/null and b/Media/Levels/0802.png differ diff --git a/Media/Levels/0803.png b/Media/Levels/0803.png new file mode 100644 index 0000000..2e3633c Binary files /dev/null and b/Media/Levels/0803.png differ diff --git a/Media/Levels/0804.png b/Media/Levels/0804.png new file mode 100644 index 0000000..f29e98e Binary files /dev/null and b/Media/Levels/0804.png differ diff --git a/Media/Levels/0805.png b/Media/Levels/0805.png new file mode 100644 index 0000000..c829979 Binary files /dev/null and b/Media/Levels/0805.png differ diff --git a/Media/Levels/0806.png b/Media/Levels/0806.png new file mode 100644 index 0000000..8c41192 Binary files /dev/null and b/Media/Levels/0806.png differ diff --git a/Media/Levels/0807.png b/Media/Levels/0807.png new file mode 100644 index 0000000..769a9d3 Binary files /dev/null and b/Media/Levels/0807.png differ diff --git a/Media/Levels/0808.png b/Media/Levels/0808.png new file mode 100644 index 0000000..a91a439 Binary files /dev/null and b/Media/Levels/0808.png differ diff --git a/Media/Levels/0809.png b/Media/Levels/0809.png new file mode 100644 index 0000000..ea2e759 Binary files /dev/null and b/Media/Levels/0809.png differ diff --git a/Media/Levels/0810.png b/Media/Levels/0810.png new file mode 100644 index 0000000..d393518 Binary files /dev/null and b/Media/Levels/0810.png differ diff --git a/Media/Levels/0811.png b/Media/Levels/0811.png new file mode 100644 index 0000000..37988fa Binary files /dev/null and b/Media/Levels/0811.png differ diff --git a/Media/Levels/0812.png b/Media/Levels/0812.png new file mode 100644 index 0000000..df7e00b Binary files /dev/null and b/Media/Levels/0812.png differ diff --git a/Media/Levels/0900.png b/Media/Levels/0900.png new file mode 100644 index 0000000..c91fc88 Binary files /dev/null and b/Media/Levels/0900.png differ diff --git a/Media/Levels/0901.png b/Media/Levels/0901.png new file mode 100644 index 0000000..59b0efc Binary files /dev/null and b/Media/Levels/0901.png differ diff --git a/Media/Levels/0902.png b/Media/Levels/0902.png new file mode 100644 index 0000000..1a79371 Binary files /dev/null and b/Media/Levels/0902.png differ diff --git a/Media/Levels/0903.png b/Media/Levels/0903.png new file mode 100644 index 0000000..c47809c Binary files /dev/null and b/Media/Levels/0903.png differ diff --git a/Media/Levels/0904.png b/Media/Levels/0904.png new file mode 100644 index 0000000..afef2db Binary files /dev/null and b/Media/Levels/0904.png differ diff --git a/Media/Levels/0905.png b/Media/Levels/0905.png new file mode 100644 index 0000000..e939af3 Binary files /dev/null and b/Media/Levels/0905.png differ diff --git a/Media/Levels/0906.png b/Media/Levels/0906.png new file mode 100644 index 0000000..130dab1 Binary files /dev/null and b/Media/Levels/0906.png differ diff --git a/Media/Levels/0907.png b/Media/Levels/0907.png new file mode 100644 index 0000000..f5a50f5 Binary files /dev/null and b/Media/Levels/0907.png differ diff --git a/Media/Levels/0908.png b/Media/Levels/0908.png new file mode 100644 index 0000000..2fc3275 Binary files /dev/null and b/Media/Levels/0908.png differ diff --git a/Media/Levels/0909.png b/Media/Levels/0909.png new file mode 100644 index 0000000..ec7e424 Binary files /dev/null and b/Media/Levels/0909.png differ diff --git a/Media/Levels/0910.png b/Media/Levels/0910.png new file mode 100644 index 0000000..3887d30 Binary files /dev/null and b/Media/Levels/0910.png differ diff --git a/Media/Levels/0911.png b/Media/Levels/0911.png new file mode 100644 index 0000000..66ba784 Binary files /dev/null and b/Media/Levels/0911.png differ diff --git a/Media/Levels/0912.png b/Media/Levels/0912.png new file mode 100644 index 0000000..14e2b96 Binary files /dev/null and b/Media/Levels/0912.png differ diff --git a/Media/Levels/1000.png b/Media/Levels/1000.png new file mode 100644 index 0000000..a22588e Binary files /dev/null and b/Media/Levels/1000.png differ diff --git a/Media/Levels/1001.png b/Media/Levels/1001.png new file mode 100644 index 0000000..7ba0ba5 Binary files /dev/null and b/Media/Levels/1001.png differ diff --git a/Media/Levels/1002.png b/Media/Levels/1002.png new file mode 100644 index 0000000..28d135f Binary files /dev/null and b/Media/Levels/1002.png differ diff --git a/Media/Levels/1003.png b/Media/Levels/1003.png new file mode 100644 index 0000000..4428a17 Binary files /dev/null and b/Media/Levels/1003.png differ diff --git a/Media/Levels/1004.png b/Media/Levels/1004.png new file mode 100644 index 0000000..e3ed32b Binary files /dev/null and b/Media/Levels/1004.png differ diff --git a/Media/Levels/1005.png b/Media/Levels/1005.png new file mode 100644 index 0000000..c209b14 Binary files /dev/null and b/Media/Levels/1005.png differ diff --git a/Media/Levels/1006.png b/Media/Levels/1006.png new file mode 100644 index 0000000..25bc63c Binary files /dev/null and b/Media/Levels/1006.png differ diff --git a/Media/Levels/1007.png b/Media/Levels/1007.png new file mode 100644 index 0000000..14aa5ae Binary files /dev/null and b/Media/Levels/1007.png differ diff --git a/Media/Levels/1008.png b/Media/Levels/1008.png new file mode 100644 index 0000000..62b51fb Binary files /dev/null and b/Media/Levels/1008.png differ diff --git a/Media/Levels/1009.png b/Media/Levels/1009.png new file mode 100644 index 0000000..86b03c3 Binary files /dev/null and b/Media/Levels/1009.png differ diff --git a/Media/Levels/1010.png b/Media/Levels/1010.png new file mode 100644 index 0000000..38c5c93 Binary files /dev/null and b/Media/Levels/1010.png differ diff --git a/Media/Levels/1011.png b/Media/Levels/1011.png new file mode 100644 index 0000000..04926f6 Binary files /dev/null and b/Media/Levels/1011.png differ diff --git a/Media/Levels/1012.png b/Media/Levels/1012.png new file mode 100644 index 0000000..e280f36 Binary files /dev/null and b/Media/Levels/1012.png differ diff --git a/Media/Levels/1111.png b/Media/Levels/1111.png new file mode 100644 index 0000000..9f1d3bb Binary files /dev/null and b/Media/Levels/1111.png differ diff --git a/Media/Levels/1112.png b/Media/Levels/1112.png new file mode 100644 index 0000000..22f8082 Binary files /dev/null and b/Media/Levels/1112.png differ diff --git a/Media/Levels/1212.png b/Media/Levels/1212.png new file mode 100644 index 0000000..6d7869b Binary files /dev/null and b/Media/Levels/1212.png differ diff --git a/Media/Levels/1300.png b/Media/Levels/1300.png new file mode 100644 index 0000000..2180fe2 Binary files /dev/null and b/Media/Levels/1300.png differ diff --git a/Media/Levels/1312.png b/Media/Levels/1312.png new file mode 100644 index 0000000..88725d2 Binary files /dev/null and b/Media/Levels/1312.png differ diff --git a/Media/Levels/1412.png b/Media/Levels/1412.png new file mode 100644 index 0000000..ebcf889 Binary files /dev/null and b/Media/Levels/1412.png differ diff --git a/Media/Levels/1504.png b/Media/Levels/1504.png new file mode 100644 index 0000000..07f2964 Binary files /dev/null and b/Media/Levels/1504.png differ diff --git a/Media/Levels/1512.png b/Media/Levels/1512.png new file mode 100644 index 0000000..d30eca7 Binary files /dev/null and b/Media/Levels/1512.png differ diff --git a/Media/Maps/FarmLanding.png b/Media/Maps/FarmLanding.png new file mode 100644 index 0000000..551379d Binary files /dev/null and b/Media/Maps/FarmLanding.png differ diff --git a/Media/Maps/FourSeasonsHouse.png b/Media/Maps/FourSeasonsHouse.png new file mode 100644 index 0000000..43bfb59 Binary files /dev/null and b/Media/Maps/FourSeasonsHouse.png differ diff --git a/Media/Maps/MonkeyHomeworldAndCroutonHomeworld.png b/Media/Maps/MonkeyHomeworldAndCroutonHomeworld.png new file mode 100644 index 0000000..ce0e298 Binary files /dev/null and b/Media/Maps/MonkeyHomeworldAndCroutonHomeworld.png differ diff --git a/Media/Maps/MoonBase.png b/Media/Maps/MoonBase.png new file mode 100644 index 0000000..5c6c90c Binary files /dev/null and b/Media/Maps/MoonBase.png differ diff --git a/Media/Maps/SpaceStationApocalypse.png b/Media/Maps/SpaceStationApocalypse.png new file mode 100644 index 0000000..bda5f20 Binary files /dev/null and b/Media/Maps/SpaceStationApocalypse.png differ diff --git a/Media/Maps/SunsetVillageHouses.png b/Media/Maps/SunsetVillageHouses.png new file mode 100644 index 0000000..b0660eb Binary files /dev/null and b/Media/Maps/SunsetVillageHouses.png differ diff --git a/Media/Maps/TheAppomattox.png b/Media/Maps/TheAppomattox.png new file mode 100644 index 0000000..2180fe2 Binary files /dev/null and b/Media/Maps/TheAppomattox.png differ diff --git a/Media/Maps/TheHive.png b/Media/Maps/TheHive.png new file mode 100644 index 0000000..39b7037 Binary files /dev/null and b/Media/Maps/TheHive.png differ diff --git a/Media/Maps/Tower.png b/Media/Maps/Tower.png new file mode 100644 index 0000000..047d82c Binary files /dev/null and b/Media/Maps/Tower.png differ diff --git a/Media/Maps/WitchsHouse.png b/Media/Maps/WitchsHouse.png new file mode 100644 index 0000000..ab57c66 Binary files /dev/null and b/Media/Maps/WitchsHouse.png differ diff --git a/Media/Maps/WorldMap.png b/Media/Maps/WorldMap.png new file mode 100644 index 0000000..d07ebe8 Binary files /dev/null and b/Media/Maps/WorldMap.png differ diff --git a/README.md b/README.md index 4cb5736..6515553 100644 --- a/README.md +++ b/README.md @@ -26,8 +26,25 @@ The pre-compiled FGB ROM for Game Boy Color is [here](ROMS/fgb.gb). ## Tools - Each of the following tools is provided as a precompiled Windows `exe` along with their original source code. - These `exe` files were last compiled circa 2000. No attempt has been made to update their project source. The Level Editor and Image Converter `exe`'s are both confirmed to work on Windows 10. -- During its original development, FGB was essentially a single folder containing hundreds of files. Because of this, each tool typically expects its data files to be in the same folder as the tool itself. Data files will need to be moved into each tool folder as inputs and the result moved back to the appropriate location. -each of the following tools was designed to -All of the editors and conversion tools +- During its original development, FGB was essentially a single folder containing hundreds of files. Because of this, each tool typically expects its data files to be in the same folder as the tool itself. +- This project has now been reorganized to cleanly separate original assets, converted data, and source code into separate folders. +- As such data files will generally need to be moved into each tool folder as inputs and the results moved back to the appropriate location if the editors are used. +- Ideally at some point Abe Pralle or a contributer will update the editor projects to be in a modern Visual Studio format and adjust the input and output locations to utilize the current folder structure. + +### LevelEditor + +![Level Editor](Media/Screenshots/LevelEditor.png) + +1. Refer to `Media/DesignDocs/WorldMap.xls` (slightly out of date) to identify levels you want to edit. +2. Copy corresponding `Data/Levels/*.lvl` files to `Tools/LevelEditor`. +3. Run `Tools/LevelEditor`, load, edit, and save the levels. +4. Copy the modified levels back to `Data/Levels/`. + +### GBConv2 + +![GBConv2](Media/Screenshots/GBConv2.png) + +1. + ## About diff --git a/ROM/FGB.gb b/ROM/FGB.gb index 461d627..4008fd3 100644 Binary files a/ROM/FGB.gb and b/ROM/FGB.gb differ diff --git a/Tools/LevelEditor/LevelDataFormat.txt b/Tools/LevelEditor/LevelDataFormat.txt new file mode 100644 index 0000000..3a304bf --- /dev/null +++ b/Tools/LevelEditor/LevelDataFormat.txt @@ -0,0 +1,38 @@ +FGB Level Data Format +July 6, 2020 by Abe pralle + +file_format_version = 3 : Byte +class_count_minus_1 : Byte + +first_character_index : Byte # the first index that is a mobile character rather than a BG tile +first_character_id : UInt16LowHigh # the class of the first character + +forEach (index in 0..class_count_minus_1) + class_number_low : Byte + class_number_high : Byte + class_number = ((class_number_high :<<: 8) | class_number) - 1 +endForEach + +tiles_wide : Byte +pitch : Byte # smallest power of 2 where tiles_wide <= pitch +tiles_high : Byte +loop (tiles_high) + loop (tiles_wide) + class_index : Byte + endLoop +endLoop + +bg_color : UInt16 # 0_bbbbb_ggggg_rrrrr + +# Waypoint List +# TODO (investigate starting at Tools/LevelEditor/Source/Controls.cpp line 393) + +# Zones +# TODO + +# Exits +# TODO + +# Exit Links +# TODO + diff --git a/Tools/LevelEditor/background0001-1535.bmp b/Tools/LevelEditor/background0001-1535.bmp index 3bb9bb9..9226f52 100644 Binary files a/Tools/LevelEditor/background0001-1535.bmp and b/Tools/LevelEditor/background0001-1535.bmp differ diff --git a/Tools/MapMaker/.gitignore b/Tools/MapMaker/.gitignore new file mode 100644 index 0000000..3cb458f --- /dev/null +++ b/Tools/MapMaker/.gitignore @@ -0,0 +1 @@ +Images diff --git a/Tools/MapMaker/Build.rogue b/Tools/MapMaker/Build.rogue new file mode 100644 index 0000000..79c8aa4 --- /dev/null +++ b/Tools/MapMaker/Build.rogue @@ -0,0 +1,385 @@ +# To run this build file, install Rogue from github.com/AbePralle/Rogue then cd +# to this folder and type "rogo" at the command line. + +# description()s are optional - Rogo uses introspection to determine which +# commands are available. 'rogo help default' displays the description for +# "default", etc. +description( "default", "The default action is performed when no other actions are specified. Use 'rogo default' to explicitly perform the default option." ) +description( "help", "Displays a list of all actions that can be performed by Rogo." ) + +#$ LIBRARIES(macOS) = libpng libjpeg zlib +#$ LIBRARIES(Linux-apt) = libpng-dev libjpeg-dev + +augment Build + # You can create a Local.mk file with overrides for these values, e.g.: + # LAUNCHER_FOLDER = "~/bin" + PROPERTIES + PROJECT = "MapMaker" + LAUNCHER_NAME = "mapmaker" + LAUNCHER_FOLDER = "/usr/local/bin" +endAugment + +routine exe_filepath->String + if (System.is_windows) return "Build/$.exe" (Build.LAUNCHER_NAME) + return "Build/$-$" (Build.PROJECT,System.os) +endRoutine + +routine launcher_folder->String + local result = Build.LAUNCHER_FOLDER + result = File.expand_filepath( result ) + return File.without_trailing_separator( result ) +endRoutine + +routine rogo_default + rogo_build + rogo_run + #rogo_install_launcher # Uncomment to automatically install a /usr/local/bin/mapmaker launcher +endRoutine + +routine rogo_build + block exe_filepath + local source_files = Files( "Source", "**/*.rogue" ) + local src_filepath = "Source/$.rogue" (Build.PROJECT) + if (source_files.any_newer_than(exe_filepath)) + local cpp_filepath = "Build/$-$.cpp" (Build.PROJECT,System.os) + if (source_files.any_newer_than(cpp_filepath)) + execute "roguec $ --main --output=$ --target=Console,C++,$" (src_filepath,cpp_filepath,System.os) + endIf + if (System.is_windows) + local libs = "" + local cc = "cl /EHsc /nologo $ /Fe$ $" (cpp_filepath,exe_filepath,libs) + #cc += " /link /LTCG" # uncomment this if there are errors linking libraries + execute cc + else + local libs = which{ System.is_linux:" $LIBRARY_FLAGS(libpng-dev,libjpeg-dev)" || " $LIBRARY_FLAGS(libpng,libjpeg,zlib)" } + local cc = "c++ -Wall -std=gnu++11 -fno-strict-aliasing -Wno-invalid-offsetof $ -o $$" (cpp_filepath,exe_filepath,libs) + execute cc + endIf + endIf + endBlock +endRoutine + +routine rogo_run + execute File.conventional_filepath(exe_filepath) +endRoutine + +routine rogo_install_launcher + local exe_filepath = File.absolute_filepath( exe_filepath ) + if (System.is_windows) + local exe_folder = File.conventional_filepath( File.folder(exe_filepath) ) + local path = System.environment//PATH + if (not path.to_lowercase.contains(exe_folder.to_lowercase)) + println + println ''Add the following to your system PATH then reopen this command prompt to be able'' + println ''to launch $ by typing "$":'' (Build.PROJECT,Build.LAUNCHER_NAME) + println + println " ADD THIS TO YOUR PATH" + println " " + exe_folder + endIf + else + contingent + local result = Process.run( "which " + Build.LAUNCHER_NAME, &env ) + necessary (result.success) + local launcher_filepath = result->String.trimmed + necessary launcher_filepath + necessary File.load_as_string( launcher_filepath ).contains( exe_filepath ) + + unsatisfied + local launcher_filepath = "$/$" (launcher_folder,Build.LAUNCHER_NAME) + println "Creating launcher " + launcher_filepath + local sudo = "" + loop + try + if (not File.exists(launcher_folder)) execute( "$mkdir $"(sudo,launcher_folder) ) + File.save( "$.launcher"(Build.LAUNCHER_NAME), ''#!/bin/sh\nexec "$" "$@"\n''(exe_filepath,'$') ) + execute( "$mv $.launcher $"(sudo,Build.LAUNCHER_NAME,launcher_filepath) ) + execute( "$chmod a+x $"(sudo,launcher_filepath) ) + escapeLoop + catch (err:Error) + if (sudo != "") throw err + sudo = "sudo " + endTry + endLoop + endContingent + endIf +endRoutine + +routine rogo_clean + verbose_delete( "Build" ) + if (not System.is_windows) verbose_delete( "$/$"(launcher_folder,Build.LAUNCHER_NAME) ) +endRoutine + +routine verbose_delete( filepath:String ) + if (File.exists(filepath)) + println "> Delete " + filepath + if (not File.delete(filepath)) + println "*** Failed to delete - retrying with sudo" + local cmd = ''sudo rm -rf $'' (File.shell_escaped(filepath)) + execute cmd + endIf + endIf +endRoutine + +routine execute( commands:String, &suppress_error )->Logical + forEach (cmd in LineReader(commands)) + print( "> " ).println( cmd ) + if (System.run(cmd) != 0) + if (suppress_error) return false + else throw Error( "Build failed." ) + endIf + endForEach + return true +endRoutine + +#------------------------------------------------------------------------------- +# Introspection-based Launcher Framework +#------------------------------------------------------------------------------- +# Rogo is a "build your own build system" facilitator. At its core Rogo just +# recompiles build files if needed and then runs the build executable while +# forwarding any command line arguments. This file contains a default framework +# which uses introspection to turn command line arguments into parameterized +# routine calls. + +# Example: to handle the command "rogo abc xyz 5", define +# "routine rogo_abc_xyz( n:Int32 )". + +# "rogo_default" will run in the absence of any other command line argument. + +# The following "comment directives" can be used in this file to control how +# RogueC compiles it and to manage automatic dependency installation and +# linking. + +# Each of the following should be on a line beginning with the characters #$ +# (preceding whitespace is fine). Sample args are given. + +# ROGUEC = roguec # Path to roguec to compile this file with +# ROGUEC_ARGS = --whatever # Additional options to pass to RogueC +# CPP = g++ -Wall -std=gnu++11 -fno-strict-aliasing +# -Wno-invalid-offsetof # C++ compiler path and/or invocation +# CPP_ARGS = -a -b -c # Additional C++ args +# LINK = true # Links following LIBRARIES with this Build +# # file (otherwise just installs them) +# LINK = -lalpha -lbeta # Links following LIBRARIES and includes +# # these additional flags +# LINK = false # Linking turned off for following +# # LIBRARIES - info can still be obtained +# # from $LIBRARY_FLAGS() +# LINK(macOS) = ... # Options applying only to +# # System.os=="macOS" (use with any OS and +# # any comment directive) +# LIBRARIES = libalpha +# LIBRARIES = libbeta(library-name) +# LIBRARIES = libfreetype6-dev(freetype2) +# DEPENDENCIES = Library/Rogue/**/*.rogue +# +# LIBRARIES = name(package) +# LIBRARIES = name(package: install: +# link: which:) +# +# The following macro is replaced within this file (Build.rogue) - the libraries +# should normally also be declared in #$ LIBRARIES: +# +# $LIBRARY_FLAGS(lib1,lib2) # sample macro +# -> +# -Ipath/to/lib1/include -Lpath/to/lib1/library -I ... # sample replacement + +routine syntax( command:String, text:String ) + Build.rogo_syntax[ command ] = text +endRoutine + +routine description( command:String, text:String ) + Build.rogo_descriptions[ command ] = text +endRoutine + +routine help( command:String, description=null:String, syntax=null:String ) + if (description) Global.description( command, description ) + if (syntax) Global.syntax( command, syntax ) +endRoutine + +try + Build.launch +catch (err:Error) + Build.rogo_error = err + Build.on_error +endTry + +class Build [singleton] + PROPERTIES + rogo_syntax = StringTable<>() + rogo_descriptions = StringTable<>() + rogo_prefix = ?:{ $moduleName.count:$moduleName "::" || "" } + "rogo_" : String + rogo_command = "default" + rogo_args = @[] + rogo_error : Error + + LOCAL_DEFS_FILE = "Local.mk" + + METHODS + method launch + rogo_args.add( forEach in System.command_line_arguments ) + read_defs + on_launch + parse_args + dispatch_command + + method dispatch_command + local m = find_command( rogo_command ) + require m + + local args = @[] + forEach (arg in rogo_args) + which (arg) + case "true": args.add( true ) + case "false": args.add( false ) + case "null": args.add( NullValue ) + others: args.add( arg ) + endWhich + endForEach + if (m.parameter_count == 1 and args.count > 1) args = @[ args ] # Wrap args in a ValueList. + m.call( Global, args ) + + method find_command( name:String )->MethodInfo + return <>.find_method( rogo_prefix + name ) + + method on_error + Console.error.println "=" * 79 + Console.error.println rogo_error + Console.error.println "=" * 79 + on_exit + System.exit 1 + + method on_command_found + noAction + + method on_command_not_found + println "=" * 79 + println "ERROR: No such command '$'." (rogo_args.first) + println "=" * 79 + println + rogo_command = "help" + rogo_args.clear + on_command_found + + method on_launch + noAction + + method on_exit + noAction + + method parse_args + block + if (rogo_args.count) + local parts = String[] + parts.add( forEach in rogo_args ) + rogo_args.clear + + while (parts.count) + local cmd = _join( parts ) + if (find_command(cmd)) + rogo_command = cmd + on_command_found + escapeBlock + endIf + rogo_args.insert( parts.remove_last ) + endWhile + + on_command_not_found + endIf + + # Use default command + on_command_found + endBlock + + method read_defs + read_defs( LOCAL_DEFS_FILE ) + + method read_defs( defs_filepath:String ) + # Attempt to read defs from Local.mk + local overrides = String[] + if (File.exists(defs_filepath)) + forEach (line in LineReader(File(defs_filepath))) + if (line.contains("=")) + local name = line.before_first('=').trimmed + local value = line.after_first('=').trimmed + if (value.begins_with('"') or value.begins_with('\'')) + value = value.leftmost(-1).rightmost(-1) + endIf + local p = <>.find_property( name ) + if (p) + overrides.add( "$ = $" (name,value) ) + <>.set_property( this, p, Value(value) ) + endIf + endIf + endForEach + endIf + + method _join( value:Value )->String + local args = String[] + args.add( forEach in value ) + return args.join( "_" ) +endClass + + +routine rogo_help( command="":String ) + command = Build._join( Build.rogo_args ) + if (command.count) + local syntax = get_syntax( command ) + local success = false + if (syntax) + println "SYNTAX" + println " " + syntax + println + success = true + endIf + local description = get_description( command ) + if (description) + println "DESCRIPTION" + forEach (line in LineReader(description.word_wrapped(76))) + print( " " ).println( line ) + endForEach + println + success = true + endIf + if (success) + return + else + println "=" * 79 + println "ERROR: No such command '$'." (command) + println "=" * 79 + println + endIf + endIf + + println "USAGE" + local lines = String[] + forEach (m in <>.methods) + if (m.name.begins_with(Build.rogo_prefix)) + lines.add( " " + get_syntax(m.name.after_first(Build.rogo_prefix)) ) + endIf + endForEach + lines.sort( (a,b)=>(aString + if (Build.rogo_syntax.contains(m_name)) + return "rogo " + Build.rogo_syntax[ m_name ] + else + local m = <>.find_method( Build.rogo_prefix + m_name ) + if (not m) return null + local line = "rogo $" (m_name.replacing('_',' ')) + line += " <$>" (m.parameter_name(forEach in 0..String + if (Build.rogo_descriptions.contains(m_name)) + return Build.rogo_descriptions[ m_name ] + else + return null + endIf +endRoutine diff --git a/Tools/MapMaker/Source/MapMaker.rogue b/Tools/MapMaker/Source/MapMaker.rogue new file mode 100644 index 0000000..a1cf887 --- /dev/null +++ b/Tools/MapMaker/Source/MapMaker.rogue @@ -0,0 +1,617 @@ +#=============================================================================== +# MapMaker.rogue +# July 6, 2020 +#=============================================================================== +$requireRogue "1.7.5" + +uses Bitmap + +MapMaker() + +class MapMaker + DEFINITIONS + SCALED_WIDTH = 640 + SCALED_HEIGHT = 576 + + PROPERTIES + levels = FGBLevel[] + + METHODS + method init + File.create_folder( "../../Media/Levels" ) + print( "Rendering level images" ).flush + forEach (filepath at index in File.listing("../../Data/Levels/L*.lvl")) + if (index % 10 == 9) print( '.' ).flush + levels.add( FGBLevel(filepath) ) + endForEach + println + require levels.count + + print( "Saving level images" ).flush + forEach (level at index in levels) + if (index % 10 == 9) print( '.' ).flush + level.bitmap.save_as_png( "../../Media/Levels/$.png"(level.level_number.format("04")) ) + endForEach + println + + File.create_folder( "../../Media/Maps" ) + + local map = Bitmap( SCALED_WIDTH*11, SCALED_HEIGHT*11, Color.BLACK ) + print( "Building WorldMap-Rendered.png" ).flush + forEach (level at index in levels) + if (index % 10 == 9) print( '.' ).flush + if (level.column < 11 and level.row < 11) + place( level, map, level.column, level.row ) + endIf + endForEach + println + + println "Saving WorldMap-Rendered.png" + map.save_as_png( "../../Media/Maps/WorldMap-Rendered.png" ) + + create_map( "MoonBase.png", + [ + [ -1, 0213, -1, 0314, 0215], + [0013, 0113, 0214, 0114, 0115], + [0313, 0315, -1, 0014, 0015] + ] + ) + + create_map( "Tower.png", + [ + [0411], + [0311], + [0211], + [0111] + ] + ) + + create_map( "FourSeasonsHouse.png", 0011 ) + + create_map( "SunsetVillageHouses.png", + [ + [0212,0312,0412] + ] + ) + + create_map( "SpaceStationApocalypse.png", + [ + [0811,0012,0911], + [1011,0711,1111] + ] + ) + + create_map( "TheHive.png", + [ + [0000,0112] + ] + ) + + create_map( "WitchsHouse.png", + [ + [0512], + [0508] + ] + ) + + create_map( "FarmLanding.png", + [ + [0103], + [0712] + ] + ) + + create_map( "TheAppomattox.png", 1300 ) + #create_map( "DemoWarpZone.png", 0812 ) # can set L1100.asm to exit to 0812; was not in final game + + create_map( "MonkeyHomeworldAndCroutonHomeworld.png", + [ + [ -1, -1,1512], + [ -1, -1,1412], + [ -1,1112,1312], + [0612,0912,1212], + [0808,1012, -1] + ] + ) + + + method create_map( filename:String, level_numbers:Int32[][] ) + local h = level_numbers.count + local w = level_numbers.first.count + + local map = Bitmap( SCALED_WIDTH*w, SCALED_HEIGHT*h, Color.BLACK ) + forEach (row at j in level_numbers) + forEach (number at i in row) + if (number == -1) nextIteration + local level = levels.find( $.level_number == number ) + if (level.exists) + place( level.value, map, i, j ) + endIf + endForEach + endForEach + + println "Saving "+filename + map.save_as_png( "../../Media/Maps/"+filename ) + + method create_map( filename:String, level_number:Int32 ) + local level = levels.find( $.level_number == level_number ) + require level.exists + println "Saving "+filename + level.value.bitmap.save_as_png( "../../Media/Maps/"+filename ) + + + method place( level:FGBLevel, destination:Bitmap, i:Int32, j:Int32 ) + local x = i * SCALED_WIDTH + local y = j * SCALED_HEIGHT + level.scaled_bitmap.blit( destination, x, y, BitmapBlitFn.ALPHA ) + + #{ + # Was used to establish standard zone size of 640x576 + method calculate_sizes( levels:FGBLevel[] ) + println "Calculating sizes" + + # Max sizes + local max_column_width = Int32[] + local max_row_height = Int32[] + forEach (level in levels) + max_column_width.expand_to_include( level.column ) + max_column_width[level.column] = max_column_width[level.column].or_larger(level.pixel_width) + + max_row_height.expand_to_include( level.row ) + max_row_height[level.row] = max_row_height[level.row].or_larger(level.pixel_height) + endForEach + + # Max sizes help determine min sizes + local min_column_width = max_column_width.cloned + local min_row_height = max_row_height.cloned + forEach (level in levels) + min_column_width[level.column] = min_column_width[level.column].or_smaller(level.pixel_width) + min_row_height[level.row] = min_row_height[level.row].or_smaller(level.pixel_height) + endForEach + + local column_width = Int32[] + local row_height = Int32[] + forEach (min_w at i in min_column_width) + column_width.add( max_column_width[i].or_smaller(min_w*2) ) + endForEach + forEach (min_h at j in min_row_height) + row_height.add( max_row_height[j].or_smaller(min_h*2) ) + endForEach + + #column_width.add( 640 ) + #row_height.add( 576 ) + + trace column_width.count + trace row_height.count + trace column_width.count * row_height.count + trace levels.count + + @trace column_width + @trace row_height + local sum_width = 0 + sum_width += (forEach in column_width) + local sum_height = 0 + sum_height += (forEach in row_height) + + local mb = (sum_width * sum_height * 4) / 1024^2 + @trace sum_width, sum_height, mb + }# + +endClass + +class FGBLevel + PROPERTIES + filename : String + level_number : Int32 + version : Int32 + classes = Int32[] + first_character_index : Int32 + first_character_id : Int32 + width : Int32 + pitch : Int32 + height : Int32 + tiles = Int32[] + bg_color : Color + bitmap : Bitmap + scaled_bitmap : Bitmap + + METHODS + method init( filename ) + level_number = filename.after_last('L').before_first('_')->Int32 + local reader = File.reader( filename ) + version = reader.read + + local class_count = reader.read + classes.add( 0 ) # index 0 is always empty space + + block + first_character_index = reader.read + first_character_id = reader.read + first_character_id = first_character_id | (reader.read :<<: 8) + endBlock + + block + loop (class_count) + local low = reader.read : Int32 + local high = reader.read : Int32 + local cls = ((high:<<:8) | low) + if (cls < first_character_id) --cls + if (cls == 1532) cls = 0 + classes.add( cls ) + endLoop + endBlock + + width = reader.read + pitch = reader.read + height = reader.read + + forEach (j in 0..= 0 and index < classes.count) + tiles.add( classes[index] ) + endForEach + endForEach + + forEach (cls at index in tiles) + which (cls) + case 2102, 2120, 2140, 2168, 2222, 2230, 2238, 2246, 2258, 2268, 2298, 2319, 2335, + 2343, 2351, 2362, 2370, 2374, 2390, 2408, 2418, 2426, 2434, 2446 + tiles[index+1] = cls+1 + tiles[index+width] = cls+2 + tiles[index+width+1] = cls+3 + endWhich + endForEach + + local color_low = reader.read : Int32 + local color_high = reader.read : Int32 + local color = (color_high :<<: 8) | color_low + bg_color = Graphics.color_16_to_32( color ) + + # Waypoint List + # TODO (investigate starting at Tools/LevelEditor/Source/Controls.cpp line 393) + + # Zones + # TODO + + # Exits + # TODO + + # Exit Links + # TODO + bitmap = _render + + local W = MapMaker.SCALED_WIDTH + local H = MapMaker.SCALED_HEIGHT + local scale = (W/Real64(bitmap.width)).or_smaller( H/Real64(bitmap.height) ) + scaled_bitmap = bitmap.resized( bitmap.size*scale ).[ reframe(W,H,Anchor.CENTER,&pad_color=bg_color) ] + + method column->Int32 + return level_number / 100 + + method get( i:Int32, j:Int32 )->Int32 + return tiles[ j*width + i ] + + method pixel_height->Real64 + return (height-2)*16 + + method pixel_width->Real64 + return (width-2)*16 + + method _render->Bitmap + local result = Bitmap( (width-2)*16, (height-2)*16, bg_color ) + forEach (j in 1.. 0) + Graphics[ this.get(i,j) ].blit( result, (i-1)*16, (j-1)*16, BitmapBlitFn.ALPHA ) + endIf + endForEach + endForEach + + if (level_number == 0014) + result = Bitmap( result, Box(result.width-320,0,320,result.height) ) + elseIf (level_number == 0115) + result = Bitmap( result, Box(0,0,544,result.height) ) + elseIf (level_number == 0215) + result = Bitmap( result, Box(0,0,320,result.height) ) + endIf + + return result + + method row->Int32 + return (level_number % 100) +endClass + +class Graphics [singleton] + PROPERTIES + tiles = Bitmap[] + facings = Bitmap[][] + first_actor : Int32 + + + METHODS + method init + tiles.add( load_with_black_as_transparent("../LevelEditor/background0001-1535.bmp").split(32,64) ) + + first_actor = tiles.count + tiles.add( load_with_black_as_transparent("../LevelEditor/objects2048-2303.bmp").split(32,32) ) + local right = Bitmap[] + local left = Bitmap[] + local up = Bitmap[] + local down = Bitmap[] + facings.add( up ).add( left ).add( down ).add( right ) + forEach (tile in tiles from first_actor) + right.add( tile ) + up.add( tile.cloned.[rotate_90(&ccw)] ) + down.add( tile.cloned.[flip(&h), rotate_90(&ccw)] ) + left.add( tile.cloned.[flip(&h)] ) + endForEach + + # Loads binary data - but tile color table is incomplete so using the pre-rendered images above instead. + #tiles.add( forEach in TileData ) + #save_tileset + + method color_16_to_32( c:Int32 )->Color + return Color( color_5_to_8(c), color_5_to_8(c:>>:5), color_5_to_8(c:>>:10) ) + + method color_5_to_8( c:Int32 )->Int32 + c &= 0x1F + return ((c / Real64(0x1F)) * 255)->Int32 + + method get( tile_type:Int32 )->Bitmap + if (tile_type < first_actor) return tiles[ tile_type ] + if (TileData.flags[tile_type] & (TileData.FG_IS_2X2|TileData.FG_NO_ROTATE)) return tiles[ tile_type ] + return facings[Random.int32(4)][ tile_type-first_actor ] + + method load_with_black_as_transparent( filename:String )->Bitmap + local bmp = Bitmap( File(filename) ) + forEach (pixel at index in bmp.pixels) + if (pixel.argb == 0xff000000) + bmp.pixels[ index ] = Color(0) + endIf + endForEach + return bmp + + method save_tileset + local w = 32 + local h = TileData.count / 32 + local bitmap = Bitmap( w*8, h*8, 0 ) + local reader = tiles.reader + forEach (j in 0..Int32 + return flags.count + + method has_another->Logical + return tile_index < flags.count + + method read->Bitmap + local bits = Int32[] + local bitmap = Bitmap( 8, 8, Color[](64) ) + local palette = palettes[ flags[tile_index] & COLOR_MASK ] + loop 8 + bits.clear + loop (8) bits.add( reader.read(1) ) + forEach (v in bits) + v = (reader.read(1):<<:1) | v + bitmap.pixels.add( palette[v] ) + endForEach + endLoop + + ++tile_index + + return bitmap + +endClass