Release 4; Serial "000918"; ! ********************************************************* ! * * ! * WIZARD'S CASTLE GAME FROM JULY/AUGUST 1980 * ! * ISSUE OF RECREATIONAL COMPUTING MAGAZINE * ! * WRITTEN FOR EXIDY SORCEROR BY JOSEPH R. POWER * ! * MODIFIED FOR HEATH MICROSOFT BASIC BY J. F. STETSON * ! * REWRITTEN FOR GRAHAM NELSON'S INFORM BY ADAM * ! * BILTCLIFFE WITH HELP FROM THE FOLKS ON IFMUD * ! * * ! * You may distribute this in any way provided its * ! * origin remains accurately represented. * ! * * ! ********************************************************* Global mode; Constant classic 1; Constant normal 2; Constant stats 3; Constant map 4; Global deadflag; Global mapok; ! Ok for statusline to display the map Array caps_array -> 1300; ! For printing to while capitalising stuff ! May need enlarging if any blocks of really ! big text are added (at the moment, the largest ! is the mode select screen) Array input -> 4; Array level -> 512; Array map_symbols -> '?' '.' 'E' 'H' 'B' 'S' 'C' 'R' 'F' 'W' 'P' 'O' 'L' 'M' 'M' 'M' 'M' 'M' 'M' 'M' 'M' 'M' 'M' 'M' 'M' 'V' 'T' 'T' 'T' 'T' 'T' 'T' 'T' 'T'; Array map_names --> "ERREUR" " salle vide" " entrée" " escalier montant" " escalier descendant" " source" " coffre" " pieces d'or" " fusées de signalisation" " Orbe de déformation" " puit" " orbe de cristal" " livre" " kobold" " orc" " loup" " goblin" " ogre" " troll" " ours" " minotaur" " gargoyle" " fantôme" " balrog" " dragon" " vendeur" " rubis rouge" " pierre précieuse" " perle pâle" " opaline" " gemme verte" " flamme bleue" " palantir" " silmaril"; Array map_articles --> "UNE " "une" "une" "" "" "la" "un" "" "" "une" "un" "une" "un" "un" "un " "un" "un" "un" "un" "un" "un" "une" "un" "un" "un" "un" "un" "une" "une" "une" "une" "une" "une" "une"; Array race_names --> "hobbit" "elf" "humain" "nain"; Array race_articles --> "un " "un " "un " "un "; Array weapon_names --> "rien" "dague" "mace" "épée"; Array armor_names --> "rien" "cuir" "côte de mail" "platine"; Array food_names --> " sandwich" " ragoût" " à la soupe" " hamburger" " rôti" " filet" " tacos" " à la tarte"; Array treasures_collected -> 8; ! Remember each treasure number is 1 less Class Artifact with x, y, z, found 0; Class Curse with x, y, z, active 0; Artifact orb; Artifact runestaff; Curse lethargy; Curse leech; Curse forgetting; Object found_room with x, y, z; ! Communication Object player with x, y, z, st, iq, dx, freepts, lamp, flares, gold, treasures, race, sex, turns, vendorenemy, stickybook, blind, armorclass, armorhealth, weaponclass, justteleported, lastmeal; ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= ! 'Utility' functions [ Wrap q; if (q==0) return 8; if (q==9) return 1; return q; ]; [ Limit q; if (q>18) return 18; return q; ]; [ Cellnum x y z; return ((z-1)*64) + ((y-1)*8) + (x-1); ]; [ Contents q; if (q>99) return q-100; return q; ]; [ RndRoom; found_room.x=random(8); found_room.y=random(8); found_room.z=random(8); ]; [ RndEmptyRoom rx ry rz; do { rx=random(8); ry=random(8); rz=random(8); } until (level->Cellnum(rx, ry, rz)==101); found_room.x=rx; found_room.y=ry; found_room.z=rz; ]; [ RndEmptyRoomLev rz rx ry; do { rx=random(8); ry=random(8); } until (level->Cellnum(rx, ry, rz)==101); found_room.x=rx; found_room.y=ry; found_room.z=rz; ]; ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= [ GetInput n; if (n~=2) n=1; input->0=n; if (mode==stats&&(0->33)>39) { read input 0 StatusLine; } else { if (mode==map&&(0->33)>29) { read input 0 MapLine; } else { read input 0; } } if (input->1) { for (n=2:n<=((input->1)+1):n++) { if (input->n>=97&&input->n<=122) input->n=(input->n)-32; } if (input->1==1) input->3=0; } else { input->2=0; input->3=0; } ]; [ AscToDgt i; if (i>=48&&i<=57) return i-48; return -1; ]; [ GetNumber; GetInput(2); if (AscToDgt(input->2)==-1) rfalse; if (AscToDgt(input->3)==-1) { ! One digit return AscToDgt(input->2); } else { return (AscToDgt(input->2)*10)+AscToDgt(input->3); } ]; [ GetCoord n; do { n=GetNumber(); if (n<=0||n>=9) print (sbold) "^** Tentez un numéro de 1 à 8. "; } until (n>0&&n<9); return n; ]; [ YesNo ans; ans=-1; do { GetInput(1); switch (input->2) { 'O': ans=1; 'N': ans=0; default: print (sbold) "^** Répondez s'il vous plaît par Oui(O) ou par Non(N)! "; } } until (ans~=-1); return ans; ]; ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= [ Main quitflag; GetMode(); quitflag=0; TitleScreen(); do { GenerateDungeon(); InitPlayer(); Play(); print (srom) "^Etes vous assez idiot pour vouloir jouer de nouveau? "; if (YesNo()) { print (srom) "^Certains ", (srom) race_names-->(player.race-1), (srom) "n'apprennent jamais !^^Patientez s'il vous plaît, le château se recharge.^"; } else quitflag=1; } until (quitflag==1); print (srom) "^peut-être bête ", (srom) race_names-->(player.race-1), (srom) " n'est pas si bête après tout!^^"; ]; ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= [ GetMode; mode=0; do { @erase_window -1; print (sund) "^Le château du Magicien", (srom) " jeu de July/August sorti en 1980 ", (sund) "Divertissement Informatique", (srom) " magazine^^Écrit pour Exidy Sorceror par ", (sbold) "Joseph R. Power", (srom) "^^Modifié en Heath Microsoft BASIC par ", (sbold) "J. F. Stetson", (srom) "^^Reécrit par ", (sbold) "Graham Nelson", (srom) "en language Inform par ", (sbold) "Adam Biltcliffe", (srom) " avec l'aide des personnes faisant partie de ", (sund) "ifMUD", (srom) ".^^"; ! Some people may claim I went overboard with the use of bold and ! underline. Well, sue me =P print (srom) "Voulez-vous jouer en mode Classique, mode Normal, mode Statistique où mode Cartographe?^^Mode Classique se rapproche le plus possible au texte original, Incluant typos et laideur diverse. Si vous n'avez pas de nostalgie des déplacement, le mode Normal contient moins de typos et présente quelques choses (comme le résumé de jeu final) dans une voie légèrement plus propre. Mode Statistique est similaire au mode normal, mais utilise la ligne de statut pour afficher vos attributs et équipement au lieu de les montrer au début de chaque tour. Mode Cartographe (mode 'm'ap) utilise la ligne de statut pour afficher une carte du niveau du dungeon actuel.^^ L'autre différence notable est dans le système de coordonnée. Dans le jeu original, l'axe 'x' était l'axe vertical, et l'axe 'y' l'axe horizontal. Toutes les nouvelles versions utilisent les axes normalement acceptés. Ces manifestes changement sont seulement dans l'affichage des coordonnées et dans le téléport, ainsi la seule chose à tenir compte est que n'importe quel mode dans lequel vous jouez, vous avez simplement besoin d'entrer les coordonnées quand vous voulez vous téléporter dans le même ordre qu'ils sont imprimés.^^Tapez C, N, S où M pour sélectionner le mode dans lequel vous voulez jouer: "; GetInput(1); switch(input->2) { 'C': mode=classic; 'N': mode=normal; 'S': mode=stats; 'M': mode=map; } } until (mode); if (mode==classic) { race_articles-->1="un "; weapon_names-->0="aucune arme"; armor_names-->0="aucune armure"; } ]; ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= [ TitleScreen; @erase_window -1; if (mode==stats) print (srom) "^^^^^^"; ! Otherwise the statusline overwrites it if (mode==map) print (srom) "^^^^^^^^"; stars(); print (sbold) "^ * * * LE CHÂTEAU DU MAGICIEN * * * ^"; stars(); print (srom) "^Depuis fort longtemps, dans le royaume de N'Dic, Le gnome magicien Zot a forgé sa grande ", (sund) "Orbe de Puissance", (srom) ". Il disparût bientôt, dans le souterrain de son énorme château rempli de monstres vorace, de fabuleux trésors et l'incroyable ", (sund) "Orbe de Zot", (srom) ". Depuis ce temps-là, beaucoup de jeune homme hardi s'est aventuré dans le château du Magicien. A ce jour, ", (sbold) "aucun", (srom) " n'a jamais réapparu victorieux! Prenez garde!!^"; ]; [ GenerateDungeon; mapok=0; EmptyLevel(); PlaceStairs(); PlaceThings(); PlaceTreasures(); PlaceArtifacts(); PlaceCurses(); ]; [ EmptyLevel i; for (i=0:i<512:i++) { level->i=101; } level->3=102; ]; [ PlaceStairs lindex i; for (lindex=1:lindex<8:lindex++) { for (i=1:i<3:i++) { RndEmptyRoomLev(lindex); level->Cellnum(found_room.x, found_room.y, lindex)=104; ! Down level->Cellnum(found_room.x, found_room.y, lindex+1)=103; ! Up } } ]; [ PlaceThings lindex i j; for (lindex=1:lindex<=8:lindex++) { ! place monsters for (i=13:i<=24:i++) { RndEmptyRoomLev(lindex); level->Cellnum(found_room.x, found_room.y, lindex)=i+100; } ! place features for (i=105:i<=112:i++) { for (j=0:j<3:j++) { RndEmptyRoomLev(lindex); level->Cellnum(found_room.x, found_room.y, lindex)=i; } } ! place vendors for (j=0:j<3:j++) { RndEmptyRoomLev(lindex); level->Cellnum(found_room.x, found_room.y, lindex)=125; } } ]; [ PlaceTreasures i; for (i=126:i<=133:i++) { RndEmptyRoom(); level->Cellnum(found_room.x, found_room.y, found_room.z)=i; (treasures_collected->(i-126))=0; } ]; [ PlaceArtifacts i; objectloop(i ofclass Artifact) { RndEmptyRoom(); i.x=found_room.x; i.y=found_room.y; i.z=found_room.z; i.found=0; } level->Cellnum(runestaff.x, runestaff.y, runestaff.z)=random(12)+112; level->Cellnum(orb.x, orb.y, orb.z)=109; ]; [ PlaceCurses i; objectloop(i ofclass Curse) { RndEmptyRoom(); i.x=found_room.x; i.y=found_room.y; i.z=found_room.z; i.active=0; } ]; [ InitPlayer i ptoadd stat ok rmonster; player.freepts=8; player.race=0; player.gold=0; player.flares=0; player.st=0; player.dx=0; ! These need to be zeroed now if in stats mode player.iq=0; player.treasures=0; player.weaponclass=0; player.armorclass=0; player.lamp=0; print (srom) "^Bien, aventurier.^"; do { print (srom) "Vous pouvez être un elf(E), nain(N), humain(M) où un hobbit(H).^^Votre choix? "; GetInput(1); switch(input->2) { 'E': player.race=2; player.st=6; player.dx=10; 'N': player.race=4; player.st=10; player.dx=6; 'M': player.race=3; player.st=8; player.dx=8; 'H': player.race=1; player.st=4; player.dx=12; player.freepts=4; default: print (sbold) "^** Réponse incorrecte. S'il vous plaît tapez E, N, M où H.^"; } } until (player.race); player.iq=8; player.sex=-1; ! 0 is male, 1 is female; new_line; do { print (srom) "De quel sexe "; if (mode==classic) print (srom) "est"; else print (srom) "fait partie"; print (srom) " votre personnage? "; GetInput(1); switch(input->2) { 'M': player.sex=0; 'F': player.sex=1; default: print (sbold) "** Mignon, ", (sbold) race_names-->(player.race-1), (sbold) ", vraiment mignon. Tapez M où F.^"; } } until (player.sex~=-1); if (mode==stats) { print (srom) "^Ok, ", (srom) race_names-->(player.race-1), (srom) ", vous avez ", (nrom) player.freepts, (srom) " points à répartir dans vos stats comme vous le souhaitez.^^"; } else { print (srom) "^Ok, ", (srom) race_names-->(player.race-1), (srom) ", Vous avez les attributs suivants:^Force = ", (nrom) player.st, (srom) " Intelligence = ", (nrom) player.iq, (srom) " Dextérité = ", (nrom) player.dx, (srom) "^et ", (nrom) player.freepts, (srom) " autres points à répartir comme vous le souhaitez.^^"; } for (i=0:i<3:i++) { if (player.freepts) { ok=0; do { switch (i) { 0: stat=st; 1: stat=iq; 2: stat=dx; } print (srom) "Combien de points vous voulez ajouter à votre ", (statname) stat, (srom) "? "; ptoadd=GetNumber(); ! At present entering -1 here is treated as 0; if (ptoadd<=player.freepts) { (player.stat)=(player.stat)+ptoadd; (player.freepts)=(player.freepts)-ptoadd; ok=1; } else { print (sbold) "^** "; } } until (ok==1); } } player.gold=60; print (srom) "^Ok, ", (srom) race_names-->(player.race-1), (srom) ", vous avez 60 pieces d'or.^"; player.armorclass=-1; do { print (srom) "Voici les types d'armure que vous pouvez acheter:^ Platine(P)= 30, Côte de mail(M)= 20, Cuir(C)= 10, Rien(R)= 0^^ Votre choix? "; GetInput(1); switch(input->2) { 'P': player.armorclass=3; 'M': player.armorclass=2; 'C': player.armorclass=1; 'R': player.armorclass=0; default: rmonster=random(12)+12; print (sbold) "^** Etes vous ", (sbold) race_articles-->(player.race-1), (sbold) race_names-->(player.race-1), (sbold) " où ", (sbold) map_articles-->(rmonster), (sbold) map_names-->(rmonster), (sbold) "?^^"; } } until (player.armorclass>=0); player.gold=player.gold-(player.armorclass*10); player.armorhealth=(player.armorclass*7); print (srom) "^Ok, aventurier ", (srom) race_names-->(player.race-1), (srom) ", vous avez ", (nrom) player.gold, (srom) " pièces d'or.^"; player.weaponclass=-1; do { print (srom) "Voici les types d'armes que vous pouvez acheter:^ Epée(E)= 30, Mace(M)= 20, Dague(D)= 10, Rien(R)= 0^^ Votre choix? "; GetInput(1); switch(input->2) { 'E': player.weaponclass=3; 'M': player.weaponclass=2; 'D': player.weaponclass=1; 'R': player.weaponclass=0; default: print (sbold) "^** Est vraiment votre QI ", (nbold) player.iq, (sbold) "?^^"; } } until (player.weaponclass>=0); player.gold=player.gold-(player.weaponclass*10); player.lamp=0; player.flares=0; if (player.gold>=20) { print (srom) "^Vous voulez acheter une lampe pour 20 pièces d'or? "; if (YesNo()) { player.lamp=1; player.gold=player.gold-20; } } if (player.gold) { ok=0; print (srom) "^Ok, ", (srom) race_names-->(player.race-1), (srom) ", vous avez ", (nrom) player.gold, (srom) " pieces d'or.^"; do { print (srom) "^Les fusées de signalisation coûtent une pièce d'or chacune. Combien vous en voulez? "; player.flares=GetNumber(); if (player.flares<=player.gold) { ok=1; player.gold=player.gold-player.flares; } else { print (sbold) "^** Vous pouvez vous permettre seulement ", (nbold) player.gold, (sbold) ".^"; } } until (ok==1); } player.x=4; player.y=1; player.z=1; player.turns=1; player.vendorenemy=0; player.blind=0; player.stickybook=0; player.justteleported=0; player.lastmeal=0; print (srom) "^Ok, ", (srom) race_names-->(player.race-1), (srom) ", Vous êtes maintenant ", (sbold) "entré dans le château!^"; mapok=1; ]; ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= [ Play i; deadflag=0; NewRoom(); while (deadflag==0) { player.turns=player.turns+1; UpdateCurses(); if (random(5)==1) FlavourText(); TreasureEffects(); print (srom) "^Entrez votre commande : "; GetInput(2); switch(input->2) { 'N', 'S', 'E', 'O': Move(); 'H': Stairs(); 'B': if (input->3=='O') Drink(); else Stairs(); 'M': PrintMap(); 'F': Flare(); 'L': UseLamp(); 'V': Open(); 'R': Gaze(); 'T': Teleport(); 'Q': print (srom) "^Voulez-vous vraiment quitter maintenant? "; if (YesNo()) deadflag=3; else { print (sbold) "^** Ne dites pas ça alors que vous le faites!^"; } 'A': PrintHelp(); default: print (sbold) "^** Innocent ", (sbold) race_names-->(player.race-1), (sbold) ", ce n'est pas une commande valide!^"; } } switch (deadflag) { 1: stars(); print (srom) "^Avec un dernier noble effort, oh vivant d'autrefois ", (srom) race_names-->(player.race-1), (srom) "!^^Vous mourrez en raison du manque "; if (player.st<1) print (srom) "de force"; if (player.iq<1) print (srom) "d'intelligence"; if (player.dx<1) print (srom) "de dextérité"; print (srom) ".^^Au moment de votre mort, vous avez:^"; 2, 3: if (deadflag==2) { print (srom) "^Vous laissez le château avec"; if (~~orb.found) print (srom) "dehors"; print (srom) " une ", (sund) "Orbe de Zot", (srom) ".^"; } if (orb.found&&deadflag==2) { print (sbold) "^Une victoire incroyablement glorieuse!!^"; print (srom) "^De plus, vous êtes sortis avec:^"; } else { if (mode==classic||deadflag==2) { print (srom) "^Quand vous quittez le château, vous avez:^"; } else { print (srom) "^A ce point du jeu ou vous quittez, vous avez:^"; } } print (srom) "Votre misérable vie!^"; } for (i=0:i<8:i++) { if (treasures_collected->i) { print (srom) map_articles-->(i+26), (srom) map_names-->(i+26), (srom) "^"; } } if (mode==classic) { print (srom) weapon_names-->(player.weaponclass), (srom) " et ", (srom) armor_names-->(player.armorclass); if (player.lamp==1) print (srom) " et une lampe^"; else new_line; } else { if (player.weaponclass) print (srom) "une ", (srom) weapon_names-->(player.weaponclass); if (player.armorclass) { if (player.weaponclass) { if (player.lamp) print (srom) ", "; else print (srom) " et "; } print (srom) armor_names-->(player.armorclass), (srom) " armure"; } if (player.lamp) { if (player.weaponclass+player.armorclass) print (srom) " et "; print (srom) "une lampe"; } if (player.weaponclass+player.armorclass+player.lamp) new_line; } if (mode~=classic&&deadflag==1&&(~~player.treasures)&&(~~ (player.weaponclass+player.armorclass+player.lamp))) print (srom) "aucun trésor ou arme^"; print (srom) "Vous avez aussi ", (nrom) player.flares, (srom) " fusée(s) de signalisation"; if (mode~=classic&&runestaff.found) print (srom) ", "; else print (srom) " et "; print (nrom) player.gold, (srom) " piece(s) d'or"; if (runestaff.found) { print (srom) " et le ", (sund) "Sort personnel"; } print (srom) "^^et il vous a fallu ", (nrom) player.turns, (srom) " tours!^"; ]; ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= [ UpdateCurses i ccur; if (runestaff.found+orb.found) return; if (lethargy.active>treasures_collected->0) player.turns++; if (leech.active>treasures_collected->2) player.gold=player.gold-random(5); if (player.gold<0) player.gold=0; if (forgetting.active>treasures_collected->4) { RndRoom(); (level->Cellnum(found_room.x, found_room.y, found_room.z))=(Contents (level->Cellnum(found_room.x, found_room.y, found_room.z))+100); } for (i=0:i<3:i++) { switch(i) { 0: ccur=lethargy; 1: ccur=leech; 2: ccur=forgetting; } if (player.x==ccur.x&&player.y==ccur.y&&player.z==ccur.z) { ccur.active=1; ! ha ha ha } } ]; [ FlavourText t; t=random(7); if (player.blind&&(t==1)) t=2; switch(t) { 1: print (srom) "^Vous voyez une chauve-souris s'envolée.^"; 2: print (srom) "^Vous marchez sur une grenouille!^"; 3: print (srom) "^Vous éternuez!^"; 4: print (srom) "^Vous vous sentez observé!^"; 5: print (srom) "^Vous entendez des faibles bruits bourdonnants.^"; 6: print (srom) "^Vous entendez "; t=random(4); switch(t) { 1: print (srom) "le tonnerre.^"; 2: print (srom) "des pas.^"; 3: print (srom) "un cri perçant!^"; 4: print (srom) "un hurlement!^"; } 7: t=random(12)+12; print (srom) "^Vous sentez ", (srom) map_articles-->t, (srom) map_names-->t, (srom) " friture!^"; } ]; [ TreasureEffects; if (player.blind&&treasures_collected->3) { player.blind=0; print (srom) "^L'opaline guérit votre cécité!^"; } if (player.stickybook&&treasures_collected->5) { player.stickybook=0; print (srom) "^La flamme bleue dissout le livre!^"; } ]; [ NewRoom; PrintStatus(); print (srom) "^Vous trouvez ici ", (srom) map_articles-->Contents(level->Cellnum(player.x, player.y, player.z)), (srom) map_names-->Contents(level->Cellnum(player.x, player.y, player.z)), (srom) ".^"; ! Mark room visited level->Cellnum(player.x, player.y, player.z)= Contents(level->Cellnum(player.x, player.y, player.z)); switch(level->Cellnum(player.x,player.y, player.z)) { 1 to 6, 11, 12: return; ! empty,entrance,stairs,pool,chest,orb,book 7: player.gold=player.gold+random(10); EmptyPlayerLocation(); print (srom) "^Vous avez maintenant ", (nrom) player.gold, (srom) ".^"; return; 8: player.flares=player.flares+random(5); EmptyPlayerLocation(); print (srom) "^Vous avez maintenant ", (nrom) player.flares, (srom) ".^"; return; 9: if (player.x==orb.x&&player.y==orb.y&&player.z==orb.z) { if (player.justteleported) { print (sbold) "^Grand Zot Complet!^^Vous venez juste de trouver ***", (sund) "L'Orbe de Zot", (sbold) "***!^", (srom) "^Le ", (sund) "Sort personnel", (srom) " a disparu.^"; orb.x=0; orb.found=1; runestaff.found=0; EmptyPlayerLocation(); } else { Move(); } } else { player.x=random(8); player.y=random(8); player.z=random(8); NewRoom(); } return; 10: player.z=Wrap(player.z+1); NewRoom(); return; 26 to 33: treasures_collected->((level->Cellnum(player.x,player.y, player.z)) -26) =1; EmptyPlayerLocation(); player.treasures=player.treasures+1; print (srom) "^C'est maintenant le vôtre!^"; return; } Creature(); ]; [ PrintStatus; if (~~player.blind) { print (sbold) "^Vous êtes ", (cbold) player, (sbold) ".^"; } if (mode==stats&&(0->33)>39) { StatusLine(); } else { print (srom) "^Force = ", (nrom) player.st, (srom) " Intelligence = ", (nrom) player.iq, (srom) " Dextérité = ", (nrom) player.dx, (srom) "^Trésors = ", (nrom) player.treasures, (srom) " Fusées de signalisation = ", (nrom) player.flares, (srom) " Pièces d'or = ", (nrom) player.gold, (srom) "^Arme = ", (srom) weapon_names-->(player.weaponclass), (srom) " Armure = ", (srom) armor_names-->(player.armorclass); if (player.lamp) print (srom) " et une lampe"; new_line; } ]; [ StatusLine i; ! Remember: no printing rules in this section! @split_window 5; @set_window 1; style reverse; for (i=1:i<=5:i++) { @set_cursor i 1; spaces (0->33); } @set_cursor 1 1; print "Force: ", player.st; @set_cursor 2 1; print "Intelligence: ", player.iq; @set_cursor 3 1; print "Dextérité: ", player.dx; if (player.treasures) { @set_cursor 4 1; print "Trésors: ", player.treasures; } @set_cursor 5 1; if (runestaff.found) print "Sort personnel"; if (orb.found) print "***Orbe de Zot***"; if (player.weaponclass>0) { @set_cursor 1 21; print "Arme: ", (string) weapon_names--> (player.weaponclass); } if (player.armorclass>0) { @set_cursor 2 21; print "Armure: ", (string) armor_names--> (player.armorclass); } if (player.gold) { @set_cursor 3 21; print "Pièces d'or: ", player.gold; } if (player.flares) { @set_cursor 4 21; print "Fusées de signalisation: ", player.flares; } if (player.lamp) { @set_cursor 5 21; print "Lampe"; } @set_cursor 1 1; style roman; @set_window 0; ]; [ MapLine xs ys i o t; @split_window 8; @set_window 1; style reverse; for (i=1:i<=8:i++) { @set_cursor i 1; spaces (0->33); } if (mapok) { for (ys=1:ys<=8:ys++) { for (xs=1:xs<=8:xs++) { t=level->Cellnum(xs, ys, player.z); if (t>99) t=0; o=(xs*3)+1; @set_cursor ys o; if (player.x==xs&&player.y==ys) { print "<", (char) map_symbols->t, ">"; } else { print " ", (char) map_symbols->t, " "; } } } if ((0->33)>37) { @set_cursor 3 30; print "Niveau ", player.z; } } @set_cursor 1 1; style roman; @set_window 0; ]; ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= [ PBlind; if (player.blind) { print (sbold) "^** Vous ne pouvez rien voir, Vous êtes aveugle, ", (sbold) race_names-->(player.race-1), (sbold) "!^"; rtrue; } rfalse; ]; [ PrintHelp; @erase_window -1; if (mode==stats) print (srom) "^^^^^^"; if (mode==map) print (srom) "^^^^^^^^"; print (sbold) "*** Château du Magicien Commande et Résumé de l'information ***^"; print (srom) "^Les commandes suivantes sont disponibles :^^"; if (mode==classic) { print (srom) "aide=a, nord=n, sud=s, est=e, ouest=o, haut=h,^ bas=b, boire=bo, map=m fusée=f, lampe=l, ouvrir=v.^ regard=r, teleport=t, quitter=q.^"; } else { print (srom) "Aide=a, Nord=n, Sud=s, Est=e, Ouest=o, Haut=h,^ Bas=b, BOire=bo, Map=m, Fusée=f, Lampe=l, ouVrir=v,^ Regard=r, Teleport=t, Quitter=q.^"; } print (srom) "^Le contenu des salles sont comme suit :^^ . = Salle vide, L = Livre, C = Coffre,^ B = Escalier descendant, E = Entrée/Sortie, F = Fusées,^ R = Pièces d'or, M = Monstre, O = Orbe de cristal,^ S = source magique, P = Puit, T = Trésor,^ H = Escalier montant, V = Vendeur, W = Orbe/Déformation.^^ Les bénéfices d'avoir des trésors sont :^^ Rubis rouge - évite la léthargie. Perle pâle - évite la sangsue.^ Gemme verte - évite d'oublier. Opaline - remède pour la cécité.^ Flamme bleue - dissout les livres. Pierre précieuse - aucun bénéfice.^ Palantir - Aucun bénéfice. Silmaril - aucun bénéfice.^^ Appuyez sur la touche 'entrer' quand vous êtes prêt à reprendre le jeu, ", (srom) race_names-->(player.race-1), (srom) ". "; GetInput(1); ]; [ Teleport; if (runestaff.found) { print (srom) "^Coordonnée X? "; if (mode==classic) player.y=GetCoord(); else player.x=GetCoord(); print (srom) "^Coordonnée Y? "; if (mode==classic) player.x=GetCoord(); else player.y=GetCoord(); print (srom) "^Coordonnée Z? "; player.z=GetCoord(); player.justteleported=1; NewRoom(); player.justteleported=0; } else { print (sbold) "^** Vous ne pouvez pas vous téléporter avec le ", (sund) "Sort personnel", (sbold) "!^"; } ]; [ PrintMap xs ys t; if (PBlind()) return; if (mode==map) { print (sbold) "^** Vous pouvez déjà voir la carte!^"; return; } font off; new_line; ! No printing rules here for (ys=1:ys<=8:ys++) { for (xs=1:xs<=8:xs++) { t=level->Cellnum(xs, ys, player.z); if (t>99) t=0; if (player.x==xs&&player.y==ys) { print "<", (char) map_symbols->t, "> "; } else { print " ", (char) map_symbols->t, " "; } } print "^^"; } font on; print (srom) "Vous êtes un ", (crom) player, (srom) ".^"; ]; [ Gaze r; if (PBlind()) return; if (level->Cellnum(player.x, player.y, player.z)~=11) { print (sbold) "^** C'est dur de regarder sans une orbe!^"; return; } r=random(13)+12; print (srom) "^Vous voyez "; switch(random(6)) { 1: print (srom) "une rediffusion de feuilleton!^"; 2: print (srom) "votre silhouette dans un état sanglant!^"; player.st=player.st-random(2); if (player.st<1) deadflag=1; 3: print (srom) map_articles-->r, (srom) map_names-->r, (srom) " des regards derrière vous!^"; 4: print (srom) "votre silhouette boire dans une source et devenir ", (srom) map_articles-->r, (srom) map_names-->r, (srom) "!^"; 5: RndRoom(); r=Contents(level->Cellnum(found_room.x, found_room.y, found_room.z)); print (srom) map_articles-->r, (srom) map_names-->r, (srom) " à ", (crom) found_room, (srom) ".^"; 6: print (sbold) "***", (sund) "L'Orbe de Zot", (sbold) "***", (srom) " à "; if ((mode==classic&&random(8)<4)||(mode~=classic&&random(2)==1)) { print (crom) orb; } else { RndRoom(); print (crom) found_room; } print (srom) "!^"; } ]; [ Move; if (input->2=='N'&&player.x==4&&player.y==1&&player.z==1) { deadflag=2; return; } switch (input->2) { 'N': player.y=Wrap(player.y-1); 'S': player.y=Wrap(player.y+1); 'E': player.x=Wrap(player.x+1); 'O': player.x=Wrap(player.x-1); } NewRoom(); ]; [ Stairs t; t=level->Cellnum(player.x, player.y, player.z); if (input->2=='H'&&t==3) { player.z=player.z-1; NewRoom(); return; } if (input->2=='B'&&t==4) { player.z=player.z+1; NewRoom(); return; } print (sbold) "^** Il n'y a aucun escalier qui va en "; if (input->2=='H') print (sbold) "haut"; else print (sbold) "bas"; print (sbold) " d'ici!^"; ]; [ Flare fx fy t; if (PBlind()) return; if (~~player.flares) { print (sbold) "^** Hé, brillant, vous êtes hors des fusées de signalisation!^"; return; } player.flares=player.flares-1; ! No printing rules if (mode~=map) { font off; new_line; } for (fy=-1:fy<=1:fy++) { for (fx=-1:fx<=1:fx++) { t=Contents(level->Cellnum(Wrap(player.x+fx),Wrap(player.y+fy), player.z)); level->Cellnum(Wrap(player.x+fx),Wrap(player.y+fy),player.z)=t; if (mode~=map) print " ", (char) map_symbols->t, " "; } if (mode~=map) print "^^"; } if (mode~=map) { font on; print (srom) "Vous êtes à ", (crom) player, ".^"; } if (mode~=classic) { print (srom) "^Vous en avez maintenant "; if (player.flares) print (nrom) player.flares; else print (srom) "aucune"; print (srom) ", la fusée de signalisation est partie.^"; } ]; [ UseLamp lx ly t; if (PBlind()) return; if (~~player.lamp) { print (sbold) "^** Vous n'avez pas de lampe, ", (sbold) race_names-->(player.race-1), (sbold) "!^"; return; } print (srom) "^Où voulez-vous pointez la lampe (N,S,E,O)? "; GetInput(1); lx=0; ly=0; switch (input->2) { 'N': ly=-1; 'S': ly=1; 'E': lx=1; 'O': lx=-1; default: print (sbold) "^** Ce n'est pas une direction, ", (sbold) race_names-->(player.race-1), (sbold) "!^"; } if (~~(lx+ly)) return; lx=Wrap(lx+player.x); ly=Wrap(ly+player.y); found_room.x=lx; found_room.y=ly; found_room.z=player.z; print (srom) "^La lampe pointe dans ", (crom) found_room; t=Contents(level->Cellnum(lx,ly,player.z)); level->Cellnum(lx,ly,player.z)=t; print (srom) ".^^Là vous trouverez ", (srom) map_articles-->t, (srom) map_names-->t, (srom) ".^"; ]; [ Drink t; if (level->Cellnum(player.x, player.y, player.z)~=5) { print (sbold) "^** Si vous voulez boire, trouvez une source!^"; return; } print (srom) "^Vous buvez et vous "; switch (random(8)) { 1: print (srom) "sentez plus fort.^"; player.st=Limit(player.st+random(3)); 2: print (srom) "sentez plus intelligent.^"; player.iq=Limit(player.iq+random(3)); 3: print (srom) "sentez plus rapide.^"; player.dx=Limit(player.dx+random(3)); 4: print (srom) "sentez plus faible.^"; player.st=player.st-random(3); if (player.st<1) deadflag=1; 5: print (srom) "sentez moins intelligent.^"; player.iq=player.iq-random(3); if (player.iq<1) deadflag=1; 6: print (srom) "sentez plus maladroit.^"; player.dx=player.dx-random(3); if (player.dx<1) deadflag=1; 7: do t=random(4); until (t~=player.race); player.race=t; print (srom) "devenez ", (srom) race_articles-->(player.race-1), (srom) race_names-->(player.race-1), (srom) ".^"; 8: player.sex=1-player.sex; print (srom) "transformez en "; if (player.sex) print (srom) "femme "; print (srom) "homme ", (srom) race_names-->(player.race-1), (srom) ".^"; } ]; [ Open; switch(level->Cellnum(player.x, player.y, player.z)) { 6: OpenChest(); 12: OpenBook(); default: print (sbold) "^** La seule chose qui s'ouvre est votre grande bouche!^"; } ]; [ OpenChest t; print (srom) "^Vous ouvrez le coffre et "; if (mode==classic) new_line; switch(random(4)) { 1: print (sbold) "KABOOM!", (srom) " il explose!!^"; DamagePlayer(random(6)); if (player.st<=0) deadflag=1; 2, 3: t=random(999)+1; ! Easy way out of plural problems print (srom) "trouvez ", (nrom) t, (srom) " pièces d'or!^"; player.gold=player.gold+t; if (player.gold>30000) player.gold=30000; 4: print (srom) "... gaz! Vous chancelez dans la pièce!^"; player.turns=player.turns+20; input->2=random('N','S','E','O'); Move(); } EmptyPlayerLocation(); ]; [ OpenBook; print (srom) "^Vous ouvrez le livre et "; if (mode==classic) new_line; switch(random(6)) { 1: print (sbold) "FLASH!", (srom) " Oh non! Vous êtes maintenant un aveugle ", (srom) race_names-->(player.race-1), (srom) "!^"; player.blind=1; 2: print (srom) "C'est un autre volume de la poésie de Zot! - Yech!!^"; 3: print (srom) "C'est une vieille copie de Jeu", (srom) race_names-->(random(4)-1), (srom) "!^"; 4: print (srom) "C'est un manuel qui explique comment augmenter la force!^"; player.st=18; 5: print (srom) "C'est un manuel qui explique comment augmenter la dextérité!^"; player.dx=18; 6: print (srom) "Le livre se colle dans vos mains -^Maintenant vous êtes incapables de tirer votre arme!^"; player.stickybook=1; } EmptyPlayerLocation(); ]; ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= [ EmptyPlayerLocation; level->Cellnum(player.x,player.y,player.z)=1; ]; [ DamagePlayer d; if (player.armorclass) { d=d-player.armorclass; player.armorhealth=player.armorhealth-player.armorclass; if (d<0) { player.armorhealth=player.armorhealth-d; d=0; } if (player.armorhealth<=0) { player.armorclass=0; player.armorhealth=0; print (srom) "^Votre armure a été détruite ... bonne chance!^"; } } player.st=player.st-d; ]; [ Creature c v; c=(level->Cellnum(player.x,player.y,player.z))-12; if (c==13 && ~~player.vendorenemy) { v=0; do { print (srom) "^Vous pouvez faire du commerce, attaquer où ignorer le vendeur.^^ Votre choix? "; GetInput(1); switch(input->2) { 'C': Trade(); return; 'I': return; 'A': print (srom) "^Vous serez désolés de l'avoir fait!^"; player.vendorenemy=1; default: print (sbold) "^** Décharge agréable, ", (sbold) race_names-->(player.race-1), (sbold) "!^"; } } until (player.vendorenemy); } FightMonster(c); ]; [ Trade t c; for (t=0:t<8:t++) { c=random(1500*(t+1))+1; if (treasures_collected->t) { print (srom) "^Voulez-vous vendre ", (srom) map_articles-->(t+26), (srom) map_names-->(t+26), (srom) " pour ", (nrom) c, (srom) " pièces d'or? "; if (YesNo()) { player.treasures=player.treasures-1; treasures_collected->t=0; while (c>0) { player.gold=player.gold+2000; c=c-2000; if (c<0) { player.gold=player.gold+c; c=0; } if (player.gold>30000) player.gold=30000; } } } } if (player.gold<1000) { print (srom) "^Vous êtes trop pauvres pour faire du commerce, ", (srom) race_names-->(player.race-1), (srom) "!^"; return; } if (player.gold>1250) { print (srom) "^Ok, ", (srom) race_names-->(player.race-1), (srom) ", vous avez ", (nrom) player.gold, (srom) " pièces d'or et "; if (player.armorclass||mode==classic) print (srom) armor_names--> (player.armorclass); else print (srom) "aucune"; print (srom) " armure.^^Voici les types d'armure que vous pouvez acheter:^Rien(R)= 0, Cuir(C)= 1250"; if (player.gold>1499) print (srom) ", Côte de mail(M)= 1500"; if (player.gold>1999) print (srom) ", Platine(P)= 2000"; new_line; t=-1; do { print (srom) "^Votre choix? "; GetInput(1); switch(input->2) { 'R': t=0; 'C': t=1; player.gold=player.gold-1250; 'M': if (player.gold>1499) { t=2; player.gold=player.gold-1500; } else { print (sbold) "^** Vous n'avez pas tant de liquide en main!^"; t=0; } 'P': if (player.gold>1999) { t=3; player.gold=player.gold-2000; } else { print (sbold) "^** Vous ne pouvez pas vous permettre d'acheter l'armure de platine!^"; t=0; } default: print (sbold) "^** Ne soyez pas innatentif. Choisissez une sélection.^"; } } until (t>-1); if (t) { player.armorclass=t; player.armorhealth=t*7; } if (player.gold>1250) { print (srom) "^Vous avez ", (nrom) player.gold, (srom) " pièces d'or avec ", (srom) weapon_names-->(player.weaponclass), (srom) " en main.^^Voici les types d'armes que vous pouvez acheter:^Rien(R)= 0, Dague(D)= 1250"; if (player.gold>1499) print (srom) ", Mace(M)= 1500"; if (player.gold>1999) print (srom) ", Epée(E)= 2000"; new_line; t=-1; do { print (srom) "^Votre choix? "; GetInput(1); switch(input->2) { 'R': t=0; 'D': t=1; player.gold=player.gold-1250; 'M': if (player.gold>1499) { t=2; player.gold=player.gold-1500; } else { print (sbold) "^** Désolé monsieur, J'ai peur de ne pas pouvoir faire de crédit!^"; t=0; } 'E': if (player.gold>1999) { t=3; player.gold=player.gold-2000; } else { print (sbold) "^** Votre carte Express de Dungeon - vous êtes partis de la maison sans elle!^"; t=0; } default: print (sbold) "^** Essayez de choisir une sélection!^"; } } until (t>-1); if (t) player.weaponclass=t; } } for (t=0:t<3:t++) { switch(t) { 0: OfferPotion(st); 1: OfferPotion(iq); 2: OfferPotion(dx); } } if (player.gold>999&&(~~player.lamp)) { print (srom) "^Voulez-vous acheter une lampe pour 1000 pièces d'or? "; if (YesNo()) { player.lamp=1; player.gold=player.gold-1000; print (srom) "^C'est une garantie pour votre survie!^"; } } ]; [ OfferPotion stat; if (player.gold<1000) return; print (srom) "^Voulez-vous acheter une potion magique de ", (statname) stat, (srom) " pour 1000 pièces d'or? "; if (YesNo()) { player.gold=player.gold-1000; player.stat=Limit(player.stat+random(6)); if (mode~=stats) { print (srom) "^Votre ", (statname) stat, (srom) " est maintenant ", (nrom) player.stat, (srom) ".^"; } OfferPotion(stat); } ]; [ Fightmonster c hp first cmd t web; hp=c+2; first=1; while (1) { if ((~~first)||(lethargy.active<=treasures_collected->0&& (~~player.blind)&&player.dx>=random(9)+random(9))) { ! You attack cmd=0; do { print (sbold) "^Vous faites face à ", (sbold) map_articles-->(c+12), (sbold) map_names-->(c+12), (sbold) "!^"; print (srom) "^Vous pouvez attaquer(a) ou battre en retraite(r).^"; if (first) print (srom) "Vous pouvez aussi essayer de le corrompre(c).^"; if (first&&player.iq>14) print (srom) "Vous pouvez aussi jeter un sort(s).^"; if (mode==stats) { print (srom) "^Votre choix? "; } else { print (srom) "^Votre force est ", (nrom) player.st, (srom) " et votre dextérité est ", (nrom) player.dx, (srom) ".^^Votre choix? "; } GetInput(1); switch (input->2) { 'A': cmd=1; 'R': cmd=2; 'S': if (first&&player.iq>14) { cmd=3; } else { print (sbold) "^** Vous ne pouvez pas jeter un sort maintenant!^"; } default: if (first&&input->2=='B') { cmd=4; } else { print (sbold) "^** Choisissez une des options inscrites.^"; } } } until (cmd); switch (cmd) { 1: if (~~player.weaponclass) { print (sbold) "^** Martèlement sur ", (sbold) map_articles-->(c+12), (sbold) map_names-->(c+12), (sbold) " ne l'endommageront pas!^"; } else { if (player.stickybook) { print (sbold) "^** Vous ne pouvez pas le tuer avec un livre!^"; } else { if (player.dx(c+12), (srom) "!^"; hp=hp-player.weaponclass; if ((c==9||c==12)&&random(8)==1) { print (srom) "^Oh non! Votre ", (srom) weapon_names-->(player.weaponclass), (srom) " s'est cassé!^"; player.weaponclass=0; } } } } 3: t=0; do { print (srom) "^Quel sort (Toile(T), Boule de Feu(F), Sort de la Mort(M))? "; GetInput(1); switch (input->2) { 'T': t=1; 'F': t=2; 'M': t=3; default: print (sbold) "^** Choisissez une des options données.^"; } } until (t); switch (t) { 1: player.st=player.st-1; web=random(8)+1; 2: t=random(7)+random(7); print (srom) "^Il fait ", (nrom) t, (srom) " points de domage.^"; hp=hp-t; 3: print (sbold) "^Mort", (srom) " . . . "; if (player.iq<15+random(4)) { print (srom) "à vous!^"; player.iq=0; deadflag=1; return; } else { print (srom) "à lui!^"; hp=0; } } 4: if (player.treasures==0) { if (mode==classic) { print (srom) "^Tout ce que je veux est votre vie!^"; } else { print (srom) "^~Tout ce que je veux est votre vie!~^"; } } else { do { t=random(8)-1; } until (treasures_collected->t); new_line; if (mode~=classic) print (srom) "~"; print (srom) "Je veux ", (srom) map_articles-->(t+26), (srom) map_names-->(t+26), (srom) ". Voulez-vous le me donner?"; if (mode~=classic) print (srom) "~"; print (srom) " "; if (YesNo()) { treasures_collected->t=0; player.treasures=player.treasures-1; if (mode==classic) { print (srom) "^Ok, ne dites pas autre chose.^"; } else { print (srom) "^~Ok, ne dites pas autre chose.~^"; } return; } } } } first=0; if (player.st<1||player.dx<1) { deadflag=1; return; } if (hp<1) { if (mode==classic) { print (srom) map_articles-->(c+12); } else { print (srom) "^Le "; } print (srom) map_names-->(c+12), (srom) " est étendu de tout son long, mort à vos pieds!^"; if (player.lastmeal(c+12), (srom) map_names-->(c+12), (srom) food_names-->(random(8)-1), (srom) ".^"; } if (player.x==runestaff.x&&player.y==runestaff.y&&player.z== runestaff.z) { print (sbold) "^Grand Zot! Vous avez trouvé le ", (sund) "Sort personnel", (sbold) "!^"; runestaff.found=1; runestaff.x=0; ! Shouldn't be necessary but it can't hurt } if (c==13) { print (srom) "^Vous obtenez toutes ses marchandises:^armure de platine^une épée^une potion de force^une potion d'intelligence^une potion de dextérité^"; if (~~player.lamp) { player.lamp=1; print (srom) "et une lampe^"; } player.armorhealth=21; player.armorclass=3;player.weaponclass=3; player.st=Limit(player.st+random(6)); player.iq=Limit(player.iq+random(6)); player.dx=Limit(player.dx+random(6)); } t=random(999)+1; print (srom) "^Vous obtenez maintenant ses réserves de ", (nrom) t, (srom) " pièces d'or!^"; player.gold=player.gold+t; if (player.gold>30000) player.gold=30000; EmptyPlayerLocation(); return; } if (web) { web=web-1; if (web==0) print (srom) "^La toile s'est juste cassé!^"; } print (srom) "^Le ", (srom) map_names-->(c+12); if (web) { print (srom) " est collé et ne peut pas attaquer maintenant!^"; } else { print (srom) " attaque!^"; if (player.dx<(random(7)+random(7)+random(7)+(3*player.blind))) { print (srom) "^Ouch! il vous a frappé!^"; DamagePlayer((c/2)+1); if (player.st<1) { deadflag=1; return; } } else { print (srom) "^Quel chance, il vous a manqué!^"; } } if (cmd==2) { print (srom) "^Vous vous êtes échappé!^"; t=0; do { print (srom) "^Vous voulez aller au nord, sud, à l'est où à l'ouest? "; GetInput(1); switch(input->2) { 'N', 'S', 'E', 'O': t=1; default: print (sbold) "^** Ne poussez pas votre chance, ", (sbold) race_names-->(player.race-1), (sbold) "!^"; } } until (t); Move(); return; } } ]; ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= [ statname stat; switch(stat) { st: print (srom) "force"; iq: print (srom) "intelligence"; dx: print (srom) "dextérité"; } ]; [ stars; print (sbold) "^****************************************************************^"; ]; [ crom t; if (mode==classic) { print (srom) "( ", (nrom) t.y, (srom) " , ", (nrom) t.x, (srom) " ) niveau ", (nrom) t.z; } else { print (srom) "( ", (nrom) t.x, (srom) " , ", (nrom) t.y, (srom) " ) niveau ", (nrom) t.z; } ]; [ cbold t; if (mode==classic) { print (sbold) "( ", (nbold) t.y, (sbold) " , ", (nbold) t.x, (sbold) " ) niveau ", (nbold) t.z; } else { print (sbold) "( ", (nbold) t.x, (sbold) " , ", (nbold) t.y, (sbold) " ) niveau ", (nbold) t.z; } ]; ! Provided only for completeness, as yet there is nothing which prints ! coordinates in underline [ cund t; if (mode==classic) { print (sund) "( ", (nund) t.y, (sund) " , ", (nund) t.x, (sund) " ) niveau ", (nund) t.z; } else { print (sund) "( ", (nund) t.x, (sund) " , ", (nund) t.y, (sund) " ) niveau ", (nund) t.z; } ]; Message "Ne vous inquiéter pas, cund est fournie seulement pour la perfection."; ! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= ! Everything is printed with a rule, so that classic mode can capitalise ! everything and not use colours [ srom msg i l t; if (mode~= classic) { print (string) msg; return; } ! Now begins the evil process of capitalising strings t=msg.print_to_array(caps_array); for (i=2:i<=t+1:i++) { l=caps_array->i; if (l>96&&l<123) print (char) l-32; else print (char) l; } ]; [ nrom num; print num; ]; [ sbold msg; if (mode==classic) { print (srom) msg; return; } style bold; print (srom) msg; style roman; ]; [ nbold num; if (mode==classic) { print (nrom) num; return; } style bold; print (nrom) num; style roman; ]; [ sund msg; if (mode==classic) { print (srom) msg; return; } style underline; print (srom) msg; style roman; ]; [ nund num; if (mode==classic) { print (nrom) num; return; } style underline; print (nrom) num; style roman; ];