Constant Story "Panoptique^";
Constant Headline "Un jeu par Les Contrôleurs.^Tapez @<< infos @>> pour les informations sur le jeu.^";

                          Include "vorple.h";
Include "parser";
Constant MAX_SCORE 1000;
[DeathMessage ;
    if (deadflag==3) print "Fin du service. À demain.";
    if (deadflag==4) print "Vous êtes expulsé et conduit en prison";
];
Include "verblib";
                          Include "vorple-multimedia.h";
                          Include "vorple-status-line.h";
                          Include "vorple-screen-effects.h";
Include "FrenchG";


Object controlRoom "Salle de contrôle 451"
    with description "Votre salle habituelle à cette heure-là de la journée. Vous êtes assis confortablement dans une position optimale face aux 12 écrans de surveillance devant vous. Les écrans sont numérotés de 1 à 12 et montrent les douze petites parties de la ville qui vous ont été assignées aujourd'hui. Votre travail consiste à surveiller chaque écran, et écrire un rapport si vous remarquez quoi que ce soit qui en vaille la peine.^",
has light;


[ CreditsSub ;
    "Ce jeu a été écrit par Les Contrôleurs et participe au concours 2019 de fictions interactives francophones.^^Comment jouer : vous pouvez @<< regarder l'écran numéro XX @>> ; si vous repérez un comportement suspect ou un délit, vous pouvez @<< écrire un rapport @>>. Votre prestation sera notée à la fin de votre ronde.^^Écriture : Hugo Labrande & Nighten Dushi.^Illustrations : Nighten Dushi.^Programmation : Hugo Labrande.^";
];

Verb meta 'info' 'infos'
*   ->Credits;



Array illustrations table 12;
Array illustrations_mini table 12;

[ Initialise ;
	location = controlRoom;
	print "^^Encore un peu de temps en salle de surveillance, et ça sera l'heure de votre pause. Concentrez-vous sur les douze écrans devant vous, et écrivez un rapport si vous remarquez quelque chose.";
	illustrations-->1 = "bancbegonia.png";
	illustrations-->2 = "ascenseur.png";
	illustrations-->3 = "rue.png";
	illustrations-->4 = "gare.png";
	illustrations-->5 = "abribus2.png";
	illustrations-->6 = "batiment.png";
	illustrations-->7 = "cafe.png";
	illustrations-->8 = "kiosque.png";
	illustrations-->9 = "abribus1.png";
	illustrations-->10= "fontaine.png";
	illustrations-->11= "parking.png";
	illustrations-->12= "magasin.png";
	illustrations_mini-->1 = "bancbegonia_mini.png";
	illustrations_mini-->2 = "ascenseur_mini.png";
	illustrations_mini-->3 = "rue_mini.png";
	illustrations_mini-->4 = "gare_mini.png";
	illustrations_mini-->5 = "abribus2_mini.png";
	illustrations_mini-->6 = "batiment_mini.png";
	illustrations_mini-->7 = "cafe_mini.png";
	illustrations_mini-->8 = "kiosque_mini.png";
	illustrations_mini-->9 = "abribus1_mini.png";
	illustrations_mini-->10= "fontaine_mini.png";
	illustrations_mini-->11= "parking_mini.png";
	illustrations_mini-->12= "magasin_mini.png";
	VorpleInitialise();
	VorpleConstructStatusLine(1);
	! "";
	"^"; ! ugh why is this needed
];

Global totalPoints = 0;
Global fin = 0;     ! Est-ce la fin ? (pour permettre de faire un dernier rapport ou un truc sans conséquence)

!============= parsing d'écrans

Global currentScreenNumber=0;

[ NoSuchFault ;
    print "après contrôle de votre rapport, il s'avère qu'aucun délit ou crime n'a été commis, contrairement à ce que vous indiquiez. Un fonctionnaire qui remplit des rapports erronés ralentit les services de l'État et fait diminuer leur efficacité. Vous connaissez les règles : nous espérons que votre pénalité vous conduira à réfléchir sur vos pratiques et à diminuer votre taux d'erreur en adoptant les @<< best practices @>>.";
    "";
];

Class screen
    with rapport [; NoSuchFault(); ""; ],
    nb_points -50;

[ getCurrentScreen i;
    switch(i) {
        1: return getScreenUn();
        2: return getScreenDeux();
        3: return getScreenTrois();
        4: return getScreenQuatre();
        5: return getScreenCinq();
        6: return getScreenSix();
        7: return getScreenSept();
        8: return getScreenHuit();
        9: return getScreenNeuf();
        10: return getScreenDix();
        11: return getScreenOnze();
        12: return getScreenDouze();
        default: return noscreen;
    }
];

[ getScreenUn ;
    switch(turns) {
        0: return screen01t1;
        1: return screen01t2;
        2: return screen01t3;
        3: return screen01t4;
        4: return screen01t5;
        5: return screen01t6;
        6: return screen01t7;
        7: return screen01t8;
    }
    return noscreen;
];

[ getScreenDeux ;
    switch(turns) {
        0: return screen02t1;
        1: return screen02t2;
        2: return screen02t3;
        3: return screen02t4;
        4: return screen02t5;
        5: return screen02t6;
        6: return screen02t7;
        7: return screen02t8;
    }
    return noscreen;
];

[ getScreenTrois ;
    switch(turns) {
        0: return screen03t1;
        1: return screen03t2;
        2: return screen03t3;
        3: return screen03t4;
        4: return screen03t5;
        5: return screen03t6;
        6: return screen03t7;
        7: return screen03t8;
    }
    return noscreen;
];

