commit 4c459d5
zzo38
·
2025-12-24 06:21:40 +0000 UTC
parent 68c62a3
Add prg/gurps/rpm1.tal
1 files changed,
+100,
-0
+100,
-0
1@@ -0,0 +1,100 @@
2+\\ Simulate energy accumulation for GURPS Ritual Path Magic
3+\\ (TODO: handle critical hits)
4+
5+\\ Zero page usage:
6+\\ 00: Skill
7+\\ 01: Energy required *
8+\\ 03: Critical miss threshold
9+\\ 04: Time *
10+\\ 06: Energy acquired *
11+\\ 08: Quirks
12+
13+|0100
14+ DUP2k EOR2 STH2k
15+ ;RandomExt #02 DEO2
16+ #c1 DEI2 #c3 DEI2 EOR2 INC ;random/x STA2
17+ #c5 DEI2 #c7 DEI2 ADD2 INC ;random/y STA2
18+ reseed reseed POP2
19+\\ Read skill number (cannot exceed 128)
20+ #17 DEI [? show "Skill? 2000 ]@
21+ [; #10 DEO2 BRK ]@
22+ #0a12 DEI EQU [? #0a MUL #d012 DEI ADD ADD BRK ]@
23+ OVR STZk NIP
24+\\ Read energy number
25+ #0117 DEI LTH [? show "Energy? 2000 ]@
26+ [; #10 DEO2 BRK ]@
27+ #0a12 DEI EQU [? #000a MUL2 STHrk #d012 DEI ADD ADD2 BRK ]@
28+ #01 STZ2
29+\\ Secondary stack now has 00 00
30+ STH2rk
31+
32+@main
33+\\ Calculate the number needed for a critical miss
34+\\ If x is effective skill number, then: min(x+10,max(x+2,17),18)
35+ LDZk #0a ADD #12 LTHk JMP SWP POP
36+ LDZrk STHr INC INC #11 GTHk JMP SWP POP
37+ LTHk JMP SWP POP #03 STZ
38+\\ Three tries
39+ try try try
40+\\ Decrement and loop
41+ LDZk #01 SUB OVR STZ !main
42+
43+@show
44+ STH2r [@ LDAk #18 DEO INC2 LDAk ]? INC2 JMP2
45+
46+@RandomExt
47+ 03 f0
48+ 4105 259c e061 11f0 963f 0026 1874 5416
49+ $1 00 10 =random
50+
51+@number
52+ LITr 00
53+ [@ STH2 LIT2r 000a DIV2rk STH2rk MUL2r SUB2r NIPr LITr 30 ADDr ORAk ]?
54+ [@ LITr 18 DEOr STHrk ]?
55+ POPr #0a18 DEO JMP2r
56+
57+\_ff'@+8>8<! ( alignment )
58+@Dice
59+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60+ 03 04 05 06 07 08 04 05 06 07 08 09 05 06 07 08
61+ 09 0a 06 07 08 09 0a 0b 07 08 09 0a 0b 0c 08 09
62+ 0a 0b 0c 0d 04 05 06 07 08 09 05 06 07 08 09 0a
63+ 06 07 08 09 0a 0b 07 08 09 0a 0b 0c 08 09 0a 0b
64+ 0c 0d 09 0a 0b 0c 0d 0e 05 06 07 08 09 0a 06 07
65+ 08 09 0a 0b 07 08 09 0a 0b 0c 08 09 0a 0b 0c 0d
66+ 09 0a 0b 0c 0d 0e 0a 0b 0c 0d 0e 0f 06 07 08 09
67+ 0a 0b 07 08 09 0a 0b 0c 08 09 0a 0b 0c 0d 09 0a
68+ 0b 0c 0d 0e 0a 0b 0c 0d 0e 0f 0b 0c 0d 0e 0f 10
69+ 07 08 09 0a 0b 0c 08 09 0a 0b 0c 0d 09 0a 0b 0c
70+ 0d 0e 0a 0b 0c 0d 0e 0f 0b 0c 0d 0e 0f 10 0c 0d
71+ 0e 0f 10 11 08 09 0a 0b 0c 0d 09 0a 0b 0c 0d 0e
72+ 0a 0b 0c 0d 0e 0f 0b 0c 0d 0e 0f 10 0c 0d 0e 0f
73+ 10 11 0d 0e 0f 10 11 12 00 00 00 00 00 00 00 00
74+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
75+
76+@reseed
77+ [& random POP2 ]@
78+@random ( -- number )
79+ ,&x LDR2
80+ DUP2 #50 SFT2 EOR2
81+ DUP2 #03 SFT2 EOR2
82+ ,&y LDR2 DUP2 ,&x STR2
83+ DUP2 #01 SFT2 EOR2 EOR2
84+ ,&y STR2k POP ADD JMP2r
85+ &x 0001 &y 0001
86+
87+@try
88+ #04 LDZ2k INC2 ROT STZ2
89+ LIT \:Dice \_8>w random LDA
90+ DUP [? POP !try ]@
91+ DUP #03 LDZ LTH [? show "Botched. 0a00 !done ]@
92+ OVR LDZ SWP SUB EQUk ADD
93+ DUP #80 LTH [? POP EQUk #08 LDZk INC SWP STZ ]@
94+ LITr 06 LDZ2rk STH2 DUP ADD2r STH2rk ROTr STZ2r
95+ #01 LDZ2 LTH2 STH2r JCN2
96+ show "OK 0a00
97+@done
98+ show "Energy: 2000 #06 LDZ2 number
99+ show "Time: 2000 #04 LDZ2 number
100+ show "Quirks: 2000 #0008 LDZ number
101+ #800f DEO BRK