From 21f2ee0aaa1f910e2a0835eb35fd5ba9dc76c28c Mon Sep 17 00:00:00 2001 From: alpine9000 Date: Mon, 18 Apr 2016 16:08:46 +1000 Subject: [PATCH] start of item display --- 028.game2/Makefile | 48 +++++----- 028.game2/assets/coin.pal | 4 + 028.game2/assets/items.png | Bin 0 -> 3742 bytes 028.game2/assets/sprite_coin1.png | Bin 0 -> 1292 bytes 028.game2/assets/sprite_pig_down_jump.png | Bin 0 -> 1241 bytes 028.game2/assets/sprite_pig_left_jump.png | Bin 0 -> 1236 bytes 028.game2/assets/sprite_pig_right_jump.png | Bin 0 -> 1227 bytes 028.game2/assets/sprite_pig_up_jump.png | Bin 0 -> 1234 bytes 028.game2/foreground.tmx | 8 ++ 028.game2/game1.s | 27 +++--- 028.game2/items.s | 74 ++++++++++++++++ 028.game2/pig.s | 14 ++- tools/mapgen/mapgen.c | 97 ++++++++++++++++++++- 13 files changed, 229 insertions(+), 43 deletions(-) create mode 100644 028.game2/assets/coin.pal create mode 100644 028.game2/assets/items.png create mode 100644 028.game2/assets/sprite_coin1.png create mode 100644 028.game2/assets/sprite_pig_down_jump.png create mode 100644 028.game2/assets/sprite_pig_left_jump.png create mode 100644 028.game2/assets/sprite_pig_right_jump.png create mode 100644 028.game2/assets/sprite_pig_up_jump.png create mode 100644 028.game2/items.s diff --git a/028.game2/Makefile b/028.game2/Makefile index 82fc201..9e3e03e 100644 --- a/028.game2/Makefile +++ b/028.game2/Makefile @@ -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 diff --git a/028.game2/assets/coin.pal b/028.game2/assets/coin.pal new file mode 100644 index 0000000..240c405 --- /dev/null +++ b/028.game2/assets/coin.pal @@ -0,0 +1,4 @@ +000 000 000 255 +255 255 011 255 +255 255 255 255 +252 115 009 255 diff --git a/028.game2/assets/items.png b/028.game2/assets/items.png new file mode 100644 index 0000000000000000000000000000000000000000..c164bb53932e55c45d2e028d82ce2d8163b27147 GIT binary patch literal 3742 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 YKdFG2e!E?J^mhWxjBXmfz3%qlU+p!TI{*Lx literal 0 HcmV?d00001 diff --git a/028.game2/assets/sprite_coin1.png b/028.game2/assets/sprite_coin1.png new file mode 100644 index 0000000000000000000000000000000000000000..a8e9833b7d79e19da0aafb396991b1ea2c0d0778 GIT binary patch literal 1292 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 DN9bDm literal 0 HcmV?d00001 diff --git a/028.game2/assets/sprite_pig_left_jump.png b/028.game2/assets/sprite_pig_left_jump.png new file mode 100644 index 0000000000000000000000000000000000000000..8bd4bb56a87faceb22a22a65788913706d8ff64c GIT binary patch literal 1236 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 literal 0 HcmV?d00001 diff --git a/028.game2/assets/sprite_pig_up_jump.png b/028.game2/assets/sprite_pig_up_jump.png new file mode 100644 index 0000000000000000000000000000000000000000..b4fc1be6785db31978e995b148f521b0b27dac34 GIT binary patch literal 1234 zcmV;@1TFiCP)4Tx062|}Rb6NtRTMtEb7vzY&QokOg>Hg1+lHrgWS zWcKdPn90sKGrRqvPeo9CG3uKX#J{(IASm?@+di}}l?o-=)F3E6wD^Ni=!>T7nL9I? zX}YoAW$t|Qo$sD|?zw001?ah|SeB6#0T!CBEf+H4bBB+JJu8rehoBb*p;u8ID_yBf z0ya+zcePvJL&AGs+11_tpRKn>9TgyPA7ZoSs0)aX0r00)%XR^J`jH<$>RKN5V(7Oq zK*TS4xZz{h!*f1C3ECFkK$#7nA@pGN!$;%jYvwjAKwmYb0gKL(K8 z-kPtb5${A?tlI~wzMrJ6wTdBr=Y%%%EaEMQ&o}4FQ^DA)s*}Z>!FI&AHCpoWI|RUq zx?7s@$8!5^Q=anY%X@i5{QA6kNcMelpE>R6eCYFpmMsVTrI(b06~u#xf1yS} z_UGdMvD``!0~u->P=lA4?YN`hilQ|3tHka)7T{2CGqw zjZfMwx$5irQN_*|e4l)UHmiYuz74Yp1t^#>hrJ3-SOXDcC_o0^7T9R1gAN8V6s;5) zieI5-7aQlmJn}lUna#nz!j%5V$X|o`xX!dHWQRV27P1=rj;t2bW$~+pTw@bIek?Zv zKPDL<64`^#UNTAck#RBsB6*5DP4<%UA_FqU$I>2EH_cM;u)Q~SI+rg`Rn{L_AC5qq~L$#SMj%U z$6Cz0vP{G5Y*=%5RT^yu;}-DInZ=349rJPVM6C3K^oO)8y(fJr{l>k`ead~!ea?NsT>_Ci%bnxC;Vy6=b6>{xYV#Ue-+LB$ z7`JEXmTRm^AtP)R9u{)KHsMiWGV&)32xCG~*nyU<>-!d;FP=Re4r3qYr~6#KE>;1F z`>_J_P5xC?ROxV(DIHdCO*p$HRQI@7^PwV@Pvuf+5K}u-6REM(K@W$s zrgorh0{i?O)v0c>QtHxU-hBdD(>iYJ4b2sIOVX2K8m~4gmYVA5h^QEb$V`rCQ-|7Z zS{nuL-t>?3n=-o(6I(7vocj#GzCZEo`!3>+v;dYIfPu#&ZWzzX2i^rZ^Mu;6+rb@? zNPG+6)c5T6zxpzGe*M(x+{AON=PiJ>H#?ob-|uwRK0yDg0B4PV0id6JRZw95ZvX%Q zfJsC_R5%f1WME+U55!~x7MRXIMJX^QQ8Y{69I!ejqEzEigkiuN8wLgtMhCdWF$_T0 zNQe&)1DHaQBQO>!jZ2*I#kv%DEZ|avY80v$nIwYdFdS~)j;@9vAEXDQml3EE>;iJ5 w5grEX_ml1lkTWTcg;4_-5Yb35;&CVd0JmTqlz4t|d;kCd07*qoM6N<$f-S;NUjP6A literal 0 HcmV?d00001 diff --git a/028.game2/foreground.tmx b/028.game2/foreground.tmx index a0eb894..ed2543e 100644 --- a/028.game2/foreground.tmx +++ b/028.game2/foreground.tmx @@ -3,9 +3,17 @@ + + + eJxjZGBg0GXEjhlH5eguZwekmYBYDAs9Kkd/OS0c8qNyAyM3GNPISJYbjGlkJMsNxjQykuUGYxoZyXKaDLjbYKNy9JcDAIrySzM= + + + eJxjYBgFo2AU4AKOjMTJgdjI2AmPvlEwMAA9vnCB0bgb3ABf3I2CUTAKRsEoGBoAABJBAtk= + + diff --git a/028.game2/game1.s b/028.game2/game1.s index 880c8cf..a0fc890 100644 --- a/028.game2/game1.s +++ b/028.game2/game1.s @@ -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 diff --git a/028.game2/items.s b/028.game2/items.s new file mode 100644 index 0000000..90e1853 --- /dev/null +++ b/028.game2/items.s @@ -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 + \ No newline at end of file diff --git a/028.game2/pig.s b/028.game2/pig.s index c54b95c..b08d964 100644 --- a/028.game2/pig.s +++ b/028.game2/pig.s @@ -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 diff --git a/tools/mapgen/mapgen.c b/tools/mapgen/mapgen.c index da708e9..36c7430 100755 --- a/tools/mapgen/mapgen.c +++ b/tools/mapgen/mapgen.c @@ -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); }