[ getScreenQuatre ;
    switch(turns) {
        0: return screen04t1;
        1: return screen04t2;
        2: return screen04t3;
        3: return screen04t4;
        4: return screen04t5;
        5: return screen04t6;
        6: return screen04t7;
        7: return screen04t8;
    }
    return noscreen;
];

[ getScreenCinq ;
    switch(turns) {
        0: return screen05t1;
        1: return screen05t2;
        2: return screen05t3;
        3: return screen05t4;
        4: return screen05t5;
        5: return screen05t6;
        6: return screen05t7;
        7: return screen05t8;
    }
    return noscreen;
];

[ getScreenSix ;
    switch(turns) {
        0: return screen06t1;
        1: return screen06t2;
        2: return screen06t3;
        3: return screen06t4;
        4: return screen06t5;
        5: return screen06t6;
        6: return screen06t7;
        7: return screen06t8;
    }
    return noscreen;
];

[ getScreenSept ;
    switch(turns) {
        0: return screen07t1;
        1: return screen07t2;
        2: return screen07t3;
        3: return screen07t4;
        4: return screen07t5;
        5: return screen07t6;
        6: return screen07t7;
        7: return screen07t8;
    }
    return noscreen;
];

[ getScreenHuit ;
    switch(turns) {
        0: return screen08t1;
        1: return screen08t2;
        2: return screen08t3;
        3: return screen08t4;
        4: return screen08t5;
        5: return screen08t6;
        6: return screen08t7;
        7: return screen08t8;
    }
    return noscreen;
];

[ getScreenNeuf ;
    switch(turns) {
        0: return screen09t1;
        1: return screen09t2;
        2: return screen09t3;
        3: return screen09t4;
        4: return screen09t5;
        5: return screen09t6;
        6: return screen09t7;
        7: return screen09t8;
    }
    return noscreen;
];

[ getScreenDix ;
    switch(turns) {
        0: return screen10t1;
        1: return screen10t2;
        2: return screen10t3;
        3: return screen10t4;
        4: return screen10t5;
        5: return screen10t6;
        6: return screen10t7;
        7: return screen10t8;
    }
    return noscreen;
];

[ getScreenOnze ;
    switch(turns) {
        0: return screen11t1;
        1: return screen11t2;
        2: return screen11t3;
        3: return screen11t4;
        4: return screen11t5;
        5: return screen11t6;
        6: return screen11t7;
        7: return screen11t8;
    }
    return noscreen;
];

[ getScreenDouze ;
    switch(turns) {
        0: return screen12t1;
        1: return screen12t2;
        2: return screen12t3;
        3: return screen12t4;
        4: return screen12t5;
        5: return screen12t6;
        6: return screen12t7;
        7: return screen12t8;
    }
    return noscreen;
];

Object parserScreen controlRoom
    with description [ob ;
        ob = getCurrentScreen(currentScreenNumber);
        !if (ob.description ofclass String) {print ob.description;} else {print ob.description();} return "";
        ob.description();
        give ob general;       ! Les écrans regardés ont l'attribut "general"
        return "";
    ],
    name 'ecran',
    before [; Touch: "Ce n'est pas un écran tactile.";
        SwitchOff: "Ces écrans ne peuvent pas être éteints.";
        SwitchOn: "Ces écrans sont allumés : ils le sont toujours.";
    ],
    each_turn [;
        if (turns==8) { fin=1; } "";
    ],
has scenery concealed;

[ SpecialExamineSub ;
    if (fin == 1) { print "Une alarme retentit ; c'est la fin de votre service. Vous entrez la séquence de sécurité qui vous déconnecte ; la porte s'ouvre automatiquement, et vous sortez.^^"; RapportFinal(); deadflag=3; rtrue; }
    if (noun == parserScreen) {
        currentScreenNumber = second;
    }
    <<Examine noun>>;
];

Extend 'examiner'
* noun number       ->SpecialExamine
* noun 'numero' number -> SpecialExamine;
Extend 'regarder'
* noun number       ->SpecialExamine
* noun 'numero' number -> SpecialExamine;
Verb 'concentrer' 'focaliser'
* 'moi' 'sur' noun number ->SpecialExamine;
Verb 'surveiller'
* noun number ->SpecialExamine;

!============= Les écrans

Screen noscreen
    with description "Il n'y a pas d'écran avec ce numéro.";

    
    
    
    
    
    
    
Screen screen01t1 "écran 1"
    with description "Sur cet écran, vous ne voyez pour l'instant qu'un banc vide, accolé à une bordure derrière laquelle un massif de bégonias pousse.";
    
Screen screen01t2 "écran 1"
    with description "Une femme marche dans la rue et passe devant le banc. Elle semble absorbée par son téléphone.";

Screen screen01t3 "écran 1"
    with description "Sur cet écran, juste un banc vide devant un massif de bégonias.";
    
Screen screen01t4 "écran 1"
    with description "Quelqu'un vient de s'asseoir sur le banc ; il s'agit d'un homme d'une vingtaine d'années, en train de manger un kebab. Il regarde une série sur son téléphone.";
    
Screen screen01t5 "écran 1"
    with description "Un homme d'une vingtaine d'années est en train de terminer un kebab ; il est en train de regarder une série sur son téléphone, les écouteurs dans les oreilles.";

Screen screen01t6 "écran 1"
    with description "Un homme assis sur un banc range ses écouteurs dans sa poche et froisse le papier d'aluminium qui contenait son kebab.";
    
