!% ! Les options ci-dessous sont destinées au compilateur : !% ! (toutes sont désactivées dans cet exemple) !% ! +include_path=..\..\bibliotheques !% ! language_name=French ; !% ! -v5 ! version souhaitée : v5, v8, G, etc... !% ! -s ! give statistics !% ! -X ! infix (ne pas laisser dans la version publiée ; non disponible avec Glulx) !% ! -D ! debug (ne pas laisser dans la version publiée) !% ! -r ! imprime le contenu du jeu pour envoi vers un correcteur d'orthographe !% !+transcript_name=gametext.txt ! fichier d'arrivée !% !$MAX_SOURCE_FILES=512 !% !$MAX_INCLUSION_DEPTH=10 !% !$MAX_LABELS=50000 !% !$MAX_INDIV_PROP_TABLE_SIZE=50000 !% !$MAX_STATIC_DATA=20000 !-------------------------------------------- ! Constantes générales !-------------------------------------------- Constant Story "Spoutnik"; Constant Headline "^Une aventure où vous passerez peut-être à deux doigts du goulag.^Par les kamarades SIM54 et Ottolaï Grimwaldievitch.^^"; Release 1; Constant AUTHOR "SIM54 et Ottolaï Grimwaldievitch"; Constant licence = 3; ! = licence CC-BY-SA Constant MAX_CARRIED 8; Constant MAX_SCORE 8; Constant OBJECT_SCORE 1; Constant ROOM_SCORE 1; Global modereplay = 0; #ifdef TARGET_ZCODE; #ifnot; ! TARGET_GLULX; Constant GG_MAPWIN_ROCK 210; Global gg_mapwin = 0; Global musicon = 1; Global gg_musicchan = 0; Constant theme; Constant fin; Constant outro; Global modeimages = 1; #endif; !-------------------------------------------- ! Directives de remplacement !-------------------------------------------- [DeathMessage; print "Vous avez perdu !";]; Replace RestartSub; !-------------------------------------------- ! Attributs !-------------------------------------------- !-------------------------------------------- #Include "Parser"; #Include "VerbLib"; Include "licences-fr"; !#Include "infglk"; !-------------------------------------------- [ PrintRank; print ", vous donnant le rang "; if (score >= 8) "de petit frère des peuples."; if (score > 6) "de contributeur zélé à la gloire du communisme."; if (score > 4) "de crypto-capitaliste."; if (score > 2) "de saboteur capitaliste."; "de vil capitaliste."; ]; ! --------------------------------------------------------------------------- ! Ceci change le comportement du jeu quand on utilise le mot "tout" ! ou un mot ambigu ! --------------------------------------------------------------------------- [ChooseObjects obj code; if (code<2) { if (obj has scenery) return 2; rfalse; } if (action_to_be==##Eat && obj has edible) return 3; if (obj hasnt scenery) return 2; return 1; ]; !-------------------------------------------- ! Variables !-------------------------------------------- !-------------------------------------------- ! Routines ! ------------------------------------------- [Attend; if (modereplay == 0) KeyCharPrimitive(); ]; [Pause; if (modereplay == 0) KeyDelay(40); ]; [Gras; ! style Gras #ifdef TARGET_ZCODE; #ifnot; ! TARGET_GLULX; glk_set_style(style_Emphasized); #endif; ! TARGET_ ]; [Italique; ! Italique #ifdef TARGET_ZCODE; #ifnot; ! TARGET_GLULX; glk_set_style(style_Note); #endif; ! TARGET_ ]; [Normal; ! style normal #ifdef TARGET_ZCODE; #ifnot; ! TARGET_GLULX; glk_set_style(style_Normal); #endif; ! TARGET_ ]; !-------------------------------------------- ! Modèles d'objets (déclarations de classes) !-------------------------------------------- Class Personnage with life [; ! Answer,Ask,Order,Tell: ! print_ret "Utilisez plutôt -parler à-", (the) self, "." ; ], has animate; Class CentreRecherche with before [; Listen: print "Des bruits inquiétants résonnent dans les couloirs et tout le centre de recherche, mais vous ne savez pas identifier précisément leur nature ni leur localisation exacte.^" ; rtrue ; ], has light; !-------------------------------------------- ! Plan des lieux (pièces, portes...) !-------------------------------------------- Object SalleMontage "La salle de montage" class CentreRecherche with description "Vous êtes dans la salle de montage. C'est une grande salle très éclairée, aux murs d'acier. Vous pouvez voir au centre de la pièce la plate-forme d'assemblage, qui vous permettra d'assembler tous les objets nécessaires à la reconstruction du satellite, une fois ceux-ci récupérés. Vous pouvez voir une porte au nord et une autre au sud.", viewed 0, initial [; if (self.viewed == 0) { print "^Ingénieur soviétique, vous devez réparer un petit satellite du nom de Spoutnik. Pour cela, vous devrez trouver six éléments puis les assembler. Il est tard et vous devez vous dépêcher, la fusée va bientôt s'envoler... ~Si vous ne terminez pas à temps~, vous a dit un agent du KGB sur place, ~c'est un aller simple pour la Sibérie, Camarade !~^"; self.viewed = 1 ; rtrue; } ; ], s_to SalleRepos, n_to SalleCafeteria, has light ; Object SalleRepos "La salle de repos" class CentreRecherche with description "Vous voici dans la salle de repos. C'est une salle agréable, avec deux canapés et une table. La salle est illuminée par deux néons. Vous pouvez voir une porte au nord et une autre à l'est.", n_to SalleMontage, e_to SalleToilettes, has light ; Object SalleToilettes "Les toilettes" class CentreRecherche with description "Vous voici dans les toilettes. C'est une grande salle malodorante et avec les murs effrités. Vous pouvez voir une porte à l'ouest.", before [; Smell: "Ça ne sent pas très bon ici..."; ], w_to SalleRepos, out_to SalleRepos, has light ; Object SalleDossiers "La salle des dossiers" class CentreRecherche with description "Vous voici dans la salle des dossiers. C'est une petite salle, avec sur les côtés de nombreuses étagères et une grande table au centre. Vous pouvez voir une porte au sud, et une autre à l'est.", s_to SalleHall, e_to SalleInfo, has light ; Object SalleCafeteria "La cafétéria" class CentreRecherche with description "Vous voici dans la cafétéria. C'est une salle peu lumineuse et remplie de tables et de chaises empilées. La salle n'est plus utilisée depuis longtemps. Vous pouvez voir une porte au nord et une porte au sud.", n_to SalleHall, s_to SalleMontage, has light ; Object SalleHall "Le hall d'entrée" class CentreRecherche with description "Vous voici dans le hall d'entrée. Ce hall d'entrée est très simple, il est simplement composé d'une lumière au plafond, de murs rouges et d'affiches collées sur les murs. Vous pouvez voir une porte à l'ouest, une autre au nord et encore une autre au sud.", w_to SalleGardes, n_to SalleDossiers, s_to SalleCafeteria, has light ; Object SalleGardes "La salle des gardes" class CentreRecherche with description "Vous voici dans la salle des gardes. C'est une petite salle avec une table et deux chaises, ainsi que deux affiches sur le mur. Vous pouvez voir une porte au nord, et une autre à l'est.", e_to SalleHall, n_to SalleCompteurs, has light ; Object SalleCompteurs "La salle des compteurs" class CentreRecherche with description "Vous voici dans la salle des compteurs. C'est une salle très simple. Vous pouvez voir une porte au sud.", s_to SalleGardes, out_to SalleGardes, has light ; Object SalleInfo "La salle informatique" class CentreRecherche with description "Vous voici dans la salle informatique. C'est une grande salle, l'ordinateur en occupe les trois quarts. Il s'agit d'un ordinateur gigantesque cadencé à 5,07 Mhz, équipé d'un écran monochrome dernier cri, avec l'inscription ~MONITOR 9000~ en dessous de l'affichage digital. L'ordinateur semble effectuer automatiquement une série de calculs importants, sûrement pour le lancement de la fusée. Vous pouvez voir une porte à l'ouest.", w_to SalleDossiers, out_to SalleDossiers, has light ; ! -------------------------------------------- ! Le joueur Object heros "moi" SalleMontage with short_name [; return L__M(##Miscellany, 18);], description "Moi.", before [; Attack, Cut : if (actor == player) { "Vous tenez encore à la vie."; } Tell: "Vous ne savez pas quoi dire."; ], after NULL, life NULL, time_left 0, time_out [; deadflag=3; print "Vous n'avez pas terminé le satellite à temps ! Et déjà vous entendez les pas lourds des agents du KGB qui viennent vous chercher...^^" ; rtrue ; ], describe NULL, capacity 100, parse_name 0, has concealed animate proper transparent; !-------------------------------------------- ! NPCs !-------------------------------------------- Personnage Homme "homme" SalleGardes with name 'homme' 'garde', description "Un garde de la fière armée rouge.", times_spoken_to 0, ! pour compter les sujets de conversation life [; Attack: print "Vous frappez l'homme, qui encaisse les coups sans broncher, mais ressort rapidement de la pièce.^"; deadflag=3; print "Quelques instants plus tard, vous entendez les agents du KGB qui viennent vous chercher...^^" ; rtrue ; Parler: self.times_spoken_to = self.times_spoken_to + 1; switch (self.times_spoken_to) { 1: print_ret "~Tu ferais mieux de retourner à ton travail Camarade.~."; 2: print "Rien à dire de plus^" ;rtrue ; default: return false;} ;] has male ; !-------------------------------------------- ! Objets du décor !-------------------------------------------- Object murs "murs" with description "Des murs sales et gris.", before [; Attack: print "Vous frapper un des murs, et vous vous faites mal d'une façon particulièrement stupide.^" ; rtrue ; Push: print "Vous poussez sur les murs, mais ceux-ci ne bougent pas d'un millimètre.^" ; rtrue ; Pull: print "Vous ne pouvez pas.^" ; rtrue ; ; ], name 'murs' 'mur', found_in SalleMontage SalleRepos SalleToilettes SalleDossiers SalleCafeteria SalleHall SalleGardes SalleCompteurs SalleInfo, has scenery; Object plateforme "plate-forme" with description "La plate-forme est une structure en métal ancrée dans le sol, avec des casiers montés dans la structure. Il y a pas mal de désordre dedans. ", before [; Attack: print "C'est indestructible, tout comme peut l'être la vaillance du paysan-soldat soviétique voué à la cause du prolétariat.^" ; rtrue ; Push,Pull: print "Vous ne pouvez pas, c'est une structure en métal et tout est soudé et solidaire comme peuvent l'être les camarades de l'Internationale Communiste dans le monde entier.^" ; rtrue ; Search,LookUnder: <>; ; ], name 'plate-forme' 'plate' 'forme' 'plateforme' 'structure', found_in SalleMontage, has scenery supporter female; Object casiers "casiers" SalleMontage with description "Il y a pas mal de désordre dans ces casiers. ", before [; Search,LookUnder: if (radio in self) { move radio to location ; print "Il n'y a rien d'intéressant là-dedans, c'est remplis d'objets cassés et inutiles, par contre vous trouvez quand même une radio qui semble encore un peu en état.^"; rtrue ; } else print "Vous ne trouvez rien d'autres ici."; ; ], name 'casier' 'casiers' 'desordre', has scenery pluralname; Object spoutnik "spoutnik" with description "Un satellite issu du génie slave.", before [; Attack: print "Allons, vous ne voulez pas vous faire accuser de sabotage non ?^" ; rtrue ; Push, Pull: print "Vous ne pouvez pas.^" ; rtrue ; ; ], name 'satellite' 'spoutnik', found_in SalleMontage, has scenery supporter; Object canape "canapé" with description "Un canapé qui semble confortable, mais en fait ses ressorts sont un peu usés.", before [; Attack: print "C'est trop mou pour être abimé.^" ; rtrue ; !Enter: print "Vous pensez avoir mérité un petit somme, mais le temps presse et il ne faut pas vous laissez distraire.^" ; rtrue ; Search: if (ressort in canape) { move ressort to location ; print "En tâtant la surface d'un canapé élimé, vous sentez un ressort qui commence à dépasser, et soudain celui-ci vous saute à la figure, le canapé s'étant un peu déchiré sous la pression !^"; rtrue ; } else "Vous ne trouvez rien d'autre." ; ; ], name 'canape' 'canapes' 'sofa', found_in SalleRepos, has scenery enterable; Object table "table" with description "Une table.", before [; Search: print "Il n'y a rien de remarquable sur cette table.^" ; rtrue ; ], name 'table' 'tables', found_in SalleRepos SalleDossiers SalleCafeteria SalleGardes, has female scenery ; Object chaise "chaise" with description "Une chaise.", before [; Search: print "Il n'y a rien de remarquable ici.^" ; rtrue ; ], name 'chaise' 'chaises', found_in SalleCafeteria SalleGardes, has female scenery ; Object neons "néons" with description "Des néons qui s'éteignent brièvement par intermitence, et diffusent une lumière oppressante lorsqu'ils fonctionnent.", before [; Take, Push, Pull,Attack: print "Ils sont hors de portée.^" ; rtrue ; ; ], name 'neons' 'neon' 'lumiere' 'lumieres', found_in SalleRepos SalleHall, has pluralname scenery ; Object dossiers "dossiers" with description "Des dossiers secrets.", before [; Take, Push, Pull,Search,Attack: print "Tout ici est Secret Defense. Vous voulez vraiment finir dans une charachka en Sibérie ?^" ; rtrue ; ; ], name 'dossier' 'dossiers' 'papier' 'papiers' 'documents' 'document' 'archives' 'archive', found_in SalleDossiers, has pluralname scenery ; Object etageres "étagères" with description "Des étagères, supportant le poids des archives de la base.", searched 0, before [; Take, Push, Pull: print "Tout dans cette pièce est Secret defense. Vous voulez vraiment finir en Sibérie ?^" ; rtrue ; Search: if (self.searched == 0) {print "Il y a une antenne sur une des étagères, à moitié cachée par des documents confidentiels dont vous n'osez pas lire la teneur.^" ; move antenne to etageres ; self.searched = 1 ; rtrue ;} else rfalse ; ; ], name 'etagere' 'etageres', found_in SalleDossiers, has female pluralname scenery supporter ; Object affiche1 "affiche" with description "Une affiche d'information. Les lettres en rouge signifient ~Le monde a besoin des scientifiques tout comme les scientifiques ont besoin du monde !~^Avec un groupe d'homme et de femmes de science sur un fond champêtre, entouré par des danseuses et des ouvriers.", before [; Take, Push, Pull: print "Vous n'avez pas besoin de cela avec vous.^" ; rtrue ; ; ], name 'affiche' 'affiches', found_in SalleHall, has female scenery ; Object affiche2 "affiche" with description "C'est une affiche d'information. Les lettres en rouge signifient ~Pour un partage équitable des richesses !~^Avec une photo de Staline et des membres du Komintern en train de distribuer la soupe populaire. La seconde affiche est la même, mais avec Lénine à la place.", before [; Take, Push, Pull: print "Vous n'avez pas besoin de cela avec vous.^" ; rtrue ; ; ], name 'affiche' 'affiches', found_in SalleGardes, has female scenery ; Object ordinateur "ordinateur" with description "Un ordinateur issu du génie slave, faisant tourner une distribution Linux locale, Krasny Chapka. Il est très gros, mais seule une partie semble accessible, fermée par un capot.", before [; Attack, SwitchOff: print "Allons, vous ne voulez quand même pas qu'ils vous accusent de sabotage ?^" ; rtrue ; Push,Pull: print "Vous ne pouvez pas.^" ; rtrue ; Open: if (calculette in self) { print "Il ne serait pas prudent d'arrêter l'ordinateur, mais en ouvrant doucement le capot frontal vous devriez peut-être pouvoir retirer des composants qui ne servent plus. Ah ben ça par exemple ! Après une rapide exploration des entrailles, vous retrouvez justement à l'intérieur de la machine une calculatrice qu'avait perdu votre kamarade Aleksei il y a quelques années. Ces calculatrices ont l'avantage de posséder une pile au plutonium qui rendent leur autonomie quasi-illimitée dans le temps. Espérons que les radiations n'auront pas perturbé le brave ordinateur !^"; move calculette to location ; rtrue ; } else "Il n'y a rien d'autre à trouver ici."; Search: "L'ordinateur forme un seul bloc, il n'y a pas de recoin où chercher. Néanmoins, il doit être possible de le désosser ou de l'ouvrir."; ], name 'ordinateur' 'Monitor' '9000' 'capot' 'machine', found_in SalleInfo, has scenery ; Object moniteur "moniteur" with description "Les chiffres qui défilent sur l'écran, ainsi que la lumière verte rémanente des pixels, vous trouvez cela fascinant, et vous passez un peu de temps à admirer tout cela. Pour le reste, et bien c'est juste un moniteur poussiéreux et peu intéressant, fixé sur une tablette mobile reposant sur l'ordinateur.", before [; Attack, SwitchOff: print "Allons, vous ne voulez quand même pas qu'ils vous accusent de sabotage ?^" ; rtrue ; Push,Pull: print "Vous déplacez un peu l'écran sur la surface de la machine, il semble monté sur une tablette avec un roulement à billes.^" ; rtrue ; Open: print "Au point où il en est, il risquerait d'imploser.^"; rtrue ; LookUnder: << search self >>; Search: if (bouleMetal in self) { print "Tandis que vous tripotez ce moniteur, un des gros roulements sous la tablette se détache et tombe sur le sol avec un gros ~plop~.^"; move BouleMetal to location ; rtrue ; } else "Il n'y a rien d'autre à trouver ici."; ], name 'ecran' 'moniteur' 'affichage' 'digital' 'tablette' 'roulement' 'roulement a bille', found_in SalleInfo, has scenery ; !-------------------------------------------- ! Objets déplaçables !-------------------------------------------- Object plan "plan" SalleMontage with description "Un plan représentant le satellite une fois terminé. Vous voyez qu'il manque un ressort, une radio, une boule, une calculette, une antenne et une batterie pour que le satellite soit complet et fonctionnel.", before [; Attack: remove self ; print "Vous déchirez le plan. Comment allez-vous faire sans celui-ci ? À moins que vous ne vous reposiez sur votre bonne mémoire...^" ; rtrue ; ; ], name 'plan' 'montage' 'carte', has ; Object batterie "batterie" SalleCompteurs with description "Une batterie.", before [; Attack: remove self ; print "Vous frappez la batterie, ce qui renverse l'acide qui est à l'intérieur et la fait exploser en morceaux." ; deadflag=1; print " Vous terminez votre aventure ici." ; rtrue ; ; ], name 'batterie', has female scored; Object compteurs "compteurs" SalleCompteurs with description "Des compteurs.", before [; ; ], name 'compteurs' 'compteur', has pluralname static; Object antenne "antenne" with description "Une antenne.", before [; ; ], name 'antenne', has female scored; Object radio "radio" casiers with description "Une radio.", before [ ; Attack: print "Les saboteurs sont mal vus ici, aussi vous vous abstenez de détruire le matériel du peuple soviétique." ; rtrue ; SwitchOn: give self on ; !give Couloir_b1 light; "Vous allumez la radio."; SwitchOff: give self ~on ; !give Couloir_b3 ~light; "Vous éteignez la radio."; ; ], react_before [ kamarade; Listen: if (self has on) { switch(random(6)) { 1: kamarade = "Staline"; 2: kamarade = "Lénine"; 3: kamarade = "Trop d'Ski"; 4: kamarade = "Brejnev"; 5: kamarade = "Kalinine"; 6: kamarade = "Khrouchtchev"; } print "La radio diffuse des émissions de divertissements à la gloire du Camarade ", (string) kamarade, ".^" ; } else print "La radio est éteinte.^" ; rtrue ; ; ], name 'radio', has female scored switchable ~on; Object bouleMetal "boule de métal" Moniteur with description "Une boule de métal.", before [; Attack: print "Impossible, c'est trop solide." ; rtrue ; ; ], name 'boule' 'metal' 'roulement' 'bille', has female scored; Object calculette "calculette" ordinateur with description "Une calculette.", before [; Attack: print "Impossible, c'est trop solide." ; rtrue ; Open: "Déjà qu'il y a sans doute des radiations de la pile au plutonium qui fuient de ce vieil appareil, si vous l'ouvrez sans équipement spécial, cela sera encore plus dangereux."; ; ], name 'calculette' 'calculatrice', has female scored; Object ressort "ressort" canape with description "Un ressort.", before [; Attack: print "Votre coup se retourne contre vous, voilà ce que c'est que d'attaquer un ressort." ; rtrue ; Push: print "Vous appuyez sur le ressort, il se tend.^" ; rtrue ; Pull: print "Vous appuyez sur le ressort, il se détend.^" ; rtrue ; ; ], name 'ressort', has scored; !-------------------------------------------- ! Code !-------------------------------------------- #ifdef TARGET_ZCODE; #ifnot; ! TARGET_GLULX; [ InitGlkWindow winrock; switch (winrock) { GG_MAINWIN_ROCK: } rfalse; ! leaving out this line will lead to a messy crash! ]; #endif; ! TARGET_ [Initialise; location=SalleMontage; lookmode = 2; ! mode long ChangePlayer(heros); StartTimer(heros, 60); #ifdef TARGET_ZCODE; #ifnot; ! TARGET_GLULX; glk_window_clear(gg_mainwin); glk_image_draw(gg_mainwin,2,imagealign_InlineCenter, 1); ! Splash screen Musique_intro(); attend(); glk_window_clear(gg_mainwin); gg_mapwin = glk_window_open(gg_mainwin, (winmethod_Left+winmethod_Fixed),100, wintype_Graphics, GG_MAPWIN_ROCK); glk_image_draw(gg_mapwin,1, 0, 0); ! marge motif #endif; ! TARGET_ ]; !-------------------------------------------- #Include "FrenchG"; !-------------------------------------------- !-------------------------------------------- ! Verbes (extension de FrenchG.h) !-------------------------------------------- [MusicPlaySub topic; #ifdef TARGET_ZCODE; print "Pas de musique dans cette version."; #ifnot; ! TARGET_GLULX; gg_musicchan = glk_schannel_destroy(gg_musicchan); switch (topic) { theme : gg_musicchan = glk_schannel_create(0); glk_schannel_play_ext(gg_musicchan, 1, 1, 0); outro : gg_musicchan = glk_schannel_create(0); glk_schannel_play_ext(gg_musicchan, 3, 1, 0); } print_ret "morceaux disponibles : ~musique~ + theme, outro ..."; #endif; ! TARGET_ ]; [MusicOffSub; #ifdef TARGET_ZCODE; #ifnot; ! TARGET_GLULX; if (musicon == 1) musicon = 0; print "[la musique est désactivée]^"; rtrue ; !else musicon = 1; #endif; ]; [MusicOnSub; #ifdef TARGET_ZCODE; #ifnot; ! TARGET_GLULX; if (musicon == 0) musicon = 1; print "[la musique est activée]^"; rtrue ; #endif; ]; [Musique_intro; #ifdef TARGET_ZCODE; #ifnot; ! TARGET_GLULX; if (musicon == 1) { gg_musicchan = glk_schannel_destroy(gg_musicchan); gg_musicchan = glk_schannel_create(0); glk_schannel_play_ext(gg_musicchan, 100, 1, 0); ! musique intro } #endif; ]; [MusicStopSub; #ifdef TARGET_ZCODE; #ifnot; ! TARGET_GLULX; gg_musicchan = glk_schannel_destroy(gg_musicchan); #endif; ! TARGET_ ]; [ParlerSub; if (noun == player) print_ret "Cela ne vous étonne pas d'apprendre cela."; if (RunLife(noun,##Parler) ~= false) return; ! consult life[; Parler: ] print_ret " Vous ne savez pas quoi dire."; ]; [AideSub; print_ret "Pour réaliser une action ou vous déplacez, il suffira de taper vos instructions, par exemple : aller nord, aller sud, prendre radio, fouiller objet, prendre clé... Pour terminez le jeu, vous devez donc récupérez six objets, en une trentaine de tours seulement. Une fois tous les objets réunis, vous devrez allez dans la salle de montage puis taper la commande suivante : assembler les objets. ^^ Bonne chance !"; ]; Extend 'parler' replace * 'aux'/'a'/'à'/'au'/'avec' creature -> Parler * creature -> Parler * 'à'/'a'/'au'/'aux'/'avec' creature 'de'/'du'/'des'/'l^' topic -> Tell * creature 'de'/'du'/'des'/'l^' topic -> Tell * creature topic -> Tell; Verb "aide" "astuces" "solution" * -> aide; Verb "load" * -> Restore; Verb "Restore" * -> Restore; Verb "Dechirer" * noun -> Attack; Verb 'music' 'musique' * -> MusicStop * 'stop' -> MusicStop * 'off' -> MusicOff * 'on' -> MusicOn * topic -> MusicPlay; Verb 'assembler' 'assemble' * -> Assemble * 'tout' -> Assemble * 'objets' / 'ressort' / 'radio' / 'boule' / 'calculette' / 'antenne' / 'batterie' / 'spoutnik' / 'satellite' / 'le satellite' -> Assemble * 'les' 'objets' -> Assemble; [AssembleSub; if (player in SalleMontage) { if ((batterie in player || batterie in spoutnik) && (ressort in player || ressort in spoutnik) && (radio in player || radio in spoutnik) && (bouleMetal in player || bouleMetal in spoutnik) && (calculette in player || calculette in spoutnik) && (antenne in player || antenne in spoutnik)) { score=score+2; deadflag = 2; print "Vous prenez un à un tous les objets collectés dans la base, et vous travaillez sur la réalisation de ce que vous ont ordonné vos supérieurs. Au bout d'un moment, vous avez terminé le satellite ! Déjà vous entendez les cris de joie de vos collègues et vous recevez les félicitations de votre chef ! ^" ;rtrue ;} else "Il vous manque encore quelques pièces." ; } else "Vous ne pouvez pas assembler le satellite ici." ; ]; [ RestartSub; L__M(##Restart,1); if (YesOrNo() ~= 0) { #ifdef TARGET_ZCODE; #ifnot; ! TARGET_GLULX; ; ! pour arrêter la musique if (modeimages ~= 0) { glk_window_close(gg_mapwin,0);} ! modeimages = 1 ; #endif; ! TARGET_ @restart; L__M(##Restart, 2); } ]; Extend 'recommencer' replace * -> Restart; [AttendreSub; "Et le temps passe..." ; ]; Extend 'attendre' replace * -> Attendre; Verb 'desosser' = 'ouvrir'; ! todo : faire verbe info et credit