--- /dev/null
+* text=auto
+*.png filter=lfs diff=lfs merge=lfs -text
--- /dev/null
+# Build directory
+bin/
+obj/
+tags
+
+ Prerequisites
+*.d
+
+# Object files
+*.o
+*.ko
+*.obj
+*.elf
+
+# Linker output
+*.ilk
+*.map
+*.exp
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Libraries
+*.lib
+*.a
+*.la
+*.lo
+
+# Shared objects (inc. Windows DLLs)
+*.dll
+*.so
+*.so.*
+*.dylib
+
+# Executables
+*.exe
+*.out
+*.app
+*.i*86
+*.x86_64
+*.hex
+
+# Debug files
+*.dSYM/
+*.su
+*.idb
+*.pdb
+vgcore.*
+
+# Kernel Module Compile Results
+*.mod*
+*.cmd
+.tmp_versions/
+modules.order
+Module.symvers
+Mkfile.old
+dkms.conf
+
+compile_commands.json
+.cache/
+.clang_complete
+.clangd
+.session
+
+*.pyc
+
+pcq.gb
+pcq.mlb
+pcq.lst
+testpcq.gb
+testpcq.mlb
+testpcq.lst
+
+*.sav
+*.patch
+*.sym
+debugrc
--- /dev/null
+# Known Bugs
+
--- /dev/null
+Copyright 2025-2026 Lukas Krickl (lukas@krickl.dev)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction,
+including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
+and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS",
+WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--- /dev/null
+# pocket conquest
+
+## Table of content
+
+- [Installation](#Installation)
+- [Usage](#Usage)
+- [License](#License)
+- [Contributing](#Contributing)
+- [TODO](#TODO)
+
+## Installation
+
+To compile this game you will need a copy of `ulas`.
+Then simply run `make` to build the rom.
+
+## Usage
+
+This game is compatible with any gameboy emulator.
+
+### Building assets
+
+### Directory structure
+
+- src: all source files
+- gen/gen.s: include file for all generated files
+- gen: generated source files based on assets
+
+### Module names
+
+- w_<name>: wram section
+- h_<name>: hram section
+- d_<name>: typedefs
+
+## License
+
+This program is distributed under the terms of the MIT License.
+
+
--- /dev/null
+# TODO
+
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<tileset version="1.10" tiledversion="1.11.2" name="bank0" tilewidth="8" tileheight="8" tilecount="128" columns="16">
+ <image source="../tiles/bank0.png" width="128" height="64"/>
+</tileset>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<map version="1.10" tiledversion="1.12.1" orientation="orthogonal" renderorder="right-down" width="20" height="14" tilewidth="8" tileheight="8" infinite="0" nextlayerid="2" nextobjectid="1">
+ <tileset firstgid="1" source="bank0.tsx"/>
+ <layer id="1" name="Tile Layer 1" width="20" height="14">
+ <data encoding="csv">
+2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,
+1,1,2,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
+</data>
+ </layer>
+</map>
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:566d9dfa669fe97696f1462c0b3ca8f94847ed783bf6bfe7fb35b8831f8c1035
+size 474
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:0b6d132c6b451f364d129b471bbc168fe73640563f2d3b6f49406fae690c28fe
+size 312
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:4e11371b989afedbd73be6b5d4901f30abb25a536d08d4539548450ea66a2cfc
+size 859
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:566d9dfa669fe97696f1462c0b3ca8f94847ed783bf6bfe7fb35b8831f8c1035
+size 474
--- /dev/null
+; this map was generated by tmx2map.py
+; flags
+.db 0
+; start y/x
+.db 0, 0
+; end y/x
+.db 0, 0
+; map name
+.db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+
+.db 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1
+
--- /dev/null
+; this tileset was generated by png2chr.py
+; tile 0
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 1
+.chr 03333330
+.chr 30000013
+.chr 30022213
+.chr 30222213
+.chr 30222213
+.chr 30222213
+.chr 31111113
+.chr 03333330
+; tile 2
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 3
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 4
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 5
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 6
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 7
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 8
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 9
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 10
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 11
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 12
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 13
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 14
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 15
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 16
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 17
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 18
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 19
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 20
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 21
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 22
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 23
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 24
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 25
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 26
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 27
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 28
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 29
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 30
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 31
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 32
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 33
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 34
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 35
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 36
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 37
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 38
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 39
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 40
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 41
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 42
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 43
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 44
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 45
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 46
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 47
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 48
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 49
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 50
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 51
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 52
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 53
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 54
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 55
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 56
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 57
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 58
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 59
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 60
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 61
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 62
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 63
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 64
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 65
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 66
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 67
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 68
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 69
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 70
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 71
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 72
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 73
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 74
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 75
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 76
+.chr 00000000
+.chr 00033333
+.chr 00322222
+.chr 03322222
+.chr 33222222
+.chr 32333223
+.chr 32333223
+.chr 32333223
+; tile 77
+.chr 00000000
+.chr 33300000
+.chr 11330000
+.chr 21133000
+.chr 22113300
+.chr 33211300
+.chr 33211300
+.chr 33211300
+; tile 78
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 79
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 80
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 81
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 82
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 83
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 84
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 85
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 86
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 87
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 88
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 89
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 90
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 91
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 92
+.chr 32222331
+.chr 32222332
+.chr 32222222
+.chr 33322222
+.chr 00323232
+.chr 00323232
+.chr 00333333
+.chr 00000000
+; tile 93
+.chr 11211300
+.chr 22211300
+.chr 22113300
+.chr 21133000
+.chr 31333000
+.chr 31333000
+.chr 33330000
+.chr 00000000
+; tile 94
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 95
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 96
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 97
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 98
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 99
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 100
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 101
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 102
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 103
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 104
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 105
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 106
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 107
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 108
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 109
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 110
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 111
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 112
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 113
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 114
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 115
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 116
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 117
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 118
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 119
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 120
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 121
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 122
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 123
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 124
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 125
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 126
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 127
+.chr 33333333
+.chr 32333333
+.chr 33333233
+.chr 33333333
+.chr 33233323
+.chr 33333333
+.chr 32332333
+.chr 33333333
--- /dev/null
+; this tileset was generated by png2chr.py
+; tile 0
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 1
+.chr 00000000
+.chr 02222220
+.chr 02232320
+.chr 02232320
+.chr 02222220
+.chr 02222220
+.chr 02222220
+.chr 00000000
+; tile 2
+.chr 00000000
+.chr 00022200
+.chr 00032320
+.chr 00032320
+.chr 00022220
+.chr 00022220
+.chr 00022200
+.chr 00000000
+; tile 3
+.chr 00010000
+.chr 01000000
+.chr 00000100
+.chr 02222220
+.chr 02232320
+.chr 02232320
+.chr 02222220
+.chr 00000000
+; tile 4
+.chr 00000000
+.chr 02222220
+.chr 02232320
+.chr 02232320
+.chr 02222220
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 5
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 6
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 7
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 8
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 9
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 10
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 11
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 12
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 13
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 14
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 15
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 16
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 17
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 18
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 19
+.chr 00000000
+.chr 01000010
+.chr 00010000
+.chr 02222220
+.chr 02232320
+.chr 02232320
+.chr 02222220
+.chr 00000000
+; tile 20
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 21
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 22
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 23
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 24
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 25
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 26
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 27
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 28
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 29
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 30
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 31
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 32
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 33
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 34
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 35
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 36
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 37
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 38
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 39
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 40
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 41
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 42
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 43
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 44
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 45
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 46
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 47
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 48
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 49
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 50
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 51
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 52
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 53
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 54
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 55
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 56
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 57
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 58
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 59
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 60
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 61
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 62
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 63
+.chr 13000000
+.chr 31000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
--- /dev/null
+; this tileset was generated by png2chr.py
+; tile 0
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 1
+.chr 00000000
+.chr 00030000
+.chr 00030000
+.chr 00030000
+.chr 00000000
+.chr 00000000
+.chr 00030000
+.chr 00000000
+; tile 2
+.chr 00000000
+.chr 00303000
+.chr 00303000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 3
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 4
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 5
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 6
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 7
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 8
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 9
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 10
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 11
+.chr 00000000
+.chr 00030000
+.chr 00030000
+.chr 03333300
+.chr 00030000
+.chr 00030000
+.chr 00000000
+.chr 00000000
+; tile 12
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00030000
+.chr 00330000
+.chr 00300000
+.chr 00000000
+; tile 13
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 03333300
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 14
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00033000
+.chr 00033000
+.chr 00000000
+; tile 15
+.chr 00000000
+.chr 00003000
+.chr 00030000
+.chr 00030000
+.chr 00300000
+.chr 00300000
+.chr 03000000
+.chr 03000000
+; tile 16
+.chr 00000000
+.chr 00333000
+.chr 03000300
+.chr 03003300
+.chr 03030300
+.chr 03300300
+.chr 03000300
+.chr 00333000
+; tile 17
+.chr 00000000
+.chr 00030000
+.chr 00330000
+.chr 00030000
+.chr 00030000
+.chr 00030000
+.chr 00030000
+.chr 00333000
+; tile 18
+.chr 00000000
+.chr 00333000
+.chr 03000300
+.chr 00003000
+.chr 00030000
+.chr 00300000
+.chr 03000000
+.chr 03333300
+; tile 19
+.chr 00000000
+.chr 03333000
+.chr 00000300
+.chr 00000300
+.chr 00333300
+.chr 00000300
+.chr 00000300
+.chr 03333000
+; tile 20
+.chr 00000000
+.chr 00033000
+.chr 00303000
+.chr 03003000
+.chr 03003000
+.chr 03333300
+.chr 00003000
+.chr 00003000
+; tile 21
+.chr 00000000
+.chr 03333300
+.chr 03000000
+.chr 03000000
+.chr 03333000
+.chr 00000300
+.chr 00000300
+.chr 03333000
+; tile 22
+.chr 00000000
+.chr 00333300
+.chr 03000000
+.chr 03000000
+.chr 03333000
+.chr 03000300
+.chr 03000300
+.chr 00333000
+; tile 23
+.chr 00000000
+.chr 03333000
+.chr 00000300
+.chr 00000300
+.chr 00003000
+.chr 00003000
+.chr 00030000
+.chr 00030000
+; tile 24
+.chr 00000000
+.chr 00333000
+.chr 03000300
+.chr 03000300
+.chr 00333000
+.chr 03000300
+.chr 03000300
+.chr 00333000
+; tile 25
+.chr 00000000
+.chr 00333000
+.chr 03000300
+.chr 03000300
+.chr 00333300
+.chr 00000300
+.chr 00003000
+.chr 00330000
+; tile 26
+.chr 00000000
+.chr 00033000
+.chr 00033000
+.chr 00000000
+.chr 00000000
+.chr 00033000
+.chr 00033000
+.chr 00000000
+; tile 27
+.chr 00000000
+.chr 00033000
+.chr 00033000
+.chr 00000000
+.chr 00000000
+.chr 00033000
+.chr 00003300
+.chr 00000000
+; tile 28
+.chr 00000000
+.chr 00003000
+.chr 00030000
+.chr 00300000
+.chr 03000000
+.chr 00300000
+.chr 00030000
+.chr 00003000
+; tile 29
+.chr 00000000
+.chr 03333300
+.chr 00000000
+.chr 00000000
+.chr 03333300
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 30
+.chr 00000000
+.chr 00300000
+.chr 00030000
+.chr 00003000
+.chr 00000300
+.chr 00003000
+.chr 00030000
+.chr 00300000
+; tile 31
+.chr 00000000
+.chr 00333000
+.chr 03000300
+.chr 00003000
+.chr 00030000
+.chr 00030000
+.chr 00000000
+.chr 00030000
+; tile 32
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 33
+.chr 00000000
+.chr 00333000
+.chr 03000300
+.chr 03000300
+.chr 03333300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+; tile 34
+.chr 00000000
+.chr 03333000
+.chr 03000300
+.chr 03000300
+.chr 03333000
+.chr 03000300
+.chr 03000300
+.chr 03333000
+; tile 35
+.chr 00000000
+.chr 00333300
+.chr 03000000
+.chr 03000000
+.chr 03000000
+.chr 03000000
+.chr 03000000
+.chr 00333300
+; tile 36
+.chr 00000000
+.chr 03333000
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03333000
+; tile 37
+.chr 00000000
+.chr 03333000
+.chr 03000000
+.chr 03000000
+.chr 03330000
+.chr 03000000
+.chr 03000000
+.chr 03333000
+; tile 38
+.chr 00000000
+.chr 03333000
+.chr 03000000
+.chr 03000000
+.chr 03330000
+.chr 03000000
+.chr 03000000
+.chr 03000000
+; tile 39
+.chr 00000000
+.chr 00333300
+.chr 03000000
+.chr 03000000
+.chr 03000000
+.chr 03033300
+.chr 03000300
+.chr 00333000
+; tile 40
+.chr 00000000
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03333300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+; tile 41
+.chr 00000000
+.chr 00333000
+.chr 00030000
+.chr 00030000
+.chr 00030000
+.chr 00030000
+.chr 00030000
+.chr 00333000
+; tile 42
+.chr 00000000
+.chr 00000300
+.chr 00000300
+.chr 00000300
+.chr 00000300
+.chr 03000300
+.chr 03000300
+.chr 00333000
+; tile 43
+.chr 00000000
+.chr 03000300
+.chr 03003000
+.chr 03030000
+.chr 03300000
+.chr 03030000
+.chr 03003000
+.chr 03000300
+; tile 44
+.chr 00000000
+.chr 03000000
+.chr 03000000
+.chr 03000000
+.chr 03000000
+.chr 03000000
+.chr 03000000
+.chr 03333300
+; tile 45
+.chr 00000000
+.chr 03000300
+.chr 03303300
+.chr 03030300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+; tile 46
+.chr 00000000
+.chr 03000300
+.chr 03000300
+.chr 03300300
+.chr 03030300
+.chr 03003300
+.chr 03000300
+.chr 03000300
+; tile 47
+.chr 00000000
+.chr 00333000
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 00333000
+; tile 48
+.chr 00000000
+.chr 03333000
+.chr 03000300
+.chr 03000300
+.chr 03333000
+.chr 03000000
+.chr 03000000
+.chr 03000000
+; tile 49
+.chr 00000000
+.chr 00333000
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03030300
+.chr 03003000
+.chr 00330300
+; tile 50
+.chr 00000000
+.chr 03333000
+.chr 03000300
+.chr 03000300
+.chr 03333000
+.chr 03030000
+.chr 03003000
+.chr 03000300
+; tile 51
+.chr 00000000
+.chr 00333300
+.chr 03000000
+.chr 03000000
+.chr 00333000
+.chr 00000300
+.chr 00000300
+.chr 03333000
+; tile 52
+.chr 00000000
+.chr 03333300
+.chr 00030000
+.chr 00030000
+.chr 00030000
+.chr 00030000
+.chr 00030000
+.chr 00030000
+; tile 53
+.chr 00000000
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 00333000
+; tile 54
+.chr 00000000
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 00303000
+.chr 00303000
+.chr 00030000
+; tile 55
+.chr 00000000
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03030300
+.chr 03030300
+.chr 03333300
+.chr 00303000
+; tile 56
+.chr 00000000
+.chr 03000300
+.chr 03000300
+.chr 00303000
+.chr 00030000
+.chr 00303000
+.chr 03000300
+.chr 03000300
+; tile 57
+.chr 00000000
+.chr 03000300
+.chr 03000300
+.chr 00303000
+.chr 00303000
+.chr 00030000
+.chr 00030000
+.chr 00030000
+; tile 58
+.chr 00000000
+.chr 03333300
+.chr 00000300
+.chr 00003000
+.chr 00030000
+.chr 00300000
+.chr 03000000
+.chr 03333300
+; tile 59
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 60
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 61
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 62
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 63
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 64
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 65
+.chr 00000000
+.chr 00333000
+.chr 03000300
+.chr 03000300
+.chr 03333300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+; tile 66
+.chr 00000000
+.chr 03333000
+.chr 03000300
+.chr 03000300
+.chr 03333000
+.chr 03000300
+.chr 03000300
+.chr 03333000
+; tile 67
+.chr 00000000
+.chr 00333300
+.chr 03000000
+.chr 03000000
+.chr 03000000
+.chr 03000000
+.chr 03000000
+.chr 00333300
+; tile 68
+.chr 00000000
+.chr 03333000
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03333000
+; tile 69
+.chr 00000000
+.chr 03333000
+.chr 03000000
+.chr 03000000
+.chr 03330000
+.chr 03000000
+.chr 03000000
+.chr 03333000
+; tile 70
+.chr 00000000
+.chr 03333000
+.chr 03000000
+.chr 03000000
+.chr 03330000
+.chr 03000000
+.chr 03000000
+.chr 03000000
+; tile 71
+.chr 00000000
+.chr 00333300
+.chr 03000000
+.chr 03000000
+.chr 03000000
+.chr 03033300
+.chr 03000300
+.chr 00333000
+; tile 72
+.chr 00000000
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03333300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+; tile 73
+.chr 00000000
+.chr 00333000
+.chr 00030000
+.chr 00030000
+.chr 00030000
+.chr 00030000
+.chr 00030000
+.chr 00333000
+; tile 74
+.chr 00000000
+.chr 00000300
+.chr 00000300
+.chr 00000300
+.chr 00000300
+.chr 03000300
+.chr 03000300
+.chr 00333000
+; tile 75
+.chr 00000000
+.chr 03000300
+.chr 03003000
+.chr 03030000
+.chr 03300000
+.chr 03030000
+.chr 03003000
+.chr 03000300
+; tile 76
+.chr 00000000
+.chr 03000000
+.chr 03000000
+.chr 03000000
+.chr 03000000
+.chr 03000000
+.chr 03000000
+.chr 03333300
+; tile 77
+.chr 00000000
+.chr 03000300
+.chr 03303300
+.chr 03030300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+; tile 78
+.chr 00000000
+.chr 03000300
+.chr 03000300
+.chr 03300300
+.chr 03030300
+.chr 03003300
+.chr 03000300
+.chr 03000300
+; tile 79
+.chr 00000000
+.chr 00333000
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 00333000
+; tile 80
+.chr 00000000
+.chr 03333000
+.chr 03000300
+.chr 03000300
+.chr 03333000
+.chr 03000000
+.chr 03000000
+.chr 03000000
+; tile 81
+.chr 00000000
+.chr 00333000
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03030300
+.chr 03003000
+.chr 00330300
+; tile 82
+.chr 00000000
+.chr 03333000
+.chr 03000300
+.chr 03000300
+.chr 03333000
+.chr 03030000
+.chr 03003000
+.chr 03000300
+; tile 83
+.chr 00000000
+.chr 00333300
+.chr 03000000
+.chr 03000000
+.chr 00333000
+.chr 00000300
+.chr 00000300
+.chr 03333000
+; tile 84
+.chr 00000000
+.chr 03333300
+.chr 00030000
+.chr 00030000
+.chr 00030000
+.chr 00030000
+.chr 00030000
+.chr 00030000
+; tile 85
+.chr 00000000
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 00333000
+; tile 86
+.chr 00000000
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 00303000
+.chr 00303000
+.chr 00030000
+; tile 87
+.chr 00000000
+.chr 03000300
+.chr 03000300
+.chr 03000300
+.chr 03030300
+.chr 03030300
+.chr 03333300
+.chr 00303000
+; tile 88
+.chr 00000000
+.chr 03000300
+.chr 03000300
+.chr 00303000
+.chr 00030000
+.chr 00303000
+.chr 03000300
+.chr 03000300
+; tile 89
+.chr 00000000
+.chr 03000300
+.chr 03000300
+.chr 00303000
+.chr 00303000
+.chr 00030000
+.chr 00030000
+.chr 00030000
+; tile 90
+.chr 00000000
+.chr 03333300
+.chr 00000300
+.chr 00003000
+.chr 00030000
+.chr 00300000
+.chr 03000000
+.chr 03333300
+; tile 91
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 92
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 93
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 94
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 95
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 96
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 97
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 98
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 99
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 100
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 101
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 102
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 103
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 104
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 105
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 106
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 107
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 108
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 109
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 110
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 111
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 112
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 113
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 114
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 115
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 116
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 117
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 118
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 119
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 120
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 121
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 122
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 123
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 124
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 125
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 126
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 127
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
--- /dev/null
+; this tileset was generated by png2chr.py
+; tile 0
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 1
+.chr 03333330
+.chr 30000013
+.chr 30022213
+.chr 30222213
+.chr 30222213
+.chr 30222213
+.chr 31111113
+.chr 03333330
+; tile 2
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 3
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 4
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 5
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 6
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 7
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 8
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 9
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 10
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 11
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 12
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 13
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 14
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 15
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 16
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 17
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 18
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 19
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 20
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 21
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 22
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 23
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 24
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 25
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 26
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 27
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 28
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 29
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 30
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 31
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 32
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 33
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 34
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 35
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 36
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 37
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 38
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 39
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 40
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 41
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 42
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 43
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 44
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 45
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 46
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 47
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 48
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 49
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 50
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 51
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 52
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 53
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 54
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 55
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 56
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 57
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 58
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 59
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 60
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 61
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 62
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 63
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 64
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 65
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 66
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 67
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 68
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 69
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 70
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 71
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 72
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 73
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 74
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 75
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 76
+.chr 00000000
+.chr 00033333
+.chr 00322222
+.chr 03322222
+.chr 33222222
+.chr 32333223
+.chr 32333223
+.chr 32333223
+; tile 77
+.chr 00000000
+.chr 33300000
+.chr 11330000
+.chr 21133000
+.chr 22113300
+.chr 33211300
+.chr 33211300
+.chr 33211300
+; tile 78
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 79
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 80
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 81
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 82
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 83
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 84
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 85
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 86
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 87
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 88
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 89
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 90
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 91
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 92
+.chr 32222331
+.chr 32222332
+.chr 32222222
+.chr 33322222
+.chr 00323232
+.chr 00323232
+.chr 00333333
+.chr 00000000
+; tile 93
+.chr 11211300
+.chr 22211300
+.chr 22113300
+.chr 21133000
+.chr 31333000
+.chr 31333000
+.chr 33330000
+.chr 00000000
+; tile 94
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 95
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 96
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 97
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 98
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 99
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 100
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 101
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 102
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 103
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 104
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 105
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 106
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 107
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 108
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 109
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 110
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 111
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 112
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 113
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 114
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 115
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 116
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 117
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 118
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 119
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 120
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 121
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 122
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 123
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 124
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 125
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 126
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+.chr 00000000
+; tile 127
+.chr 33333333
+.chr 32333333
+.chr 33333233
+.chr 33333333
+.chr 33233323
+.chr 33333333
+.chr 32332333
+.chr 33333333
--- /dev/null
+NAME=pcq
+TEST_NAME=test$(NAME)
+AS=ulas
+FLAGS=-D DEBUG
+#SYMTYPE=sym
+SYMTYPE=mlb
+INCS=-I ./src -I ./gen
+
+bin:
+ $(AS) $(FLAGS) -o $(NAME).gb -l ${NAME}.lst -s $(NAME).$(SYMTYPE) -S $(SYMTYPE) $(INCS) src/main.s
+
+.PHONY: tiles
+tiles:
+ ./tools/png2chr.py assets/tiles/bank0.png > gen/tiles/bank0.inc
+ ./tools/png2chr.py assets/tiles/bank1.png > gen/tiles/bank1.inc
+ ./tools/png2chr.py assets/tiles/bank2.png > gen/tiles/bank2.inc
+ ./tools/png2chr.py assets/tiles/bank3.png > gen/tiles/bank3.inc
+
+.PHONY: maps
+maps:
+ ./tools/tmx2map.py assets/maps/l1.tmx > gen/maps/l1.inc
+
+.PHONY: clean
+clean:
+ rm -f ./gen/maps/*.inc
+ rm -f ./gen/tiles/*.inc
+
--- /dev/null
+
+ ; gets the tile an actor is located at
+ ; inputs:
+ ; de: actor ptr
+ ; bc: y/x offset for position
+ ; returns:
+ ; b: tile id
+ ; a: tile flags
+act_get_tile:
+
+ ; load tile positions
+ ld hl, act_hi_y
+ add hl, de ; hl = actor y
+ ld a, [hl+]
+ add a, b ; offset by b
+#ifdef DEBUG
+ ldh [debug_col_point_y], a
+#endif
+ div8 a
+
+ ; b = y tile
+ ld b, a
+
+ inc hl ; move past lo x
+ ld a, [hl]
+ add a, c ; offset by c
+#ifdef DEBUG
+ ldh [debug_col_point_x], a
+#endif
+ div8 a
+
+ ; c = x tile
+ ld c, a
+
+ ; load map
+ ld hl, map
+ ld a, [hl+]
+ ld h, [hl]
+ ld l, a
+
+ ld de, map_dat
+ add hl, de
+
+ ; hl = map ptr
+ ld de, MAP_W
+
+ ; save coordinate
+ ld a, b
+ ldh [col_tile_y], a
+ ld a, c
+ ldh [col_tile_x], a
+
+ ; add MAP_W
+ ; to map ptr y times
+ ld a, b
+ cp a, 0
+ jr z, @skip_y REL
+@y_loop:
+ add hl, de
+ dec b
+ jr nz, @y_loop REL
+@skip_y:
+
+ ld d, 0
+ ld e, c
+ add hl, de ; add x offset
+
+ ld a, [hl] ; load tile index
+ ld b, a ; b = tile index
+
+ ; load tile flags
+ ld hl, tile_flags
+ ld e, a
+ add hl, de
+
+ ld a, [hl] ; laod tile flag
+
+ ; b = tile id
+ ; a = tile flags
+ ret
+
+ ; checks actor for wall position
+ ; inputs:
+ ; $1: y offset
+ ; $2: x offset
+ ; de: actor ptr
+ ; modifies:
+ ; registers: all
+ ; preserves: de
+ ; sets col_flag++ if collision occured
+#macro act_move_wall_check
+ push de
+ ld b, $1 & 0xFF
+ ld c, $2 & 0xFF
+ call act_get_tile
+ and a, TILE_F_WALL
+
+ pop de
+
+ call nz, act_inc_col_flag
+#endmacro
+
+ ; increments col flag
+act_inc_col_flag:
+ ; if we called this col_flag should be 1
+ ldh a, [col_flag]
+ inc a
+ ldh [col_flag], a
+ ret
+
+ ; resets position
+ ; if col_flag > 0
+ ; to tmp_lo/tmp_hi
+ ; inputs:
+ ; hl: hl point to reset if wall
+ ; tmp_lo/hi: original position
+ ; returns:
+ ; a: 0 no reset
+ ; a: 1 reset
+act_move_reset:
+ ldh a, [col_flag]
+ cp a, 0
+ jr z, @no_reset REL
+
+ ldh a, [tmp_lo]
+ ld [hl+], a
+ ldh a, [tmp_hi]
+ ld [hl], a
+
+ ld a, 1
+ ret
+@no_reset:
+ ld a, 0
+ ret
+
+ ; moves an actor up
+ ; inputs:
+ ; de: actor ptr
+ ; b: lo value to move by
+ ; c: hi value to move by
+ ; returns:
+ ; a: 0 -> move was made
+ ; a: 1 -> move failed
+act_move_up:
+ xor a, a
+ ldh [col_flag], a
+
+ ld hl, act_lo_y
+ add hl, de
+
+ push hl
+
+ ; lo -= b
+ ld a, [hl]
+ ldh [tmp_lo], a
+ sub a, b
+ ld [hl+], a
+
+ ; hi -= carry
+ ld a, [hl]
+ ldh [tmp_hi], a
+ sbc a, c
+ ld [hl], a
+
+ act_move_wall_check 0, 4
+ act_move_wall_check 0, 2
+
+ pop hl
+ call act_move_reset
+
+ ret
+
+ ; same as move up
+act_move_down:
+ xor a, a
+ ldh [col_flag], a
+
+ ld hl, act_lo_y
+ add hl, de
+
+ push hl
+
+ ; lo += b
+ ld a, [hl]
+ ldh [tmp_lo], a
+ add a, b
+ ld [hl+], a
+
+ ; hi += carry
+ ld a, [hl]
+ ldh [tmp_hi], a
+ adc a, c
+ ld [hl], a
+
+ act_move_wall_check 6, 4
+ act_move_wall_check 6, 2
+
+ pop hl
+ call act_move_reset
+ ret
+
+ ; moves an actor left
+ ; inputs:
+ ; de: actor ptr
+ ; b: lo value to move by
+ ; c: hi value to move by
+ ; returns:
+ ; a: 0 -> move was made
+ ; a: 1 -> move failed
+act_move_left:
+ xor a, a
+ ldh [col_flag], a
+
+ ld hl, act_lo_x
+ add hl, de
+
+ push hl
+
+ ; lo -= b
+ ld a, [hl]
+ ldh [tmp_lo], a
+ sub a, b
+ ld [hl+], a
+
+ ; hi -= carry
+ ld a, [hl]
+ ldh [tmp_hi], a
+ sbc a, c
+ ld [hl], a
+
+ act_move_wall_check 4, 1
+ act_move_wall_check 2, 1
+
+ pop hl
+ call act_move_reset
+
+ ret
+
+
+ ; same as move right
+act_move_right:
+ xor a, a
+ ldh [col_flag], a
+
+ ld hl, act_lo_x
+ add hl, de
+
+ push hl
+
+ ; lo += b
+ ld a, [hl]
+ ldh [tmp_lo], a
+ add a, b
+ ld [hl+], a
+
+ ; hi += carry
+ ld a, [hl]
+ ldh [tmp_hi], a
+ adc a, c
+ ld [hl], a
+
+ act_move_wall_check 4, 6
+ act_move_wall_check 2, 6
+
+ pop hl
+ call act_move_reset
+ ret
--- /dev/null
+.se 0
+.de ACT_T_NULL, 1
+.de ACT_T_PLAYER, 1
+
+.se 0
+.de act_type, 1
+.de act_flags, 1
+ ; low and high positon
+.de act_lo_y, 1
+.de act_hi_y, 1
+.de act_lo_x, 1
+.de act_hi_x, 1
+.de act_size, 0
+
--- /dev/null
+
+#define MAP_H 14
+#define MAP_W 20
+
+; struct map header
+.se 0
+.de map_flags, 1
+
+ ; start and end tile
+.de map_start_y, 1
+.de map_start_x, 1
+.de map_end_y, 1
+.de map_end_x, 1
+ ; string buffer with map name
+.de map_name, 16
+ ; lastly map data
+.de map_dat, MAP_W * MAP_H
--- /dev/null
+; oam memory layout
+.se 0
+.de oamy, 1
+.de oamx, 1
+.de oamchr, 1
+.de oamflag, 1
+.de oamsize, 0
+
--- /dev/null
+#define player_soam shadow_oam
+
+#define PLAYER_TILE_IDLE 0x81
+#define PLAYER_TILE_HUG_LEFT_WALL 0x82
+#define PLAYER_TILE_FALL 0x93
+#define PLAYER_TILE_JUMP 0x84
+
+#define PLAYER_JUMP_TIMER 0x20
--- /dev/null
+.se 1
+.de TILE_F_WALL, 1
--- /dev/null
+#define DEBUG_SOAM_COL_POINT shadow_oam_end-oamsize
+#define DEBUG_SOAM_COL_TILE shadow_oam_end-oamsize*2
+
+ ; called by ASSERT macro if check
+ ; fails
+debug_assert_fail:
+ BREAK
+ ret
+
+ ; updates debug information
+debug_update:
+ ; draw debug collision point
+ ld hl, DEBUG_SOAM_COL_POINT
+
+ ldh a, [debug_col_point_y]
+ add a, OBJ_OFF_Y
+ ld [hl+], a
+
+ ldh a, [debug_col_point_x]
+ add a, OBJ_OFF_X
+ ld [hl+], a
+
+ ld a, 0xBF
+ ld [hl+], a
+
+ xor a, a
+ ld [hl], a
+
+
+ ; draw debug collision tile
+ ld hl, DEBUG_SOAM_COL_TILE
+
+ ldh a, [col_tile_y]
+ mul8 a
+ add a, OBJ_OFF_Y
+ ld [hl+], a
+
+ ldh a, [col_tile_x]
+ mul8 a
+ add a, OBJ_OFF_X
+ ld [hl+], a
+
+ ld a, 0xBF
+ ld [hl+], a
+
+ xor a, a
+ ld [hl], a
+
+ ret
--- /dev/null
+#include "d_oam.s"
+#include "d_map.s"
+#include "d_actor.s"
+#include "d_player.s"
+#include "d_tiles.s"
+
+.def int OAMDMAFN = 0xFF80
+
+#define BGP 0b11100100
+
+#define STACK_BEGIN 0xDFFF
+#define EMPTY_TILE 0x00
--- /dev/null
+tile_bank0:
+#include "tiles/bank0.inc"
+tile_bank0_end:
+tile_bank1:
+#include "tiles/bank1.inc"
+tile_bank2:
+#include "tiles/bank2.inc"
+tile_bank3:
+#include "tiles/bank3.inc"
+
+maps:
+
+map_l1:
+#include "maps/l1.inc"
+
+maps_end:
--- /dev/null
+; header
+ jp entry
+ nop
+logo:
+.db 0xCE, 0xED, 0x66, 0x66, 0xCC, 0x0D, 0x00, 0x0B, 0x03, 0x73, 0x00, 0x83, 0x00, 0x0C, 0x00, 0x0D
+.db 0x00, 0x08, 0x11, 0x1F, 0x88, 0x89, 0x00, 0x0E, 0xDC, 0xCC, 0x6E, 0xE6, 0xDD, 0xDD, 0xD9, 0x99
+.db 0xBB, 0xBB, 0x67, 0x63, 0x6E, 0x0E, 0xEC, 0xCC, 0xDD, 0xDC, 0x99, 0x9F, 0xBB, 0xB9, 0x33, 0x3E
+logo_end:
+
+.str "nj"
+.fill 0, 0x147 - $
+
+; cartride type
+; MBC1+RAM+Battery
+.db 0x03
+ ; rom size 32K
+.db 0x00
+ ; ram size 8k
+.db 0x02
+.fill 0, 0x14B - $
+.chksm
+.fill 0, 0x150 - $
--- /dev/null
+#define HRAM 0xFF80
+
+; 0x80 - 0x90 are used by dma routines
+.org 0xFF90
+
+ ; tmp y and x registers
+tmp_lo: .adv 1
+tmp_hi: .adv 1
+
+col_tile_y: .adv 1
+col_tile_x: .adv 1
+ ; set to 0 if collision did not occur
+ ; set to 1 if collision did occur
+col_flag: .adv 1
+
+ ; draws collision point
+ ; in actual screen coordinates
+ ; y/x position
+debug_col_point_y: .adv 1
+debug_col_point_x: .adv 1
--- /dev/null
+; register defs
+
+#define SCRNW 159
+#define SCRNH 143
+
+; lcd registers
+
+; lcd y
+#define RLY 0xFF44
+#define RLYC 0xFF45
+#define RLCD 0xFF40
+
+#define LCDCF_BGON 0b00000001
+#define LCDCF_ON 0b10000000
+#define LCDCF_OBJON 0b00000010
+#define LCDCF_TILE_BANK 0b00010000
+#define LCDF_WINDOWON 0b00100000
+#define LCDF_OBJ_SIZE 0b00000100
+#define LCDF_WINBANKSELECT 0b01000000
+
+#define RSTAT 0xFF41
+
+#define STATF_LYC_INT_SELECT 0b01000000
+
+#define RBGP 0xFF47
+#define ROBP0 0xFF48
+#define ROBP1 0xFF49
+
+; screen scroll y and x
+#define RSCY 0xFF42
+#define RSCX 0xFF43
+
+; window y and x
+#define RWY 0xFF4A
+#define RWX 0xFF4B
+
+; P1: joy pad register
+#define RP1 0xFF00
+#define P1F5 0b00100000 ; get buttons
+#define P1F4 0b00010000 ; get dpad
+
+; buttons
+.def int BTNDOWN = 0x80
+.def int BTNUP = 0x40
+.def int BTNLEFT = 0x20
+.def int BTNRIGHT = 0x10
+.def int BTNSTART = 0x08
+.def int BTNSELECT = 0x04
+.def int BTNA = 0x01
+.def int BTNB = 0x02
+
+; obj off-screen offsets
+#define OBJ_OFF_X 8
+#define OBJ_OFF_Y 16
+
+; interrupts
+; interrupt flag
+#define IF 0xFF0F
+; interrupt enabled
+#define IE 0xFFFF
+#define IVBLANK 0b00000001
+#define ILCD 0b00000010
+
+; location where code for dma needs to be memcyp'd to
+.def int DMAFN = 0xFF80
+#define DMA 0xFF46
+
+#define OBJSMAX 40
+
+.def int P1FDPAD = P1F5
+.def int P1FBTN = P1F4
+.def int P1FNONE = P1F5 | P1F4
+
+; memory map
+.def int VRAM = 0x8000
+.def int VRAM8800 = VRAM+0x0800
+.def int VRAM9000 = VRAM+0x1000
+
+.def int VIEW_W = 20
+.def int VIEW_H = 20
+.def int SCRN_W = 32
+.def int SCRN_H = 32
+
+.def int SCRN0 = 0x9800
+.def int SCRN0_UI = SCRN0 + SCRN_W * 16
+
+.def int SCRN1 = 0x9C00
+.def int OAMRAM = 0xFE00
+.def int OBJSIZE = 4
+.def int OAMRAM_SIZE = OBJSMAX * OBJSIZE
+
+.def int OAM_FPRIO = 0b10000000
+#define OAM_FYFLIP 0b01000000
+#define OAM_FXFLIP 0b00100000
+#define OAM_DMG_PAL 0b00010000
+
+; MBC1 registers
+
+; write 0xA here to enable sram
+#define MBC1_SRAM_ENABLE 0x0000
+#define MBC1_ROM_BANKSEL 0x2000
+#define MBC1_SRAM_BANKSEL 0x4000
+
+; audio registers
+#define AUDIO_CTRL 0xFF26
+#define MASTER_VOLUME 0xFF24
+
+#define CH1_SWEEP 0xFF10
+#define CH1_LEN_DUTY 0xFF11
+#define CH1_VOL_ENV 0xFF12
+#define CH1_PERIOD_LO 0xFF13
+#define CH1_PERIOD_HI_CTRL 0xFF14
+
+#define CH4_LENGTH 0xFF20
+#define CH4_VOLUME_ENV 0xFF21
+#define CH4_FREQ_RAND 0xFF22
+#define CH4_CTRL 0xFF23
+
+#define AUDIO_ALL_ON 0b10000000
+#define AUDIO_ALL_OFF 0b00000000
+
+
--- /dev/null
+
+ ; checks if an input was just pressed
+ ; in the last frame
+ ; inputs:
+ ; b: button to check
+ ; returns:
+ ; a: button state
+ ; flags
+#macro input_just_pressed
+.beginscope
+ ld a, [inputs]
+ ld c, a ; c = current inputs
+ ld a, [inputs_prev]
+ xor a, c ; xor with prev
+ ld c, a ; c = current xor prev
+ ld a, [inputs]
+ and a, c ; give precdence to current inputs
+ and a, b
+.endscope
+#endmacro
+
+ ; checks for a button press
+ ; inputs:
+ ; b: BUTTON
+ ; returns:
+ ; a: button state
+ ; flags
+#macro input_held
+ ld a, [inputs]
+ and a, b
+#endmacro
+
+ ; poll inputs
+ ; returns:
+ ; new inputs in [curr_inputs]
+ ; previous inputs in [prev_inputs]
+inputs_poll:
+ ld a, [inputs]
+ ld [inputs_prev], a
+
+ ld a, P1FDPAD
+ call poll_p1
+ swap a
+ ld b, a
+
+ ld a, P1FBTN
+ call poll_p1
+ or a, b
+
+ ld [inputs], a
+ ld a, b
+
+ ret
+
+ ; poll p1
+ ; inputs:
+ ; a: P1 key matrix flag
+ ; returns
+ ; a: A0-3 -> inputs
+poll_p1:
+ ld [RP1], a
+ ; wait for values to become stable
+ ldh a, [RP1]
+ ldh a, [RP1]
+ ldh a, [RP1]
+ ldh a, [RP1]
+ ldh a, [RP1]
+ ldh a, [RP1] ; last read counts
+ xor a, 0x0F
+ and a, 0x0F
+
+ ld d, a
+ ; reset P1F
+ ld a, P1FNONE
+ ldh [RP1], a
+ ld a, d
+
+ ret
--- /dev/null
+; RST $00
+; panic exception handler
+rst_panic:
+ di
+@forever:
+ jp @forever
+.fill 0, 0x08 - $
+
+ ; rst 0008
+ ; simple call to hl
+sys_call_hl:
+ jp hl
+
+
+.fill 0, 0x40 - $
+; interrupt vectors
+
+;=============
+; vblank 0x40
+;=============
+vec_vblank:
+ call vblank
+ reti
+
+.fill 0, 0x48 - $
+;=============
+; STA 0x48
+;=============
+vec_stat:
+ reti
+ ; disable objects
+ push af
+ ld a, [RLCD]
+ and a, ~LCDCF_OBJON & 0xFF
+ ld [RLCD], a
+ pop af
+ reti
--- /dev/null
+
+
+; relative jump: jr <label> RELB
+#define REL - $ - 2 & 0xFF
+
+#ifdef DEBUG
+
+#define BREAK ld b, b
+
+ ; asserts the a register against $1
+ ; inputs:
+ ; a: register
+ ; $1: falg value to compate
+ ; $2: expected value
+#macro ASSERT
+.beginscope
+ cp a, $2
+ call $1, debug_assert_fail
+.endscope
+#endmacro
+
+#endif
+
+; no debug
+#ifndef DEBUG
+
+#define BREAK
+
+#macro ASSERT
+#endmacro
+
+#endif
+
+
+ ; divides a regiser by 8
+ ; inputs:
+ ; $1: the register
+#macro div8
+ srl $1 ; / 2
+ srl $1 ; / 4
+ srl $1 ; / 8
+#endmacro
+
+ ; multiplies a register by 8
+ ; inputs:
+ ; $1: the register
+#macro mul8
+ add $1, $1 ; * 2
+ add $1, $1 ; * 4
+ add $1, $1 ; * 8
+#endmacro
--- /dev/null
+#include "hw.s"
+#include "defs.s"
+#include "macros.s"
+#include "wram.s"
+#include "hram.s"
+
+.org 0x00
+.section prgrom
+#include "jmp.s"
+.fill 0, 0x100 - $
+#include "header.s"
+
+entry:
+
+init:
+ ld sp, STACK_BEGIN
+ call disableinterrutpts
+
+ call mem_init
+
+ call lcd_off
+
+ call sys_init
+ call tiles_init
+ call video_init
+
+ call map_init
+ call player_init
+
+ call lcd_on
+ call vblank_wait
+
+ call enableinterrupts
+
+main:
+@forever:
+ ; wait until frame ready is 0
+ ld a, [frame_ready]
+ cp a, 0
+ jr z, @forever REL
+
+ call update
+
+ ; next frame can happen
+ xor a, a
+ ld [frame_ready], a
+ jr @forever REL
+
+
+#include "gen.s"
+#include "debug.s"
+#include "mem.s"
+#include "video.s"
+#include "update.s"
+#include "tiles.s"
+#include "sys.s"
+#include "input.s"
+#include "map.s"
+#include "actor.s"
+#include "player.s"
--- /dev/null
+
+ ; draws a single map tile
+#macro _map_draw_tile
+ ld a, [hl+]
+ ld [de], a
+ inc de
+#endmacro
+
+ ; inits the map system
+map_init:
+ ld de, map_l1
+ call map_load
+ ret
+
+ ; loads a map into SCRN0 memory
+ ; inputs:
+ ; de: map header ptr
+map_load:
+ ld a, e
+ ld [map], a
+ ld a, d
+ ld [map+1], a
+
+ ld hl, map_dat
+ add hl, de
+
+ ; b = loop counter
+ ld b, MAP_H
+ ld de, SCRN0
+@draw_row:
+ _map_draw_tile
+ _map_draw_tile
+ _map_draw_tile
+ _map_draw_tile
+ _map_draw_tile
+ _map_draw_tile
+ _map_draw_tile
+ _map_draw_tile
+ _map_draw_tile
+ _map_draw_tile
+ _map_draw_tile
+ _map_draw_tile
+ _map_draw_tile
+ _map_draw_tile
+ _map_draw_tile
+ _map_draw_tile
+ _map_draw_tile
+ _map_draw_tile
+ _map_draw_tile
+ _map_draw_tile
+
+ ; next row
+.rep i, 12, 1, inc de
+
+ dec b
+ jr nz, @draw_row REL
+
+ ret
--- /dev/null
+
+ ; clears all memory
+ ; sets up dma
+mem_init:
+ ; clear wram
+ ld d, 0
+ ld hl, WRAM
+ ld bc, WRAMLEN
+ call memset
+
+ ld d, 0
+ ld hl, HRAM
+ ld bc, 0x7E
+ call memset
+
+
+ ; copy oam dma
+ ld de, dma_shadow_oam
+ ld hl, OAMDMAFN
+ ld bc, dma_shadow_oam_end - dma_shadow_oam
+ call memcpy
+
+ ret
+
+
+; copies memory from one location to another
+; inputs:
+; de: source
+; hl: destination
+; bc: length
+; returns:
+; hl: hl+length
+; de: de+length
+; bc: 0
+memcpy:
+@loop:
+ ld a, [de]
+ ld [hl+], a
+
+ inc de
+ dec bc
+ ld a, b
+ or a, c
+ jp nz, @loop
+
+ ret
+
+ ; sets a memory location to a specific value
+ ; inputs:
+ ; hl: destination
+ ; bc: length
+ ; d: value
+memset:
+@loop:
+ ld a, d
+ ld [hl+], a
+
+ dec bc
+ ld a, b
+ or a, c
+ jp nz, @loop
+ ret
+
+
+; dma shadow oam to oam
+; registers:
+; hl, af, bc, de
+dma_shadow_oam:
+ ld a, shadow_oam >> 8
+ ldh [DMA], a
+ ld a, 40 ; 160-cycle wait
+@wait:
+ dec a
+ jr nz, @wait REL
+ ret
+dma_shadow_oam_end:
--- /dev/null
+ ; creates a new player actor
+player_init:
+ ld a, 48
+ ld [player+act_hi_y], a
+ ld a, 64
+ ld [player+act_hi_x], a
+
+ ld hl, player_draw_idle
+ call player_set_draw
+
+ ld hl, player_update_falling
+ call player_set_update
+
+ ret
+
+ ; updates player
+player_update:
+ ld a, [player_update_routine]
+ ld l, a
+ ld a, [player_update_routine+1]
+ ld h, a
+ jp hl
+
+
+ ; sets update routine
+ ; inputs:
+ ; hl: new routine
+player_set_update:
+ ld a, l
+ ld [player_update_routine], a
+ ld a, h
+ ld [player_update_routine+1], a
+ ret
+
+ ; sets player draw routine
+ ; inputs:
+ ; hl: new routine
+player_set_draw:
+ ld a, l
+ ld [player_draw_routine], a
+ ld a, h
+ ld [player_draw_routine+1], a
+ ret
+
+ ; falling state
+ ; jumping is not possible
+player_update_falling:
+ ld hl, player_draw_fall
+ call player_set_draw
+
+ call player_update_move_left_right
+ call player_apply_gravity
+ ret
+
+ ; updates the player object
+player_update_grounded:
+ ld hl, player_draw_idle
+ call player_set_draw
+
+ ; check inputs
+ call player_update_move_left_right
+
+ ; gravity
+ call player_apply_gravity
+
+ ld b, BTNA
+ input_just_pressed
+ call nz, player_go_to_jump_state
+
+
+ ret
+
+ ; jumping state
+player_update_jump:
+ ld hl, player_draw_jump
+ call player_set_draw
+
+ call player_update_move_left_right
+ call player_jump
+
+ ld b, BTNA
+ input_held
+ ld hl, player_update_falling
+ call z, player_set_update
+
+
+ ret
+
+player_go_to_jump_state:
+ ld hl, player_update_jump
+ call player_set_update
+ ret
+
+ ; common update code for moving left and right
+ ; most update routines want to call this
+player_update_move_left_right:
+ ld b, BTNLEFT
+ input_held
+ ld b, 128
+ ld c, 0
+ ld de, player
+ call nz, player_move_left
+
+ ld b, BTNRIGHT
+ input_held
+ ld b, 128
+ ld c, 0
+ ld de, player
+ call nz, player_move_right
+ ret
+
+ ; causes the player to jump
+ ; but only as long as jump timer > 0
+player_jump:
+ ld a, [player_jump_timer]
+ cp a, 0
+ jr z, @done REL
+
+ sub a, 1
+ ld [player_jump_timer], a
+
+ ld b, 200
+ ld c, 0
+ ld de, player
+ call act_move_up
+ cp a, 1
+ ret nz ; not wall
+
+ ; if wall is hit set to 0
+ xor a, a
+ ld [player_jump_timer], a
+
+@done:
+ ld hl, player_update_falling
+ call player_set_update
+
+ ret
+
+ ; player movement calls
+ ; same as act_move
+ ; but also modifies player_draw ptr
+player_move_left:
+ call act_move_left
+ cp a, 1
+ ld hl, player_draw_hug_left_wall
+ call z, player_set_draw
+ ret
+
+player_move_right:
+ call act_move_right
+ cp a, 1
+ ld hl, player_draw_hug_right_wall
+ call z, player_set_draw
+ ret
+
+ ; applies gravity by moving the player down
+player_apply_gravity:
+ ld b, 0
+ ld c, 1
+ call act_move_down
+ cp a, 1
+ jr nz, @falling REL ; not on ground
+
+ ld a, PLAYER_JUMP_TIMER
+ ld [player_jump_timer], a
+
+ ; if on the ground go idle
+ ld hl, player_update_grounded
+ call player_set_update
+ ret
+@falling:
+ ld hl, player_update_falling
+ call player_set_update
+
+ ret
+
+ ; draw player to oam
+player_draw:
+ ld a, [player_draw_routine]
+ ld l, a
+ ld a, [player_draw_routine+1]
+ ld h, a
+ jp hl
+
+
+player_draw_idle:
+ ld hl, player_soam
+
+ ld a, [player+act_hi_y]
+ add a, OBJ_OFF_Y
+
+ ld [hl+], a
+ ld a, [player+act_hi_x]
+ add a, OBJ_OFF_X
+ ld [hl+], a
+
+ ld a, PLAYER_TILE_IDLE
+ ld [hl+], a
+
+ xor a, a
+ ld [hl], a
+
+ ret
+
+player_draw_fall:
+ ld hl, player_soam
+
+ ld a, [player+act_hi_y]
+ add a, OBJ_OFF_Y
+
+ ld [hl+], a
+ ld a, [player+act_hi_x]
+ add a, OBJ_OFF_X
+ ld [hl+], a
+
+ ld a, PLAYER_TILE_FALL
+ ld [hl+], a
+
+ xor a, a
+ ld [hl], a
+
+ ret
+
+player_draw_jump:
+ ld hl, player_soam
+
+ ld a, [player+act_hi_y]
+ add a, OBJ_OFF_Y
+
+ ld [hl+], a
+ ld a, [player+act_hi_x]
+ add a, OBJ_OFF_X
+ ld [hl+], a
+
+ ld a, PLAYER_TILE_JUMP
+ ld [hl+], a
+
+ xor a, a
+ ld [hl], a
+
+ ret
+
+player_draw_hug_left_wall:
+ ld hl, player_soam
+
+ ld a, [player+act_hi_y]
+ add a, OBJ_OFF_Y
+
+ ld [hl+], a
+ ld a, [player+act_hi_x]
+ add a, OBJ_OFF_X-2
+ ld [hl+], a
+
+ ld a, PLAYER_TILE_HUG_LEFT_WALL
+ ld [hl+], a
+
+ xor a, a
+ ld [hl], a
+ ret
+
+player_draw_hug_right_wall:
+ ld hl, player_soam
+
+ ld a, [player+act_hi_y]
+ add a, OBJ_OFF_Y
+
+ ld [hl+], a
+ ld a, [player+act_hi_x]
+ add a, OBJ_OFF_X+2
+ ld [hl+], a
+
+ ld a, PLAYER_TILE_HUG_LEFT_WALL
+ ld [hl+], a
+
+ ld a, OAM_FXFLIP
+ ld [hl], a
+ ret
--- /dev/null
+sys_init:
+ ; set up shadow IE
+ ld a, IVBLANK | ILCD
+ ld [shadow_ie], a
+
+ ret
+
+ ; enabels interrupts
+ ; writes shadow_ie to IE
+enableinterrupts:
+ ; enable interrupts
+ ld a, [shadow_ie]
+ ld [IE], a
+ ei
+ ret
+
+ ; disables interrupts
+ ; writes 0 to IE
+ ; leaves shadow_ie as is
+disableinterrutpts:
+ ld a, 0
+ ld [IE], a
+ di
+ ret
+
+ ; turns off the lcd
+lcd_off:
+ ; *never* turn off LCD without waiting
+ ; for vblank!
+ call vblank_wait
+ ; turn off lcd
+ ld a, 0
+ ld [RLCD], a
+
+ ret
+
+ ; turns on the lcd
+lcd_on:
+ ld a, LCDCF_ON | LCDCF_BGON | LCDCF_OBJON
+ ld [RLCD], a
+
+ ret
--- /dev/null
+
+ ; inits the tileset
+ ; only call when the LCD
+ ; is disabled
+tiles_init:
+ ld de, tile_bank0
+ call tiles_load_bank0
+
+ ld de, tile_bank1
+ call tiles_load_bank1
+
+ ld de, tile_bank2
+ call tiles_load_bank2
+
+ ld de, tile_bank3
+ call tiles_load_bank3
+
+
+ ld a, BGP
+ ld [RBGP], a
+
+ ld a, 0b11100100
+ ld [ROBP0], a
+
+ ld a, 0b11011000
+ ld [ROBP1], a
+
+ ret
+
+
+ ; loads tilesets
+ ; inputs:
+ ; de: source
+tiles_load_bank0:
+ ld hl, VRAM
+ ld bc, tile_bank0_end - tile_bank0
+ jp memcpy
+
+tiles_load_bank1:
+ ld hl, VRAM8800
+ ld bc, tile_bank0_end - tile_bank0
+ jp memcpy
+
+tiles_load_bank2:
+ ld hl, VRAM8800+0x400
+ ld bc, tile_bank0_end - tile_bank0
+ jp memcpy
+
+tiles_load_bank3:
+ ld hl, VRAM9000
+ ld bc, tile_bank0_end - tile_bank0
+ jp memcpy
+
+ ; map of tile ids to tile flags
+tile_flags:
+ .db 0 ; 0x00
+ .db TILE_F_WALL ; 0x01
--- /dev/null
+ ; updates main game logic
+update:
+ ld a, [frame_count]
+ inc a
+ ld [frame_count], a
+
+ call player_update
+ call player_draw
+
+ call debug_update
+
+ ret
--- /dev/null
+
+ ; vblank hanlder
+vblank:
+ push af
+ push de
+ push hl
+
+ ; enable objects
+ ld a, [RLCD]
+ or a, LCDCF_OBJON
+ ld [RLCD], a
+
+ ; skip vblank if frame is not yet ready
+ ld a, [frame_ready]
+ cp a, 1
+ jp z, @skip
+
+ ; dma sprites
+ call OAMDMAFN
+
+ call inputs_poll
+
+ ; mark frame as ready
+ ld a, 1
+ ld [frame_ready], a
+
+@skip:
+ pop hl
+ pop de
+ pop af
+ ret
+
+ ; inits vidoe system
+video_init:
+ ; set up STAT interrupt
+ ld a, 144-8*4 ; top of window
+ ld [RLYC], a ; set LY compare
+ ld a, STATF_LYC_INT_SELECT
+ ld [RSTAT], a
+
+ ld hl, SCRN0
+ ld bc, 1024
+ ld d, EMPTY_TILE
+ call memset
+
+ ld hl, SCRN1
+ ld bc, 1024
+ ld d, EMPTY_TILE
+ call memset
+
+
+ ret
+
+ ; wait for next vblank
+vblank_wait:
+ ; disable interrupts
+ ld a, [IE]
+ push af
+ xor a, a
+ ld [IE], a
+
+@wait:
+ ld a, [RLY]
+ cp a, 144
+ jp c, @wait
+
+ ; restore interrupts
+ pop af
+ ld [IE], a
+
+ ret
+
+not_vblank_wait:
+ ; disable interrupts
+ ld a, [IE]
+ push af
+ xor a, a
+ ld [IE], a
+
+@wait:
+ ld a, [RLY]
+ cp a, 1
+ jp nz, @wait
+
+ ; restore interrupts
+ pop af
+ ld [IE], a
+
+ ret
+
+ ; waits for vblank to not be enabled
+ ; and *then* waits for the next vblank
+next_vblank_wait:
+ call not_vblank_wait
+ jp vblank_wait
--- /dev/null
+#define WRAM 0xC000
+#define WRAMLEN 0xFFF
+
+.org WRAM
+.section wram
+
+; needs to be at the start or alinged properly for DMA!
+shadow_oam: .adv OBJSMAX * oamsize
+shadow_oam_end:
+
+; shadow registers
+shadow_ie: .adv 1
+
+ ; set to 1 if the next frame update can happen
+frame_ready: .adv 1
+
+ ; counts up once a game frame
+frame_count: .adv 1
+
+
+inputs: .adv 1
+inputs_prev: .adv 1
+
+player: .adv act_size
+
+ ; ptr to player draw routine
+player_draw_routine: .adv 2
+ ; ptr to current player update state
+player_update_routine: .adv 2
+player_jump_timer: .adv 1
+
+ ; ptr to current map
+map: .adv 2
+
--- /dev/null
+#!/usr/bin/env python
+
+# this script converts any image to a char map compatible with the
+# assembler's .chr directive
+
+import sys
+import os
+from PIL import Image
+from itertools import product
+
+DW = 8
+
+if len(sys.argv) < 2:
+ print("Usage: png2chr.py <source> [8/16]")
+ sys.exit(-1)
+
+if len(sys.argv) == 3:
+ DW = int(sys.argv[2])
+
+
+# these colors are mapped
+# maps color tuple to .chr string
+COLORS = {(0, 0, 0, 255): '3', (0, 0, 0, 0): '0', (107, 107, 107, 255): '1', (181, 181, 181, 255): '2', (255, 255, 255, 255): '0'}
+
+src = sys.argv[1]
+
+def tile(src, d):
+ img = Image.open(src)
+ w, h = img.size
+ tile_index = 0
+
+ # split the image into even tiles
+ grid = product(range(0, h-h%d, d), range(0, w-w%d, d))
+ for i, j in grid:
+ box = (j, i, j+d, i+d)
+ cropped = img.crop(box)
+ cw, ch = cropped.size
+ cropped = cropped.load()
+
+ print('; tile ' + str(tile_index))
+ tile_index += 1
+ for y in range(0, ch):
+ print(".chr ", end='')
+ for x in range(0, cw):
+ color = cropped[x, y]
+ if color in COLORS:
+ print(COLORS[color], end='')
+ else:
+ print('Unknown color: ' + str(cropped[x,y]))
+ sys.exit(-1)
+ print("")
+
+def tile16(src, d):
+ img = Image.open(src)
+ w, h = img.size
+ tile_index = 0
+
+ # split the image into even tiles
+ grid = product(range(0, h-h%d*2, d*2), range(0, w-w%d, d))
+ for i, j in grid:
+ box = (j, i, j+d, i+d*2)
+ cropped = img.crop(box)
+ cw, ch = cropped.size
+ cropped = cropped.load()
+
+ print('; tile ' + str(tile_index))
+ tile_index += 1
+ for y in range(0, ch):
+ print(".chr ", end='')
+ for x in range(0, cw):
+ color = cropped[x, y]
+ if color in COLORS:
+ print(COLORS[color], end='')
+ else:
+ print('Unknown color: ' + str(cropped[x,y]))
+ sys.exit(-1)
+ print("")
+
+
+print("; this tileset was generated by png2chr.py")
+
+if DW == 8:
+ tile(src, 8)
+else:
+ tile16(src, 8)
--- /dev/null
+#!/usr/bin/env python
+import sys
+import os
+import xml.etree.ElementTree as ET
+
+TILE_SIZE = 8
+MAP_W = 20
+
+if len(sys.argv) < 2:
+ print("Usage: tmx2map.py <source> [tile_offset]")
+ sys.exit(-1)
+
+
+src = sys.argv[1]
+
+tile_offset = 1
+
+if len(sys.argv) > 2:
+ tile_offset = int(sys.argv[2])
+
+def print_bg_data(data):
+ split = data.split(",")
+
+ for i, b in enumerate(split):
+ end = ', '
+ if i % MAP_W == 0:
+ print("\n.db ", end = '')
+
+
+ val = int(b.strip()) - tile_offset
+
+ if (i+1) % MAP_W == 0:
+ end = ''
+
+ if i == len(split) - 1:
+ end = '\n'
+ print(hex(val), end=end)
+ print("")
+
+def print_header():
+ print("; this map was generated by tmx2map.py")
+
+ print("; flags")
+ print(".db 0")
+ print("; start y/x")
+ print(".db 0, 0")
+ print("; end y/x")
+ print(".db 0, 0")
+ print("; map name")
+ print(".db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0")
+
+ pass
+
+def convert(src):
+ tree = ET.parse(src)
+ root = tree.getroot()
+
+ print_header()
+
+ for child in root:
+ if child.tag == "layer":
+ name = child.attrib['name']
+ for data in child:
+ print_bg_data(data.text)
+
+convert(src)
+