Screen screen01t7 "écran 1"
    with description "Un homme se lève du banc et jette une boule de papier d'aluminium dans le massif de bégonias derrière lui.",
    rapport "un flagrant délit incontestable, d'autant plus grave que l'aluminium n'est pas compostable. Jeter ses déchets alimentaires sur la voie publique est un défi à l'autorité de l'État ; de plus, la protection de l'environnement a été déclarée grande cause nationale, et nous prenons ceci très au sérieux. Les images sont suffisamment claires pour que l'on puisse voir le visage du délinquant ; les données ont été envoyées au Centre de Reconnaissance Faciale, qui prendra le dossier en charge.",
    nb_points 10;
    
Screen screen01t8 "écran 1"
    with description "Sur cet écran, juste un banc vide devant un massif de bégonias.";
    
    
    
    
    
Screen screen02t1 "écran 2"
    with description "Une dame très âgée descend au rez-de-chaussée, la main sur un cabas à roulettes. Elle bouge machinalement sa mâchoire, comme si elle avait quelque chose dans la bouche.";

Screen screen02t2 "écran 2"
    with description "Une vieille dame descend de l'ascenseur au rez-de-chaussée. Deux jeunes femmes, visiblement amies,e prennent sa place dans l'ascenseur en riant.";

Screen screen02t3 "écran 2"
    with description "Deux jeunes femmes sont dans l'ascenseur et discutent de vive voix. Elles sont agitées et lancent plusieurs regards en direction de votre caméra.";
    
Screen screen02t4 "écran 2"
    with description "Deux jeunes femmes sortent de l'ascenseur au sixième étage. L'ascenseur reste vide, puis est appelé à un autre étage. Sur l'un des côté vous pouvez lire l'inscription @<< ACAB @>> fraîchement écrite au marqueur.",
    rapport "il s'agit ni plus ni moins que d'un acte de vandalisme égoïste, qui dégrade l'environnement urbain pour tout un chacun et pèse sur les frais de copropriété. De plus, l'inscription est particulièrement violente, une insulte aux gardiens de la paix, dont le travail difficile mais toujours professionnel est sans cesse dénigré par des menteurs et des imbéciles. Dégradation de biens publics et incitation à la haine des institutions.";
    
Screen screen02t5 "écran 2"
    with description "L'ascenseur descend au troisième étage où un jeune homme boutonneux entre. Il porte un pull dont la grande capuche cache partiellement son visage. Il appuie sur le bouton de l'étage du parking, tout en tapotant frénétiquement sur son téléphone.";

Screen screen02t6 "écran 2"
    with description "À l'étage du parking souterrain, un jeune homme en capuche descend, croisant maladroitement la route d'un homme dans un costume impeccable. Les deux se saluent à peine et l'homme bien habillé prend sa place dans l'ascenseur.";
    
Screen screen02t7 "écran 2"
    with description "Un homme bien habillé attend d'arriver à son étage avec impatience. Il regarde trois fois sa montre avant d'arriver au douzième niveau de l'immeuble. Il sort et laisse l'endroit vide.";
    
Screen screen02t8 "écran 2"
    with description "L'ascenseur est immobile, arrêté au douzième étage.";

    
    
Global mendiantInfractions = 0;
[ ExtraMendiant ;
    mendiantInfractions++;
    if (mendiantInfractions == 1 && turns ~= 6) { "Pour tout dire, ça n'est pas la première fois qu'on l'y prend.";    }
    if (mendiantInfractions == 2 && turns ~= 6) { "Un multi-récidiviste, qui n'en est pas à son premier séjour en prison. Ces gens-là sont des fardeaux pour la société ; combien de deniers publics dépensés parce qu'il refuse de rentrer dans le rang..."; }
    "";
];
    
Screen screen03t1 "écran 3"
    with description "L'écran montre le trottoir large d'une grande avenue, près d'une sortie de voitures. Un grand dégingandé se tient debout au milieu de ce trottoir ; il a une casquette et porte une tenue de camouflage.";
Screen screen03t2 "écran 3"
    with description "L'homme au milieu du grand trottoir arrête un couple qui sortait de l'allée et leur demande l'aumône ; le couple se détourne de l'homme rapidement et continue à marcher. L'homme leur souhaite une bonne journée.",
    rapport [; print "en effet, par arrêté préfectoral, la mendicité est interdite sur ce trottoir ; son auteur devra répondre de ses actes devant la justice."; ExtraMendiant(); rtrue; ],
    nb_points 20;
Screen screen03t3 "écran 3"
    with description "L'homme fait les cent pas au milieu du grand trottoir en attendant que quelqu'un passe. Il titube vers le mur, lui donne un coup de pied mal assuré, jette un coup d'oeil dans l'allée, et reprend son manège.",
    rapport [; print "nos agents ont procédé à un contrôle du taux d'alcoolémie, et il était en effet supérieur à la limite autorisée. Bien vu !"; ExtraMendiant(); rtrue; ],
    nb_points 20;
Screen screen03t4 "écran 3"
    with description "L'homme tente d'arrêter un étudiant en lui faisant signe d'enlever ses écouteurs ; celui-ci le contourne en faisant comme si il ne l'avait pas entendu. Malgré les interpellations sonores du grand maigre, l'étudiant ne lui adresse même pas un regard.",
    rapport [; print "ce genre de comportements agressifs et menaçants est intolérable dans les rues de notre beau pays ; la bienveillance envers son prochain est de rigueur. Bon travail."; ExtraMendiant(); rtrue; ],
    nb_points 40;
