start of item display

This commit is contained in:
alpine9000
2016-04-18 16:08:46 +10:00
parent 5b0358ada0
commit 21f2ee0aaa
13 changed files with 229 additions and 43 deletions
+22 -26
View File
@@ -9,9 +9,21 @@ BASE_ADDRESS=4000
NUM_COLORS=8
BOOTBLOCK_ASM=alpine_bootblock.s
OBJS=out/init.o out/utils.o out/image.o out/blit.o out/joystick.o out/pig.o
OBJS=out/init.o out/utils.o out/image.o out/blit.o out/joystick.o out/pig.o out/items.o
IMAGES=foreground.png background.png panel.png sprite_pig_up.png sprite_pig_left_jump.png sprite_pig_up_jump.png sprite_pig_down_jump.png sprite_pig_right_jump.png sprite_pig_down.png sprite_pig_left.png sprite_pig_right.png
IMAGES=foreground.png \
background.png \
panel.png \
sprite_pig_up.png \
sprite_pig_down.png \
sprite_pig_left.png \
sprite_pig_right.png \
sprite_pig_left_jump.png \
sprite_pig_up_jump.png \
sprite_pig_down_jump.png \
sprite_pig_right_jump.png \
sprite_coin1.png
IMAGEDATA=$(addprefix out/, $(IMAGES:.png=.bin))
VASM_EXTRA_ARGS=-DNUM_COLORS=$(NUM_COLORS)
@@ -40,39 +52,23 @@ out/tilemap-palette.s: assets/tilemap.png
out/panel.bin: assets/panel.png
$(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 16 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output out/panel --use-palette=assets/panel.pal
out/sprite_pig_up.bin: assets/sprite_pig_up.png
$(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 4 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output out/sprite_pig_up --palette-offset 16 --use-palette=assets/pig.pal
out/sprite_pig_down.bin: assets/sprite_pig_down.png
$(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 4 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output out/sprite_pig_down --palette-offset 16 --use-palette=assets/pig.pal
out/sprite_pig_left.bin: assets/sprite_pig_left.png
$(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 4 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output out/sprite_pig_left --palette-offset 16 --use-palette=assets/pig.pal
out/sprite_pig_right.bin: assets/sprite_pig_right.png
$(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 4 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output out/sprite_pig_right --palette-offset 16 --use-palette=assets/pig.pal
out/sprite_pig_right_jump.bin: assets/sprite_pig_right_jump.png
$(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 4 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output out/sprite_pig_right_jump --palette-offset 16 --use-palette=assets/pig.pal
out/sprite_pig_down_jump.bin: assets/sprite_pig_down_jump.png
$(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 4 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output out/sprite_pig_down_jump --palette-offset 16 --use-palette=assets/pig.pal
out/sprite_pig_up_jump.bin: assets/sprite_pig_up_jump.png
$(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 4 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output out/sprite_pig_up_jump --palette-offset 16 --use-palette=assets/pig.pal
out/sprite_pig_left_jump.bin: assets/sprite_pig_left_jump.png
$(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 4 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output out/sprite_pig_left_jump --palette-offset 16 --use-palette=assets/pig.pal
out/sprite_pig_%.bin: assets/sprite_pig_%.png
$(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 4 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output out/sprite_pig_$* --palette-offset 16 --use-palette=assets/pig.pal
out/sprite_coin%.bin: assets/sprite_coin%.png
$(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 4 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output out/sprite_coin$* --palette-offset 20 --use-palette=assets/coin.pal
out/foreground-map.s: foreground.tmx
../tools/mapgen/out/mapgen --depth=3 --input=foreground.tmx
mv foreground-map.s out
rm items-map.s
mv items-indexes.s out
rm foreground-indexes.s
out/background-map.s: background.tmx
../tools/mapgen/out/mapgen --depth=3 --input=background.tmx
mv background-map.s out
rm background-indexes.s
out/blit.o: constants.i macros.i
out/main.o: out/background-map.s out/foreground-map.s $(IMAGEDATA) constants.i macros.i Makefile link.script.x assets/palette.pal out/tilemap-palette.s
+4
View File
@@ -0,0 +1,4 @@
000 000 000 255
255 255 011 255
255 255 255 255
252 115 009 255
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

+8
View File
@@ -3,9 +3,17 @@
<tileset firstgid="1" name="foreground" tilewidth="16" tileheight="16" tilecount="320" columns="20">
<image source="assets/foregroundTilemap.png" width="320" height="256"/>
</tileset>
<tileset firstgid="321" name="items" tilewidth="16" tileheight="16" tilecount="320" columns="20">
<image source="assets/items.png" trans="000000" width="320" height="256"/>
</tileset>
<layer name="foreground" width="100" height="8">
<data encoding="base64" compression="zlib">
eJxjZGBg0GXEjhlH5eguZwekmYBYDAs9Kkd/OS0c8qNyAyM3GNPISJYbjGlkJMsNxjQykuUGYxoZyXKaDLjbYKNy9JcDAIrySzM=
</data>
</layer>
<layer name="items" width="100" height="8">
<data encoding="base64" compression="zlib">
eJxjYBgFo2AU4AKOjMTJgdjI2AmPvlEwMAA9vnCB0bgb3ABf3I2CUTAKRsEoGBoAABJBAtk=
</data>
</layer>
</map>
+17 -10
View File
@@ -9,8 +9,9 @@
xdef foregroundOffscreen
xdef foregroundScrollX
xdef backgroundScrollX
xdef map
xdef itemsMap
xdef mapSize
xdef moving
byteMap:
@@ -97,18 +98,15 @@ GameLoop:
.s2:
jsr ProcessJoystick
bsr Update
bsr RenderNextForegroundFrame
bsr RenderNextBackgroundFrame
;; move.w #$f00,COLOR00(a6)
if 0
move.w #$f00,COLOR00(a6)
endif
bra GameLoop
Update:
;; right
@@ -129,7 +127,8 @@ Update:
beq .c1
move.l foregroundScrollPixels,d0
add.l d0,foregroundScrollX
sub.w #1,spriteX
jsr ScrollSprites
move.l foregroundScrollX,d0
lsr.l #FOREGROUND_SCROLL_SHIFT_CONVERT,d0 ; convert to pixels
@@ -232,6 +231,7 @@ RenderNextForegroundFrame:
move.l d3,d2
bsr RenderForegroundTile
bsr ClearForegroundTile
jsr RenderItemSprite
add.l #2,a2
dbra d3,.loop
rts
@@ -410,6 +410,7 @@ tileMapCopperPalettePtr:
InstallSpriteColorPalette:
include "out/sprite_pig_up-palette.s"
include "out/sprite_coin1-palette.s"
rts
InstallColorPalette:
@@ -480,6 +481,12 @@ panel:
map:
include "out/foreground-map.s"
dc.w $FFFF
itemsMap:
include "out/items-indexes.s"
dc.w $FFFF
mapSize:
dc.l itemsMap-map
backgroundMap:
include "out/background-map.s"
dc.w $FFFF
+74
View File
@@ -0,0 +1,74 @@
include "includes.i"
xdef SetupItemSpriteData
xdef ScrollItemSprites
xdef RenderItemSprite
ScrollItemSprites:
sub.w #1,itemX
rts
SetupItemSpriteData:
move.l currentItemSprite,a0
cmp.l #deadSprite,a0
bne .setupSprite
bra .c1
.setupSprite:
move.w itemLagX,d0
move.w itemX,itemLagX
add.w #32,d0
move.w d0,d1
andi #1,d1
move.b d1,3(a0) ;spriteControl
lsr.l #1,d0
move.b d0,1(a0) ;spriteHStart
move.w itemY,d0
move.b d0,(a0) ;spriteVStart
move.w itemYEnd,d0
move.b d0,2(a0) ;spriteVStop
.c1:
move.l a0,SPR2PTH(a6)
rts
RenderItemSprite:
;; d2 - y tile index ?
movem.l d2-d3,-(sp)
move.l foregroundScrollX,d0
lsr.w #FOREGROUND_SCROLL_SHIFT_CONVERT,d0 ; convert to pixels
andi.w #$f,d0
cmp.b #15,d0
bne .dontAddSprite
move.l a2,a3
add.l mapSize,a3
cmpi.w #0,(a3)
beq .dontAddSprite
move.l #spriteCoin1,currentItemSprite
move.w #337,itemX
mulu.w #16,d2
move.w #255-12,d3
sub.w d2,d3
move.w d3,itemY
add.w #16,d3
move.w d3,itemYEnd
.dontAddSprite:
movem.l (sp)+,d2-d3
rts
spriteCoin1:
dc.w 0,0
dc.w 0,0
incbin "out/sprite_coin1.bin"
dc.l 0
currentItemSprite:
dc.l deadSprite
itemX:
dc.w $E0
itemLagX:
dc.w 0
itemY:
dc.w $a4
itemYEnd:
dc.w $b4
+11 -3
View File
@@ -4,11 +4,18 @@
xdef ProcessJoystick
xdef InitialisePig
xdef SetupSpriteData
xdef spriteX
xdef ScrollSprites
xdef deadSprite
InitialisePig:
move.w #$c0,spriteX
rts
ScrollSprites:
sub.w #1,spriteX
bra ScrollItemSprites
rts
UpdatePig:
;; right
@@ -126,8 +133,9 @@ SetupSpriteData:
move.b d0,2(a0) ;spriteVStop
move.l a0,SPR0PTH(a6)
jsr SetupItemSpriteData
move.l #deadSprite,SPR1PTH(a6)
move.l #deadSprite,SPR2PTH(a6)
move.l #deadSprite,SPR3PTH(a6)
move.l #deadSprite,SPR4PTH(a6)
move.l #deadSprite,SPR5PTH(a6)
@@ -175,7 +183,7 @@ spritePigRightJump:
dc.w 0,0
dc.w 0,0
incbin "out/sprite_pig_right_jump.bin"
dc.l 0
dc.l 0
currentSpriteOffset:
dc.l 0
+93 -4
View File
@@ -18,10 +18,30 @@ get_tile_address(tmx_map *m, unsigned int gid)
if (config.verbose) {
printf("get_tile_address %d\n", gid);
}
tmx_tileset* ts = m->ts_head;
int ts_count = 0;
tmx_tileset** ta;
{
tmx_tileset* t = m->ts_head;
while (t != 0) {
t = t->next;
ts_count++;
}
ta = malloc(sizeof(tmx_tileset)*ts_count);
t = m->ts_head;
int c = ts_count;
while (t != 0) {
ta[--c] = t;
t = t->next;
}
}
unsigned baseAddress = 0;
while (ts != 0) {
for (int y = 0; y < ts_count; y++) {
tmx_tileset* ts = ta[y];
for (unsigned int i = 0; i < ts->tilecount; i++) {
tmx_tile* t = ts->tiles;
if (t[i].id+ts->firstgid == gid) {
@@ -33,13 +53,55 @@ get_tile_address(tmx_map *m, unsigned int gid)
}
}
baseAddress += ((ts->image->width/8) * config.bitDepth * ts->image->height);
ts = ts->next;
}
return 0;
}
static unsigned
get_tile_index(tmx_map *m, unsigned int gid)
{
if (config.verbose) {
printf("get_tile_address %d\n", gid);
}
int ts_count = 0;
tmx_tileset** ta;
{
tmx_tileset* t = m->ts_head;
while (t != 0) {
t = t->next;
ts_count++;
}
ta = malloc(sizeof(tmx_tileset)*ts_count);
t = m->ts_head;
int c = ts_count;
while (t != 0) {
ta[--c] = t;
t = t->next;
}
}
for (int y = 0; y < ts_count; y++) {
tmx_tileset* ts = ta[y];
for (unsigned int i = 0; i < ts->tilecount; i++) {
tmx_tile* t = ts->tiles;
if (t[i].id+ts->firstgid == gid) {
if (config.verbose) {
printf("%s - index = %d\n", ts->name, t[i].id);
}
return t[i].id;
}
}
}
return 0;
}
static void
output_map_asm(tmx_map *m, tmx_layer *l)
{
@@ -66,10 +128,37 @@ output_map_asm(tmx_map *m, tmx_layer *l)
}
static void
output_map_indexes(tmx_map *m, tmx_layer *l)
{
if (!l) {
abort_("output_map_indexes: empty layer");
}
FILE* fp = file_openWrite("%s-indexes.s", l->name);
if (l->type == L_LAYER && l->content.gids) {
for (unsigned int x = 0; x < m->width; x++) {
for (unsigned int y = 0; y < m->height; y++) {
fprintf(fp, "\tdc.w %d\n", get_tile_index(m, l->content.gids[(y*m->width)+x] & TMX_FLIP_BITS_REMOVAL));
}
}
}
fclose(fp);
if (l) {
if (l->next) {
output_map_indexes(m, l->next);
}
}
}
static void
process_map(tmx_map *m)
{
output_map_asm(m, m->ly_head);
output_map_indexes(m, m->ly_head);
}