Version 1
This is the set of features developed before being added to a repository.trunk
parent
13ccddbf29
commit
0fd9b7b38a
|
@ -0,0 +1,104 @@
|
|||
#!/usr/bin/env -S rlwrap BQN
|
||||
|
||||
# String to Int list
|
||||
#ToInts ← (+´(10⋆⌽∘↕∘≠)⊸×∘-⟜'0')¨ (+`׬)⊸-∘=⟜' '⊸⊔
|
||||
ToInts ← (+´(10⋆⌽∘↕∘≠)⊸×∘-⟜'0')¨ (+`׬)⊸-∘¬∘∊⟜('0'+↕10)⊸⊔
|
||||
# Is string a die roll
|
||||
IsRoll←∧´∊⟜"d0123456789-+"
|
||||
# Takes a die string and rolls it
|
||||
Roll←(∨´'d'⊸=)◶(+´(10⋆⌽∘↕∘≠)⊸×∘-⟜'0')‿{ 𝕊str:
|
||||
nums ← 0⊸≠⊸/ (+´(10⋆⌽∘↕∘≠)⊸×∘-⟜'0')¨(+`׬)⊸-∘¬∘∊⟜('0'+↕10)⊸⊔ 𝕩
|
||||
a‿d‿m← {⟨a,d,m⟩: 𝕩; ⟨a,d⟩:{∨´str∊"+-"? 1∾𝕩; 𝕩∾0}𝕩; ⟨d⟩: 1‿d‿0} nums
|
||||
+´∘(1⊸+)∘(a •rand.Range d)⊸+ (∨´'-'=𝕩)◶⟨+,-⟩ m}
|
||||
# A string with die rolls to Int list
|
||||
RollToInts ← Roll¨ (+`׬)⊸-∘=⟜' '⊸⊔
|
||||
# Rolls input and splits input into pairs
|
||||
ToPairs←⟨(¯1+´(10⋆⌽∘↕∘≠)⊸×∘-⟜'0')¨, Roll¨⟩ {𝕎𝕩}¨ ((<˘∘⍉ ∘‿2⊸⥊) (+`׬)⊸-∘=⟜' '⊸⊔)
|
||||
|
||||
# Roll strings
|
||||
RollString ← •Out∘(∾ ∾⟜' '¨) •Fmt¨∘RollToInts
|
||||
|
||||
# Mark the firsts, removing overlaps.
|
||||
MarkFirst←{l←-⟜1≠𝕨⋄l=0(-⟜1⌈l×<)`(≠𝕩)↑𝕨⍷𝕩}
|
||||
# old‿new ReplaceAll string
|
||||
ReplaceAll←{f‿r𝕊𝕩: g←(+`(»⍟(≠f)⊸∨f⊸MarkFirst))⊸⊔𝕩⋄ ∾r¨⌾((g∊⟨f⟩)⊸/)g}
|
||||
|
||||
macros←⟨⟩
|
||||
# Read file of tab sepperated pairs, add contents to macro list.
|
||||
FileErr←{•Out "Macro file: "∾𝕩∾" doesn't exist"}
|
||||
ReadMacros←{macros ∾↩ ≢⟜⟨⟩¨⊸/ (+`׬)⊸-∘=⟜(@+9)⊸⊔¨ •Flines 𝕩}⎊FileErr
|
||||
ReadMacros⎊"No Macros" "macros"
|
||||
MacroReplace←{𝕩 ReplaceAll´ macros}
|
||||
|
||||
# Create graveyard and turnOrder ⟨initiative, name, heath⟩
|
||||
turnOrder←graveyard←⟨⟩‿⟨⟩‿⟨⟩‿⟨⟩
|
||||
Clear←{𝕊: turnOrder↩graveyard↩⟨⟩‿⟨⟩‿⟨⟩‿⟨⟩}
|
||||
# Sorts the turn order acording to a list of indicies
|
||||
Sort←<∘⍒∘⊑⊸(⊏¨){𝕩 ⋄ graveyard 𝔽↩ ⋄ turnOrder 𝔽↩}
|
||||
|
||||
# General Error
|
||||
Err←{•Out "Don't understand input: "∾•Fmt 𝕩}
|
||||
# Parses input and adds each foe to the turn order.
|
||||
_CreateFoe←{𝔽{0=≠𝕩 ? 0;
|
||||
IsRoll⊑⊑𝕩 ? 𝔽 ⟨Roll∘⊑,𝔾,Roll∘⊑⟩{𝕎𝕩}¨ 3↑𝕩 ⋄ 𝕊3↓𝕩;
|
||||
𝔽 (Roll "d20")∾⟨𝔾,Roll∘⊑⟩{𝕎𝕩}¨ 2↑𝕩 ⋄ 𝕊2↓𝕩}(< ¯1⊸↓∘(∾ ∾⟜' '¨))∘{
|
||||
⟨⟩⊸≢¨⊸/ (+`∘+⟜» IsRoll¨)⊸⊔ (+`׬)⊸-∘=⟜' '⊸⊔𝕩}⎊Err∘MacroReplace}
|
||||
⟨NewFoe,DeadFoe⟩←{𝕩_CreateFoe}¨{turnOrder ∾¨↩1‿1‿2 /𝕩}‿{graveyard ∾¨↩1‿1‿2 /𝕩}
|
||||
# Parse a list of numbers, move said indices from turn order to grave
|
||||
KillFoe←{m←¬(1+↕∘≠ ⊑turnOrder)∊𝕩
|
||||
graveyard ∾¨↩ (¬m)⊸/¨ turnOrder⋄turnOrder m⊸/¨↩} ToInts
|
||||
# Parse a list of numbers, move said indices to turn order from grave
|
||||
ResurrectFoe←{m←¬(1+↕∘≠ ⊑graveyard)∊𝕩
|
||||
turnOrder ∾¨↩ (¬m)⊸/¨ graveyard⋄graveyard m⊸/¨↩} ToInts
|
||||
# Hurt foes, id hurt id hurt format
|
||||
HurtFoe←{𝕊id‿dam: turnOrder (-⟜dam)⌾(id⊸⊏)⌾(2⊸⊑)↩} ToPairs
|
||||
# Heal foes, id heal id heal format
|
||||
HealFoe←{𝕊id‿dam: turnOrder ((id⊏3⊑turnOrder)⊸⌊ +⟜dam)⌾(id⊸⊏)⌾(2⊸⊑)↩} ToPairs
|
||||
# Move Foes, id initative, id initative
|
||||
MoveFoe←{𝕊id‿init: turnOrder init⌾(id⊸⊏)⌾(0⊸⊑)↩} ToPairs
|
||||
|
||||
# Turns a turn order into a string
|
||||
OrderToString←{𝕨 ∾˜´(∾ " "⊸∾¨)¨<˘∘⍉∘>{⟨•Fmt¨,⊢,•Fmt¨⟩{𝕎𝕩}¨𝕩}𝕩}
|
||||
# Writes graveyard and turnorder to a file
|
||||
Dump←{𝕩 •Flines "add"‿"add dead" OrderToString¨turnOrder‿graveyard}
|
||||
# Reads file, prints message is it doesn't exist
|
||||
File←•Flines⎊{•Show "File '"∾𝕩∾"' doesn't exist. Nothing to read"}
|
||||
|
||||
# Displays each active character in a turn order.
|
||||
Display←{id‿i‿n‿hp:•Out∾⟨id,":",i,@+9,n," has ",hp," hit points"⟩⋄@}{
|
||||
(𝔽 •Fmt¨⌾(1‿1‿0‿1⊸/))∘(4⊸↑)˘⍉> (<1⊸+∘↕∘≠∘⊑)⊸∾ 𝕩}
|
||||
|
||||
help←"Commands:
|
||||
roll: Roll a specified die. “roll 3d20-7”
|
||||
add: Add foes to the turn order. “add grendi d4 d20+3 globlsmark 2d6”
|
||||
add dead: Add foes to the graveyard. “add 17 King John 5”
|
||||
display: Show turn order, formatted foe id, initative, name and hit points.
|
||||
grave: Same as display but for graveyard
|
||||
hurt: Using a id, hurt a foe. “hurt 2 d8 4 2d8+3”
|
||||
heal: Using a id, heal a foe. “heal 1 2d6 1 2d6”
|
||||
move: Using a id and a new initiative, move a foe. “move 3 d20 4 10”
|
||||
kill: Using a id, move a foe to the graveyard. “kill 3 4 2”
|
||||
resurrect: Using a id, move a foe from the graveyard. “resurrect 3 4 2”
|
||||
file: Read in a file as if it was typed right in right now.
|
||||
dump: Write out a file in a mannor that it can be read back in.
|
||||
clear: Clear the turn order and graveyard.
|
||||
help: Displays this message.
|
||||
exit: Ends the program.
|
||||
"
|
||||
|
||||
Read←{
|
||||
"roll"≡4↑𝕩 ? RollString 5↓𝕩 ; "add dead"≡8↑𝕩 ? DeadFoe 9↓𝕩 ;
|
||||
"add"≡3↑𝕩 ? NewFoe 4↓𝕩 ; "move"≡4↑𝕩 ? MoveFoe 5↓𝕩 ;
|
||||
"hurt"≡4↑𝕩 ? HurtFoe 5↓𝕩 ; "heal"≡4↑𝕩 ? HealFoe 5↓𝕩 ;
|
||||
"kill"≡4↑𝕩 ? KillFoe 5↓𝕩 ; "resurrect"≡9↑𝕩 ? ResurrectFoe 10↓𝕩 ;
|
||||
"display"≡𝕩 ? Display turnOrder ; "grave"≡𝕩 ? Display graveyard ;
|
||||
"file"≡4↑𝕩 ? Read¨ File 5↓𝕩 ; "dump"≡4↑𝕩 ? Dump 5↓𝕩 ;
|
||||
"macros"≡𝕩 ? •Show macros ; "macros"≡6↑𝕩 ? ReadMacros 7↓𝕩 ;
|
||||
"clear"≡𝕩 ? Clear @ ; ("?"≡𝕩)∨"help"≡𝕩 ? •Out help ;
|
||||
# Debug Commands
|
||||
"Display"≡𝕩 ? •Show turnOrder ; "Grave"≡𝕩 ? •Show graveyard ;
|
||||
"exit"≡𝕩 ? run↩0 ; 0}
|
||||
|
||||
run ← 1
|
||||
{Sort @⋄ Read •Getline 𝕩} •_While_ {𝕤⋄run≠0} @
|
||||
|
Loading…
Reference in New Issue