Screen screen03t5 "écran 3"
    with description "Deux jeunes filles marchent sur le trottoir en riant entre elles. L'homme à la veste de camouflage s'approche d'elles avec un sourire enjôleur et leur emboîte le pas, tout en les complimentant. Les jeunes filles rient d'un air gêné et pressent le pas, puis finissent par lui intimer d'arrêter avant de s'enfuir.",
    rapport [; print "la lutte contre le harcèlement de rue à caractère sexiste est une grande cause nationale, et est un délit qui sera sévèrement réprimé par la loi. Vos images sont incontestables."; ExtraMendiant(); rtrue; ],
    nb_points 70;
Screen screen03t6 "écran 3"
    with description "Le grand maigre à casquette tourne en rond en maugréant ; il tousse puis crache sur le sol, en direction de la sortie de voitures.",
    rapport [; print "une rue propre est une rue saine, et nous devons à nos concitoyens de garantir leur cadre de vie. Ce fait sera sanctionné."; ExtraMendiant(); rtrue; ],
    nb_points 20;
Screen screen03t7 "écran 3"
    with description "Une femme d'une trentaine d'années marche d'un pas vif sur le trottoir. L'homme de la rue tente sa chance ; elle s'arrête et fouille dans son porte-monnaie, et lui donne quelques pièces. Il la remercie bien bas ; elle sourit d'un air gêné, et reprend sa route.",
    rapport [; print "en donnant de l'argent à ce clochard, cette femme ne fait ni plus ni moins qu'encourager la mendicité. Si l'on ferme les yeux sur ceci, demain ils seront deux au même endroit, puis trois? Elle recevra une sanction."; ExtraMendiant(); rtrue; ],
    nb_points 70;
Screen screen03t8 "écran 3"
    with description "L'homme tourne en rond, puis finit par s'engouffrer vers la sortie de voitures. Il en ressort une petite minute plus tard en remontant sa braguette, et reprend sa déambulation.",
    rapport [; print "uriner sur la voie publique, c'est prendre l'État pour cible et chercher à rabaisser sa grandeur. Un délit qui sera lourdement réprimé. Merci de l'avoir relevé."; ExtraMendiant(); rtrue; ],
    nb_points 70;
    
    
    
    
    
Screen screen04t1 "écran 4"
    with description "Sur la place de la gare, des voyageurs entrent et sortent constamment. Sur le côté, une femme attend.";
Screen screen04t2 "écran 4"
    with description "De nombreux voyageurs sortent en même temps de la gare ; un train vient d'arriver. Un homme s'approche d'une femme qui était en train d'attendre sur le côté et lui donne un livre, puis s'en va immédiatement.",
    rapport "cet homme est un délinquant que nous avions dans nos fichiers depuis longtemps, faisant l'objet d'une surveillance particulière pour des altercations avec la police en manifestations et avoir refusé les prélèvements biologiques. Sa complice pourra écoper d'une sanction pour s'être associée à un tel délinquant. Bien vu.",
    nb_points 80;
Screen screen04t3 "écran 4"
    with description "Un flot de voyageurs sort de la gare à un rythme soutenu. Une femme place un livre dans son sac ; votre système ne reconnaît pas ce livre et une lumière d'alerte s'affiche.",
    rapport "nous avons appréhendé la jeune femme, qui s'est avérée être affiliée à un groupuscule d'extrême gauche anarcho-féministe. Le livre retrouvé en sa possession, @<< Petit guide d'insoumission @>>, est un livre prônant la rébellion et le ciblage des manifestations pour causer le désordre et créer des dégâts économiques en enrayant la croissance. Elle sera jugée en comparution immédiate.",
    nb_points 80;
Screen screen04t4 "écran 4"
    with description "Une femme qui attendait près de l'entrée de la gare se joint au flot de voyageurs qui en sortent.";
Screen screen04t5 "écran 4"
    with description "Une poignée de voyageurs entrent et sortent de la gare ; la place est calme.";
Screen screen04t6 "écran 4"
    with description "Une poignée de voyageurs entrent et sortent de la gare ; la place est calme.";
Screen screen04t7 "écran 4"
    with description "Un groupe de voyageurs sort de la gare en même temps. Sans doute des passagers du 11h22 ; les trains arrivent toujours à l'heure.";
Screen screen04t8 "écran 4"
    with description "Un homme s'adosse au mur près de l'entrée de la gare, et fume une cigarette roulée. La fumée semble incommoder les quelques passagers qui entrent et sortent de la gare ; certains se retournent et lui lancent un regard incrédule.",
    rapport "l'homme que nous avons arrêté près de la gare était en effet en possession de substances illicites à effet euphorisant, que nous lui avons confisqué. Il restera au poste de police jusqu'à ce qu'il dévoile son réseau. Belle prise.";
    
    
    
    
    
Screen screen05t1 "écran 5"
    with description "Une dizaine de personnes attendent le prochain bus. Elles s'avancent, voyant le bus arriver.";
Screen screen05t2 "écran 5"
    with description "Le bus s'arrête, mais alors que les gens y embarque une voiture le double à toute vitesse. Il a manqué de renverser plusieurs personnes et disparaît sans que vos systèmes n'ai pu relever la plaque.";
Screen screen05t3 "écran 5"
    with description "Un fois toutes les personnes embarquées, le bus de ville reprends sa route vers le prochain arrêt. La circulation reprend son mouvement normal.";
Screen screen05t4 "écran 5"
    with description "Un homme un peu enrobé attends seul, assis à l'arrêt de bus. Emmitouflé dans plusieurs couches de vêtements chaud, il semble somnoler.";
Screen screen05t5 "écran 5"
    with description "Un jeune homme avec un sac à dos arrive à l'arrêt de bus. Il reste debout malgré la place qu'il reste de la place sur le banc, à côté d'un homme enrobé.";
