FANDOM


Un projet de jeu de rôle en Bash, just for fun =)

Planification Edit

Des idées générales Edit

  • Séparer le code (moteur) des données
  • Viser la possibilité de créer des jeux différentes pour le même moteur
  • Concevoir le code le plus simple possible
  • Un jeu doit être contenu entièrement dans un fichier externe
  • Travailler sur github.com (eh oui, pour apprendre de le faire comme il faut) !

Des idées sur le monde du jeu Edit

IMG 20171209 144430

Les carrés (locations) Edit

On divise le « monde » en carrés (voir l'illustration 1) numérotés. Format d'index de carrés : XXYYZZ. L'index servira d'index du ligne dans le fichier de données du jeu :

XXYYZZ <données de location A>
XXYYZZ <données de location B>
etc

Chaque carré peut avoir 6 sorties (voir l'illustration 1). À chaque sortie devrait être associé :

  • soit l'index du carré ou la sortie mène ;
  • soit l'index 000000, qui signifiera que cette sortie n'existe pas.

Une location Edit

Le jeu procède d'une location à une autre. Dans chaque location le joueur devrait avoir :

  • un nom de location
  • une description de location
  • une liste des objets et monstres présents
  • une liste des actions <- mais je penche plutôt pour une liste général, applicable sur des objets
  • quoi d'autre ?

À réfléchir! Est-ce qu'on présent les sorties (portes, fenêtres, escaliers, etc) dans la description, ou comme des objets ?

Dans la description ?

  • Plus facile à réaliser (un plus)
  • Inamovible (un gros défaut)

Comme des objets ?

  • Plus difficile à réaliser (un défaut)
  • On pourrait les manipuler (créer / modifier / détruire) dynamiquement dans le jeu ; exemples :
    • il y a une porte cachée, on fait l'action « Chercher » et on la trouve (modifie l'attribut « Caché ») ;
    • il y a une porte fermée, on a une clé et on fait l'action « Utiliser [un objet] » sur [la porte] » (modifie l'attribut « Fermé » )
    • on a une arme normale et une potion magique, on fait l'action « Utiliser [un objet] » sur l'arme et ça ajoute une attaque / défense magique ;
    • on à un coffre, on fait l'action « Ouvrir » sur lui et on trouve quelque chose dedans (ajouter un autre objet dans la locations) ;
    • etc.

Format de données Edit

Ici on ajoutera pour le moment les brouillons des formats du fichier données pour en discuter ensuite.

Brouillon 1 Edit

Fonctionnement concret

N1.P1 .OP1.EV1 = Piece vide avec 2 fenêtre et 2 porte (on vient d’une porte), on peux soit chercher, ouvrir la prochaine porte ou revenir en arrière.

N1.P2.OP2.EV3 = Presence de monstre X, choix d’attaquer, fuir ou d’utiliser un item. Attaquer mene a

N1.P1.OP3.EV3 = Attaque (choisis arme) tue le monstre, mene a >> N1.P1.OP1.EV2 . Je choisit de chercher, je trouve un tresor mene a >> N1.P1.OP1.EV1 (si on cherche la piece est vide car EV1 = piece vide) 

N1 + P1 = 1.1 (coordonnes sur le cube) = [(Nord=Fenetre);(Ouest=Fenetre);(Est=Porte);(Sud=porte)]

( pieces par étage, les pieces 1,3,7,9 represente les extremités, 5 le centre)

Par defaut une piece 1 a Face nord une fenetre et face ouest une fenetre, les 2 autres des portes.

------- F --------------- F ------------------ F------------
|
F ...... 1 ...........P......... 2.............P...........3 ..........F
| 
|--------P ---------------- P ------------------ P------------
|
F......... 4....... P .........5......... P.............6 .............F
|

Options :

  • 1=[1=chercher;2=ouvrir porte;3=revenir en arriere]
  • 2=[1=Attaquer;2=Fuir;3=Utiliser item]
  • 3=(Sub attack)[1=epee;2=lance;3=baton;4=menu precedent]
  • 4=(Item submenu)[1=potion;2=fumigene;3=menu precedent]
  • 5=[1=ouvrir coffre;2=Poursuivre son chemin(mène à option 1]

Évènement (parfois linker à option)

  • 1=[Piecevide] lier a option 1
  • 2=[Piece vide et objet cache] lier a option 1
  • 3=[Monstres (banque de monstre separer)] lier a option 2
  • 4=[Coffre au tresor]
  • 5=[Piege] =si option 1 choix 1 est pas choisis = degat.

Brouillon 2 Edit

...

Brouillons de code Edit

Sortie de texte Edit

#!/bin/bash
#
 # print text on screen with a delay after each character (draft version)
#
 print_text () {
  # Color codes for printf
 BLACK=$(tput setaf 0)
 RED=$(tput setaf 1)
 GREEN=$(tput setaf 2)
 YELLOW=$(tput setaf 3)
 LIME_YELLOW=$(tput setaf 190)
 POWDER_BLUE=$(tput setaf 153)
 BLUE=$(tput setaf 4)
 MAGENTA=$(tput setaf 5)
 CYAN=$(tput setaf 6)
 WHITE=$(tput setaf 7)
 BRIGHT=$(tput bold)
 NORMAL=$(tput sgr0)
 BLINK=$(tput blink)
 REVERSE=$(tput smso)
 UNDERLINE=$(tput smul)
 # Delay after each character, in 0.X s
 DELAY=05
  # Text to type
  TEXT="$@"
  TEXT_LENGTH=${#TEXT}
 
  for ((i=0 ; i <= TEXT_LENGTH ; i++)) ; do
   case "${TEXT:i:1}" in
     '\' ) # Read the next char as control ?
       case "${TEXT:((i+1)):1}" in
         'n' ) printf '\n' ;;
         't' ) printf '\t' ;;
         'b' ) printf "$BRIGHT" ;;
         'u' ) printf "$UNDERLINE" ;;
         'r' ) printf "$REVERSE" ;;
         '0' ) printf "$NORMAL" ;;
         *   ) printf '%s' "${TEXT:((i+1)):1}" ;;
       esac
       ((i+=1))
        ;;
      *)
        printf '%s' "${TEXT:i:1}"
       sleep "0.${DELAY}s"
       ;;
    esac
  done
 }