Compare commits
3 Commits
16
...
feature/re
| Author | SHA1 | Date | |
|---|---|---|---|
|
eb93bb7da0
|
|||
|
1e514f679b
|
|||
|
17af2d406c
|
@@ -685,9 +685,9 @@ seconds asks for fifty frames a second.
|
||||
### Why `GOTO` rather than `DO ... LOOP`
|
||||
|
||||
A `DO ... LOOP` around the frame would read better, and it is not usable here: **a `GOTO`
|
||||
that jumps out of a `FOR` or a `DO` does not release the loop's scope.** There are 32
|
||||
that jumps out of a `FOR` or a `DO` does not release the loop's scope.** There are 12
|
||||
scopes, so a game that leaves its main loop once per lost life stops on the
|
||||
thirty-second one:
|
||||
twelfth one:
|
||||
|
||||
```basic
|
||||
N# = 0
|
||||
@@ -700,7 +700,7 @@ PRINT "SURVIVED " + N#
|
||||
```
|
||||
|
||||
```output
|
||||
? 3 : PARSE ERROR Environment pool exhausted at line 3 (32 in use)
|
||||
? 3 : PARSE ERROR Environment pool exhausted at line 3 (12 in use)
|
||||
|
||||
```
|
||||
|
||||
|
||||
@@ -1423,7 +1423,8 @@ IF STATE# = 2 THEN GOSUB UNSTICK
|
||||
RETURN
|
||||
|
||||
LABEL PRESSPAUSE
|
||||
IF STATE# = 2 THEN STATE# = 6 : GMTYP# = 0 : BAN$ = "PAUSED" : GOSUB SETBANNER : RETURN
|
||||
IF STATE# = 2 THEN STATE# = 6 : GMTYP# = 0 : BAN$ = "PAUSED"
|
||||
IF STATE# = 6 THEN GOSUB SETBANNER : RETURN
|
||||
IF STATE# = 6 THEN STATE# = 2 : BAN$ = "" : GOSUB SETBANNER
|
||||
RETURN
|
||||
```
|
||||
|
||||
@@ -56,7 +56,10 @@ This is a tour of the interpreter's edges, on purpose:
|
||||
counterpoint: a genuine 24x21 `SPRSAV` type-in sprite, 63 bytes, which is
|
||||
everything `DATA` has room to say. The paint is the reveal, and the exit is a
|
||||
stride-63 column dissolve — 63 is coprime to 160, so the walk hits every
|
||||
column once and looks random while carrying no state.
|
||||
column once and looks random while carrying no state. The strings come in
|
||||
64-character chunks because a source line is 80 columns, like the machines
|
||||
this pretends to be — the decoder carries its cursor from one `IM$` entry to
|
||||
the next, and the generator refuses to cut inside a run.
|
||||
- **And then the picture is video.** Six delta frames loop the floor grid toward
|
||||
you and crawl the sun's slice pattern — full motion video, 1.3 KB total, about
|
||||
220 bytes a frame. A delta re-encodes only the rows that changed: an `R`
|
||||
@@ -82,6 +85,10 @@ This is a tour of the interpreter's edges, on purpose:
|
||||
batch a bar of noise drums. Noise is real: `ENVELOPE`'s sixth argument is a
|
||||
waveform, 0 to 3, which Chapter 7 forgot to mention. Voice 1 carries the tune so
|
||||
the collision blips (voice 2) and scene sweeps (voice 3) never steal its channel.
|
||||
A batch is four `PLAY` statements, one bar each — the 80-column line limit will
|
||||
not hold four bars in one string, and it does not need to: the parser's voice,
|
||||
envelope and duration state persists across statements and every `PLAY` appends
|
||||
to the same queue, so four bars queue exactly as one line would.
|
||||
|
||||
It also probes for its hardware like a proper boot loader, with one `TRAP` per
|
||||
device: no graphics refuses by name and exits, no audio mutes the soundtrack, no
|
||||
|
||||
@@ -461,38 +461,78 @@ BS% = W# / 160
|
||||
IF BS% < 1 THEN BS% = 1
|
||||
REM ---- PICTURE-BEGIN (generated by vaporwave.py; do not
|
||||
REM ---- hand-edit -- rerun the script to change the picture)
|
||||
DIM IM$(16)
|
||||
DIM IM$(56)
|
||||
DIM VA#(6)
|
||||
DIM VB#(6)
|
||||
NS# = 9
|
||||
VA#(0) = 9
|
||||
VB#(0) = 9
|
||||
VA#(1) = 10
|
||||
VB#(1) = 10
|
||||
VA#(2) = 11
|
||||
VB#(2) = 12
|
||||
VA#(3) = 13
|
||||
VB#(3) = 13
|
||||
VA#(4) = 14
|
||||
VB#(4) = 14
|
||||
VA#(5) = 15
|
||||
VB#(5) = 15
|
||||
IM$(0) = "G9G9G9G9GPGHEHG9GTEHG9GTEHGPGPEHG9GTEHG9GTEHGHGXEHGTBAG8EHG9GTEHG5EHGPEHG5EHGPEHG5EHGAPAG3EHGPEHG5EHGPEHGXGHEHG5EHGPEHG5EHGFBAGIEHGPGPEHGPEHGHEHGPEHGPEHGHEHGPEHGHEHGPEHGPEHGHEHGBPAGMEHGPEHGHEHGPEHGHEHGPEHGPEHGHEHGPEHGPEHGHEHGPEHGHEPGHEHGPEH"
|
||||
IM$(1) = "GHEPGHEHGPEHGHEPGHEHGHEGBAEHGHEHGPEHGHEPGHEHGPEHGHEHGPEHGHEPGHEHGPEHGHEPGHEHGPECPAEDGHEPGHEHGHEPGHEPGHEHGHEPGHEPGHEHGHEPGHEHGHEPGHEPGHECBAEDGHEPGHEPGHEHGHEPGHEHGHEPGHEPGHEHGHEPGHEPEPGHEPGHE5GHEPGHE5GHEHEXGHEPGHEEPAEZGHEPGHE5GHE5GHEPGHE5GHEP"
|
||||
IM$(2) = "GHE5GHE9ETGHE9ETGHEXEHGHE9ETGHHAE9ESGHEPEPGBBAGEE9EMHOE9ETGHEHE9E7HUE9E6E9E4H0E9E3E9E3H2E9EHBAETEHKHE9ELH6E9ECKHEPEPKHE9EBH9HAE9EIKHEHEXKHE2H9HCE9EPKHE5KHEPKDH9HEKCEPKHE5KHE5KHEKH9HGEBKHEPKHEXEHKHE5KHEBH9HIEIKHEPKHEPEPKHEPKHEHKAH9HKKHEHKHEP"
|
||||
IM$(3) = "KHEHKHEPKHEPKHH9HMEGKHEHKHEPKHEHKHEPKHEPH9HMEOKHEHKHEPKHEHKPEHKHEGH9HOKFEPKHEHKPEHKHEHKPEHKGH9HOEFKHEPKHEHKHEPKHEHKPEFH9HQKEEHKHEPKHEHKHEPKHEHKMH9HSKLEHKHEPKHEHKPEHKHEHKEH9HSEDKPEHKPEHKHEHKPEHKHEEH9HSKDEHKPEHKPKPEHKPEHKDH9HUECKHEHKPEHKHKXEH"
|
||||
IM$(4) = "KPEDH9HUKCEHK5EHK5EHKLH9HUKKEHK5EHK5EHKCH9HWEBKPEHKXKHEHK8I9IWKZEHKPKPEHK0I9IWK7EHKHKXEHKSI9IWK9KFEHK9KOI9IWK9KNK9KOI9IWK9KNK9KOI9IWK9KNKPIHKZI9IYK6IHKHKXIHKSI9IWK9KFIHK5IHKKI9IWK9KNIHK5IHKCI9IYKPIHKXKHIHK5IHKPIHK5IHKPIHKPKPIHK0I9IWKJIHKPIH"
|
||||
IM$(5) = "KHIHKPIHKPI9IZKBIHKHIHKPIHKHIHKPIHKKI9IWKJIHKHIHKPIHKHIHKPIHKDI9IXKPIHKHIHKHKHIHKHIPKHI9IYKCIHKPIHKHIHKPIHKHIPKHIHKPIHKHIPKHIHKPIHKHIHKPIHKHI9I9IHKHIHKPIHKHIPKHIHKHIEC9CSKDIPKHIPKHIHKHIPKHIHKEC9CSIDKHIPKHIPIPKHIPKHIFC9CQKEIHKHIPKHIHIXKHIPKG"
|
||||
IM$(6) = "C9COIFKHI5KHI5KHIPKHI5KHIPKHI5KHI5KHIPKHI5KHIPKHIXIHKHI9IDC9CMI4KHIPIPKHI6C9CKI9IDKHIHIXKHIZC9CII9IMKHI9IWC9CGI9IVI9I9I9I9IPI9I9I9I9IPQ9Q9Q9Q9QPE9E9E9E9EPE9E9E9E9EPQ9Q9Q9Q9QPE9E9E9E9EPQ9Q9Q9Q9QPE9E9E9E9EPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9"
|
||||
IM$(7) = "Q9QPE9E9E9E9EPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPE9E9E9E9EPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPE9E9E9E9EPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9"
|
||||
IM$(8) = "Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QPQ9Q9Q9Q9QP"
|
||||
IM$(9) = "RBRQ9QOKMQHK5RBSQ9QTI9IRRBXQ9QTKPQHKHQPKERBYQ9QPI9IHRB3Q9QSKAI5KHIJRB5Q9QTC9CMRB9Q9QWI9IGRCBQ9QYC9CCRCIA9A9A9A9APRCJE9E9E9E9EPRCNA9A9A9A9APRCOE9E9E9E9EPRCUA9A9A9A9APRCVE9E9E9E9EPRC5A9A9A9A9APRC7E9E9E9E9EP"
|
||||
IM$(10) = "RBQQ9QOK9KIQHKFRBRQ9QOI9IQRBWQ9QPKLQHKHQHKPRBXQ9QTI9QLIERB2Q9QRIBKHIPKHIPKCRB4Q9QSC9CORB8Q9QVI3KHIGRCAQ9QXC9CERCJA9A9A9A9APRCKE9E9E9E9EPRCOA9A9A9A9APRCPE9E9E9E9EPRCVA9A9A9A9APRCXE9E9E9E9EPRC7A9A9A9A9APRDAE9E9E9E9EP"
|
||||
IM$(11) = "RBPQ9QOK9KAQHKNRBQQ9QOI9IWRBVQ9QOKEQHKHQHKPQHKFRBWQ9QPI9IPRB1Q9QQKCIPKHIPKHIDRB3Q9QSC9CORB7Q9QUIWKHIPRB9Q9QWC9CGRCEA9A9A9A9APRCFE9E9E9E9EPRCGA9A9A9A9APRCHE9E9E9E9EPRCPA9A9A9A9APRCQE9E9E9E9EPRCXA9A9A9A9APRCZE9E9E9E9EPRDAA9A9A9A9APRDCE9E9E9E9"
|
||||
IM$(12) = "EP"
|
||||
IM$(13) = "RBOQ9QNK3QHKWRBPQ9QOI9IWRBUQ9QTKHQHKPQHKNRBVQ9QOI9IWRB0Q9QQIKKHIPKHIHKDRB1Q9QQC9CSRB2Q9QRC9CQRB6Q9QTIPKHIYRB8Q9QVC9CIRCKA9A9A9A9APRCLE9E9E9E9EPRCQA9A9A9A9APRCRE9E9E9E9EPRCZA9A9A9A9APRC1E9E9E9E9EPRDCA9A9A9A9APRDFE9E9E9E9EP"
|
||||
IM$(14) = "RBOQ9QNI9IYRBTQ9QOKEQHKPQHKVRBUQ9QTI9IRRBZQ9QTKHQHKPQHKHRB0Q9QQC9CSRB5Q9QTIHKHI5KARB7Q9QUC9CKRCBQ9QYI9ICRCHA9A9A9A9APRCIE9E9E9E9EPRCLA9A9A9A9APRCME9E9E9E9EPRCRA9A9A9A9APRCTE9E9E9E9EPRC1A9A9A9A9APRC3E9E9E9E9EPRDFA9A9A9A9APRDIE9E9E9E9EP"
|
||||
IM$(15) = "RBSQ9QTKPQHK3RBTQ9QOI9IWRBYQ9QPKDQHKPQHKHRBZQ9QTI9ILRB4Q9QSIAKHI5KHIBRB6Q9QTC9CMRCAQ9QXI9IERCEE9E9E9E9EPRCFA9A9A9A9APRCGE9E9E9E9EPRCMA9A9A9A9APRCNE9E9E9E9EPRCTA9A9A9A9APRCUE9E9E9E9EPRC3A9A9A9A9APRC5E9E9E9E9EPRDIA9A9A9A9AP"
|
||||
NS# = 32
|
||||
VA#(0) = 32
|
||||
VB#(0) = 35
|
||||
VA#(1) = 36
|
||||
VB#(1) = 39
|
||||
VA#(2) = 40
|
||||
VB#(2) = 43
|
||||
VA#(3) = 44
|
||||
VB#(3) = 47
|
||||
VA#(4) = 48
|
||||
VB#(4) = 51
|
||||
VA#(5) = 52
|
||||
VB#(5) = 55
|
||||
IM$(0) = "G9G9G9G9GPGHEHG9GTEHG9GTEHGPGPEHG9GTEHG9GTEHGHGXEHGTBAG8EHG9GTEH"
|
||||
IM$(1) = "G5EHGPEHG5EHGPEHG5EHGAPAG3EHGPEHG5EHGPEHGXGHEHG5EHGPEHG5EHGFBAGI"
< | ||||