all repos — soulgrind @ f6657f1b33d429b786edb24856d5c709370f8624

arcade-style rollerblading game in uxntal with xrxs multiplayer

boilerplate for map scrolling, more notes, build script
Iris Lightshard nilix@nilfm.cc
PGP Signature
-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEEkFh6dA+k/6CXFXU4O3+8IhROY5gFAmIZNKgACgkQO3+8IhRO
Y5hxzw//dLmkvRZ3j2ycsgUIbBhGHxDU0NNcfWIwQz3ljBCHnbh5qubrB3Dn/X5O
DZlCliIBZkqxBzOUnCoM2UuGRi19V5UCCBTjKG38ntnqF2IWao37KtkCBPChJOME
w9UXlxtI/av7FMltDJKYUcGm3D5Bd/9AY5IlqGKdw94YNSDafuVFn4xH+vi9KWJZ
s9ZuNQUFr1AY9a9eqQ96TgvdE3U2Njrs8r4rCsBwiEp8GZesPoAxLQabqC61OlUU
hQtDywcCUvTTpVqM0/aTXW495ebrhkcoL9AB0QHQKfAoEX2QGVTkAuwOy6ScLrAf
Ub5Dd+mV4p3k8i/ti8iF95E5CEL3G19/RUsxIZYQoEbplaYW2sqTEZbTei1HEwwz
U9A9xapa0M5+R6VBCOKyzV7sdxJyGk9vxKvG+IfrSrT3Cqm279+1ndBI62K+8mpJ
KrZ1HPzjhEkcWtmjo6DPjNeW4lwaxcUgRjmpvWh8xFH55KswJG7T3kVtjSF/VR8C
K6Pk/nvmhDDSC/YGM9TiYYi8InWSyobFjDldAjtsKDY+/69fJr2a1AgzDn8xZ8Jz
kZYhXRqT6GpikC2WdQnYW1/tmAY0KstSINYMj6ZZq8Rb8xi741k4QHstyth1/Sc3
QCnHSLhW5Y1uSzBuVV7L1/PceyOm0VYwAgqEmB86IZt54j2Crnc=
=wVhZ
-----END PGP SIGNATURE-----
commit

f6657f1b33d429b786edb24856d5c709370f8624

parent

8aaf182b8ee7afd212f08b403ea80304206c7993

3 files changed, 71 insertions(+), 7 deletions(-)

jump to
M blueprint.ymlblueprint.yml

@@ -9,17 +9,30 @@ meaning: menu-single

- hex: 0x02 meaning: menu-multi - hex: 0x10 - meaning: menu-realm-create + meaning: menu-realm - hex: 0x20 - meaning: menu-realm-select + meaning: menu-realm-create - hex: 0x30 + meaning: menu-realm-select + - hex: 0x40 meaning: play-single - - hex: 0x40 + - hex: 0x50 meaning: play-multi +- name: mapTiles + values: + - hex: 0x00 + meaning: free + - hex: 0x01 + meaning: rail-start + - hex: 0x02 + meaning: rail-mid + - hex: 0x03 + meaning: rail-end + - name: mapRules rules: [ - "must have at least one free row" + "must have at least one free row per column" "rails must be at least 8 tiles long (5 mid + start/end)" "must have at least 8 tiles of free row before next rail" ]
A build.sh

@@ -0,0 +1,3 @@

+#!/bin/sh + +uxnasm soulgrind.tal soulgrind.rom && uxnemu soulgrind.rom
M soulgrind.talsoulgrind.tal

@@ -48,9 +48,9 @@ @blader [

&x $2 &y $2 &z $2 - &dx $2 - &dy $2 - &dz $2 + &dx $1 + &dy $1 + &dz $1 &stance $1 &frame $1 &anim-speed $1

@@ -156,6 +156,7 @@ DUP #09 AND #00 EQU ,&no-confirm JCN

.state LDZ #01 NEQ ,&no-1p-go JCN #40 .state STZ + #40 ;map-gen JSR2 ,&no-confirm JMP &no-1p-go #10 .state STZ

@@ -264,6 +265,53 @@ .center/x LDZ2 #0008 ADD2 .Screen/x DEO2

&draw-arrow #01 .Screen/sprite DEO + +RTN + +@map-gen ( width -- ) + + ( width is measured from the right edge. when initializing, we use #40; + when scrolling, we use left-shift passed from map-scroll ) + POP + +RTN + +@map-scroll ( -> ) + + &left-shift $1 + + ( add dx to tile-offset ) + .blader/dx LDZ .map/tile-offset LDZ ADD + .map/tile-offset STZk + + ( left-shift = tile-offset/8 ) + #03 SFT ,&left-shift STR + + ( tile-offset = tile-offset%8 ) + .map/tile-offset LDZ #08 MOD + .map/tile-offset STZ + + ( shift all map tiles left-shift amount ) + #40 ,&left-shift LDR &while EQUk ,&end JCN + DUP .map/row1 ADD LDZk + OVR ,&left-shift LDR SUB STZ + DUP .map/row2 ADD LDZk + OVR ,&left-shift LDR SUB STZ + DUP .map/row3 ADD LDZk + OVR ,&left-shift LDR SUB STZ + INCk ,&while JMP &end POP2 + + ( generate left-shift new map tiles on right edge for each row) + ,&left-shift LDR ;map-gen JSR2 + + ( redraw map with tile-offset? probably better off being called from a higher level ) + + +RTN + +@single-play ( -> ) + + ;map-scroll JSR2 RTN