### Author Topic: How to tilemap?  (Read 5631 times)

0 Members and 1 Guest are viewing this topic.

#### Michael_Lee

• LV9 Veteran (Next: 1337)
• Posts: 1019
• Rating: +124/-9
##### How to tilemap?
« on: October 19, 2010, 06:44:56 pm »
Mkay, I apologize in advance, because this question has been probably asked so many times already, but how exactly do you make a tilemap in Axe?
What different methods are there, and what types of compression are commonly employed?

I'm pretty sure there's lots of threads with similar questions floating around, so links are fine.
« Last Edit: October 19, 2010, 06:45:16 pm by Michael_Lee »
My website: Currently boring.

Projects:
Axe Interpreter
> Core: Done
> Memory: Need write code to add constants.
> Graphics: Rewritten.  Needs to integrate sprites with constants.
> IO: GetKey done.  Need to add mostly homescreen IO stuff.
Croquette:
> Stomping bugs
> Internet version: On hold until I can make my website less boring/broken.

#### Builderboy

• Physics Guru
• CoT Emeritus
• LV13 Extreme Addict (Next: 9001)
• Posts: 5673
• Rating: +613/-9
• Would you kindly?
##### Re: How to tilemap?
« Reply #1 on: October 19, 2010, 07:00:20 pm »
I actually have had heaps of trouble making a reasonably fast tilemapper in Axe, and im also eager to see this question answered

#### nemo

• LV9 Veteran (Next: 1337)
• Posts: 1203
• Rating: +95/-11
##### Re: How to tilemap?
« Reply #2 on: October 19, 2010, 07:14:08 pm »
first, i'll define what a tilemap is. a tilemap is usually a 2-dimensional list (like a matrix) of numbers that map a tileset into a graphical map. what's a tileset? a set of graphics to use. the tilemap in axe is just a list of bytes. so the following could be a tilemap:
[0101010101]
[0100000001]
[0102020201]
[0101010101]
say we wanted to display this tilemap. the tile 00 will be a white square, the tile 01 will be a black square, and the tile 02 will be a white square with a black outline.
here's the code.
Code: [Select]
.PROG[0000000000000000]->Pic1[FFFFFFFFFFFFFFFF][FF818181818181FF][0101010101]->GDB1[0100000001][0102020201][0101010101]For(Y,0,3For(X,0,4Pt-On(X*8,Y*8,{Y*5+X+GDB1}*8+Pic1End:EndDispGraphRepeat getKeyEnd
this is very, very simplistic. note that each tile number takes up a byte. meaning you can have 256 different tiles. some tilemappers use half-bytes, or nibbles. you can then have only 16 different tiles, but your map is twice as compressed. many others also use RLE compression, which is a compression technique that instead of storing each tile as byte, would store the frequency of the tile in a byte, and then the tile in the next byte. so our example would become the following:
[06010300020103020601]
which would be read as "6 tile number 1's, 3 tile number 0's, 2 tile number 1's, 3 tile number 2's, 6 tile number 1's."
« Last Edit: October 19, 2010, 07:22:31 pm by nemo »

#### Deep Toaster

• So much to do, so much time, so little motivation
• LV13 Extreme Addict (Next: 9001)
• Posts: 8217
• Rating: +758/-15
##### Re: How to tilemap?
« Reply #3 on: October 19, 2010, 07:18:04 pm »
Here's a nice tutorial on it: http://ourl.ca/4550.

#### Michael_Lee

• LV9 Veteran (Next: 1337)
• Posts: 1019
• Rating: +124/-9
##### Re: How to tilemap?
« Reply #4 on: October 19, 2010, 07:19:11 pm »
Code: [Select]
.PROG[0000000000000000]->Pic1[FFFFFFFFFFFFFFFF][FF818181818181FF][0101010101]->GDB1[0100000001][0102020201][0101010101]For(Y,0,3For(X,0,4Pt-On(X*8,Y*8,Y*5+X*8+Pic1End:EndDispGraphRepeat getKeyEnd
Wait, wouldn't using X and Y just return random gibberish?  How does the code know that X and Y refer to GDB1?
My website: Currently boring.

Projects:
Axe Interpreter
> Core: Done
> Memory: Need write code to add constants.
> Graphics: Rewritten.  Needs to integrate sprites with constants.
> IO: GetKey done.  Need to add mostly homescreen IO stuff.
Croquette:
> Stomping bugs
> Internet version: On hold until I can make my website less boring/broken.

#### nemo

• LV9 Veteran (Next: 1337)
• Posts: 1203
• Rating: +95/-11
##### Re: How to tilemap?
« Reply #5 on: October 19, 2010, 07:22:04 pm »
Code: [Select]
.PROG[0000000000000000]->Pic1[FFFFFFFFFFFFFFFF][FF818181818181FF][0101010101]->GDB1[0100000001][0102020201][0101010101]For(Y,0,3For(X,0,4Pt-On(X*8,Y*8,Y*5+X*8+Pic1End:EndDispGraphRepeat getKeyEnd
Wait, wouldn't using X and Y just return random gibberish?  How does the code know that X and Y refer to GDB1?

oops. fixed.

#### JustCause

• CoT Emeritus
• Posts: 810
• Rating: +115/-5
##### Re: How to tilemap?
« Reply #6 on: October 25, 2010, 10:06:07 am »
This was helpful for a project I'm working on. Thanks!
See you, space cowboy...