Closed rlepigre closed 3 years ago
Tu ne vois pas d'inconvénient à renommer gash show
en gash goal
?
Sinon, pour les fichiers .po
, voila ce que je compte faire :
make add-locations
)en.po
qui est toujours automatiquement généré. Il ne faut donc pas le modifier à la main. (Un traducteur peut le copier en en_US.po
s'il veut en avoir une version customisée. (Il faudrait peut-être que je mette un commentaire au début du fichier pour éviter les surprises...)Tu peux générer un fichier Makefile
avec ./bin/new-mission.sh -M
si tu veux tester.
Rien d'autre de prévu pour ce soir...
Sinon, j'ai trouvé ça pour visualiser un fichier README.md
avant de l'envoyer sur github: https://github.com/joeyespo/grip
Tu sais si y'a une autre solution ?
Tu ne vois pas d'inconvénient à renommer
gash show
engash goal
?
Non, c'est très bien, c'est plus explicite !
Tu peux générer un fichier
Makefile
avec./bin/new-mission.sh -M
si tu veux tester.
OK, très bien, je vais essayer.
Sinon, j'ai trouvé ça pour visualiser un fichier
README.md
avant de l'envoyer sur github: https://github.com/joeyespo/grip Tu sais si y'a une autre solution ?
Je n'ai jamais vraiment ressenti le besoin pour un tel outil ! Un truc que tu peux faire c'est éditer le fichier dans l'interface de GitHub, elle permet de voir une preview (comme dans les messages de PR): https://github.com/phyver/GameShell/edit/master/README.md.
Je viens d'essayer de réfléchir au nom du jeu avec Bran, et on ne trouve rien de mieux que GameShell, donc restons avec ça, et OK pour gsh
pour le nom de la commande.
Petite pause dans les corrections, quelques patch, avec des changements de noms !
GASH => GSH
GASH_BASE => GSH_ROOT
GASH_LOCAL_BIN => GSH_MISSION_BIN
GASH_CONFIG => GSH_BASHRC -> $GSH_ROOT/.bashrc
GASH_MISSION_DATA => GSH_VAR -> $GSH_ROOT/.var
GASH_DATA => GSH_CONFIG -> $GSH_ROOT/.config
J'y retourne...
J'ai avancé un peu sur la doc.
Sinon, j'ai aussi passé les missions avec le labyrinthe dans un sous-dossier, pour partager du code.
00_shared
, on peut mettre le code à partager dans la mission 01_...
. Si on l'inclut normalement, le code est partagé. Et si on ne veut pas mettre la mission dans une archive, il suffit de l'inclure avec un !
dans le fichier index.txt
.
Je ne sais pas ce que je préfère...static.sh
, ou init.sh
, etc. on est obligé de le copier dans $GSH_VAR
et de le renomer en ma_super_mission_static.sh
, parce que sinon il risque d'être écrasé par un autre static.sh
partagé. On s'en sort, mais c'est pas super pratique.mes_supers_missions/03_find
se retrouve dans 00017_find
. C'est pas très très grave, mais pas très satisfaisant non plus.Y'a probablement moyen de faire un peu mieux... On pourrait par exemple conserver l'arborescence et avoir $MISSION_DIR
et $MISSION_GROUP_DIR
.
J'ai un peu peur que ce genre de fonctionalité ne serve pas très souvent, et j'aimais bien l'idée de tout applatir dans les archives. (En plus, je ne sais ce qu'il faudrait faire sur les groupes imbriqués.)
Une solution simple serait de vérifier que toutes les missions ont un nom différent. Ça interdirait d'avoir deux 00_shared
dans des groupes distincts, mais ça garantit qu'on peut utiliser le nom de la mission partagée sans risque.
J'ai avancé un peu sur la doc.
Cool !
Sinon, j'ai aussi passé les missions avec le labyrinthe dans un sous-dossier, pour partager du code.
- plutôt qu'une mission factice
00_shared
, on peut mettre le code à partager dans la mission01_...
. Si on l'inclut normalement, le code est partagé. Et si on ne veut pas mettre la mission dans une archive, il suffit de l'inclure avec un!
dans le fichierindex.txt
. Je ne sais pas ce que je préfère...
En principe je trouves plus logique d'avoir une mission factice réelle. Mais c'est vrai qu'on peut aussi faire ce que tu dis et utiliser une mission dont on dépend comme mission factice dans le cas où on ne la veut pas. Un argument pour garder la mission factice 00_shared
est que ça te donne plus de flexibilité pour l'ordre des missions: la mission 01_...
doit toujours être la première si c'est celle qui introduit les fichiers partagés, et donc c'est pas possible de commencer par 02_...
. Tu n'as pas ce problème avec le 00_shared
.
- Si on veut partager le fichier
static.sh
, ouinit.sh
, etc. on est obligé de le copier dans$GSH_VAR
et de le renomer enma_super_mission_static.sh
, parce que sinon il risque d'être écrasé par un autrestatic.sh
partagé. On s'en sort, mais c'est pas super pratique.
Ouais, c'est pas génial...
- Comme j'applatis toutes les missions dans les archives, on perd le nom du dossier parent :
mes_supers_missions/03_find
se retrouve dans00017_find
. C'est pas très très grave, mais pas très satisfaisant non plus.Y'a probablement moyen de faire un peu mieux... On pourrait par exemple conserver l'arborescence et avoir
$MISSION_DIR
et$MISSION_GROUP_DIR
. J'ai un peu peur que ce genre de fonctionalité ne serve pas très souvent, et j'aimais bien l'idée de tout applatir dans les archives. (En plus, je ne sais ce qu'il faudrait faire sur les groupes imbriqués.)
Je suis plutôt d'accord. Sinon on peut essayer l'approche que j'avais suggéré et utiliser des liens symboliques. Dans l'archive on pourrait avoir un dossier pour les missions à plat, puis un dossier à côté pour les fichiers partagés, et des liens vers le bon dossier partagé pour chaque mission qui en a besoin.
Une solution simple serait de vérifier que toutes les missions ont un nom différent. Ça interdirait d'avoir deux
00_shared
dans des groupes distincts, mais ça garantit qu'on peut utiliser le nom de la mission partagée sans risque.
C'est pas super satisfaisant je trouve, on risque de vouloir utiliser le même nom pour deux missions quand on en aura plus (par exemple si on veut avoir plusieurs alternatives pour telle ou telle mission).
De mon côté j'ai ajouté mes missions à l'index et viré les anciennes (sans supprimer les dossiers). J'ai aussi fait en sorte qu'il y ait un peu moins d'affichage au début du jeu quand on fait start.sh -RF
. Un truc que j'ai remarqué (je sais pas si c'est vraiment gênant) c'est que quand on a le message Press Enter
si on tape sur des touches le texte s'ajoute (on voudrait plutôt que rien ne se passe). J'ai essayé de changer ce comportement mais je ne sais pas très bien comment faire ça (peut-être utiliser une option comme pour entrer un mot de passe?).
J'ai aussi expérimenté un peu avec termtosvg
(https://github.com/nbedos/termtosvg) pour générer des animations (pour mettre dans le README peut-être?).
Je suis plutôt d'accord. Sinon on peut essayer l'approche que j'avais suggéré et utiliser des liens symboliques. Dans l'archive on pourrait avoir un dossier pour les missions à plat, puis un dossier à côté pour les fichiers partagés, et des liens vers le bon dossier partagé pour chaque mission qui en a besoin.
Ça risque de poser des problème car les noms des répertoires sont modifiés. Plus ça va, et plus je me dis que je vais arrêter d'applatir l'arborescence. Après-tout, le joueur ne fait jamais de
ls $GSH_MISSIONS
. Ça simplifierais plusieurs trucs...De mon côté j'ai ajouté mes missions à l'index et viré les anciennes (sans supprimer les dossiers). J'ai aussi fait en sorte qu'il y ait un peu moins d'affichage au début du jeu quand on fait
start.sh -RF
.Je trouve que c'est plutôt bien d'avoir une "animation" pendant l'initialisation, pour si jamais un fichier statique prend quelques secondes. Je verrais à l'usage. Au pire, je les remettrais !
Un truc que j'ai remarqué (je sais pas si c'est vraiment gênant) c'est que quand on a le message
Press Enter
si on tape sur des touches le texte s'ajoute (on voudrait plutôt que rien ne se passe). J'ai essayé de changer ce comportement mais je ne sais pas très bien comment faire ça (peut-être utiliser une option comme pour entrer un mot de passe?).Corrigé : il faut utiliser l'option
-s
("silent") deread
.J'ai aussi expérimenté un peu avec
termtosvg
(https://github.com/nbedos/termtosvg) pour générer des animations (pour mettre dans le README peut-être?).Chouette !
À ce propos, au tout début, je voulais enregistrer toutes la partie avec ttyrecord
pour pouvoir en "visualiser" des morceau. C'était pas très pratique car je n'avais pas trouvé de moyen de lancer un enregistrement pour chaque mission. Je pense que ça ne sert à rien, mais ça serait marrant d'avoir une commande gsh replay
...
On ne pouvait pas non plus changer la vitesse de lecture de ttyplay
de manière dynamique, mais ça semble possible maintenant. (Bizarre, je n'imaginais pas cette commande évoluer...)
Je vais faire un passage sur tes missions, et commencer à les traduire en français. Tu as prévu de bosser dessus ce soir ?
Aussi, je vais essayer d'ajouter quelques trucs en ASCII art dans des fichiers (araignées, Servillus, etc.) J'en ai déjà mis quelques uns, mais ça serait bien d'en avoir plus. Si tu as des idées de trucs, note les dans un coin. L'idée serait de motiver les joueurs à regarder ce qu'il y a dans les fichiers...
Je vais faire un passage sur tes missions, et commencer à les traduire en français. Tu as prévu de bosser dessus ce soir ?
OK très bien. Tu peux y aller, si je fais quelque chose ce sera créer une autre mission.
Aussi, je vais essayer d'ajouter quelques trucs en ASCII art dans des fichiers (araignées, Servillus, etc.) J'en ai déjà mis quelques uns, mais ça serait bien d'en avoir plus. Si tu as des idées de trucs, note les dans un coin. L'idée serait de motiver les joueurs à regarder ce qu'il y a dans les fichiers...
Bonne idée, je pense qu'il faut qu'on ajoute des choses comme ça pour d'autres missions. Pourquoi pas ajouter quelques arbres dans la forêt par exemple ? Par contre pour ce genre de chose, est-ce qu'on les installe avec le static.sh
? Est-ce que c'est un problème si ce genre de fichier est modifié / supprimé ? Si oui, est-ce qu'on veut le vérifier sur le gsh check
?
Je me suis rendu compte qu'on pouvait facilement éviter les problèmes de traduction si on partage des scripts static.sh
ou similaires avec des liens symboliques.
J'ai fait un petit commit, et normalement, ça marche. J'ai donc remplacé les init.sh
et static.sh
de tes missions par des liens vers le static.sh
et init.sh
de 00_shared
.
Par contre, si on fait make
, comme il suit les liens symboliques, on va se retrouver avec des entrées en trop. Il faut donc supprimer ces scripts de la liste SH_FILES
.
(Je ne l'ai pas fait pour deps.sh
, parce que le message actuel référence la "vraie" mission...)
Il faudrait tester un peu plus, pour être sûr que ça ne casse rien...
J'ai fait une première traduction des 5 missions, mais je n'ai pas touché au livre des potions. Tant que ce n'est pas finalisé, ça ne sert pas à grand chose.
Sinon, je n'aime pas beaucoup ta mission 5. Ce n'est pas clair qu'il faut compter les lignes "sauf les 3 premières". Une manière de donner la solution, qui est acceptée, c'est de compter le nombre d'étapes de la recette, et de faire
tail -n8 Book/page_06 | wc -l
.
Je trouve la combinaison head -n+K | wc -l
un peu artificielle et je préfere encore la combinaison tail | head
pour récupérer des trucs au milieu.
Aussi, je vais essayer d'ajouter quelques trucs en ASCII art dans des fichiers (araignées, Servillus, etc.) J'en ai déjà mis quelques uns, mais ça serait bien d'en avoir plus. Si tu as des idées de trucs, note les dans un coin. L'idée serait de motiver les joueurs à regarder ce qu'il y a dans les fichiers...
Bonne idée, je pense qu'il faut qu'on ajoute des choses comme ça pour d'autres missions. Pourquoi pas ajouter quelques arbres dans la forêt par exemple ? Par contre pour ce genre de chose, est-ce qu'on les installe avec le
static.sh
? Est-ce que c'est un problème si ce genre de fichier est modifié / supprimé ? Si oui, est-ce qu'on veut le vérifier sur legsh check
?Je les installe avec
init.sh
, histoire que les étudiants ne commencent pas par essayer d'explorer tout le monde pour chercher les trucs marrants. Je ne suis pas sûr qu'on veuille vérifier le contenu dans lecheck
, sauf cas particulier. Et ce n'est pas très grave si on n'est pas uniforme la dessus.
Quelques remarques sur les missions (je fais une partie complète en anglais):
16_tab
n'est pas très marrante: il n'y a rien à voir au fond du couloir.finding_files_maze/03_find_1
j'ai eu les deux pièces dans le même répertoire, est-ce qu'on veut s'assurer que ça n'arrive pas?28_stdout_redirection
on n'a pas introduit ls FILE1 FILE2 ... FILEn
donc on ne peut pas s'attendre à une solution de type ls grimoire* > Drawer/inventory.txt
. Et find -name "grimoire*" > Drawer/inventory.txt
ne fonctionne pas comme find
laisse des ./
au début du nom des fichiers.30_stdout_stderr_redirection
: l'instruction de merlin (sur stdout
) n'est pas traduite.finding_files_maze/04_find_2
: certaine fichiers contiennent (gettext stone)
(a priori j'ai corrigé).finding_files_maze/05_find_xargs_grep
est-ce que tu attends un ... | xargs mv -t ~/Forest/Hut/Chest
à la fin?Bon, le jeu commence à bien marcher je trouve. Il y a encore un peu de boulot sur les fichiers "goal" de certaines missions, mais les missions elles-même sont plutôt satisfaisantes maintenant!
- La mission
16_tab
n'est pas très marrante: il n'y a rien à voir au fond du couloir.C'est vrai : on pourrait demander à se déplacer dans le couloir (ou autre chose) et faire copier un long fichier dans le coffre. Je réfléchis, et dis moi si tu as une idée.
- Dans la mission
finding_files_maze/03_find_1
j'ai eu les deux pièces dans le même répertoire, est-ce qu'on veut s'assurer que ça n'arrive pas?C'était un bug ! Corrigé.
- Au niveau de la mission
28_stdout_redirection
on n'a pas introduitls FILE1 FILE2 ... FILEn
donc on ne peut pas s'attendre à une solution de typels grimoire* > Drawer/inventory.txt
. Etfind -name "grimoire*" Drawer/inventory.txt
ne fonctionne pas commefind
laisse des./
au début du nom des fichiers.Un jours, je vais ajouter une mission pour faire faire la différence entre
ls *
etls -d *
qui introduira forcément ça...
Mais on peut l'introduire pour l'occasion, même si en pratique, je ne pense pas que ça ne pose de problème. (On peut même mentionner explicitement l'utilisation des jokers...)
- Mission
30_stdout_stderr_redirection
: l'instruction de merlin (surstdout
) n'est pas traduite.TODO
- Mission
finding_files_maze/04_find_2
: certaine fichiers contiennent(gettext stone)
(a priori j'ai corrigé).Merci
- Mission
finding_files_maze/05_find_xargs_grep
est-ce que tu attends un... | xargs mv -t ~/Forest/Hut/Chest
à la fin?Non. Il n'y a pas de limite de nombre de commande. J'attends plutôt un truc du style
find -type f | xargs grep diamant
. Les connaisseurs peuvent aussi utilisergrep -rl diamant *
, mais on n'a pas introduit l'option-r
...
Dans tous les cas, le joueur peut ensuite déplacer le fichier "normalement".
Bon, le jeu commence à bien marcher je trouve. Il y a encore un peu de boulot sur les fichiers "goal" de certaines missions, mais les missions elles-même sont plutôt satisfaisantes maintenant!
Chouette !
Je viens de faire une nouvelle mission 16 plus marrante. Il faut peut-être ajuster la limite de temps. Tu en penses quoi ?
Sinon, je viens d'ajouter un fichier TODO.md
pour faire la liste des trucs à faire. Tu peux y ajouter des trucs...
Je viens de faire une nouvelle mission 16 plus marrante. Il faut peut-être ajuster la limite de temps. Tu en penses quoi ?
C'est génial ! La limite est bien je pense : même si c'est largement faisable en 10 secondes, je ne vois pas d'intérêt à donner un temps plus limité. Par contre un truc qui pourrait être bien serait d'afficher ton temps même quand tu réussis la mission !
Sinon, je viens d'ajouter un fichier
TODO.md
pour faire la liste des trucs à faire. Tu peux y ajouter des trucs...
OK très bien !
J'ai essayé de remettre une "animation" pour l'initialisation en mode "standard" (pas debug).
Tu penses que ą vaut le coup ?
(Tu peux essayer avec d'autres fichiers lib/titlescreen
(j'en ai mis 2 autres dans lib
).
J'ai essayé de remettre une "animation" pour l'initialisation en mode "standard" (pas debug). Tu penses que ą vaut le coup ? (Tu peux essayer avec d'autres fichiers
lib/titlescreen
(j'en ai mis 2 autres danslib
).
Ah oui, c'est vraiment pas mal! J'aime beaucoup la première (activée par défaut). C'est toi qui a créé l'image ? En tout cas c'est bien plus rigolo que d'avoir just des points qui s'affichent ! Par contre je pense qu'on devrait changer le cadre utilisé pour l'écran d'accueil, un truc en forme de parchemin serait plus joli je pense.
D'ailleurs, pour les missions qui ont encore une "barre de chargement" on pourrait peut-être faire un truc avec une araignée ou une chauve-souris en ASCII art qui se déplace d'un côté de l'écran à l'autre ! Je pense que ça pourrait être sympa.
On pourrait peut-être aussi avoir une petite animation pour (ou en tout cas mettre plus en avant les) récompenses. Pour l'instant c'est assez facile de louper le message. Peut-être qu'il suffirait de mettre le message en couleur, ou de le faire clignoter.
On pourrait avoir une image d'un coffre en ASCII-art.
Ah oui, c'est vraiment pas mal! J'aime beaucoup la première (activée par défaut). C'est toi qui a créé l'image ?
J'ai fait des copier/coller à partir d'autres trucs trouvés sur le net. Je voulais avoir un chateau, des montagnes, une forêt et une grotte !
En tout cas c'est bien plus rigolo que d'avoir just des points qui s'affichent ! Par contre je pense qu'on devrait changer le cadre utilisé pour l'écran d'accueil, un truc en forme de parchemin serait plus joli je pense.
Je le fais...
D'ailleurs, pour les missions qui ont encore une "barre de chargement" on pourrait peut-être faire un truc avec une araignée ou une chauve-souris en ASCII art qui se déplace d'un côté de l'écran à l'autre ! Je pense que ça pourrait être sympa.
Oui, mais un truc qui se déplace est pas super portable, en particulier s'il y a plusieurs lignes. (On peut essayer avec des chauves souris
\,/
et/`\
, mais sans le contexte, c'est pas clair... (cf "gnome castle ici https://ascii.co.uk/art/castles)On pourrait peut-être aussi avoir une petite animation pour (ou en tout cas mettre plus en avant les) récompenses. Pour l'instant c'est assez facile de louper le message. Peut-être qu'il suffirait de mettre le message en couleur, ou de le faire clignoter.
On pourrait avoir une image d'un coffre en ASCII-art.
Je regarde ce que je trouve...
Sinon, je suis en train d'essayer de changer les missions sur les processus. J'en ai mis 2, et je suis en train d'en préparer une troisième.
Tu peux tester ? (groupe missions/processes
)
D'ailleurs, pour les missions qui ont encore une "barre de chargement" on pourrait peut-être faire un truc avec une araignée ou une chauve-souris en ASCII art qui se déplace d'un côté de l'écran à l'autre ! Je pense que ça pourrait être sympa.
Oui, mais un truc qui se déplace est pas super portable, en particulier s'il y a plusieurs lignes. (On peut essayer avec des chauves souris
\,/
et/`\
, mais sans le contexte, c'est pas clair... (cf "gnome castle ici https://ascii.co.uk/art/castles)
J'aime bien cette idée avec une chauve-souris toute simple. J'ai essayé un début de truc dans lib/progress.sh
, pour l'instant c'est un script qui fait progresser la chauve-souris sur chaque entrée jusqu'à un e
. Donc pour le tester tu peux le lancer et taper sur n'importe quelle touche pour faire avancer l'animation. Je sais pas trop comment intégrer ce genre de chose proprement. Une idée serait d'utiliser un "named pipe", et donc de fournir une bibliothèque avec les trois commandes suivantes:
mkprogress
qui crée un "mktemp" puis un "mkfifo" et te donne le nom de fichier pour le "named pipe",startprogress PIPE
qui lance un programme qui va consumer le pipe donné et afficher l'animation, et aussi supprimer le pipe à la fin,progress [--end] PIPE
qui envoie soit un caractère '.' pour notifier qu'on progresse, soit un caractère 'e' pour notifier la fin.J'ai essayé de faire ça vite fais, mais c'est plus compliqué que ce que je pensais ! (En particulier je pensais que le pipe avais son propre buffer, donc qu'il suffirait de faire un printf "." > PIPE
pour progresser, mais visiblement c'est pas comme ça que ça marche.) Est-ce que ça te semble une bonne approche ? Si oui, je peux essayer de continuer plus tard.
Sinon, je suis en train d'essayer de changer les missions sur les processus. J'en ai mis 2, et je suis en train d'en préparer une troisième. Tu peux tester ? (groupe
missions/processes
)
OK super, je teste ça ce soir !
Je viens de mettre une dernière mission sur les processus. C'est mieux que les trucs d'avant, mais il faut tester, et revoir un peu les fichiers goal
.
Sinon, gsh pass
est devenu gsh skip
, qui me parait plus clair. ("pass" veut dire "réussi"...)
Pour la chauve-souris, j'aime bien l'idée. On garde ça dans un coin, mais c'est pas très prioritaire. (Il n'y a que 2 ou 3 missions qui l'utiliseraient.) Je réfléchis aussi de mon coté...
Je viens de mettre une dernière mission sur les processus. C'est mieux que les trucs d'avant, mais il faut tester, et revoir un peu les fichiers
goal
.
OK. J'avais testé les deux premières missions plus tôt, et je trouve que c'est plutôt pas mal ! Par contre il semblerait que tu as cassé la deuxième mission avec tes derniers changements (je n'ai pas encore compris pourquoi). Le gsh check
échoue en disant que je n'ai pas essayé de faire un kill
avec le signal par défaut.
Sinon,
gsh pass
est devenugsh skip
, qui me parait plus clair. ("pass" veut dire "réussi"...)
OK, j'avais aussi repéré ça, et j'allais suggérer exactement ce renommage !
Pour la chauve-souris, j'aime bien l'idée. On garde ça dans un coin, mais c'est pas très prioritaire. (Il n'y a que 2 ou 3 missions qui l'utiliseraient.) Je réfléchis aussi de mon coté...
OK, c'est vrai, c'est pas du tout une priorité.
OK. J'avais testé les deux premières missions plus tôt, et je trouve que c'est plutôt pas mal ! Par contre il semblerait que tu as cassé la deuxième mission avec tes derniers changements (je n'ai pas encore compris pourquoi). Le
gsh check
échoue en disant que je n'ai pas essayé de faire unkill
avec le signal par défaut.C'est normalement corrigé. J'avais oublié des trucs dans la version python des scripts !
Y'a des trucs pas hyper pratiques dans ces missions : je veux lancer des processus, mais leur nom dépend de la locale, il ne suffit donc pas de les mettre dans bin
.
D'autre part, j'utilise 2 scripts différents avec le même nom (le sortilège de la fée, et celui du luting). Je pourrais les fusionner, mais ce n'est pas très naturel. (Et j'utilise de toute façon des scripts de même nom dans plusieurs missions...)
Bref, je me retrouve à copier les fichiers exécutables dans $GSH_VAR
à la main pour les exécuter depuis le init.sh
.
Pour la chauve-souris, j'aime bien l'idée. On garde ça dans un coin, mais c'est pas très prioritaire. (Il n'y a que 2 ou 3 missions qui l'utiliseraient.) Je réfléchis aussi de mon coté...
OK, c'est vrai, c'est pas du tout une priorité.
Par contre, je ne vois pas le problème avec un tube nommé. Je viens de tester avec
$ mkfifo test $ ./lib/pogress.sh < test
et
$ cat - > test
et j'ai bien l'animation.
C'est normalement corrigé. J'avais oublié des trucs dans la version python des scripts !
Ah OK !
Y'a des trucs pas hyper pratiques dans ces missions : je veux lancer des processus, mais leur nom dépend de la locale, il ne suffit donc pas de les mettre dans
bin
.
Ouais, c'est un peu chiant. Peut-être qu'on ne devrait pas copier les fichiers de bin
automatiquement, mais laisser ça à static.sh
? On pourrait fournir une commande install_gsh_bin
qui fait ce qu'il faut avec le TEXTDOMAIN
et compagnie, et ça permettrait de traduire le nom de l'executable au passage.
D'autre part, j'utilise 2 scripts différents avec le même nom (le sortilège de la fée, et celui du luting). Je pourrais les fusionner, mais ce n'est pas très naturel. (Et j'utilise de toute façon des scripts de même nom dans plusieurs missions...) Bref, je me retrouve à copier les fichiers exécutables dans
$GSH_VAR
à la main pour les exécuter depuis leinit.sh
.
Ouais, c'est un peu chiant de devoir faire ça. Mais bon, on peut toujours améliorer ça plus tard.
Pour la chauve-souris, j'aime bien l'idée. On garde ça dans un coin, mais c'est pas très prioritaire. (Il n'y a que 2 ou 3 missions qui l'utiliseraient.) Je réfléchis aussi de mon coté...
OK, c'est vrai, c'est pas du tout une priorité.
Par contre, je ne vois pas le problème avec un tube nommé. Je viens de tester avec
$ mkfifo test $ ./lib/pogress.sh < test
et
$ cat - > test
et j'ai bien l'animation.
Oui, ça marche très bien. Mais ce que je pensais pouvoir faire c'est un truc du genre echo "." > test
, mais si tu fais ça le pipe est fermé en lecture dans progress.sh
. Ceci dit, on peut très bien l'ouvrir à nouveau. J'essayerai peut-être de tester ça ce soir.
Oui, ça marche très bien. Mais ce que je pensais pouvoir faire c'est un truc du genre
echo "." > test
, mais si tu fais ça le pipe est fermé en lecture dansprogress.sh
. Ceci dit, on peut très bien l'ouvrir à nouveau. J'essayerai peut-être de tester ça ce soir.Peut-être qu'un truc comme ça pourrait marcher : https://stackoverflow.com/questions/65347320/how-can-i-keep-a-fifo-open-for-reading
(Là, je suis à ma deuxième réunion Zoom de la matinée...)
Je suis en train de reprendre un peu les missions 9 et 10, mais je finirais demain.
Est-ce que ça serait pas mieux de remplacer l'entrée du chateau par la "salle de banquet" ?
Aussi, je me demande si ça veut vraiment le coup de faire tous ces tests compliqués : ici, chaque étendart contient une somme de contrôle avec aléa, que l'on vérifie !
C'est probablement inutile. (Si le joueur est capable de recréer un fichier avec le bon nom au bon endroit, il mérite sa mission.)
En tout cas, ça vaudrait le coup de faire quelques fonctions pour faciliter tout ça. (sign FILE
qui ajoute une signature en haut du fichier, et check FILE
qui vérifie cette signature)
Tu en penses quoi ?
Autre truc, la fonction mission_source
permet de charger un fichier. Par exemple, pour les missions 09 et 10, j'ai créé un fichier init0.sh
pour générer les objets "inutiles" dans la mission 09, et j'ai fait un lien vers ce fichier dans la mission 10. Je le charge avec mission_source
dans le fichier init.sh
principal.
Pour que ça marche, la fonction mission_source
doit résoudre les liens symboliques pour définir MISSION_DIR
(un script qui fait référence à MISSION_DIR
veut accéder au répertoire correspondant) et pour définire TEXTDOMAIN
(pour pouvoir accéder aux bon fichiers de traduction).
Il ne faut pas résoudre les liens pour définir MISSION_NAME
qui est utilisé dans les messages.
Est-ce que tu vois des cas où ce n'est pas ce qu'il faut faire ?
Est-ce que ça serait pas mieux de remplacer l'entrée du chateau par la "salle de banquet" ?
Oui, pourquoi pas, par contre je sais pas ce que ça doit être en anglais. Sinon on pourrait peut-être utiliser "Grande Salle" / "Great Hall" (utilisé dans Harry Potter par exemple).
Aussi, je me demande si ça veut vraiment le coup de faire tous ces tests compliqués : ici, chaque étendart contient une somme de contrôle avec aléa, que l'on vérifie ! C'est probablement inutile. (Si le joueur est capable de recréer un fichier avec le bon nom au bon endroit, il mérite sa mission.)
C'est vrai, je suis d'accord.
En tout cas, ça vaudrait le coup de faire quelques fonctions pour faciliter tout ça. (
sign FILE
qui ajoute une signature en haut du fichier, etcheck FILE
qui vérifie cette signature) Tu en penses quoi ?
Je suis complètement d'accord, c'est pour partager ce genre de chose que je voulais un dossier de bibliothèques partagées au départ.
Autre truc, la fonction
mission_source
permet de charger un fichier. Par exemple, pour les missions 09 et 10, j'ai créé un fichierinit0.sh
pour générer les objets "inutiles" dans la mission 09, et j'ai fait un lien vers ce fichier dans la mission 10. Je le charge avecmission_source
dans le fichierinit.sh
principal. Pour que ça marche, la fonctionmission_source
doit résoudre les liens symboliques pour définirMISSION_DIR
(un script qui fait référence àMISSION_DIR
veut accéder au répertoire correspondant) et pour définireTEXTDOMAIN
(pour pouvoir accéder aux bon fichiers de traduction). Il ne faut pas résoudre les liens pour définirMISSION_NAME
qui est utilisé dans les messages. Est-ce que tu vois des cas où ce n'est pas ce qu'il faut faire ?
Ça me semble correct, je ne vois pas de cas où on voudrait autre chose. Par contre il faut vraiment documenter tout ça !
De mon côté j'ai réussi à faire à peu près ce que je voulais avec la barre de progression. Il y a encore quelques trucs à améliorer avant de pouvoir l'utiliser. Il y a un truc assez mystérieux : j'utilise mktemp
pour avoir un nom de fichier temporaire, mais pour une raison que j'ignore ça me donne un fichier dans le dossier courant au lieu de /tmp/
. Tu as une idée pourquoi ? J'avais juste oublié l'option -t
, et je ne donnais pas de PATTERN
en testant dans le terminal (d'où ma confusion).
Si tu veux tester la bibliothèque tu peux utiliser:
#!/bin/bash
source lib/progress.sh
echo "Start of the script..."
P=$(new_progress)
progress_start "$P"
for I in $(seq 1 80)
do
sleep 0.03
progress_step "$P"
done
progress_done "$P"
echo "End of the script..."
Un truc que j'ai essayé sans succès est de combiner new_progress
et progress_start
. Je ne comprend pas pourquoi on ne peut pas juste combiner les deux fonctions. J'imagine que c'est une histoire de pipe non fermé. En gros la fonction se terminait par un truc du genre:
_progress_start "$PIPE"&
echo "$PIPE"
J'imagine que le process en background bloque le retour de la fonction parce qu'il garde les pipes d'entrée/sorties ouverts. Mais du coup je ne comprend pas pourquoi l'actuel progress_start
termine bien: la fonction se termine par un _progress_start "$PIPE"&
. Le problème ne devrait-il pas être le même?
Au fait, j'ai testé à nouveau les missions sur les processus et tout semble bien marcher. Par contre je me demande si on ne fait pas trop de choses avec des fichiers cachés: presque toutes les missions en utilisent, et ils ne me semblent pas aussi présent dans la pratique. Qu'en penses-tu ?
De mon côté j'ai réussi à faire à peu près ce que je voulais avec la barre de progression.
Pourquoi utiliser
mktemp
? Ça veut dire qu'il faut ensuite donner le nom au second processus. On peut utiliser$GSH_VAR/progress_fifo
. Le problème, c'est peut-être si un processus continue à utiliserprogress_step
en arrière plan.
Est-ce que ça permet de supprimer new_progress
?
Il faudrait juste que progress_start
vide la file. Non ?
EDIT : et est-ce que la fonction "progress_step" est obligatoire ? Je verrais plutot un truc du style
progress_start "$GSH_VAR/progress_fifo" &
long_process > "$GSH_VAR/progress_fifo"
progress_done
Comme ça, on demande juste que long_process
affiche son avancement sur stdout
(ou stderr
, mais ça me parait moins bien).
De mon côté j'ai réussi à faire à peu près ce que je voulais avec la barre de progression.
Pourquoi utiliser
mktemp
? Ça veut dire qu'il faut ensuite donner le nom au second processus. On peut utiliser$GSH_VAR/progress_fifo
. Le problème, c'est peut-être si un processus continue à utiliserprogress_step
en arrière plan.
L'idée est que cette bibliothèque n'est pas nécessairement utile que pour GameShell, et on peut bien imaginer qu'elle soit utilisée parallèlement par deux shells distincts, auquel cas il ne faut pas partager le pipe.
Mais bon, la solution que tu propose, où le nom de fichier pour le pipe est donné à toutes les fonctions, me semble très bien. Comme ça c'est au client de la bibliothèque de s'assurer que le fichier est spécifique à une instance de barre de progression.
Est-ce que ça permet de supprimer
new_progress
? Il faudrait juste queprogress_start
vide la file. Non ?
Oui, je pense qu'on pourrait faire comme ça, ce serait très bien.
EDIT : et est-ce que la fonction "progress_step" est obligatoire ? Je verrais plutot un truc du style
progress_start "$GSH_VAR/progress_fifo" & long_process > "$GSH_VAR/progress_fifo" progress_done
Pour progress_done
il faut aussi donner le chemin du pipe en argument non?
Et pour long_progress
ce serait peut-être mieux de prendre le pipe en argument non?
Comme ça, on demande juste que
long_process
affiche son avancement surstdout
(oustderr
, mais ça me parait moins bien).
Peut-être que je ne comprend pas exactement ce que tu suggères : est-ce que long_progress
est fourni par la bibliothèque ? Ou est-ce que c'est la partie du script qui fait le travail (et qui affiche ce qu'il faut sur son stdout
)?
Mais bon, la solution que tu propose, où le nom de fichier pour le pipe est donné à toutes les fonctions, me semble très bien. Comme ça c'est au client de la bibliothèque de s'assurer que le fichier est spécifique à une instance de barre de progression.
Et on peut fournir une fonction pour créer un tube au besoin, comme tu fais...
EDIT : et est-ce que la fonction "progress_step" est obligatoire ? Je verrais plutot un truc du style
progress_start "$GSH_VAR/progress_fifo" & long_process > "$GSH_VAR/progress_fifo" progress_done
Pour
progress_done
il faut aussi donner le chemin du pipe en argument non?Oups... Oui. (Ou alors, il faut que
progress_start
définisse une variable d'environnement, ce qui n'est pas très joli dans ce cas.)Et pour
long_progress
ce serait peut-être mieux de prendre le pipe en argument non?Non. Mon idée est que si l'utilisateur a une fonction qui affiche une progression "basique" (une suite de points comme actuellement), il puisse facilement la remplacer par une progression "marrante". Typiquement,
long_process
sera la fonction d'initialisation d'une mission.
D'ailleurs, pour GameShell, on peut faire encore plus simple et utiliser une redirection standard :
init_mission | progress_bar
progress_bar
lit simplement sur stdin
. Pas besoin de tube, de progress_start
ou de progress_done
.
On peut imaginer une option pour faire une étape "par caractère", ou "par ligne", suivant l'affichage que fait la fonction init_mission
.
Tu vois des exemples où ça ne nous suffirait pas ?
D'ailleurs, pour GameShell, on peut faire encore plus simple et utiliser une redirection standard :
init_mission | progress_bar
Oui, tu as raison. C'est ce que j'avais au tout début, et je sais pas trop pourquoi je me suis lancé dans un truc super compliqué.
Tu vois des exemples où ça ne nous suffirait pas ?
Non, il suffit juste de changer le code pour utiliser une fonction, et c'est effectivement bien plus simple.
L'animation est maintenant utilisée pour l'initialisation de missions/stdin_stdout_stderr/04_stderr_dev-null_grimoires
.
Dans la version actuelle tout se passe caractère par caractère, on verra si on a besoin d'un option qui progresse ligne par ligne plus tard. Et on pourra aussi voir si on veut plus d'options et des animations alternatives plus tard.
Je viens d'ajouter la récompense pour la mission 15 (bashrc
dans le coffre). Je pense que c'est à peu près ce que tu avais en tête, mais n'hésite pas à me dire si tu veux que je change des trucs !
C'est exactement ça !
Sinon, j'ai déplacé progress_bat
dans le nouveau fichier lib/missions_utils.sh
avec quelques autres nouvelles fonctions...
J'ai un peu simplifié ta fonction progress_bat
. Ça pourrait être plus facile de mettre d'autres animations.
(un millepattes : ,',',',',',',',(:)
, un serpent __/\__/\__/\<:>
, une fourmi >|<()
, etc.)
J'ai un peu simplifié ta fonction
progress_bat
. Ça pourrait être plus facile de mettre d'autres animations. (un millepattes :,',',',',',',',(:)
, un serpent__/\__/\__/\<:>
, une fourmi>|<()
, etc.)
En effet, c'est un bonne idée !
Par contre, j'aimais bien qu'on efface la ligne à la fin de l'animation. Toi tu préfères garder le dernier affichage ?
Un autre truc que j'ai remarqué c'est qu'avec les \b
l'affichage commence sur la ligne précédente, ce qui est un peu bizarre. (D'ailleurs c'est pire avec un serpent.)
Par contre, j'aimais bien qu'on efface la ligne à la fin de l'animation. Toi tu préfères garder le dernier affichage ? Un autre truc que j'ai remarqué c'est qu'avec les
\b
l'affichage commence sur la ligne précédente, ce qui est un peu bizarre. (D'ailleurs c'est pire avec un serpent.)Zut, effectivement, le premier élément du tableau contient les
\b\b\b
. Je ne sais pas ce qui est le mieux.
Pour le dernier affichage, je ne sais pas trop. Si ça va vite, on n'a pas forcément le temps de voir ce qui se passe. (J'ai d'ailleurs augmenté le délai du sleep
parce que je trouvais que ça allait trop vite.)
C'est pas encore complètement au point tout ça.
Par contre, j'aimais bien qu'on efface la ligne à la fin de l'animation. Toi tu préfères garder le dernier affichage ? Un autre truc que j'ai remarqué c'est qu'avec les
\b
l'affichage commence sur la ligne précédente, ce qui est un peu bizarre. (D'ailleurs c'est pire avec un serpent.)Zut, effectivement, le premier élément du tableau contient les
\b\b\b
. Je ne sais pas ce qui est le mieux.
Peut-être qu'on pourrait construire une chaîne d'espaces: un est ajouté à chaque tour de boucle.
Comme ça on peut virer les \b\b\b
et utiliser \r
à nouveau. Ils sont de toute façon un peu problématiques quand tu veux faire un serpent comme il faut en écrire une quinzaine.
Pour le dernier affichage, je ne sais pas trop. Si ça va vite, on n'a pas forcément le temps de voir ce qui se passe. (J'ai d'ailleurs augmenté le délai du
sleep
parce que je trouvais que ça allait trop vite.)
Ouais, c'est pas mal de le ralentir un peu, de toute façon ça ne bloque pas le truc qui prend du temps, on ne ralentit que l'affichage. Mais bon, c'est aussi un peu bizarre de se retrouver avec une chauve-souris qui se fige en plein vol.
C'est pas encore complètement au point tout ça.
Oui, mais on n'est pas loin je pense.
Peut-être qu'on pourrait construire une chaîne d'espaces: un est ajouté à chaque tour de boucle. Comme ça on peut virer les
\b\b\b
et utiliser\r
à nouveau. Ils sont de toute façon un peu problématiques quand tu veux faire un serpent comme il faut en écrire une quinzaine.J'avais pensé à ça au début : on regarde la taille de la chaine, et on en déduit le nombre de
\b
à mettre. J'aime bien ma solution parce qu'on peut donner(".")
pour afficher une progressionbasique
, ou("\b|" "\b/" "\b-" "\b\\")
pour afficher une barre qui tourne, etc.
Mais c'est vrai que pour le serpent, c'est pas super pratique...
Pour le dernier affichage, je ne sais pas trop. Si ça va vite, on n'a pas forcément le temps de voir ce qui se passe. (J'ai d'ailleurs augmenté le délai du
sleep
parce que je trouvais que ça allait trop vite.)Ouais, c'est pas mal de le ralentir un peu, de toute façon ça ne bloque pas le truc qui prend du temps, on ne ralentit que l'affichage. Mais bon, c'est aussi un peu bizarre de se retrouver avec une chauve-souris qui se fige en plein vol.
Oui, je viens finalement de l'enlever...
C'est pas encore complètement au point tout ça.
Oui, mais on n'est pas loin je pense.
Ouaip.
Je vais essayer de refaire une partie complète en francais en notant les trucs à changer :
Dans les trucs à faire, il y a finaliser ton groupe de missions book_of_potions
, en remplaçant notamment la dernière mission que je n'aime pas ; et traduire le livre.
Tu vois d'autres trucs ?
J'avais pensé à ça au début : on regarde la taille de la chaine, et on en déduit le nombre de
\b
à mettre. J'aime bien ma solution parce qu'on peut donner(".")
pour afficher une progressionbasique
, ou("\b|" "\b/" "\b-" "\b\\")
pour afficher une barre qui tourne, etc.Mais c'est vrai que pour le serpent, c'est pas super pratique...
On peut aussi avoir une option pour controller ce qui se passe.
Sinon il faut donner une "image initiale" qui est affichée avant de commencer l'animation, comme ça on n'a pas le problème de retour sur la ligne précédente.
Ouais, c'est pas mal de le ralentir un peu, de toute façon ça ne bloque pas le truc qui prend du temps, on ne ralentit que l'affichage. Mais bon, c'est aussi un peu bizarre de se retrouver avec une chauve-souris qui se fige en plein vol.
Oui, je viens finalement de l'enlever...
OK.
Je vais essayer de refaire une partie complète en francais en notant les trucs à changer :
- enlever certains des fichiers cachés
- voir si on modifie certains lieux (je vais remplacer l'entrée par le grand hall. J'aime bien, et j'avais toujours imaginé l'entrée comme la porte extérieure du chateau, juste derrière le pont levis. C'était toujours un peu bizarre d'y récupérer des tapisseries !)
- décider si l'ordre des missions est cohérent
- etc.
OK, très bien.
Dans les trucs à faire, il y a finaliser ton groupe de missions
book_of_potions
, en remplaçant notamment la dernière mission que je n'aime pas ; et traduire le livre.
Oui, je vais m'occuper de ça dés que j'ai un moment. Et je vais faire une partie complète en anglais avec Bran.
Tu vois d'autres trucs ?
Non, rien d'autre de vraiment important dans l'immédiat, à part une grosse passe sur la documentation. Je pense qu'après tout ça, on peut commencer à l'envoyer à des gens pour faire tester le jeu un peu plus.
J'ai enfin traduit le livre de potions en français ! Par contre, il y a un truc que je ne comprend pas bien avec les traductions : il semble que les fichiers de traduction ne se mettent plus à jour directement, je suis obligé de les supprimer dans le dossier locale
pour qu'ils soient mis à jour. Est-ce que c'est normal ?
Aussi, je ne me rappelle plus ce qu'on a dit pour les missions du groupe "livre de potions". Qu'est-ce que tu n'aimes pas déjà avec la mission 5? (J'arrive plus à retrouver ce que tu avais dit, il y a trop de messages sur cette page !) Est-ce qu'il suffit de la supprimer, ou est-ce qu'on veut un truc à la place ? Il y a plusieurs idées de missions pour le groupe (toutes les parties du livre ne sont pas encore utilisées), mais je ne sais pas si on veut faire ça maintenant ou plus tard.
J'ai enfin traduit le livre de potions en français !
Super !
Par contre, il y a un truc que je ne comprend pas bien avec les traductions : il semble que les fichiers de traduction ne se mettent plus à jour directement, je suis obligé de les supprimer dans le dossier
locale
pour qu'ils soient mis à jour. Est-ce que c'est normal ?Ah oui, pour gagner un peu de temps, il ne sont regénérés que s'ils sont absents. Il faut donc faire un
make clean
dans$GSH_ROOT
pour les supprimer. Je devrais peut-être toujours les regénérer en mode debug. Tu en pense quoi ?Aussi, je ne me rappelle plus ce qu'on a dit pour les missions du groupe "livre de potions". Qu'est-ce que tu n'aimes pas déjà avec la mission 5?
Ça serait bien d'avoir une seconde mission avec un tube dans le groupe. On peut mettre soit une combinaison
head | tail
pour récupérer le milieu, soit une combinaisonhead | nl
outail | nl
pour numéroter les étapes. (J'ai eu une autre idée pour utiliserpaste
: retrouver les 2 morceaux d'une carte au trésor...(J'arrive plus à retrouver ce que tu avais dit, il y a trop de messages sur cette page !)
C'est vrai que ça commence à faire long !
J'ai enfin traduit le livre de potions en français !
Super !
Par contre, il y a un truc que je ne comprend pas bien avec les traductions : il semble que les fichiers de traduction ne se mettent plus à jour directement, je suis obligé de les supprimer dans le dossier
locale
pour qu'ils soient mis à jour. Est-ce que c'est normal ?Ah oui, pour gagner un peu de temps, il ne sont regénérés que s'ils sont absents. Il faut donc faire un
make clean
dans$GSH_ROOT
pour les supprimer. Je devrais peut-être toujours les regénérer en mode debug. Tu en pense quoi ?
Ah OK. Ce serait peut-être pas mal de faire ça effectivement. Il suffit de supprimer le dossier locale
au début c'est ça ?
Une alternative serait de vérifier que les .mo
sont plus récents que les .po
correspondants. Mais bon, ça risque de prendre presque autant de temps que de toujours les générer.
Aussi, je ne me rappelle plus ce qu'on a dit pour les missions du groupe "livre de potions". Qu'est-ce que tu n'aimes pas déjà avec la mission 5?
Ça serait bien d'avoir une seconde mission avec un tube dans le groupe. On peut mettre soit une combinaison
head | tail
pour récupérer le milieu, soit une combinaisonhead | nl
outail | nl
pour numéroter les étapes.
OK, je vais faire le head | tail
je pense comme c'est le plus adapté avec la version actuelle du livre.
(J'ai eu une autre idée pour utiliser
paste
: retrouver les 2 morceaux d'une carte au trésor...
Bonne idée ! Après, on a les deux pages arrachées du livre qui ne sont pas utilisées, donc ce serait peut-être pas mal de les utiliser pour une mission. Peut-être que ça pourrait être l'occasion de parler du fait que paste book/page truc > book/page
ne fait pas ce qu'on attend. On pourrait avoir une mission qui utilise un fichier temporaire pour la première page, et puis une mission qui fait la deuxième page avec sponge
. (Mais bon, si on fait ça, on peut le faire plus tard.)
(J'arrive plus à retrouver ce que tu avais dit, il y a trop de messages sur cette page !)
C'est vrai que ça commence à faire long !
Un truc qui est pas mal c'est d'utiliser les "review", comme ça tu peux marquer les fils de discussions "resolved" donc ils ne s'affichent plus. Mais bon, ça marche que pour les points particuliers, et on a surtout eu des discussions générales. Donc bref, c'est pas très grave !
Un truc qui est pas mal c'est d'utiliser les "review", comme ça tu peux marquer les fils de discussions "resolved" donc ils ne s'affichent plus. Mais bon, ça marche que pour les points particuliers, et on a surtout eu des discussions générales. Donc bref, c'est pas très grave !
Ah ! J'essaierais, si j'y pense...
Je viens de faire un gros patch pas très élégant pour améliorer la compatilibilé BSD (et donc probablement macOS).
Y'avais des trucs pas très marrants, et des trucs pas encore faits.
Un truc chiant pour les missions sur les processus, c'est que freebsd ne nomme pas les processus comme linux. Même avec un shebang correct, le fichier spell
#!/usr/local/bin/bash
...
ne donne pas un processus spell
mais un processus bash ...chemin.../spell
.
C'est un peu con pour les missions...
J'ai du aussi par exemple modifier la création du "book of potion" parce que csplit
n'a pas les même options.
Et d'autres trucs similaires...
C'est pas fini, mais je m'arête pour le moment...
Je viens de faire un gros patch pas très élégant pour améliorer la compatilibilé BSD (et donc probablement macOS). Y'avais des trucs pas très marrants, et des trucs pas encore faits.
OK cool ! Je peux peut-être trouver un collègue avec un mac pour tester si tu veux.
Un truc chiant pour les missions sur les processus, c'est que freebsd ne nomme pas les processus comme linux. Même avec un shebang correct, le fichier
spell
ne donne pas un processusspell
mais un processusbash ...chemin.../spell
. C'est un peu con pour les missions...
Ouais, c'est un peu dommage. Mais bon, c'est pas dramatique non plus.
J'ai modifié progress_bar
pour choisir une version au hasard (parmi les animaux seulement) si il n'y a pas d'arguments, et sinon le "theme" spécifié comme premier argument. J'ai aussi ajouté des poissons.
D'ailleurs, je suis assez déçu par le mille-pates : je pensais que l'animation serait plus marrante, mais on ne vois pas vraiment les pates bouger comme les caractères sont très petits. Et puis je trouve aussi que la fourmi est difficile à reconnaître, surtout qu'il n'y a pas de mouvement. (Les poissons ont le même problème, mais c'est quand même mieux, surtout pour celui qui fait des allers-retours.)
D'ailleurs, je suis assez déçu par le mille-pates : je pensais que l'animation serait plus marrante, mais on ne vois pas vraiment les pates bouger comme les caractères sont très petits.
Je suis d'accord. Il y a surement moyen de l'améliorer...
Je viens d'en ajouter un dont je suis très fier : la chenille (`caterpillar'). Je te laisse tester...
Je viens d'en ajouter un dont je suis très fier : la chenille (`caterpillar'). Je te laisse tester...
Excellent !
J'ai fait une partie complète en anglais ce soir, je met ce que j'ai noté dessous. J'ai pas réussi à motiver Bran assez pour qu'elle refasse une partie ce weekend, mais on fera peut-être ça un soir cette semaine pour voir si il y a des choses à améliorer dans la traduction.
Here are a few possible improvements:
basic/rm_wildcard_spiders_cellar
should perhaps only introduce the wildcards on non-hidden files? We could introduce a mission before this one, where spiders are not hidden.processes
group there are messages shown (after the check) involving process test-proc-name
. Hide this?stdin_stdout_stderr/stdout_redirection_inventory
use a progress bar instead of straight dots.stdin_stdout_stderr/stderr_dev-null_grimoires
I got zero match, but the mission was still checked correctly. Maybe we should ensure that the incantation actually appears at least one or two times?stdin_stdout_stderr/stdout_stderr_redirection_merlin
is the player supposed to copy/paste the secret key? Or is it rather to use a temporary file? Maybe we should add a hint.pipes_merchant_stall/pipe_1
is there a way to not count gsh
in the command count? Or at least gsh goal
?pipes_merchant_stall
group it seems that the command counter remains there. (A gsh hardreset
fixes the problem.)misc/tr_caesar_shift
it is a bit weird to have the chest appear in the cellar. Maybe it should simply appear in the office? Maybe we should thing of a few more things to put in there?J'ai changé bin
en sbin
. Ça permet de différencier les exécutables qu'on veut rendre accessible dans le PATH
(bin
) de ceux qu'on ne veut pas rendre accessibles (sbin
).
Je ne suis pas super content, mais c'est le plus souple et le plus simple. Non ?
Et j'ai mis un canard et une araignée dans progress_bar
, et modifié un peu le mille-pattes... :)
Mission
basic/rm_wildcard_spiders_cellar
should perhaps only introduce the wildcards on non-hidden files? We could introduce a mission before this one, where spiders are not hidden.Fait.
In the missions of the
processes
group there are messages shown (after the check) involving processtest-proc-name
. Hide this?Corrigé.
In mission
stdin_stdout_stderr/stderr_dev-null_grimoires
I got zero match, but the mission was still checked correctly. Maybe we should ensure that the incantation actually appears at least one or two times?Oups... La fonction
random_string
ne renvoyait que desA
etB
! Corrigé.In mission
stdin_stdout_stderr/stdout_stderr_redirection_merlin
is the player supposed to copy/paste the secret key? Or is it rather to use a temporary file? Maybe we should add a hint.Corrigé. Je n'ai pas changé le
goal
, mais le check refuse de valider si on essaie de faire un copier-coller et précise qu'il faut faire une redirection. Tu en penses quoi ?In mission
pipes_merchant_stall/pipe_1
is there a way to not countgsh
in the command count? Or at leastgsh goal
?Fait, mais c'est probablement bien de tester un peu plus.
After the missions of the
pipes_merchant_stall
group it seems that the command counter remains there. (Agsh hardreset
fixes the problem.)Normalement corrigé.
At the end of mission
misc/tr_caesar_shift
it is a bit weird to have the chest appear in the cellar. Maybe it should simply appear in the office? Maybe we should thing of a few more things to put in there?Fait.
I think it would be nice to add a more "treasures" (not sure what though).
Autres trucs dans le prompt ? (nombre de "jobs", couleurs, valeur de la dernière commande (vrai / faux)) D'autres alias ? (
..
pourcd ..
,pst
pourpstree -p $$
) À réfléchir.
Au fait, est-ce que l'affichage des messages des trésors te convient ?
J'ai fini une première version des fichiers doc/gameshell.md
et doc/mission.md
.
Tu peux y jeter un coup d'oeuil si tu veux.
2 questions :
gsh unprotect
et gsh protect
devraient demande le mot de passe admin ?.sbin
dans le PATH
lorsqu'on charge un fichier init.sh
ou autre ?
J'ai passé un peu de temps à essayer de voir comment pourrait fonctionner l'internationalisation des missions, et voilà le résultat. En gros l'idée est d'avoir un dossier
locale
dans chaque mission, avec des fichiers.po
pour chaque langue supportée. Par example, j'ai crée des fichierslocale/fr.po
etlocale/en.po
pour la mission 1.Pendant l'exécution de
start.sh
ces fichiers sont transformés en fichiers.mo
(parmsgfmt
) et placé sous un dossierlocale
à la racine GameShell (avec l'arborescence qui va bien). Les fichiers ainsi crées prennent le nom du dossier de la mission (plus l'extension), ce qui veut dire qu'ils sont activés en exportantTEXTDOMAIN=nom_de_la_mission
. En gros, ça veut dire qu'il faut s'arranger pour que les scripts de la mission (et les éventuels fichiers binaires) soient toujours lancés dans un environnement ouTEXTDOMAIN
contient le nom du dossier de la mission. (J'ai pris pour convention de définirTEXTDOMAIN="gash"
en dehors de l'exécution du code des missions.)L'autre chose à faire c'est d'exporter
TEXTDOMAINDIR="$GASH_BASE/locale"
dansstart.sh
.Un autre point intéressant est qu'on peut utiliser la variable
LANGUAGE
pour controller la langues des messages. On peut même faire un truc commeLANGUAGE=fr_FR:fr:en_GB:en_US:en
pour que le système donne la priorité au Français mais se rabatte sur l'anglais s'il n'est pas disponible. Il faudrait quand même s'assurer que les locales soient dispo pour une des langues du système (et queLANGUAGE
est définie) parce que sinongettext
ne donne que la clé en résultat.Dernière remarque : j'ai utilisé un fichier
goal.sh
dans la mission pour pouvoir utilisergettext
. C'est plus uniforme, et j'imagine que pour des missions compliquées on pourrait avoir besoin de générer les instructions donc c'est pas idiot. Une autre possibilité serait de s'assurer que les fichiers locales définissent toujours une entrée avec la clé"Mission goal"
, et on pourrait appelergettext
directement depuislib/game_shell.sh
.Qu'en penses-tu Pierre?