mirror of https://git.sr.ht/~rabbits/uxn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.5 KiB
70 lines
1.5 KiB
( Pig: |
|
Each turn you roll a die and add the total to your points. |
|
You can stop at any time and keep that total, or keep rolling. |
|
If you ever roll a 1 you lose all the points you accrued. ) |
|
|
|
|10 @Console &vector $2 &read $1 &pad $5 &write $1 &error $1 |
|
|
|
|0000 @t $1 ( Total saved ) |
|
|
|
|0100 @game ( -> ) |
|
|
|
#00 .t STZ |
|
;input-main .Console/vector DEO2 |
|
,input-main/main JMP |
|
|
|
@roll ( -- dice ) |
|
|
|
[ LIT2 &r f793 ] |
|
( 5*R+35 ) #0005 MUL2 #0023 ADD2 |
|
( R-R/6547*6547 ) DUP2 #1993 DIV2 #1993 MUL2 SUB2 |
|
DUP2 #c5 DEI2 ADD2 ,&r STR2 ADD ( mod ) #06 DIVk MUL SUB |
|
|
|
JMP2r |
|
|
|
@input-main ( -> ) |
|
|
|
.Console/read DEI |
|
LIT "0 EQUk NIP ,&no JCN |
|
LIT "1 EQUk NIP ,&yes JCN |
|
( ignore other inputs ) |
|
POP |
|
|
|
BRK |
|
&no ( char -- ) |
|
POP ;score-txt ,pstr JSR .t LDZ ,pdec JSR ;byte-txt ,&halt JMP |
|
&yes ( char -- ) |
|
POP ,roll JSR ;rolled-txt ,pstr JSR INCk ,pdec/d JSR DUP ,¬-bust JCN |
|
&bust ( char -- ) |
|
POP ;bust-txt |
|
&halt ( msg* -- ) |
|
,pstr JSR #0a .Console/write DEO #010f DEO BRK |
|
¬-bust ( dice -- ) |
|
INC .t LDZ ADD .t STZ |
|
&main ( -- ) |
|
;total-txt ,pstr JSR .t LDZ ,pdec JSR ;roll-txt ,pstr JSR BRK |
|
|
|
@pdec ( value -- ) |
|
|
|
DUP #0a DIV ,&emit JSR |
|
&d #0a DIVk MUL SUB ,&emit JSR |
|
#0a .Console/write DEO |
|
|
|
JMP2r |
|
&emit #30 ADD .Console/write DEO JMP2r |
|
|
|
@pstr ( str* -- ) |
|
|
|
&while |
|
LDAk DUP LIT "_ EQU #3f MUL SUB .Console/write DEO |
|
INC2 LDAk ,&while JCN |
|
POP2 |
|
|
|
JMP2r |
|
|
|
@total-txt "Your_current_total_is:_ $1 |
|
@roll-txt "Would_you_like_to_roll?_(0_no,_1_yes)_ $1 |
|
@score-txt "Your_score_is:_ $1 |
|
@rolled-txt "You_rolled:_ $1 |
|
@bust-txt "Busted! $1 |
|
@byte-txt "Goodbye. $1
|
|
|