Screen screen05t6 "écran 5"
    with description "Un homme chaudement habillé somnole, tandis qu'un jeune homme déverrouille mécaniquement son téléphone pour paraître occupé.";
Screen screen05t7 "écran 5"
    with description "Un groupe de touriste étrangers viens rejoindre les deux personnes attendant à l'arrêt de bus. Ce qui semble être la cheffe du groupe compte son effectif en agitant son drapeau.";
Screen screen05t8 "écran 5"
    with description "De nombreuses personnes attendent le prochain bus, dont un femme avec un drapeau vert sous la main. Elle semble inquiète et regarde à droite à gauche.";
    
    
    
    

Screen screen06t1 "écran 6"
    with description "Cette caméra montre l'entrée d'un immeuble moderne, à la porte vitrée ; une plaque indique que c'est l'immeuble du Crédit Industriel.";
Screen screen06t2 "écran 6"
    with description "Un homme sort de l'immeuble du Crédit Industriel, et fait quelques pas sur le trottoir. Il sort une cigarette de sa poche.";
Screen screen06t3 "écran 6"
    with description "L'homme barbu en costume bleu marine est en train d'allumer une cigarette à quelques pas du Crédit Industriel.";
Screen screen06t4 "écran 6"
    with description "Un homme en costume bleu fume une cigarette devant le Crédit Industriel en faisant les cent pas ; il a l'air très absorbé.";
Screen screen06t5 "écran 6"
    with description "L'homme barbu tire toujours sur sa cigarette, tout en contemplant la rue d'un air rêveur, le dos tourné au bâtiment du Crédit Industriel.";
Screen screen06t6 "écran 6"
    with description "L'écran montre le bâtiment du Crédit Industriel, devant lequel se tient un homme, qui prend sa pause. La cigarette de l'homme barbu touche à sa fin.";
Screen screen06t7 "écran 6"
    with description "Devant le Crédit Industriel, un homme en costume termine sa cigarette, et s'apprête à la jeter.";
Screen screen06t8 "écran 6"
    with description "L'homme en costume sort une petite boîte de son costume et range son mégot dans un des compartiments, puis sort un badge et rentre dans le bâtiment du Crédit Industriel.";
    
    
    
    
    
Screen screen07t1 "écran 7"
    with description "Au bar, un jeune barista semble un peu confus. Il regarde régulièrement ses notes et hésite entre plusieurs boite de café disposés sur un étagère.";
Screen screen07t2 "écran 7"
    with description "Un couple de jeunes adultes s'installent dans le café. L'homme fait signe au serveur qui vient prendre leur commande.";
Screen screen07t3 "écran 7"
    with description "Sur un table au milieu du café, un homme parle de manière très enthousiaste à sa compagne. Au comptoir, un barista explique calmement quelques chose à un de ses collègues, visiblement plus jeune.";
Screen screen07t4 "écran 7"
    with description "Alors qu'il discutait, un jeune homme sort discrètement de sa poche un papier, qu'il montre à sa compagne. Votre système vous indique qu'il s'agit d'un visa et d'un droit de passage pour un pays voisin.",
    rapport "se procurer un titre de séjour sans en informer les autorités est immédiatement suspect. Pourquoi refuser de passer par la procédure usuelle et soumettre un dossier à l'administration, qui étudie votre cas en quelques semaines seulement ? Tenter de contourner la procédure est un délit, et nul doute que l'État voudra fouiller dans le passé de ces deux-là.",
    nb_points 90;
Screen screen07t5 "écran 7"
    with description "Une jeune femme attablée gifle son compagnon et sors du café d'un pas vif, sans se retourner. Elle a oublié son sac.";
Screen screen07t6 "écran 7"
    with description "Un jeune homme, visiblement très contrarié, se tient la joue. Les autres clients du café le regarde ahuris. Il baisse le regard quelques minutes avant de partir aux toilettes d'un pas pressé.";
Screen screen07t7 "écran 7"
    with description "Au milieu du café, vous voyez une table vide avec des consommation à peine entamée. Les conversations vont bon train parmi les client. Une femme d'âge moyen se lève discrètement de sa place et ramasse quelque chose dans un sac abandonné à la table vide. Elle se dirige ensuite vers la sortie.",
    rapport [; "un larcin osé, en plein milieu de nombreux témoins. Cette femme n'a pas hésité à tenter d'utiliser sa pauvreté comme circonstance atténuante pour ce vol, rendez-vous compte. L'État-providence s'occupe très bien des pauvres, qui vivent dans un certain confort ; il est honteux de suggérer que tous les pauvres sont des voleurs. Le tribunal n'a bien entendu pas retenu son argument et l'a condamnée comme il se doit."; ],
    nb_points 60;
Screen screen07t8 "écran 7"
    with description "Les garçons de café vont et vienne entre les commandes, faisant leur possible pour donner le bon café à la bonne table.";

    
    
    
    
    
Screen screen08t1 "écran 8"
    with description "Le vendeur de journaux regarde son téléphone en attendant le prochain client.";
Screen screen08t2 "écran 8"
    with description "Un homme d'un âge mûr feuillette les titres du jour. Le vendeur de journaux le regarde poliment en attendant qu'il passe à l'achat.";
Screen screen08t3 "écran 8"
    with description "Trois membres des forces de l'ordre traversent la place lentement. Le vendeur de journaux évite de croiser leur regard.";
Screen screen08t4 "écran 8"
    with description "Le vendeur de journaux scrute la foule l'air inquiet. Un client interrompt ses pensées.";
