mirror of
https://frontier.innolan.net/github/AmigaExamples.git
synced 2026-09-13 20:52:28 +00:00
start of item display
This commit is contained in:
+22
-26
@@ -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
|
||||
|
||||
@@ -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 |
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user