Une version rudimentaire de Slay The Spire dans le terminal - retour accueil
git clone git://bebou.netlib.re/sts-term
Log | Files | Refs | README |
commit d8d621d1121b47339142a99ee6b061c9f4b28d79 parent b9d00cbdf7b3846de9cd91aff33dc31fe76efbfa Auterice: Arthur Pons <arthur.pons@unistra.fr> Date: Thu, 20 Jun 2024 15:56:05 +0200 Implémentation de maxhealth Aussi correction d'un bug de _setstat quand le nom d'une stat est une sous-chaîne de caractère d'une autre Ajout de shrug-it-off des cartes qui ne nécessitent pas de cible dans l'interaction avec fzy (penser à une meilleure solution) Ajout de _getstat pour arrêter de se tromper. Suggère que l'on devrait maintenir des variable des stats constamment à jour (dans _setstat ?) pour éviter de requêter tout le temps les fichiers ? Mais en même temps c'est un peu contraire à notre délire que l'état du jeu vit dans les fichiers texte. Diffstat:
M | bdd/characters/ironclad | | | 1 | + |
M | utils | | | 28 | ++++++++++++++++++---------- |
2 files changed, 19 insertions(+), 10 deletions(-)
diff --git a/bdd/characters/ironclad b/bdd/characters/ironclad @@ -1,3 +1,4 @@ +maxhealth 80 health 80 block 0 energy 3 diff --git a/utils b/utils @@ -3,13 +3,19 @@ grayed="\x1b[90m" norm="\x1b[0m" +_getstat() { + target="$1" + stat="$2" + grep -wF "$2" "$target" | cut -f2 +} + _makeui() { # Pour savoir combien de fois l'ui est rafraichie # Clairement pas optimal mais drôle # ffplay -nodisp -autoexit -loglevel panic -f lavfi -i "sine=440:d=0.1" [ ! -e "player" ] && printf "No current game\n" - currentenergy=$(grep energy fight/player | cut -f2) + currentenergy=$(_getstat player energy) tree --noreport fight/stack > $tmpdir/stack tree --noreport fight/hand > $tmpdir/hand @@ -95,7 +101,7 @@ _hasrelic() { } _wingold() { - currentgold=$(grep gold player | cut -f2) + currentgold=$(_getstat player gold) _setstat player gold "$(( $currentgold + $(seq 10 20 | shuf | head -n1) ))" } @@ -120,7 +126,7 @@ _setstat() { (*) _killennemie "$target";; esac fi - sed -i --follow-symlinks -E "/$stat/ s/ .*/ $value/" "$target" + sed -i --follow-symlinks -E "/^$stat / s/ .*/ $value/" "$target" if [ "$stat" = "energy" ];then _updatecardexecutability fi @@ -142,8 +148,8 @@ _status() { _attack() { damage="$1" target="$2" - targethealth=$(grep health "$target" | cut -f2) - targetblock=$(grep block "$target" | cut -f2) + targethealth=$(_getstat "$target" health) + targetblock=$(_getstat "$target" block) newblock=$(( $targetblock - $damage )) [ "$newblock" -lt '0' ] && { _setstat "$target" health $(( $targethealth + $newblock ));newblock=0 ; } _setstat "$target" block "$newblock" @@ -152,7 +158,7 @@ _attack() { _defend() { block="$1" target="$2" - targetblock=$(grep block "$target" | cut -f2) + targetblock=$(_getstat "$target" block) newblock=$(( $targetblock + $block )) _setstat "$target" block "$newblock" } @@ -162,7 +168,7 @@ _hasstatus() { } _updatecardexecutability() { - currentenergy=$(grep energy fight/player | cut -f2) + currentenergy=$(_getstat "$target" energy) grep -H cost fight/hand/* | awk "\$2>$currentenergy{print}" | cut -d':' -f1 > $tmpdir/nonexeccards @@ -179,7 +185,7 @@ _updatecardexecutability() { _cost() { cost="$1" - currentenergy=$(grep energy fight/player | cut -f2) + currentenergy=$(_getstat "$target" energy) newenergy=$(( $currentenergy - $cost )) _setstat fight/player energy "$newenergy" } @@ -200,7 +206,9 @@ _choosecard() { } _heal() { - _setstat fight/player health $(( $(grep health player | cut -f2) + $1 )) + maxhealth=$(_getstat player maxhealth) + newhealth=$(( $(_getstat player health | cut -f2) + $1 )) + _setstat fight/player health $(( $newhealth > $maxhealth ? $maxhealth : $newhealth )) } endturn() { @@ -278,7 +286,7 @@ _execnextmove() { choice() { c=$(find fight/hand -type f | fzy) - $(echo "$c" | grep -q "defend") && { eval $c; return 0; } + $(echo "$c" | grep -Eq "(defend|shrug-it-off)") && { eval $c; return 0; } t=$(find fight/ennemies -type l | fzy) eval $c $t }