Screen screen08t5 "écran 8"
    with description "Un groupe de touriste étranger suivent un guide arborant un petit drapeau vert. Ils prennent quelques photos de la place et reprennent leur route.";
Screen screen08t6 "écran 8"
    with description "Une jeune femme traverse la place d'un pas pressé en essuyant ses larmes.
Le vendeur de journaux la regarde d'un air curieux.";
Screen screen08t7 "écran 8"
    with description "Le vendeur de journaux attrape l'une de ses revues et la feuillette en attendant un nouveau client. Il trifouille sa moustache alors qu'il en arrive à la page des sports.";
Screen screen08t8 "écran 8"
    with description "Un couple et un jeune enfant s'arrêtent au kiosque. Ils y achètent le journal et, après un début de caprice, une confiserie.";

    
    
    
    
    
Screen screen09t1 "écran 9"
    with description "On y voit un abribus, arrêt @<< Libération @>> sur la ligne 5. Une vieille dame attend le bus avec son cabas.";
Screen screen09t2 "écran 9"
    with description "Le bus numéro 5 s'arrête à l'arrêt @<< Libération @>>. Une vieille dame se place devant la porte, mais un homme avec une poussette veut descendre du bus. La vieille dame tente de monter, mais l'homme passe en force et la bouscule avec la poussette en criant @<< Laissez-moi descendre, merde ! @>>.",
    rapport "Ces comportements menaçants et intolérants envers nos aînés sont une plaie : avec ce genre de comportements, c'est la mémoire, et l'Histoire, qu'on foule aux pieds. Sans parler de l'exemple déplorable donné au bébé dans cette poussette ; les parents doivent être responsabilisés. Le suspect a été interpellé.",
    nb_points 40;
Screen screen09t3 "écran 9"
    with description "Les portes du bus se referment et le bus quitte l'arrêt @<< Libération @>>.";
Screen screen09t4 "écran 9"
    with description "Un couple de garçons adolescents marche sur le trottoir en se tenant la main, et s'assoient à l'abribus.";
Screen screen09t5 "écran 9"
    with description "Les deux garçons sont assis sur le banc à l'arrêt @<< Libération @>>, et se galochent avec appétit.",
    rapport "L'exhibition explicite de sa sexualité alternative en public est contraire aux bonnes m@oeurs et à la moralité, et peuvent heurter la sensibilité de l'enfance et de la jeunesse. Les deux hommes ont été convoqués.",
    nb_points 20;
Screen screen09t6 "écran 9"
    with description "Deux garçons sont en train de s'embrasser sur le banc de l'abribus. Un homme plus âgé se dirige vers l'abribus, et semble surpris de les voir.";
Screen screen09t7 "écran 9"
    with description "L'homme parle aux garçons assis à l'abribus, et votre écran active le sous-titrage. @<< Vous ne devriez pas faire ça en public, allez faire ça ailleurs ! @>> fait l'homme. @<< Va te faire foutre, hé ! - Mêle-toi de tes oignons, l'homophobe ! @>> rétorquent-ils vertement.",
    rapport "L'insulte et l'intolérance face à une divergence d'opinion ne sont pas compatibles avec les valeurs de la République ; on ne saurait limiter la liberté d'expression sous prétexte que toutes les opinions ne sont pas plaisantes. De plus, cette accusation d'homophobie nuit à l'image de ce pauvre homme et présente un caractère potentiellement diffamatoire. Les auteurs seront convoqués devant la justice.",
    nb_points 70;
Screen screen09t8 "écran 9"
    with description "Le vieil homme et les deux garçons sont toujours en train d'avoir une discussion orageuse ; la fonction de sous-titrage de votre écran en perd un peu le nord.";

    
    
Global screen10reported = 0;
    
Screen screen10t1 "écran 10 1"
    with description "Cet écran montre une petite place calme, dans la partie piétonne de la vieille ville. Une fontaine sculptée coule, et le mouvement de l'eau attire votre @oeil quelques secondes.";
Screen screen10t2 "écran 10 2"
    with description "Une jeune femme avec un short et un petit sac à dos s'assoit sur le rebord de la fontaine, lui tournant le dos.";
Screen screen10t3 "écran 10 3"
    with description "Une jeune femme est assise sur le rebord de la fontaine et lit un livre. Votre système vous indique qu'il s'agit de @<< Quand tu reviendras @>>, un livre qui ne pose pas de problème.";
Screen screen10t4 "écran 10 4"
    with description "Une jeune femme assise sur le rebord de la fontaine lit un livre. Un vieil homme entre dans le champ de la caméra ; il porte une guitare sur son dos.";
Screen screen10t5 "écran 10 5"
    with description "Un vieil homme s'installe sur un tabouret et accorde sa guitare classique. Une jeune femme, qui lisait un livre assise sur le rebord de la fontaine, lève les yeux et se tourne vers lui. Il lui sourit ; elle lui sourit également et se replonge dans son livre.";
Screen screen10t6 "écran 10 6"
    with description "Un homme d'une soixantaine d'années est assis sur un tabouret et joue une mélodie douce sur une guitare classique. Un peu plus loin, sur le rebord de la fontaine, une jeune femme est plongée dans son livre.",
    rapport [; screen10reported=1; "l'infraction est claire, et s'apparente à de la mendicité et du tapage diurne : nous devons garantir un cadre agréable au centre-ville, loin de toute intrustion sonore non désirée. Le fait qu'il ait un tabouret pliant montre de la préméditation. Le suspect a été interpellé."; ],
    nb_points 30;
