! _Shade_ ! Special source-code edition ! Copyright 2000-2002 Andrew Plotkin ! http://www.eblong.com/zarf/if.html ! This source code is provided for personal, educational use only. ! See README file for details. Class Sink with name 'robinet', short_name [; print "robinet de la ", (string) self.self_name; rtrue; ], parse_name [ wd firstwd num; wd = NextWord(); firstwd = wd; while (WordInProperty(wd, self, name)) { num++; wd = NextWord(); } if (num == 1 && firstwd == self.self_word) return 0; return num; ], before [ ix; Examine: if (OIU(self)) rtrue; Receive: "Ce genre de manipulation ne vous aidera pas."; EmptyT: ix = self.self_obj; <>; SwitchOff, Close: if (OIU(self)) rtrue; "L'évier de la ", (string) self.self_name, "n'est pas en train de couler."; ], receive_water [; if (GoalClosed(self)) "Vous versez l'eau dans l'évier, où elle s'infiltre dans le sable."; "Vous versez l'eau dans le siphon."; ], receive_sand [; if (GoalClosed(self)) "Vous ajoutez l'eau au fardeau de l'évier."; ], has scenery transparent; Class GeneralWater with name 'eau' 'du' 'robinet', is_sink false, short_name [; print "eau"; if (self.is_sink) print " de l'évier"; print " de la ", (string) self.self_name; rtrue; ], self_name "BUG", parse_name [ wd gotwater num; wd = NextWord(); while (WordInProperty(wd, self, name)) { if (wd == 'eau') gotwater = true; num++; wd = NextWord(); } if (~~gotwater) return 0; return num; ], before [; Find: "Essayez la ", (string) self.self_name, "."; Take: if (OIU(self)) rtrue; if (glass notin player) "Vous n'avez rien pour transporter l'eau."; <>; Drink, Taste: "Vous avez perdu cette habitude de boire au robinet depuis vos onze ans."; default: if (self.is_sink) print "L'évier de la ", (string) self.self_name; else print "La ", (string) self.self_name; ! la douche " ne coule pas en ce moment."; ], has scenery; Class SinkWater class GeneralWater, with is_sink true, ;!name 'evier'; Zone kitchen "coin cuisine" with name 'cuisine' 'coin' 'alcove', description [ num; print "Le coin cuisine inclut un réfrigérateur, un évier, une cuisinière, et à peu près assez d'espace pour se tenir entre chaque élément."; if (cupboard in self) print " Un pan du mur dépasse et forme un plan de travail, avec un placard en dessous."; new_line; DescribeParagraph(self); num = Locale(self, "Vous pouvez voir", "Vous pouvez aussi voir"); if (num) { ! print " "; if (player in self) print " ici"; else print " sur le sol la cuisine"; print ".^"; } rtrue; ], nolocifin true, before [; Examine: if (OIU(self)) rtrue; rfalse; Search: <>; ], prereqs cupboard; Sink -> kitchensink with name 'cuisine' 'evier', self_word 'cuisine', self_name "cuisine", self_obj kitchensinkwater, description [; if (GoalClosed(self)) "L'évier de la cuisine est plein de sable."; "L'évier de la cuisine est immaculé. Vous pourriez en tirer une certaine fierté, si ça n'était pas dû à votre incapacité à cuisiner."; ], before [; SwitchOn, Turn, Open: if (OIU(self)) rtrue; if (GoalClosed(self)) "Davantage de sable se déverse du robinet de la cuisine."; if (GoalOpen(self)) { Goaled(self); remove self.self_obj; self.self_obj = kitchensinksand; move self.self_obj to self; BumpSand(kitchen); "Dans un sifflement effrayant, un sable fin et blanc sort en bouillonnant du robinet. Vous forcez pour le fermer, mais l'évier de la cuisine est déjà plein, et le sable se répand sur le sol."; } "Rien ne sort du robinet, sinon un étrange sifflement distant. L'évier de la cuisine n'a pas fonctionné depuis que vous avez emménagé..."; ], imp [; closet.startup(); return -1; ], prereqs pbutter crackers; SinkWater -> -> kitchensinkwater with name 'cuisine' 'evier', self_word 'cuisine', self_name "cuisine", before [; Insert: if (OIU(self)) rtrue; if (second ~= glass) "Ceci ne peut contenir de l'eau."; if (glass notin player) "Vous n'avez pas le verre."; if (water in glass) "Le verre est déjà plein."; <>; SwitchOn: <>; ]; Object -> counter "plan de travail" with name 'plan' 'travail', short_name [; print "plan de travail"; if (FindZone(player) ~= kitchen) print " de la cuisine"; rtrue; ], description [; self.subdescribe(); new_line; rtrue; ], nosupportlist true, nosubdescribe [; return (child(self) == 0); ], subdescribe [ ix; ix = child(self); if (~~ix) { print "Il n'y a rien sur ", (the) self, "."; } else { print "Il y a "; WriteListFrom(ix, TERSE_BIT + ENGLISH_BIT + CONCEAL_BIT); print " sur ", (the) self, "."; } rtrue; ], before [; Search: <>; Attack, Touch, Push, Pull, Receive, LetGo: if (GoalOpen(cupboard)) <>; ], has scenery supporter; Object -> stove "plaques de cuisson" with name 'plaques' 'cuisson' 'electrique' 'electriques' 'plaque' 'cuisiniere', seenonce false, description [; if (GoalClosed(self)) "Il ne reste rien de la cuisinière, sauf un morceau de métal rongé, arrosé de sable."; print "Le traditionnel set de cuisson électrique."; if (~~self.seenonce) { self.seenonce = true; print " Étrangement, il n'y a pas de four dans votre cuisine. Vous ne savez pas ce qui se tapit dans l'espace en dessous de la cuisinière. Vous avez toujours eu peur de fouiller @{2014} la cuisinière pourrait s'avérer être alimentée par du déchet radioactif, ou quelque chose du genre."; } if (self has on) { print " La cuisinière est allumée"; if (self.heat >= 4) print " et la plaque est incandescente"; print "."; } else { if (self.heat >= 4) print " La plaque est toujours rouge, mais elle s'assombrit."; } new_line; rtrue; ], before [; Receive: if (OIU(self)) rtrue; "Comment ? Après toutes ces années vous allez vous mettre à cuisiner ?"; SwitchOn: if (OIU(self)) rtrue; if (GoalClosed(self)) "Clic ! Rien ne se produit. Ni ne se produira jamais. Pas avec cette cuisinière."; if (GoalOpen(self)) { Goaled(self); give self ~on; self.heat = 0; StopDaemon(self); BumpSand(kitchensand); "Vous tournez le bouton @{2014} clic ! Puis la cuisinière émet un craquement sourd. La plaque demeure identique, bien que vous sentiez la chaleur se diffuser ; des morceaux de sa matière semblent s'écailler. Un choc thermique ? Vous prenez le temps d'y songer. Puis la plaque de cuisson tout entière s'effondre en sable, qui s'écoule au pied de la cuisinière. "; } if (self has on) "La cuisinière est déjà allumée."; give self on; StartDaemon(self); "Clic."; SwitchOff: if (OIU(self)) rtrue; if (GoalClosed(self)) "La cuisinière est à peu près aussi éteinte que vous pouvez raisonnablement l'espérer."; if (self hasnt on) "La cuisinière est déjà éteinte."; give self ~on; "Clic."; Touch: if (OIU(self)) rtrue; switch (self.heat) { 0: rfalse; 1: "La plaque est chaude."; 2: "La plaque est brûlante."; default: "La plaque est trop chaude pour que vous la touchiez."; } ], heat 0, daemon [; if (self has on && GoalOpen(self)) { give self ~on; print "^La plaque émet un craquement bizarre.^"; } if (self has on) { self.heat++; if (self.heat > 5) self.heat = 5; if (FindZone(player) == kitchen) { switch (self.heat) { 2: print "^La chaleur commence à se propager de la cuisinière.^"; 4: print "^La plaque de cuisson est maintenant incandescente.^"; } } } else { self.heat--; if (self.heat < 0) { self.heat = 0; StopDaemon(self); } if (FindZone(player) == kitchen) { switch (self.heat) { 3: print "^Le rougeoiement de la plaque disparaît.^"; } } } ], prereqs [; return (GoalClosed(bathsink) || GoalClosed(kitchensink)); ], has scenery ~on female pluralname; Object -> cupboard "placard" with name 'placard', description [; print "Le seul placard de votre cuisine est un espace réduit en dessous du plan de travail, avec des étagères tordues en bois aggloméré."; if (self has open) { print " "; self.subdescribe(); if (GoalOpen(self)) print " Tout au fond, du sable tombe d'un coin supérieur, quelques grains à la fois."; } else { print " Il est fermé."; } new_line; rtrue; ], nosubdescribe [; return (self hasnt open); ], subdescribe [ ix; print "Le placard est ouvert"; ix = child(self); if (~~ix) { print " et vide"; } else { print " ; à l'intérieur"; WriteListFrom(ix, TERSE_BIT + ENGLISH_BIT + ISARE_BIT + CONCEAL_BIT); } print "."; rtrue; ], before [; Enter: if (self has open) "Vous ne tenez pas dedans."; else return L__M(##Insert,3,self); Touch: if (GoalOpen(self)) { RescueContents(self, kitchen); RescueContents(counter, kitchen); remove self; remove counter; BumpSand(kitchen); plant.startup(2); Goaled(self); print "L'étagère et le plan de travail se mettent à gémir dès que vous les touchez. Vous"; if (self hasnt open) print " vous ouvrez la porte du placard d'un coup sec."; else print " claquez la porte du placard"; " pour faire bonne mesure ; et l'aggloméré taché se couvre de fissures blanches, frissonne, puis explose en tas de sable. D'accord !"; } Open: if (self hasnt open && GoalOpen(self)) { <>; } Close: if (self has open && GoalOpen(self)) { <>; } Attack, Push, Pull, Receive, LetGo: if (GoalOpen(self)) <>; ], prereqs stove fridge, opentime 0, imp [; self.opentime++; switch (self.opentime) { 1: if (player in kitchen) print "^Le plafond de la cuisine émet un grincement timide.^"; else print "^Un grincement timide se fait entendre du côté de la cuisine.^"; 2: print "^Dans un ", (emph) "crac", " étouffé, le plafond de la cuisine lâche. Du plâtre cassé et de la frisette moisie s'effondrent"; if (player in kitchen) print " là où vous vous trouviez quelques secondes auparavant"; else print " sous vos yeux"; print ". Et précèdent, bien sûr, le sable, un sable blanc, des rivières de sable. En peu de temps, le coin cuisine a disparu.^"; BumpSand(livingsand); RescueContents(kitchen); remove kitchen; Goaled(kitchen); return -1; } ], has scenery container openable ~open; Object -> -> crackers "boîte de biscuits" with name 'boite' 'biscuit' 'biscuits' 'paquet' 'crackers' 'substrat', short_name [; if (self has open) { print "boîte de sable"; rtrue; } rfalse; ], seenonce false, description [; if (self has open) { "La boîte est ouverte, mais ne contient pas de biscuits. À la place, elle est emplie de sable."; } "Vous achetez cette variété de cet insipide substrat amidonné pour y étaler votre beurre de cacahuète."; ], before [ ix; Smell: if (OIU(self)) rtrue; if (self hasnt open) { "Ce n'est pas une variété particulièrement odorante de biscuits."; } rfalse; Eat, Taste, Drink: if (OIU(self)) rtrue; if (self hasnt open) <>; "Vous n'allez pas manger du sable."; Open: if (OIU(self)) rtrue; if (self has open) "La boîte est déjà ouverte."; if (~~GoalEverOpen(self)) "Vous n'avez pas d'appétit si tôt le matin."; give self open; move boxsand to self; Goaled(self); ix = FindFloorZone(player); if (ix) BumpSand(ix); print "Vous tirez le dessus de la boîte. C'est bloqué, et vous ne voyez pas pourquoi. Vous forcez @{2014}^^Le dessus se déchire et du sable blanc gicle de la boîte.^"; if (GoalClosed(pbutter)) print "^Ça va trop loin. Vous envisagez lequel de vos amis aurait pu s'introduire ici et mettre tout cela en place. Mmmmm... non... personne, vraiment...^"; rtrue; Close: if (OIU(self)) rtrue; if (self hasnt open) "La boîte est déjà fermée."; "Le couvercle est parti."; Receive: if (OIU(self)) rtrue; if (self hasnt open) "La boîte est fermée."; "Vous ne voulez pas coincer quoi que ce soit dans une boîte de biscuits. Particulièrement si elle est pleine de sable."; Search: if (OIU(self)) rtrue; if (self hasnt open) "La boîte est fermée."; <>; Wave: if (OIU(self)) rtrue; if (self has open) <>; if (GoalEverOpen(self)) "Quelque chose bouge dans la boîte, mais ça ne fait pas un bruit de biscuits. Étrange."; "Quelques biscuits s'agitent dans la boîte."; Empty, EmptyT: if (OIU(self)) rtrue; if (self hasnt open) "La boîte est fermée."; <>; ], prereqs vacuum, has rescuable ~open transparent female; Object -> fridge "réfrigérateur" with name 'frigo' 'refrigerateur', description [; if (GoalClosed(self)) { "Le frigo est grand ouvert. Un torrent de sable immobile s'écoule jusqu'au sol."; } print "Il est jaune. À part ça, il ressemble à tous les autres frigos américains."; if (self has open) { print " "; self.subdescribe(); } new_line; rtrue; ], nosubdescribe [; return (self hasnt open); ], subdescribe [ ix; if (GoalClosed(self)) { print "Du sable se répand du frigo ouvert."; rtrue; } print "Le frigo est ouvert"; ix = child(self); if (~~ix) { print " mais vide"; } else { print " ; à l'intérieur"; WriteListFrom(ix, TERSE_BIT + ENGLISH_BIT + ISARE_BIT + CONCEAL_BIT); } print "."; rtrue; ], opentime 0, before [; Search: if (GoalClosed(self)) { "Le frigo est rempli de sable."; } self.opentime = 0; rfalse; Receive: if (GoalClosed(self)) { "Le frigo est bouché par le sable."; } self.opentime = 0; rfalse; LetGo: self.opentime = 0; rfalse; Open: if (OIU(self)) rtrue; if (GoalOpen(self)) { StopDaemon(self); give self open; RescueContents(self, kitchen); BumpSand(kitchensand); Goaled(self); "Vous ouvrez le réfrigérateur en essayant de ne pas tomber tandis qu'un flot de sable jaillit pour enterrer vos pieds."; } if (self hasnt open) { StartDaemon(self); self.opentime = 0; } rfalse; Close: if (GoalClosed(self)) { if (OIU(self)) rtrue; "La porte est ouverte et bloquée."; } rfalse; Enter: if (GoalClosed(self)) "Le frigo est bloqué par le sable. Vous ne pourriez même pas fourrer une tranche de pain là-dedans, alors vous..."; if (self has open) "Il y a soixante ans, vous auriez pu vous étouffer en vous enfermant dans le frigo. Les merveilles de la technologie ont, cependant, ôté cette possibilité concrète."; else return L__M(##Insert,3,self); ], daemon [; if (self hasnt open || parent(self) == 0 || GoalClosed(self)) { StopDaemon(self); return; } self.opentime++; if (self.opentime >= 4) { StopDaemon(self); give self ~open; if (player in kitchen or Apartment or futon or desk) print "^La porte du frigo se referme en claquant.^"; } ], prereqs crate closet, startup [; if (GoalOpen(self)) { self.opentime = 10; } ], has scenery container openable ~open; Object -> -> pbutter "pot de beurre de cacahuète" with name 'pot' 'beurre' 'cacahuetes' 'cacahuete' 'arachide', short_name [; if (self has open) { print "pot de sable"; rtrue; } rfalse; ], seenonce false, description [; if (self has open) { "Le pot est ouvert, mais ne contient pas de beurre de cacahuète. À la place, il est rempli de sable."; } print "Partiellement hydrogéné, nutritif et fiable, sans nom de marque et brun."; if (~~self.seenonce) { self.seenonce = true; !print " Please don't ask why you keep the peanut butter in the ! fridge; the story is long, involute, and beyond the scope ! of this game."; } new_line; rtrue; ], before [ ix; Smell: if (OIU(self)) rtrue; if (self hasnt open) { print "Vous ne pouvez rien sentir quand le pot est fermé."; if (~~GoalEverOpen(self)) print " Vous ne trouveriez pas ça appétissant maintenant, de toute façon."; new_line; rtrue; } rfalse; Eat, Taste, Drink: if (OIU(self)) rtrue; if (self hasnt open) <>; "Vous n'allez pas manger du sable."; Open: if (OIU(self)) rtrue; if (self has open) "Le pot est déjà ouvert."; if (~~GoalEverOpen(self)) "Vous n'avez pas d'appétit si tôt le matin."; give self open; move jarsand to self; Goaled(self); ix = FindFloorZone(player); if (ix) BumpSand(ix); print "Vous dévissez le couvercle... dans un grincement inattendu. Quelque chose s'écoule sur le sol.^^Le pot de beurre de cacahuète est plein de sable.^"; if (GoalClosed(crackers)) print "^Ça va trop loin. Vous envisagez lequel de vos amis aurait pu s'introduire ici et escamoter tout cela. Mmmmm... non... personne, vraiment...^"; rtrue; Close: if (OIU(self)) rtrue; if (self hasnt open) "Le pot est déjà fermé."; "Le couvercle est parti."; Receive: if (OIU(self)) rtrue; if (self hasnt open) "Le pot est fermé."; "Ça ne serait pas une bonne idée de mettre quoi que ce soit dans un pot de beurre de cacahuète. En particulier s'il est plein de sable."; Search: if (OIU(self)) rtrue; if (self hasnt open) "Le pot est fermé."; <>; Wave: if (OIU(self)) rtrue; if (self has open) <>; if (GoalEverOpen(self)) "Étrange. Quelque chose bouge dans le pot quand vous le secouez, ce que du beurre de cacahuète froid ne devrait pas faire, normalement."; rfalse; Empty, EmptyT: if (OIU(self)) rtrue; if (self hasnt open) "Le pot est fermé."; <>; ], prereqs vacuum, imp [; if (~~GoalClosed(crackers)) return; KillImp(vacuum); plant.startup(1); return -1; ], has rescuable ~open transparent; Zone bathroom "coin salle de bains" with name 'salle' 'bains' 'coin' 'alcove' 'bain', description [ num; print "Le coin salle de bains"; if (toilet in self) print " a des toilettes, un lavabo"; else print " a un lavabo"; if (shower in self) { print ", et une cabine de douche qui réussit à rendre vaste le reste de la pièce."; print " Guère plus ; la plupart de vos accessoires ont été rangés."; } else { print ", et un tas de sable où la cabine de douche se trouvait."; } new_line; num = Locale(self, "Vous pouvez voir", "Vous pouvez aussi voir"); if (num) { ! print " "; if (player in self) print " ici"; else print " sur le sol de la cuisine"; print ".^"; } rtrue; ], nolocifin true, locseealso shower, before [; Examine: if (OIU(self)) rtrue; rfalse; Search: <>; ], prereqs toilet shower; Object -> toilet "toilettes" with name 'toilettes' 'cabinets' 'wc', description "Vous savez certainement à quoi ressemblent des toilettes.", before [; Enter: "Vous n'en ressentez pas l'envie pour l'instant."; Search: if (OIU(self)) rtrue; "De la porcelaine et du moisi scintillent, humides. Vous êtes content d'avoir regardé."; Empty: if (OIU(self)) rtrue; if (GoalOpen(self)) { Goaled(self); remove self; BumpSand(bathroomsand); plant.startup(2); "Les toilettes ? Oui, c'est au tour des toilettes ! Vous tirez la poignée de la chasse en grimaçant. Et, effectivement, le sable dégringole sur les parois de la cuvette ; la porcelaine immaculée elle-même se craquelle, se fissure et couvre le sol de la salle de bains. Les toilettes sont un piédestal, une souche, un simple tas de sable... Disparues."; } "Le résultat était prévisible : l'eau trouble des toilettes est remplacée par une autre eau trouble."; ! In all adventure games that implement a bathroom, surely ! there shall be implemented a humorous ~flush~ command. ! So it is now. SwitchOn: <>; EmptyT: if (OIU(self)) rtrue; "Non merci, les toilettes ne sont pas SI propres."; Open: if (OIU(self)) rtrue; "Ça l'est déjà."; Close: if (OIU(self)) rtrue; "Vous êtes du genre qui laisse le couvercle ouvert."; ], receive_water "Vous videz le verre dans les toilettes. *Glou-glou*.", receive_sand [; print "Vous voulez vraiment boucher les toilettes encore une fois ? Non, vous ne voulez pas.^"; return 2; ], prereqs crate luggage, opentime 0, imp [; if (~~GoalClosed(shower)) return; self.opentime++; switch (self.opentime) { 1: if (player in bathroom) print "^Un timide grincement se fait entendre du plafond de la salle de bains.^"; else print "^Un timide grincement se fait entendre en direction de la salle de bains.^"; 2: print "^Dans un ", (emph) "crac", " étouffé, le plafond de la salle de bains disparaît. Du plâtre détruit et des tuyaux rouillés s'effondrent"; if (player in bathroom) print " là où vous vous trouviez quelques secondes auparavant"; else print " sous vos yeux"; print ". Et puis vient le sable. Une rivière blanche jaillissante, sifflante, hurlante. En un instant la salle de bains n'est plus visible.^"; BumpSand(livingsand); RescueContents(bathroom); remove bathroom; Goaled(bathroom); return -1; } ], has scenery pluralname; Sink -> bathsink with name 'salle' 'bains' 'bain' 'lavabo', self_word 'salle de bains', self_name "salle de bains", self_obj bathsinkwater, seenonce false, description [; if (GoalClosed(self)) "Le lavabo de la salle de bains est rempli de sable."; print "Le lavabo de la salle de bains est petit mais à peine crasseux."; if (~~self.seenonce) { self.seenonce = true; print " (Vous n'avez jamais vraiment compris comment les lavabos dans les salles de bains parviennent à s'encrasser. Après tout, c'est surtout du savon et de l'eau qui y coulent... Le monde est mystérieux parfois.)"; } new_line; rtrue; ], before [; SwitchOn, Turn, Open: if (OIU(self)) rtrue; if (GoalClosed(self)) "Davantage de sable s'écoule du robinet de la salle de bains."; if (GoalOpen(self)) { Goaled(self); remove self.self_obj; self.self_obj = bathsinksand; move self.self_obj to self; BumpSand(bathroom); "Dans un sifflement effrayant, du sable fin et blanc jaillit du robinet. Vous forcez sur celui-ci, mais le lavabo est déjà plein, et le sable se répand sur le sol."; } "Vous tournez le robinet. Les tuyaux font un bruit de mammouth qui fait une indigestion, mais il y a bien de l'eau qui coule du robinet. Rassuré, vous le refermez."; ], imp [; closet.startup(); return -1; ], prereqs pbutter crackers; SinkWater -> -> bathsinkwater with name 'salle' 'bains' 'bain' 'lavabo', self_word 'salle de bains', self_name "salle de bains", before [; Insert: if (OIU(self)) rtrue; if (second ~= glass) "Ceci ne peut contenir de l'eau."; if (glass notin player) "Vous n'avez pas le verre."; if (water in glass) "Le verre est déjà plein."; if (GoalOpen(bathsink)) { <>; } if (sand in glass) "L'eau s'écoule dans le verre et s'infiltre dans le sable. Après quelques instants, vous constatez que le sable est aussi sec que quand vous avez commencé. Étrange."; move water to glass; PronounNotice(water); "Le robinet grince, et l'eau s'écoule dans le verre."; SwitchOn: <>; ]; Zone -> shower "douche" with name 'douche' 'cabine' 'rideau', leave_fragment " sortez de la douche", enter_fragment " vous serrez dans la petite douche", description [ num; print "La cabine de douche ressemble à une symphonie grunge familière, jouée avec des carreaux roses et gris. Enfin, plutôt un solo. Un solo bref"; if (player in self) print " ; par réflexe, vous tordez le cou pour éviter de vous cogner au pommeau de douche"; print ".^"; num = Locale(self, "Vous pouvez voir", "Vous pouvez aussi voir"); if (num) { ! print " "; if (player in self) print " ici"; else print " dans la cabine de douche"; print ".^"; } rtrue; ], nolocifin true, ! locseealso bathroom, before [; Examine: if (OIU(self)) rtrue; rfalse; Search: <>; Take: <>; Open, Close, Push, Pull: if (OIU(self)) rtrue; "Le rideau de douche est devenu un rituel d'ennui quotidien. Il est trop petit. Il ne peut pas, quelle que soit la manière dont vous le tirez, couvrir la cabine de douche. Vous êtes parvenu a arranger le rideau afin qu'une quantité minimale d'eau éclabousse le sol de la salle de bains quand vous vous lavez, et c'est mieux de le laisser comme ça."; SwitchOn: <>; SwitchOff: <>; EmptyT: <>; ], prereqs crate stove has female; Object -> -> showerhead "pommeau de douche" with name 'pommeau' 'douche' 'robinet', parse_name [ wd firstwd num; wd = NextWord(); firstwd = wd; while (WordInProperty(wd, self, name)) { num++; wd = NextWord(); } if (num == 1 && firstwd == 'douche') return 0; return num; ], before [; EmptyT: <>; SwitchOn, Open: if (OIU(shower)) rtrue; if (GoalOpen(shower)) { RescueContents(shower, bathroom); remove shower; BumpSand(bathroom); Goaled(shower); "Vous ouvrez le robinet et @{2014} ce n'est plus une surprise @{2014} du sable blanc s'écoule du pommeau de douche. Tout en protégeant vos yeux du jet, vous parvenez à refermer le robinet.^^Un craquement venant d'au-dessus de vous vous avertit. Vous reculez tandis que le plâtre s'effrite au plafond, et la blancheur s'abat dans un grand fracas.^^Lorsque le silence revient, tout le fond de la salle de bains est une pente de sable fin."; } "Vous ouvrez le robinet... et rien ne se passe. Mmm. La douche fonctionnait hier soir. Vous saviez que les tuyauteries de votre appartement n'étaient pas très fiable, mais c'est pire que d'habitude."; SwitchOff, Close: if (OIU(shower)) rtrue; "La douche ne coule pas."; ], has scenery; GeneralWater -> -> showerheadwater with name 'douche', self_word 'douche', self_name "douche", before [; Insert: if (OIU(shower)) rtrue; if (second ~= glass) "Ça ne retiendrait pas l'eau."; if (glass notin player) "Vous n'avez pas le verre."; if (water in glass) "Le verre est déjà plein."; <>; SwitchOn: <>; ], has ; Object glass "verre" with name 'verre', invent [; if (inventory_stage == 1) rfalse; if (water in self) print " d'eau"; if (sand in self) print " de sable"; rtrue; ], partinvent [; return self.invent(); ], description [; print "Un verre classique"; if (water in self) print ", plein d'eau"; if (sand in self) print ", plein de sable"; "."; ], before [ ix; Search: if (water in self) "Le verre contient de l'eau."; if (sand in self) "Le verre contient du sable."; "Le verre est vide."; Fill: if (self notin player) "Vous n'avez pas le verre."; ix = 0; if (TestScope(bathsinkwater)) ix = bathsinkwater; if (ix == 0 && TestScope(bathsinksand)) ix = bathsinksand; if (ix == 0) "Vous devez préciser avec quoi remplir le verre."; if (OIU(ix)) rtrue; <>; Receive: "Ce genre de manipulation ne vous aidera pas."; Empty: if (OIU(self)) rtrue; ix = child(self); if (ix) <>; "Le verre est déjà vide."; EmptyT: if (OIU(self)) rtrue; ix = child(self); if (ix) <>; "Le verre est déjà vide."; Drink: if (OIU(self)) rtrue; ix = child(self); if (~~ix) "Le verre est vide."; <>; BlowOn: if (OIU(self)) rtrue; ix = child(self); if (ix) <>; ], receive_water [; print "Le verre est déjà plein.^"; return 2; ], receive_sand [; print "Le verre est déjà plein.^"; return 2; ], has rescuable container open; Object water "verre d'eau" with name 'verre' 'eau', description "L'eau brille comme un mirage.", seenonce 0, before [ ix; Take: "Avec vos seules mains ?"; BlowOn: if (OIU(self)) rtrue; "L'eau ondule doucement."; Drop: if (~~IndirectlyContains(player, self)) "Vous n'avez pas ça."; remove self; ix = FindFloorZone(player); if (ix) ix = ix.sand_obj; print "L'eau éclabousse"; if (ix == 0 || ix.number <= 1) print " sur le sol"; else { if (ix.number <= 4) print " sur le sable étendu sur le sol"; else print " dans le sable"; } print ", laissant un point humide, qui sèche en quelques secondes"; self.seenonce++; if (self.seenonce == 2) print ". Mmm"; "."; EmptyT: <>; Insert, PutOn: if (~~IndirectlyContains(player, self)) "Vous n'avez pas ça."; if (second provides receive_water) { if (OIU(second)) rtrue; ix = second.receive_water(); if (ix) { if (ix ~= 2) remove self; rtrue; } } if (second == d_obj) <>; "L'eau ne lui ferait pas du bien."; Taste: if (OIU(self)) rtrue; "L'eau est chaude et insipide."; Drink: if (OIU(self)) rtrue; remove self; print "Vous avalez l'eau. C'est vaguement astringent dans votre bouche. Pas très satisfaisant..."; if (GoalOpen(self)) { print " Certainement que la soif sera bien plus réelle une fois envolé vers la Californie..."; print ""; Goaled(self); KillImp(firstgoal); ! thirst imp } new_line; rtrue; ], opentime 0, imp [; self.opentime++; switch (self.opentime) { 2: print "^... envolé ? Où avez-vous mis vos billets d'avion ?^"; 3: print "^Vous détestez cette sensation. Cela arrive ", (emph) "tout le temps.", " Vous faites une chose proprement et paf ! vous devez vous en soucier à nouveau. C'est pas juste ! Ces maudits billets doivent bien être quelque part par là.^"; return -1; 4: print "^[BUG] water imp^"; } ], prereqs firstgoal, has scenery;