!% -SD !============================================================================ Constant Story "Vengeance"; Constant Headline "^The Interactive Fiction debut of Victor Gijsbers.^ This work is released under the GNU General Public License, version 3 or any later version. You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.^"; Release 1; Serial "190818"; ! for keeping track of public releases !Constant MAX_SCORE = 10; Constant DEATH_MENTION_UNDO; Constant NO_SCORE; Include "parser"; Include "verblib"; !============================================================================ ! Object classes Class Room with description "UNDER CONSTRUCTION.", has light; Class Prop with before [; Examine: return false; default: print_ret "You don't need to worry about ", (the) self, "."; ], has scenery; Class Furniture with before [; Take,Pull,Push,PushDir: print_ret (The) self, "is too heavy for that."; ], has static supporter; !============================================================================ ! The game objects !---------------------------------------------------------------------------- ! *** The corridor where the game starts *** !---------------------------------------------------------------------------- Room corridor_1 "Dark corridor" with description [; if(emotions.rage == 0) { print "A small, dank corridor between the fighting pits to the south and the slave cells to the north. An iron gate in the eastern wall leads to the rest of Lord Haran Damaskos' mansion. The corridor is built in heavy grey stone, its walls unadorned but covered with lichen. You have come to dread treading this place, as it invariably led to episodes of pain and death."; if(self hasnt visited) {print "^^Two guards hold you by the shoulders as they lead you back to your cell.";}; return true; } else { "This cramped hallway has been part of your prison for too long, the heavy stone walls caging your body and oppressing your spirit. Towards the south lie the fighting pits - the memories of ancient battles make you tense your muscles. On the other side lie the cells where the slaves are kept like cattle. A heavy iron gate in the eastern wall is all that stands between you and Haran's death."; } ], has ; Prop cor_1_walls "walls" corridor_1 with name 'wall' 'walls', description [; if(emotions.rage == 0) { "These walls are thick, moist and cold to the touch. The stones fit neatly, ensuring that it is impossible to pry one out."; } else { "Hard and unrelenting, these walls are your cage."; }; ], before [; Attack: if(emotions.rage == 0) { "Attacking the walls will surely serve no purpose. They are much too hard."; } else { if(parent(bar) == player) { if (guards.dead == 0){ "Grinning madly at the advancing guards, you softly and repeatedly hit the walls with the iron bar. The dry sounds resemble a clock ticking away the last few seconds of your goalers' lives. You can see their knuckles going white as they grip their swords more tightly."; } else { deadflag = 3; print "With the heavy iron bar clenched in your fists, you hit one of the lichen-covered wall. The force of the impact numbs your hands, but the stones are undamaged. You must escape! They can no longer keep you here! Reaching out towards the bestial strength that lies at the heart of your rage, you hit the walls again and again. Each collision is accompanied by the loud noise of metal on stone. The sound of shouts and running footsteps coming from the cell complex barely registers as your attention is occupied by the increasing pain in your arms and hands. Chips of stone start to fly around. The iron bar slowly bends, then breaks into two after a particularly violent hit. At that moment four guards burst into the corridor, swords drawn. Your face twisted inhumanly, you utter a cry of hate that seems to tear the world itself apart. You have only one thought: "; style bold; print "Kill."; style roman; " ^^ Your last sensations are of sharp pain and a world turned red entire.^"; } } else { if (guards.attacking == 0 && guards.dead == 0) { print "With a sudden jerk you free yourself from the grip of the guards. "; } print "You hit one of the walls hard with your bare hands. It hurts, but you do not flinch. The pain makes you feel alive."; if (guards.attacking == 0 && guards.dead == 0) { print " With a surprised shout, the guards grab their swords and advance towards you.^"; guards.loose(); return true; } }; }; ], has pluralname; Prop "stones" corridor_1 with name 'stone' 'stones', description [; if(emotions.rage == 0) { "These stones have been cut from the hardest granite. It is certainly impossible to pry one of them loose."; } else { "These stones have been cut from the hardest granite. You would like to see them smeared with Haran's brains."; }; ], before [; Attack: <>; ], has pluralname; Prop "lichen" corridor_1 with name 'lichen' 'moss' 'plant' 'plants', description [; if(emotions.rage == 0) { "The delicate green and orange hues of the lichen remind you of an autumnal forest. You used to take long hikes through the woods surrounding your father's country estate, long ago, before you turned to wine and dice. The worst thing about confinement in an underground dungeon is that one can never hear the wind softly rustle the leaves of the ashes, never see the sun set in a sea of red and golden clouds, never feel the refreshing coolness of raindrops on one's laughing face."; } else { "The lichen definitely proves that Lord Haran has no qualms about housing his slaves in most unhealthy quarters. Living in the damp and cold dungeons under the mansion, more than one slave died from pneumonia before he could meet a grizzly fate in the pits."; } ], has ; Object gate "iron gate" corridor_1 with name 'iron' 'gate' 'fence' 'door', bar_present 1, before [; Examine: if(self.bar_present == 0) { "The heavy iron gate separates the cells and pits from the mansion proper. Two bent parts of rusty metal indicate where you tore off an iron bar."; } else { "The heavy iron gate separates the cells and pits from the mansion proper. One of the bars has rusted almost through. With sufficient strength, it might be torn loose."; }; Attack, Pull: if(self.bar_present == 1) { <>; } else { if(emotions.rage == 0) { "The gate is far too strong and sturdy for you to have any chance of destroying it."; } else { guards.loose(); "You grab the heavy iron gate with both your hands and attempt to pull it apart. Your muscles bulge, sweat appears on your forehead, but the bars do not move a single inch. After a few minutes, you have to admit your defeat."; } }; ], with_key gate_key, door_dir e_to, door_to hallway, has scenery door lockable openable locked; Object bar "iron bar" corridor_1 with name 'iron' 'bar' 'bars' 'pipe' 'stave' 'club' 'rod', description [; if(emotions.rage == 0) { "A heavy iron bar, some eighty centimetres long and weighing perhaps five kilogram. The ends are rusty, and what paint once covered it fell victim to the damp long ago."; } else { "A heavy steel bar, allowing you to reach farther and hit harder than when fighting with your bare fists. No skull will survive a good swing with this baby."; } ], before [; Take, Pull, Attack: if(gate.bar_present == 1) { if(emotions.rage == 0) { guards.loose(); "You grab the iron bar and pull with all your might - but it hardly budges. Your muscles feel tired and weak, as they always do between fights. It is only when you enter the pits, hearing the cries of Lord Haran and his guests, that your blood starts boiling and you are filled with the power to break bones and tear bodies apart. Your strength lies in your hate. ^ Maybe you should go into a rage."; } else { move bar to player; gate.bar_present = 0; give bar ~scenery; guards.loose(); "With a bloodthirsty cry, you grab the iron bar and tear it loose as if it were made of paper. You hear the guards behind you gasp. Fast as lightning you turn around. ^ ~It's time to die,~ you hiss."; } } else { return false; }; ], has scenery; Object guards "guards" corridor_1 with name 'two' 'guard' 'guards' 'man' 'men' 'keeper' 'keepers' 'goaler' 'goalers' 'Roger' 'Frank', dead 0, description [; if(self.attacking == 0) { if (emotions.rage == 0) { "The guards, Frank and Roger, are talking about their children. Apparently, Roger's seven year old son is afflicted with a mysterious disease and the doctors fear for his life. They are so engrossed in this subject that they do not seem to be paying you very much attention. Both have a sword hanging from their belt, which they can probably reach much faster than you."; } else { "Two of the cruel goalers that hold you captive. You remember vividly how one of them beat a young slave who was too scared to fight to death with the side of his sword. The young boy's cries of pain and despair mixed with the sickening sound of cracking bones still echo in your mind."; } } else { if (emotions.rage == 0) { "Both men have drawn their swords and are carefully advancing towards you, neither of the two eager to strike the first blow and expose himself to you. Frank is a bit of a coward, always trying to intimidate the slaves with words but never actually carrying out any of his threats. You expect Roger to attack first."; } else { "Your eyes are first drawn towards the glistening tips of their sharp swords, but soon find their way upwards to the guards' eyes. As they look into yours and see the passionate hate that courses through your being, they hold back for a moment. Their eyes betray fear. You bare your teeth."; } }; ], life [; Kiss: if (emotions.rage == 0) { "Tenderness will not make them release you."; } else { "You are not a succubus!"; }; Give: if (emotions.rage == 0) { "The guards cannot be bribed with presents."; } else { "The only present they'll receive from you is a swift death."; }; Ask, Tell, Answer, Order: if (emotions.rage == 0) { "This is not the time for conversation."; } else { "You cry in wordless rage."; }; Show: if (emotions.rage == 1 && guards.attacking == 1) { if (noun == bar) { "You wave the iron bar in front of the guards, daring them to come closer."; } return false; }; return false; ThrowAt: if (noun == bar) { "No. It would be more satisfying to hit them with it."; }; return false; Attack: if (emotions.rage == 0) { if (parent(bar) == player) { "You do not feel strong enough to kill the guards. [And if you get here, its a BUG!]"; } else { "Attacking them with your bare hands is not going to work. You need a weapon first, preferably a sharp or heavy one."; }; } else { if (guards.attacking == 0) { deadflag = 3; "With a sudden jerk you free yourself from the grip of the guards. Turning to the one on your left, you grab his head in both your hands and smash it against the wall as hard you can. Blood spatters all around. He struggles feebly, but you hardly feel his pounding fists against your chest as you keep hitting his head against the hard grey stones. The fourth impact is accompanied by the sound of breaking bone. The pounding stops and the body goes limp in your arms. The guard's eyes bulge out of his head in an unnatural way, like those of a surprised, dead fish. Vengeance. ^^ Suddenly, you feel a sharp, breath-taking pain. Four inches of sharp steel protrude from your chest. ~You bastard, you killed Frank!~ screams the guard behind you. You open your mouth to cry out your pain, but all you can do is cough up blood. You collapse to the ground, and all goes dark."; } else { if (parent(bar) == player){ "[Player attacks attacking guards with iron bar. TODO]"; } else{ deadflag =3; print "You can no longer restrain yourself. The two blinking silver tips of the drawn swords flicker as the eyes of a malicious beast, mocking your righteous anger. You growl, a low rumbling sound coming from the depths of your being. The beast comes closer, and suddenly you ";style bold; print "pounce"; style roman; ", your arms outstretched, your hands like claws. The eyes rise to meet you, and the world explodes. Stars fill the void, blinking, then disappearing one by one. Only darkness remains. Where is your attacker? Once more a growl escapes from your mouth, as you cast about for the object of your rage. ^ But then a terrible weariness falls over you like a heavy blanket, muffling thought and emotion alike. You drift away into a deep sleep.^"; }; }; }; ], counter1 0, counter2 0, daemon [; if(self.attacking == 0){ switch(++self.counter1){ 1 to 2: "^The guards are dragging you through the corridor."; 3 : "^The guards have already led you halfway through."; 4 : "^You have almost reached the cells. If you wish to escape, you must act now."; default: deadflag = 3; "Tja. TODO."; } } else{ switch(++self.counter2){ 1: "Een!"; 2: "Twee!"; 3: "Drie!"; default: "Tja!"; } }; ], attacking 0, loose [; self.attacking = 1; ], article "two", has animate pluralname scenery; Object sword "sword" corridor_1 with name 'sword' 'swords' 'Roger~s' 'Frank~s' 'guard~s' 'guards~', description , has concealed ; ! ------------------------------------------------------------------------------- ! *** Temporary objects *** Object gate_key "gatekey" with description "Nog niets."; Room hallway "hallway" with description "Nog niets."; ! --------------------------------------------------------------------------- ! *** Abstract objects *** Object emotions with rage 0, !Zero when calm, One when raging satisfied 0, !One if currently raging AND having committed violence in this rage, Zero otherwise ; !============================================================================ ! The player's possessions !============================================================================ ! Entry point routines [ Initialise; location = corridor_1; lookmode = 2; ! like the VERBOSE command player.description = "You are a strong, muscled man, covered with scars and bruises, wearing only rags."; StartDaemon(guards); print_ret "^Once you were quite the dandy, spending all your time and money on glamour, girls and gambling. Enraged by your behaviour, your father disinherited you, but you hardly cared. Life was too beautiful, the girls too lovely and the cards too much fun to worry about the future. But you learnt that one cannot escape society's demands as easily as that, and you learnt it the hard way. More than three years ago, you were seized by the Imperial Guard as you entered one of your favourite gaming dens. Your creditors demanded their money, and they wanted it instantly. As you could not pay and could find no rich friends or relatives to pay for you, the authorities decided to sell you into slavery. Unfortunately, you were bought by Lord Haran Damaskos, a man whose wealth is only surpassed by his passion for watching his slaves fight to the death. He thought it would be amusing to see a pampered aristocratic boy be slowly dismembered by a tough Nubian slave. But against all odds you survived that first fight, and continued surviving for these past three years. It is no exaggeration to say that you are now among the toughest of fighters. You have long lost track of the number of Lord Damaskos' parties you have had to brighten by spilling the innocent blood of fellow slaves to the wild cheers of the audience. Your life is a monotonous string of pain, violence and death. There is no hope of escape, and only your rage has kept you alive thus far. ^^ At least there was no hope of escape until now. For the two guards that are leading you back to your damp cell after yet another bloody fight in the pits, have forgotten to tie your hands. If you can grab a likely weapon and dispose of them before they lock you up again, you might be able to escape your predicament. Or better yet - you might be able to exact revenge upon your master.^"; ]; [ DeathMessage; print "You have failed to achieve your revenge!"; ]; !============================================================================ ! Standard and extended grammar Include "grammar"; !---------------------------------------------------------------------------- ! *** Rage and Calm *** [ RageSub; if(emotions.rage == 0) { emotions.rage = 1; "You release your hate and feel a wave of anger rise inside you, filling you with a burning desire for violence and revenge."; } else { "You are already filled with burning anger, ready to lash out at the slightest provocation."; }; ]; Verb 'rage' 'r' 'anger' 'enrage' 'mad' 'vengeful' * -> Rage; Extend 'go' * 'in' 'rage' -> Rage * 'in' 'a' 'rage' -> Rage * 'into' 'rage' -> Rage * 'into' 'a' 'rage' -> Rage * 'mad' -> Rage; Verb 'become' * 'angry' -> Rage * 'enraged' -> Rage * 'mad' -> Rage * 'vengeful' -> Rage; Extend 'enter' * 'rage' -> Rage; [ CalmSub; if(emotions.rage == 1){ if(emotions.satisfied == 1){ emotions.rage = 0; "You close your eyes, try to control your breath and silently count to twenty. Slowly the anger recedes, and you are once again in control of you violent urges."; } else { "You close your eyes, try to control your breath and silently count to twenty. But the rage is far too strong, and cannot be controlled. You need to lash out first."; }; } else { "You are already as serene and calm as can be reasonably expected given your present circumstances."; }; ]; Verb 'calm' 'cool' 'relax' 'serene' * -> Calm * 'down' -> Calm; Extend 'exit' * 'rage' -> Calm; Extend 'become' * 'calm' -> Calm * 'serene' -> Calm * 'cool' -> Calm * 'relaxed' -> Calm; Extend 'go' * 'out' 'rage' -> Calm * 'out' 'of' 'rage' -> Calm; !--------------------------------------------------------------------------- ! *** Miscellaneous *** Verb 'grab' * noun -> Take; !============================================================================