Screen screen10t7 "écran 10 7"
    with description "Un homme d'une soixantaine d'années est assis sur un tabouret et joue une mélodie douce sur une guitare classique. La jeune femme assise sur la fontaine lève les yeux de son livre et rêvasse, écoutant la musique d'une oreille distraite.",
    rapport [; if (screen10reported==0) { screen10reported=1; "l'infraction est claire, et s'apparente à de la mendicité et du tapage diurne : nous devons garantir un cadre agréable au centre-ville, loin de toute intrustion sonore non désirée. Le fait qu'il ait un tabouret pliant montre de la préméditation. Le suspect a été interpellé."; } else { "ce rapport est identique en tous points à un de vos rapports précédents. En tant que représentant de l'État, vous devez fidélité et honnêteté à votre employeur, plutôt que de tenter de gonfler artificiellement votre productivité. Vous serez sanctionné."; } ],
    nb_points [; if (screen10reported==0) { return 30; } else { return -50;} ];
Screen screen10t8 "écran 10 8"
    with description "L'homme à la guitare gratte doucement, les yeux fermés, et chante en harmonie avec son instrument. La jeune fille soupire, sourit, et se replonge dans son livre.",
    rapport [; if (screen10reported==0) { screen10reported=1; "l'infraction est claire, et s'apparente à de la mendicité et du tapage diurne : nous devons garantir un cadre agréable au centre-ville, loin de toute intrustion sonore non désirée. Le fait qu'il ait un tabouret pliant montre de la préméditation. Le suspect a été interpellé."; } else { "ce rapport est identique en tous points à un de vos rapports précédents. En tant que représentant de l'État, vous devez fidélité et honnêteté à votre employeur, plutôt que de tenter de gonfler artificiellement votre productivité. Vous serez sanctionné."; } ],
    nb_points [; if (screen10reported==0) { return 30; } else { return -50;} ];


    
    
    
    
    
Screen screen11t1 "écran 11"
    with description "Rien ne semble bouger sur l'écran, pour le moment il n'y a personne dans ce parking.";
Screen screen11t2 "écran 11"
    with description "Un couple avec un jeune enfant entrent dans le parking à pied. L'enfant pousse joyeusement un cabas rempli de quelques articles achetés au supermarché.";
Screen screen11t3 "écran 11"
    with description "Une famille range des articles dans le coffre de leur voiture. Après avoir fini, ils démarrent leur voiture et se dirigent vers la sortie.";
Screen screen11t4 "écran 11"
    with description "Rien ne semble bouger sur l'écran ; pour le moment il n'y a personne dans ce parking.";
Screen screen11t5 "écran 11"
    with description "Un voiture de sport blanche arrive dans le parking et se gare dans l'un des derniers emplacements disponibles. Un homme en costume noir en sort, un sacoche à la main. Vos système peuvent relever la plaque",
    rapport [; if (screen05t2 has general) { "nous avons bien reçu votre rapport, avec les deux extraits vidéo successifs. Nous avons transmis au procureur, mais celui-ci a décidé de ne pas donner suite. Il est de l'intérêt général qu'un grand patron puisse arriver à temps à ses réunions importantes, aux retombées économiques lourdes ; même si la situation est regrettable, elle n'a pas eu de conséquences. Affaire classée."; } else { NoSuchFault(); ""; } ],
    nb_points [; if (screen05t2 has general) { return 0; } else {return -50; } ];
Screen screen11t6 "écran 11"
    with description "Rien ne semble bouger sur l'écran ; pour le moment il n'y a personne dans ce parking.";
Screen screen11t7 "écran 11"
    with description "Un jeune homme en capuche entre dans votre champ de vision. Les mains dans les poches, il entre dans une petite voiture usée et la démarre.";
Screen screen11t8 "écran 11"
    with description "Un chat sort de sous une voiture et s'enfuit en vitesse hors du champ de la caméra.";

    
    
    
    
    
Screen screen12t1 "écran 12"
    with description "Cette caméra filme une rue passante ; à l'angle de la rue, l'entrée d'un supermarché, flanquée d'étalages de fruits et légumes.";
Screen screen12t2 "écran 12"
    with description "Un grand homme en costume marche d'un pas décidé dans la rue et passe devant le supermarché.";
Screen screen12t3 "écran 12"
    with description "Un homme en costume gris est en train de regarder les pommes sur l'étalage du supermarché qui fait angle dans la rue.";
Screen screen12t4 "écran 12"
    with description "Un homme en costume gris est en train de traverser la rue en mangeant une pomme.",
    rapport [; if (screen12t3 has general) { "votre rapport ainsi que la vidéo montrent des évènements qui méritaient enquête ; cependant, nous nous sommes entretenus avec l'homme, et il s'avère qu'il a simplement oublié de payer sa pomme, ce qu'il a fait en bonne et due forme. Affaire classée."; } else { rfalse; } ],
    nb_points 0;
Screen screen12t5 "écran 12"
    with description "L'écran montre un angle de rue dont le rez-de-chaussée est occupé par un supermarché ; quelques étalages de fruits et légumes sont disposés près de l'entrée.";
Screen screen12t6 "écran 12"
    with description "L'écran montre un angle de rue dont le rez-de-chaussée est occupé par un supermarché ; quelques étalages de fruits et légumes sont disposés près de l'entrée.";
Screen screen12t7 "écran 12"
    with description "Une femme et son enfant passent devant un supermarché ; le petit semble vouloir y entrer, et tire la main de sa mère, qui ne bouge pas.";
Screen screen12t8 "écran 12"
    with description "Une mère tenant son enfant par la main marchent dans la rue.";



    
    
