keypad boops, noclip cheat code
This commit is contained in:
parent
51c5b9c6b7
commit
6d005950a5
BIN
NeutTower.dsk
BIN
NeutTower.dsk
Binary file not shown.
|
@ -75,5 +75,11 @@
|
||||||
(vm:word :snd-libb (notes [:d#1 :g#1 :f#1 :g1] 0x08 0x7f))
|
(vm:word :snd-libb (notes [:d#1 :g#1 :f#1 :g1] 0x08 0x7f))
|
||||||
(vm:word :snd-garbage (notes [:a5 :a3 :a2] 0x04 0xa0))
|
(vm:word :snd-garbage (notes [:a5 :a3 :a2] 0x04 0xa0))
|
||||||
(vm:word :snd-teleport (notes [:e4 :d#4 :d4 :g#4] 0x1a 0x50))
|
(vm:word :snd-teleport (notes [:e4 :d#4 :d4 :g#4] 0x1a 0x50))
|
||||||
; ((. (require :game.boop) :notes) )
|
|
||||||
|
(vm.code:append :keypad-boops)
|
||||||
|
(each [_ n (ipairs [:c4 :c#4 :d4 :d#4 :e4 :f4 :f#4 :g4 :g#4 :a5])]
|
||||||
|
(vm.code:append [:dw (- (note-wavelength n) 0xd0)]))
|
||||||
|
(vm:word :snd-keypad ; digit --
|
||||||
|
:dup :+ :lit :keypad-boops :+ :get 0x10d0 :swap :bliptone)
|
||||||
|
|
||||||
{: note : notes}
|
{: note : notes}
|
||||||
|
|
23
game/cheat.fnl
Normal file
23
game/cheat.fnl
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
(local {: vm} (require :game.defs))
|
||||||
|
|
||||||
|
(fn defcheat [name ...]
|
||||||
|
(local cheatdata (.. name "-data"))
|
||||||
|
(vm.code:append cheatdata [:db 0] [:bytes name] [:db 0])
|
||||||
|
(vm:word name :lit cheatdata :cheatguard ...))
|
||||||
|
|
||||||
|
(vm:word :pcheatnext ; cheatdata -- pchar
|
||||||
|
:dup :bget :inc :+)
|
||||||
|
(vm:word :reset-cheat ; cheatdata --
|
||||||
|
0 :swap :bset)
|
||||||
|
(vm:word :cheatguard ; char cheatdata -- [optional rdrop]
|
||||||
|
:dup :pcheatnext :bget :<rot := (vm:if ; cheatdata
|
||||||
|
[:dup :bget :inc :over :bset
|
||||||
|
:dup :pcheatnext :bget (vm:if [:drop :rdrop] [:reset-cheat])]
|
||||||
|
[:reset-cheat :rdrop]))
|
||||||
|
|
||||||
|
(defcheat :NTSPISPOPD :noclip :get :not :noclip :set)
|
||||||
|
|
||||||
|
(vm:word :cheat-key ; ascii --
|
||||||
|
(vm:if-and [[:dup (string.byte "A") :>=] [:dup (string.byte "Z") :<=]]
|
||||||
|
[:NTSPISPOPD]
|
||||||
|
[:drop]))
|
|
@ -177,7 +177,7 @@
|
||||||
(vm:while [:read-key :dup 0x3a :< :over 0x30 :>= :& :not] :drop) 0x30 :-)
|
(vm:while [:read-key :dup 0x3a :< :over 0x30 :>= :& :not] :drop) 0x30 :-)
|
||||||
|
|
||||||
(vm:word :keypad-digit ; pscreen -- n
|
(vm:word :keypad-digit ; pscreen -- n
|
||||||
:read-digit :swap :over :draw-digit)
|
:read-digit :swap :over :draw-digit :dup :snd-keypad)
|
||||||
(vm:word :next-digit ; pscreen n -- pscreen n
|
(vm:word :next-digit ; pscreen n -- pscreen n
|
||||||
:shl4 :over :keypad-digit :+ :swap 1 :+ :swap)
|
:shl4 :over :keypad-digit :+ :swap 1 :+ :swap)
|
||||||
(vm:word :draw-single-keypad-hash ; pscreen -- pscreen
|
(vm:word :draw-single-keypad-hash ; pscreen -- pscreen
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
(util.reload :game.entity)
|
(util.reload :game.entity)
|
||||||
(util.reload :game.player)
|
(util.reload :game.player)
|
||||||
(util.reload :game.boop)
|
(util.reload :game.boop)
|
||||||
|
(util.reload :game.cheat)
|
||||||
|
|
||||||
(tile.appendtiles org.code)
|
(tile.appendtiles org.code)
|
||||||
(org.code:append [:align 0x100] :font)
|
(org.code:append [:align 0x100] :font)
|
||||||
|
@ -26,7 +27,7 @@
|
||||||
(util.reload :game.bosskey)
|
(util.reload :game.bosskey)
|
||||||
|
|
||||||
(vm:var :tick-count)
|
(vm:var :tick-count)
|
||||||
(vm:word :handle-key :tick :read-key :player-key :hide-footer)
|
(vm:word :handle-key :tick :read-key :dup :cheat-key :player-key :hide-footer)
|
||||||
(vm:word :tick :map-specific-tick :tick-count :get 1 :+ :tick-count :set :player-redraw :rnd :drop)
|
(vm:word :tick :map-specific-tick :tick-count :get 1 :+ :tick-count :set :player-redraw :rnd :drop)
|
||||||
|
|
||||||
(vm:var :next-level 0)
|
(vm:var :next-level 0)
|
||||||
|
|
|
@ -67,6 +67,10 @@
|
||||||
(vm:word :set-player-dir ; dir --
|
(vm:word :set-player-dir ; dir --
|
||||||
:is-jaye? (vm:if [:jaye-dir :set] [:drop]))
|
:is-jaye? (vm:if [:jaye-dir :set] [:drop]))
|
||||||
|
|
||||||
|
(vm:var :noclip)
|
||||||
|
(vm:word :move-if-clear ; yx -- f
|
||||||
|
:noclip :get (vm:if [:drop vm.false] [:movable-player-flag :flag-at? :not]))
|
||||||
|
|
||||||
(vm:word :movable-player-flag ; -- flag
|
(vm:word :movable-player-flag ; -- flag
|
||||||
:is-neut? (vm:if [neutable] [walkable]))
|
:is-neut? (vm:if [neutable] [walkable]))
|
||||||
|
|
||||||
|
@ -93,7 +97,7 @@
|
||||||
[vm.false]))
|
[vm.false]))
|
||||||
(vm:word :move-noop :drop vm.false)
|
(vm:word :move-noop :drop vm.false)
|
||||||
(vm:word :handle-general-move ; yx -- f
|
(vm:word :handle-general-move ; yx -- f
|
||||||
(vm:if-or [[:dup :map-specific-move] [:dup :move-rexx-trash] [:dup :move-gord-sit] [:dup :move-gord-stand] [:dup :movable-player-flag :flag-at? :not]]
|
(vm:if-or [[:dup :map-specific-move] [:dup :move-rexx-trash] [:dup :move-gord-sit] [:dup :move-gord-stand] [:dup :move-if-clear]]
|
||||||
[:drop vm.true] [:move-noop]))
|
[:drop vm.true] [:move-noop]))
|
||||||
|
|
||||||
(vm:def :yxclip? ; yx -- f
|
(vm:def :yxclip? ; yx -- f
|
||||||
|
|
42
todo.txt
42
todo.txt
|
@ -1,44 +1,6 @@
|
||||||
Game:
|
Game:
|
||||||
* Ending screen
|
* cheat codes
|
||||||
* Intro sequence (how to show earthquake?)
|
* save/load
|
||||||
|
|
||||||
|
|
||||||
FLOPPY DISK IDEAS:
|
|
||||||
* I am not going to write my own DOS
|
|
||||||
* I will use ProDOS - BOOTI-compatible, modern
|
|
||||||
* ProDOS 2.4.2 - https://prodos8.com/
|
|
||||||
* Generate file(s) to be injected into a blank bootable ProDOS disk image
|
|
||||||
|
|
||||||
thinking:
|
|
||||||
neut.tower contains all code / data
|
|
||||||
loader.system contains a small program that maps offsets of 512-byte blocks to memory addresses
|
|
||||||
- is loaded to 0x2000 & will be wiped by gfx? No, PRODOS is loaded at $2000 and moved
|
|
||||||
- no, XXX.SYSTEM is loaded to 0x2000 as well
|
|
||||||
- Alternately, we could write one program that batch-loads the whole game into $2000 and moves it to where it belongs?
|
|
||||||
- How big is the game with all levels? Could we load the whole thing into consecutive memory starting at $4000?
|
|
||||||
- (I don't think this would work on 32kb tape-loaded machines...)
|
|
||||||
- With ProDOS I can assume 64kb
|
|
||||||
prodos claims:
|
|
||||||
$bf00-$ffff - ProDOS
|
|
||||||
$9600-$bf00 - BASIC.SYSTEM - don't care?
|
|
||||||
$0100-$0800 - "other use or reserved"
|
|
||||||
$3A-$3F - used by disk routines, unsafe
|
|
||||||
$40-$4F - used by ProDOS but preserved, safe to use
|
|
||||||
|
|
||||||
system bitmap: marks pages of memory as "not valid to allocate a file buffer"
|
|
||||||
- loader will have to protect memory that it will be moving game code to?
|
|
||||||
|
|
||||||
https://prodos8.com/docs/techref/calls-to-the-mli/
|
|
||||||
the existence of SET_BUF should mean we can load directly to the memory
|
|
||||||
we care about? orr I guess 512 bytes is housekeeping stuff (index block)
|
|
||||||
|
|
||||||
16kb version - $0000-$4000 - no we need at least 32kb
|
|
||||||
there's basically only 5kb of code space for an hgr game?
|
|
||||||
$0000-$03ff 0kb-1kb - zp, stack, input buffer, DOS
|
|
||||||
$0400-$07ff 1kb-2kb - text page 1
|
|
||||||
$0800-$0bff 2kb-3kb - text page 2
|
|
||||||
$0c00-$1fff 3kb-8kb - free space
|
|
||||||
$2000-$4000 8kb-16kb - hgr gfx page 1
|
|
||||||
|
|
||||||
tooling ideas:
|
tooling ideas:
|
||||||
* REPLy buffer (Polywell?)
|
* REPLy buffer (Polywell?)
|
||||||
|
|
Loading…
Reference in a new issue