# # Evennia batchfile - tutorial_world # # Griatch 2011 # # This batchfile sets up a starting tutorial area for Evennia. # # This uses the custom script parents and code snippets found in # the same folder as this script; Note that we are not using any # modifications of the default player character at all (so you # don't have to change anything in any settings files). We also # don't modify any of the default command functions (except in # states). So bear in mind that the full flexibility of Evennia # is not used to its fullest here. # # If your BATCH_IMPORT_PATH is unchanged from the default, # first place yourself in Limbo (room #2) and load the file as # user #1 with # # @batchprocess tutorial/build # # The area we are building looks like this: # # ? 03,04 # | # +---+----+ +-------------------+ +--------+ +--------+ # | | | | |gate | |corner | # | cliff +----+ 05 bridge +----+ 09 +---+ 11 | # | 02 | | | | | | | # +---+----+ +---------------+---+ +---+----+ +---+----+ # | \ | | castle | # | \ +--------+ +----+---+ +---+----+ +---+----+ # | \ |under- | |ledge | |wall | |court- | # | \|ground +--+ 06 | | 10 +---+yard | # | | 07 | | | | | | 12 | # | +--------+ +--------+ +--------+ +---+----+ # | \ | # ++---------+ \ +--------+ +--------+ +---+----+ # |intro | \ |cell | |trap/ |temple | # o--+ 01 | \| 08 +----+ fall | | 13 | # | | | | /| 15 | | | # +----+-----+ +--------+ / +--+-+-+-+ +---+----+ # | / | | | | # +----+-----+ +--------+/ +--+-+-+---------+----+ # |outro | |tomb | |antechamber | # o--+ 17 +----------+ 16 | | 14 | # | | | | | | # +----------+ +--------+ +---------------------+ # # There are a few ways you could build this layout; one is to do all the # digging in one go first, then go back and add all the details. The # advantage of this is that you the area is already there and you can # more easily jump ahead in the build file to the detail work when you # want to update things later. In this file we will however build and design # it all in sequence; room by room. This makes it easier to keep an # overview of what is going on in each room, tie things to parents etc. # When building your own world you might want to separate your world into # a lot more individual batch files (maybe one for just a few rooms) for # easy handling. The numbers mark the order of construction and also # the unique alias-ids given to each room, to allow safe teleporting # and linking between them. # #------------------------------------------------------------ # Starting to build the tutorial # # This is simple welcome text introducing the tutorial. #------------------------------------------------------------ # # We start from limbo. @tel #2 # # Build the intro room (don't forget to also connect the outro room to this later) # # Note the unique id tut#XX we give each room. # @dig/teleport Intro;tut#01 : tutorial_world.rooms.IntroRoom = tutorial;tut;intro # # ... and describe it. # @desc {gWelcome to the Evennia tutorial!{n The following tutorial consists of a small single-player quest area. The various rooms are designed to show off some of the power and possibilities of the Evennia mud creation system. At any time during this tutorial you can use the {wtutorial{n (or {wtut{n) command to get some background info about the room or certain objects to see what is going on "behind the scenes". To get into the mood of this miniature quest, imagine you are an adventurer out to find fame and fortune. You have heard rumours of an old castle ruin by the coast. In its depth a warrior princess was buried together with her powerful magical weapon - a valuable prize, if it's true. Of course this is a chance to adventure that you cannot turn down! You reach the coast in the midst of a raging thunderstorm. With wind and rain screaming in your face you stand where the moor meet the sea along a high, rocky coast ... {g(write 'start' or 'begin' to start the tutorial){n # # Show that the tutorial command works ... # @set here/tutorial_info = This is the tutorial command. Use it in various rooms to see what's technically going on and what you could try in each room. The intro room assigns some properties to your character, like a simple "health" property used when fighting. Other rooms and puzzles might do the same. Leaving the tutorial world through any of the normal exit rooms will clean away all such temporary properties. #------------------------------------------------------------ # # Outro room # # Called from the Intro room; this is a shortcut out. There # is another outro room at the end showing more text. # This is the only room we don't give a unique id. #------------------------------------------------------------ # @dig/teleport Leaving Tutorial : tutorial_world.rooms.OutroRoom = exit tutorial;exit;back, start again;start # @desc You are quitting the Evennia tutorial prematurely! Come back later. # @open exit = #2 # @set here/tutorial_info = This outro room cleans up properties on the character that was set by the tutorial. # # Back to intro room so we can build from there. # start #------------------------------------------------------------ # # The cliff # #------------------------------------------------------------ # # This regularly and randomly shows some weather effects. Note how we # can spread the command's arguments over more than one line for easy # reading. we also make sure to create plenty of aliases for the room # and exits. # @dig/teleport Cliff by the sea;cliff;tut#02 : tutorial_world.rooms.WeatherRoom = begin adventure;begin;start # # We define the tutorial message seen when the using the tutorial command # @set here/tutorial_info = Weather room This room inherits from a parent called WeatherRoom. This runs on a timer that allows various weather-related messages to appear at irregular intervals. # @desc You stand on the high coast line overlooking a stormy sea far below. Around you the ground is covered in low grey-green grass, pushed down by wind and rain. Inland, the vast dark moors begin, only here and there covered in patches of low trees and brushes. To the east, you glimpse the ragged outline of a castle ruin. It sits perched on a sheer cliff out into the water, isolated from the shore. The only way to cross seems by way of an old hang bridge anchored not far east from here. # This is the well you will come back up from if you end up in the underground. # @create/drop Old well;well # @desc well = The broken ruins of an old well sit some way off the path. The stones surrounding it have collapsed and whereas there is still a chain hanging down it, it does not look very secure. It is probably a remnant of some old settlement back in the day. # # It's important to lock the well object or players will be able to pick it up and # put it in their pocket ... # @lock well = get:false() # # By setting the lock_msg attribute there will be a nicer error message if people # try to pick up the well. # @set well/get_err_msg = You probingly nudge the heavy stones of the well. There is no way you can ever budge this on your own (besides, what would you do with it? Carry it around?). # @create/drop Wooden sign;sign : tutorial_world.objects.Readable # @desc sign = The sign sits at the end of a small path leading out to the short-side anchor of the hang bridge connecting the mainlaind with the ruin on its desolate cliff. The sign is not as old as the rest of the scenery and the text on it is easily readable. # @lock sign = get:false() # @set sign/get_err_msg = The sign is securely anchored to the ground. # @set sign/readable_text = WARNING - Bridge is not safe! # @set sign/tutorial_info = This is a readable object, inheriting from a class objects.Readable. The sign has a cmdset with one command defined on itself called 'read' that allows you to 'read sign'. Doing so returns the contents of an attribute containing the information on the sign. # # Mood-setting objects to look at # @create/drop ruin (in the distance);castle;ruin # @desc ruin = A fair bit out from the rocky shores you can make out the foggy outlines of a ruined castle. The once mighty towers have crumbled and it presents a jagged shape against the rainy sky. The ruin is perched on its own cliff, only connected to the mainland by means of an old hang bridge starting not far east from you. # @lock ruin = get:false() # @set ruin/get_err_msg = Small as it appears from a distance, you still cannot reach over and pick up the castle to put in your pocket. # @create/drop The sea (in the distance);sea;ocean # @desc sea = The grey sea stretches as far as the eye can se to the east, and far below you its waves crash against the foot of the cliff. The vast inland moors meets the ocean along a high and uninviting coastline of ragged vertical stone. Once this part of the world might have been beautiful, but now the eternal winds and storms have washed it all down into a grey and barren wasteland. # @lock sea = get:false() # @set sea/get_err_msg = Noone gets the sea. It gets you. # # Set a climbable object for discovering a hidden exit # @create/drop gnarled old trees;tree;trees;gnarled : tutorial_world.objects.Climbable # @desc trees = Only the sturdiest of trees survive at the edge of the moor. A small group of huddling black things has dug in near the cliff edge, eternally pummeled by wind and salt to become an integral part of the gloomy scenery. # @lock trees = get:false() # @set trees/get_err_msg = The group of old trees have withstood the eternal wind for hundreds of years. You will not uproot them any time soon. # # The text to echo to player if trying 'climb tree' # @set tree/climb_text = With some effort you climb one of the old trees. The branches are wet and slippery but can easily carry your weight. From this high vantage point you can see far and wide. In fact, you notice {Ya faint yellowish light{n not far to the north, beyond the trees. It looks like some sort of building. From this angle you can make out a {wfaint footpath{n leading in that direction, all but impossible to make out from ground level. You climb down again. #------------------------------------------------------------ # Outside Evennia Inn #------------------------------------------------------------ @dig Outside Evennia Inn;outside inn;tut#03 : tutorial_world.rooms.WeatherRoom = northern path;north;n;path,back to cliff;back;cliff;south;s # # Lock exit from view until we climbed that tree (which is when last_climbed get assigned). @lock north = view:attr(last_climbed) ; traverse:attr(last_climbed) # go to outide inn north # @desc You stand outside a one-story sturdy wooden building. Light flickers behind closed storm shutters. Over the door a sign creaks in the wind - the writing says {cEvennia Inn{n and is surrounded by a painted image of some sort of snake. From inside you hear the sound of laughter, singing and loud conversation. #------------------------------------------------------------ # # The Evennia Inn # #------------------------------------------------------------ @dig/teleport The Evennia Inn;evennia inn;inn;tut#04 : tutorial_world.rooms.TutorialRoom = enter;in,leave;out # @desc The Evennia Inn consist mainly of one large room filled with tables. The bardisk extends along the east wall, where multiple barrels and bottles line the shelves. The barkeep seems busy handing out ale and chatting with the patrons, which are a rowdy and cheerful lot, keeping the sound level only just below thunderous. Soon you have a beer in hand and is chatting with the locals. Your eye fall on a {wbarrel{n in a corner with a few old rusty weapons sticking out. There is a sign next to it: {wFree to take{n. A patron tells you cheerfully that it's the leftovers from those foolish adventurers that challenged the old ruin before you ... # @set here/tutorial_info = Nothing special about this room, only a bonus place to go for chatting with other players. Oh, and don't forget to grab a blade if you don't already have one (only three blades are available in this location and don't get refilled until a player goes to the outro room, so the barrel might be empty - if it's any comfort, the weapons in there won't help much against what is waiting in the ruin anyway ...) # @create/drop rusty old sword;rusty;sword;weapon : tutorial_world.objects.Weapon # @desc rusty = This is a rusty old broadsword. It has seen better days but the hilt is in good shape. # # Only allow to pick up if we don't already has something called weapon @lock rusty = get:not holds(weapon) # @set rusty/get_err_msg = "Now, don't be greedy, friend! You already have a weapon." # @create/drop blunt axe;blunt;axe;weapon : tutorial_world.objects.Weapon # @desc axe = A heavy weapon, but the edge is dull and covered in rust and nicks. # @lock blunt = get:not holds(weapon) # @set blunt/get_err_msg = "Hey, you already have a weapon; no need for another!" # @create/drop patched spear;patched;spear;weapon : tutorial_world.objects.Weapon # @desc patched = The spear tip looks to be in decent condition, but the shaft was broken and is rather poorly mended. # @lock patched = get:not holds(weapon) # @set patched/get_err_msg = "You already have a weapon, friend, leave some for the next poor sod." #------------------------------------------------------------ # # The old bridge # #------------------------------------------------------------ # # Back to cliff @teleport tut#02 # # The bridge uses parent rooms.BridgeRoom, which causes the player # to take a longer time than expected to cross as they # are pummeled by wind and a chance to fall off. This room should not have # regular exits back to the cliff, that is handled by the bridge itself. @dig The old bridge;bridge;tut#05 : tutorial_world.rooms.BridgeRoom = old bridge;east;e;bridge;hangbridge # # put some descriptions on the exit to the bridge # @desc bridge = The hang-bridge's foundation sits at the edge of the cliff to the east - two heavy stone pillars anchors the bridge on this side. # # go to the bridge # bridge # # Set up properties on bridge room (see BridgeRoom) # # connect west edge to cliff # @set here/west_exit = tut#02 # # connect other end to gatehouse # @set here/east_exit = tut#09 # # Fall location is the cliff ledge # @set here/fall_exit = tut#06 # @set here/tutorial_info = Bridge - state room The bridge is a single room that uses a custom cmdset to overrule the movement commands. This makes it take a few steps to cross it despite it being only one room. The room also inherits from the weather room to cause the bridge to sway at regular intervals. It also implements an timer and a random occurance at every step across the bridge. It might be worth trying this passage a few times to see what may happen. Hint: you can fall off! #------------------------------------------------------------ # # Ledge under the bridge # #------------------------------------------------------------ # # You only end up at the ledge if you fall off the bridge. It # has no direct connection to the bridge. # @dig/teleport Protruding ledge;cliffledge;ledge;tut#06 # @set here/tutorial_info = Ledge This room is stored as an attribute on the bridge room and used a destination should the player fall off the bridge. In our example the bridge is relatively simple and always drops us to the same ledge; a more advanced implementation might implement different locations to end up in depending on what happens on the bridge. # @desc You are on a narrow ledge protruding from the side of the cliff, about halfway down. The air if saturated with salty sea water, sprays hitting your from the crashing waves below. The ledge is covered with a few black-grey brushes. Not far from you the cliff-face is broken down to reveal a narrow natural opening into the cliffside. # @create/drop brushes;brush # @lock brush = get:false() # @desc brush = The brushes covering the ledge are grey and dwarfed by constantly being pummeled by salt, rain and wind. # @create/drop The sea (far below you);sea;ocean # @lock sea = get:false() # @desc sea = Below you rages the grey sea, you can almost imagine that you feel the cliff tremble under its onslaught. # @create/drop The hang bridge (above you);bridge;hangbridge;above # @lock bridge = get:false() # @desc bridge = You can see the shape of the hang bridge a fair bit above you, partly obscured by the rain. There is no way to get back up there from this ledge. # @set bridge/get_err_msg = You can't reach it, it's too far away. #------------------------------------------------------------ # # Underground passages # #------------------------------------------------------------ # # The underground passages allow the player # to get back up to the cliff again. If you look at the map, # the cell also connects to here. We'll get to that # later. # @dig Underground passages;passages;underground;tut#07 : tutorial_world.rooms.TutorialRoom = hole into cliff;hole;passage;cliff # @desc hole into cliff = The hole is natural, the soft rock eroded by ages of sea water. The opening is small but large enough for you to push through. It looks like it expands into a cavern further in. # hole # @set here/tutorial_info = This room acts a hub for getting the player back to the start again, regardless of how you got here. # @desc The underground cavern system you have entered seems to stretch on forever, with criss-crossing paths and natural caverns probably carved by water. It is not completely dark, here and there faint daylight sifts down from above - the cliff is porous leaving channels of air and light up to the surface. (some time later) You eventually come upon a cavern with a black pool of stale water. In it sits a murky bucket, the first remnant of any sort of intelligent life down here. The bucket has disconnected from a chain hanging down from a circular opening high above. Grey daylight simmers down the hole together with rain that ripples the black surface of the pool. # @create/drop pool;water # @lock pool = get:false() # @set pool/get_err_msg = You sift your hands through the black water without feeling any immediate bottom. It's chilling cold and so dark you don't feel like taking a sip. # @desc pool = The water of the pool is black and opaque. The rain coming down from above does not seem to ripple the surface quite so much as it should. # @create/drop hole (high above);hole;above # @lock hole = get:false() # @set hole/get_err_msg = You cannot reach it from here. You need to climb the chain. # @desc hole = Whereas the lower edges of the hole seems jagged and natural you can faintly make out that it turns into a man-made circular shafts higher up. It looks like an old well. # # From the passages we get back up to the cliff, so we # open up a new exit back there. # # connect chain to Cliff. @open climb the chain;climb;chain = tut#02 # @desc chain = The chain is made of iron. It is rusty but you think it might still hold your weight even after all this time. Better hope you don't need to do this more times ... #------------------------------------------------------------ # # The Dark Cell # #------------------------------------------------------------ # @dig/teleport Dark cell;dark;cell;tut#08 : tutorial_world.rooms.DarkRoom # @set here/tutorial_info = Dark room The dark room implements a custom "dark" state. This is a very restricted state that completely redefines the look command and only allows limited interactions. Looking around repeatedly will eventually produce hints as to how to get out of the dark room. # # the description is only seen if the player finds a # light source. # @desc {YThe {yflickering light{Y of the torch reveals a small square cell. It does not seem you are still in the castle, for the stone of the walls are chiseled crudely and drip with water and mold. One wall holds a solid iron-cast door. While rusted and covered with lichen it seems very sturdy still. In a corner lies what might have once been a bed or a bench but is now nothing more than a pile or rotting splinters. One of the walls are covered with a thick cover of black roots where they has broken through the cracks.{n # @create/drop iron-cast door;iron;door;iron-cast # @lock door = get:false() # @desc door = The door is very solid and clad in iron. No matter how much you push at it, it won't budge. It seems heavily bolted from the other side. # @create/drop stone walls;walls;stone # @lock stone = get:false() # @desc stone = The walls are dripping with moisture and mold. A network of roots have burst through the cracks on one side, bending the stones slightly aside. You feel a faint draft from that direction. # # The crumbling wall is infact an advanced type of Exit, all we need to do is # to supply it with a destination. # # Puzzle wall is an exit without a given destination at start @create/drop root-covered wall;wall;roots;wines;root : tutorial_world.objects.CrumblingWall # # This destination is auto-assigned to the exit when its puzzle is solved # connect the Underground passages @set root-covered wall/destination = tut#07 # @lock roots = get:false() # # (the crumbling wall describes itself, so we don't do it here) #------------------------------------------------------------ # # Castle Gate # We are done with the underground, describe castle. #------------------------------------------------------------ # # We are done building the underground passages, let's # head back up to ground level. We teleport to the bridge # and continue from there. # # Back to the bridge @teleport tut#05 # # The bridge room should not have any normal exits from it, that is # handled by the bridge itself. # @dig/teleport Ruined gatehouse;gatehouse;tut#09 : tutorial_world.rooms.TutorialRoom = , Bridge over the abyss;bridge;abyss;west;w # @set here/tutorial_info = This is part of a four-room area patrolled by a mob; the guardian of the castle. The mob initiates combat if the player stays in the same room for long enough. Combat itself is a very simple affair which takes advantage of the strength of the weapon you use, but dictates a fix skill for you and your enemy. The enemy is quite powerful, so don't stick around too long ... # @desc The old gatehouse is near collapse. Part of its northern wall has already fallen down, together with parts of the fortifications in that direction. Heavy stone pillars hold up sections of ceiling, but elsewhere the flagstones are exposed to open sky. Part of a heavy portuculis, formerly blocking off the inner castle from attack, is sprawled over the ground together with most of its frame. {wEast{n the gatehouse leads out to a small open area surrounded by the remains of the castle. There is also an archway standing offering passage to a path along the old {wsouth{nern inner wall. # @create/drop fallen portoculis;portoculis;fall;fallen # @lock portoculis = get:false() # @desc portoculis = This heavy iron grating used to block off the inner part of the gate house, now it has fallen to the ground together with the stone archway that once help it up. # # We lock the bridge exit for the mob, so it don't wander out on the bridge # @lock bridge = traverse:not attr(is_mob) #------------------------------------------------------------ # # Along the southern inner wall (south from gatehouse) # #------------------------------------------------------------ @dig Along inner wall;inner wall;along;tut#10 : tutorial_world.rooms.WeatherRoom = Standing archway;archway;south;s,ruined gatehouse;gatehouse;north;n # @desc standing archway = It seems the archway leads off into a series of dimly lit rooms. # archway # @set here/tutorial_info = This is part of a four-room area patrolled by a mob; the guardian of the castle. The mob initiates combat if the player stays in the same room for long enough. Combat itself is a very simple affair which takes advantage of the strength of the weapon you use, but dictates a fix skill for you and your enemy. # @desc What appears at first sight to be a series of connected rooms actually turns out to be collapsed buildings so mashed together by the ravashes of time that they all seem to lean on each other and against the outer wall. The whole scene is directly open to the sky. The buildings make a half-circle along the main wall, here and there broken by falling stone and rubble. At one end (the {wnorth{nern) of this half-circle is the entrance to the castle, the ruined gatehoue. {wEast{nwards from here is some sort of open courtyard. #------------------------------------------------------------ # # Corner of castle (east from gatehouse) # #------------------------------------------------------------ # back to castle gate @teleport tut#09 # @dig/teleport Corner of castle ruins;corner;tut#11 : tutorial_world.rooms.TutorialRoom = castle corner;corner;east;e,gatehouse;west;w # @desc The ruins opens up to the sky in a small open area, lined by collumns. The open area is dominated by a huge stone obelisk in its center, an ancient ornament miraculously still standing. Previously one could probably continue past the obelisk and eastward into the castle keep itself, but that way is now completely blocked by falled rubble. To the {wwest{n is the gatehouse and entrance to the castle, whereas {wsouth{nwards the collumns make way for a wide open courtyard. # @set here/tutorial_info = This is part of a four-room area patrolled by a mob; the guardian of the castle. The mob initiates combat if the player stays in the same room for long enough. Combat itself is a very simple affair which takes advantage of the strength of the weapon you use, but dictates a fix skill for you and your enemy. # @create/drop obelisk:tutorial_world.objects.Obelisk # @lock obelisk = get:false() # @set obelisk/get_err_msg = It's way too heavy for anyone to move. # # (the obelisk describes itself, so we need no do it here) # # Create the mobile. This is the start location. @create/drop Ghostly apparition;ghost;apparition;fog : tutorial_world.mob.Enemy # @set ghost/full_health = 20 # @set ghost/defeat_location = dark cell # @lock ghost = get:false() # @set ghost/get_err_msg = Your fingers just pass straight through it! # @desc ghost = This ghostly shape could momentarily be mistaken for a thick fog had it not moved with such determination and giving echoing hollow screams as it did. The shape is hard to determine, now and then it seems to form limbs and even faces that fade away only moments later. The thing reeks of almost tangible spite at your presence. This must be the ruin's eternal guardian. # # Give the enemy some random echoes (echoed at irregular intervals) @set ghost/irregular_echoes = [The foggy thing gives off a high-pitched shriek.,For a moment the fog wraps around a nearby pillar., The fog drifts lower to the ground as if looking for something., The fog momentarily takes on a reddish hue.,The fog temporarily fills most of the area as it changes shape.,You accidentally breathes in some of the fog - you start coughing from the cold moisture.] # # give the enemy a weapon # @create foggy tentacles;tentacles:tutorial_world.objects.Weapon # # Make the enemy good # @set foggy tentacles/hit = 0.7 # @teleport/quiet tentacles = ghost # # Clear inactive mode and start the mob # @set ghost/inactive = #------------------------------------------------------------ # # The courtyard # #------------------------------------------------------------ # @dig/teleport Overgrown courtyard;courtyard;tut#12 : tutorial_world.rooms.WeatherRoom = courtyard;south;s,castle corner;north;n # # Connect west to the inner wall @open along inner wall;wall;along;west;w, overgrown courtyard;courtyard;east;e = tut#10 # @set here/tutorial_info = This is part of a four-room area patrolled by a mob; the guardian of the castle. The mob initiates combat if the player stays in the same room for long enough. Combat itself is a very simple affair which takes advantage of the strength of the weapon you use, but dictates a fix skill for you and your enemy. # @desc The inner courtyard of the old castle is littered with debris and overgrown with low grass and patches of thorny wines. There is a collapsed structure close to the gatehouse that looks like a stable. {wNorth{nwards is a smaller area cornered in the debris, adorned with a looming obelisk-like thing. To the {wwest{n the castle walls loom over a mess of collapsed buildings. On the opposite, {weast{nern side of the yard is a large building with a curved roof that seem to have withstood the test of time better than many of those around it, it looks like some sort of temple. # @create/drop old stables;stable;stables;building # @lock stable = get:false() # @desc stable = The building is empty, if it was indeed once a stable it was abandoned long ago. #------------------------------------------------------------ # # The temple # #------------------------------------------------------------ # @dig/teleport The ruined temple;temple;in;tut#13 : tutorial_world.rooms.TutorialRoom = ruined temple;temple;east;e, overgrown courtyard;courtyard;outside;out;west;w # # @desc This building seems to have survived the ravages of time better than most of the others. Its arched roof and wide spaces suggests that this is a temple or church of some kind. The wide hall of the temple stretches before you. At the far edge is a stone altar with no clear markings. Despite its relatively good condition, the temple is empty of all furniture or valuables, like it was looted or its treasures moved ages ago. Stairs lead down to the temple's dungeon on either side of the altar. A gaping door opening shows the a wide courtyard to the west. #------------------------------------------------------------ # # Antechamber # #------------------------------------------------------------ # @dig Antechamber;antechamber;tut#14 : tutorial_world.rooms.TutorialRoom = stairs down;stairs;down;d, up the stairs to ruined temple;stairs;temple;up;u # @desc stairs down = The stairs are worn by the age-old passage of feet. # # Lock the antechamber so the ghost cannot get in there. @lock stairs down = traverse:not attr(is_mob) # stairs down # @desc This chamber lies almost directly under the main altar of the temple. The passage of aeons is felt here and you also sense you are close to great power. The sides of the chamber are lined with stone archways, these are entrances to the {wtombs{n of what must have been influental families or individual heroes of the realm. Each is adorned by a stone statue or symbol of fine make. They do not seem to be ordered in any particular order or rank. # @set here/tutorial_info = This is the second part of a puzzle involving the Obelisk in another room. The correct exit will vary depending on which scene was shown on the Obelisk surface. Each tomb is a teleporter room and is keyed to a number corresponding to the scene last shown on the obelisk (now stored on player). If the number doesn't match, the tomb teleports to the Dark Cell. If correct, the tomb teleports to the Ancient Tomb treasure chamber. # # We don't put unique ids on the individual tombs # @dig Blue bird tomb : tutorial_world.rooms.TeleportRoom = Tomb with stone bird;bird;blue;stone # @dig Tomb of woman on horse : tutorial_world.rooms.TeleportRoom = Tomb with statue of riding woman;horse;riding; # @dig Tomb of the crowned queen : tutorial_world.rooms.TeleportRoom = Tomb with statue of a crowned queen;crown;queen # @dig Tomb of the shield : tutorial_world.rooms.TeleportRoom = Tomb with shield of arms;shield # @dig Tomb of the hero : tutorial_world.rooms.TeleportRoom = Tomb depicting a heroine fighting a monster;knight;hero;monster;beast # @tel Blue bird tomb # @set here/puzzle_value = 0 # @set here/failure_teleport_to = falling! # @set here/success_teleport_to = Ancient tomb # @teleport Tomb of woman on horse # @set here/puzzle_value = 1 # @set here/failure_teleport_to = falling! # @set here/success_teleport_to = Ancient tomb # @teleport Tomb of the crowned queen # @set here/puzzle_value = 2 # @set here/failure_teleport_to = falling! # @set here/success_teleport_to = Ancient tomb # @teleport Tomb of the shield # @set here/puzzle_value = 3 # @set here/failure_teleport_to = falling! # @set here/success_teleport_to = Ancient tomb # @teleport Tomb of the hero # @set here/puzzle_value = 4 # @set here/failure_teleport_to = falling! # @set here/success_teleport_to = Ancient tomb #------------------------------------------------------------ # # Falling room # # This is a transition between the trap and the cell room. #------------------------------------------------------------ @dig/teleport Falling!;falling;tut#15 : tutorial_world.rooms.TeleportRoom # @desc The tomb is dark. You fumble your way through it. You think you can make out a coffin in front of you in the gloom. {rSuddenly you hear a distinct 'click' and the ground suddenly disappears under your feet! You fall ... things go dark. {n ... ... You come to your senses. You lie down. On stone floor. You shakily come to your feet. Somehow you suspect that you are not under the tomb anymore, like you were magically snatched away. The air is damp. Where are you? # @set here/success_teleport_to = dark cell # @set here/failure_teleport_to = dark cell # # back to antechamber @tel tut#14 #------------------------------------------------------------ # # The ancient tomb # #------------------------------------------------------------ # Create the real tomb # @dig/teleport Ancient tomb;tut#16 : tutorial_world.rooms.TutorialRoom = ,back to antechamber;antechamber;back # @desc The tomb is dark. You fumble your way through it. You think you can make out a coffin in front of you in the gloom. The coffin comes into view. On and around it are marked symbols of hawks and the face of a stern woman, clearly some sort of ancient hero. # @set here/tutorial_info = Congratulations, you have reached the end of this little mini-quest. Just grab the mythical weapon (get weapon) and the exit will open. You can end the quest here or go back through the tutorial rooms to explore further. # @create/drop Stone sarcophagus;sarcophagus;stone : tutorial_world.objects.WeaponRack # @desc stone = The lid of the coffin is adorned with a stone statue in full size. The weapon held by the stone hands looks very realistic ... # @set sarcophagus/rack_id = rack_sarcophagus # @set sarcophagus/min_dmg = 4.0 # @set sarcophagus/max_dmg = 11.0 # @set sarcophagus/magic = True # @set sarcophagus/get_text = The hands of the statue close on what seems to be a real weapon rather than one in stone. This must be the hero's legendary weapon! The prize you have been looking for! With trembling hands you release the weapon from the stone and hold {c%s{n in your hands! {gThis concludes this tutorial. From here you can either continue to explore the castle (hint: this weapon works better against the castle guardian than any you might have found earlier) or you can exit.{n #------------------------------------------------------------ # # Outro - end of the tutorial # #------------------------------------------------------------ # @dig End of tutorial;end;tut#17 : tutorial_world.rooms.OutroRoom = Exit tutorial;exit;end # # All weapons from the rack gets an automatic alias the same as the rack_id. This we can # use to check if any such weapon is in inventory before unlocking the exit. # @lock Exit tutorial: view:holds(rack_sarcophagus) ; traverse:holds(rack_sarcophagus) # # to tutorial outro @tel tut#17 # # this quits the tutorial and cleans up all variables that was . @desc {gThanks for trying out this little Evennia tutorial! The examples given here are of course just scraping the surface of what can be done. The tutorial focuses more on showing various techniques than any sort of novel storytelling or challenging gameplay. The full README and source code for the tutorial world can be found in {wcontrib/tutorial_world{g. If you went through the tutorial quest once, it can be interesting to do it again to explore the various possibilities and rooms you might not have come across yet, maybe with the source code to one side. If you play as superuser (user #1) the mobile will ignore you and teleport rooms etc will not affect you (this will also disable all locks, so keep that in mind when checking functionality).{n # @set here/tutorial_info = This room cleans up all temporary attributes that was put on the character during the tutorial. # # Tie this back to Limbo # @open exit back to Limbo;limbo;exit;back = #2 # @tel 2