!============== Images des écrans

[ locationDesc ;
    VorpleStyle(STYLE_EMPHASIS);
    print "Écran ", currentScreenNumber, ". ";
    switch (currentScreenNumber) {
        1: print "Cet écran montre un banc près d'un massif de bégonias.";
        2: print "Cette caméra filme l'un des ascenseurs d'un immeuble résidentiel.";
        3: print "Cet écran montre un large trottoir au bord d'une grande avenue.";
        4: print "Ceci est la caméra de surveillance du parvis de la gare.";
        5: print "Cette caméra surveille un arrêt de bus sur une grande artère de la ville.";
        6: print "Cet écran montre l'entrée du bâtiment du Crédit Industriel.";
        7: print "La caméra filme l'intérieur d'un café très apprécié dans le quartier.";
        8: print "L'écran montre une grande place fréquentée, son kiosque à journaux, et un bar en arrière-plan.";
        9: print "Cette caméra filme un abribus, arrêt @<< Libération @>>.";
        10:print "Cet écran montre une petite place de la vieille ville.";
        11:print "Cette caméra filme un vieux parking souterrain, qui est toujours bondé de voitures.";
        12:print "Cet écran vous montre l'angle d'une rue passante, où un supermarché est situé.";
    }
    VorpleEndStyle();
    "";
];


! Trick to preload images once at the very beginning
Object Preload "" StatusLineRulebook,
    with description [; 
	VorplePreloadImages(illustrations);
	VorplePreloadImages(illustrations_mini);
	remove self;
    ];

Object MyStatusLineRule "" StatusLineRulebook,
    with description [;
        if (currentScreenNumber == 0) rtrue;
        VorpleStatusLineClear();
        VorpleSetOutputFocus("status-line-middle");
        VorpleOpenHTMLTag("span", "ecrans");
        VorpleImage(illustrations-->currentScreenNumber, "", IMAGE_CENTERED);
        VorpleOpenHTMLTag("span", "ecrans-desc"); locationDesc(); VorpleCloseHTMLTag();
        VorpleCloseHTMLTag();
        !VorpleSetOutputFocus("status-line-right");
        !PrintStringOrArray(VorpleStatusLineLeftHand);
        VorpleSetOutputFocus("status-line-mobile");
        VorpleOpenHTMLTag("span", "ecrans");
        VorpleImage(illustrations_mini-->currentScreenNumber, "", IMAGE_CENTERED);
        VorpleOpenHTMLTag("span", "ecrans-desc"); locationDesc(); VorpleCloseHTMLTag();
        VorpleCloseHTMLTag();
        VorpleSetOutputFocusMainWindow();
    ];









!============== Dénonciation

Object listeRapports;

[ ReportSub;
    if (turns ==0) { "[Pour écrire un rapport, il faut d'abord que vous ayez vu quelque chose qui mérite d'en faire un. Regardez un des écrans, numérotés de 1 à 12.]"; }
    turns = turns-1;
    totalPoints = totalPoints + getCurrentScreen(currentScreenNumber).nb_points;
    if (getCurrentScreen(currentScreenNumber) in listeRapports) {
        print "Vous avez déjà écrit un rapport sur ce que vous venez de voir ; levez le nez et regardez un écran.";
    } else {
        move getCurrentScreen(currentScreenNumber) to listeRapports;
        print "Vous écrivez rapidement un rapport sur ce que vous venez de voir.";
    }
    turns = turns+1;
    return true;
];

[ ReportBadPhrasingSub ;
    "Pour écrire un rapport sur ce que vous avez vu, il vous suffit d'ÉCRIRE RAPPORT.";
];

Verb meta 'ecrire'
* 'un' 'rapport'    ->Report
* 'rapport'         ->Report
* 'rapport' 'sur' topic ->ReportBadPhrasing;

Extend 'faire'
* 'un' 'rapport'    ->Report
* 'rapport'         ->Report
* 'rapport' 'sur' topic ->ReportBadPhrasing;

Verb 'rapporter' 'reporter' 'denoncer'
*                   ->Report;

Verb meta 'rapport'
* ->Report;
    
!============== Rapport Final

Object secondaryList;  ! on a besoin de ça parce que quand on insère les rapports c'est "last in first out", donc il faut les lire à l'envers...

[ RapportFinal i ob ;
  ! remettre dans l'ordre
  while (child(listeRapports)) move child(listeRapports) to secondaryList;
  VorpleOpenHTMLTag("span", "rapport");
  ! afficher les points et les conséquences et tout
  i=0;
  objectloop (ob in secondaryList) {
    i=i+1;
    print "Rapport numéro "; print i; print " : ";
    !print "obj : ", (the) ob;
    ob.rapport();
  }
  if (i==0) {
    print "Vous n'avez pas fait de rapports pendant une heure. Un agent qui ne participe pas à l'effort de l'État pour améliorer les conditions de vie des habitants ne sert pas l'État correctement et coûte de l'argent inutilement. Nous vous infligeons un blâme avec retenue sur paie. Faites en sorte que ça ne se reproduise pas.";
    totalPoints = totalPoints - 100;
  }
  score = totalPoints;
  if (score < -100) {
    print "^^Nous sommes déçus de votre performance, au vu du nombre important de rapports erronés que vous avez soumis. En fait, la seule explication qui nous vient à l'esprit est celle d'un sabotage, d'une tentative de noyer nos services dans des rapports erronés. Cette tentative de rébellion est futile ; vous vous en expliquerez devant le juge.";
    VorpleCloseHTMLTag();
    deadflag=4;
  }
  VorpleCloseHTMLTag();
];