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