24 lines
757 B
Fennel
24 lines
757 B
Fennel
(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]))
|