!**************************************************************************** !****(DEFINITIONS)*********************************************************** !**************************************************************************** !For the rooms in THIS area, Misc has certain purposes ! MISC #1 = Various Special Uses ! #2 = X Coordinate on the map ! #3 = Y Coordinate on the map ! #4 = (Building) Exit when North ! #5 = (Building) Exit when South ! #6 = (Building) Exit when East ! #7 = (Building) Exit when West ! #8 = (Building) Current Direction (obj) ! #9 = (Building) Current Color !**************************************************************************** !****(GLOBALS)*************************************************************** !**************************************************************************** global ruhnestory=0 !**************************************************************************** !****(ROOM DESCRIPTIONS)***************************************************** !**************************************************************************** class sitesevenroom { inherits room misc 0,0,0 before { location DoGo { local rm,newrm,okdir=0 : rm = (location.(object.dir_to)) !If we just entered a tower, set it's OUT dir. if (object = d_obj, u_obj) { VMessage(&DoGo, 2) : return true } elseif (rm=alphis,betis,deltis,gammis,epsis) { !Fixed so that we CAN go inside if the boy isn't here. if (ruhnestory>=11) and (ruhneboy not in landzone) { !Stop us from entering PrintMsgChapter2(1,16) return true } else { SetTowerFacing(rm, GetDirection(object,true), location, xobject.misc #2) bldgconsole is locked, not open if (consoleslot is known) { move consoleslot to rm } if (ruhnestory=10) { PrintMsgChapter2(0,2,object) } else { PrintMsgChapter2(0,1,object) } } } elseif (rm=landzone) { if (ruhnestory <= 9) { PrintMsgChapter2(0,7,1) } elseif (ruhnestory >= 12) { PrintMsgChapter2(0,7,2) } else { !If storm is in effect, we can't return to the landzone. PrintMsgChapter2(1,5) : return true !When 11 and 12 } } elseif (rm is not interior) { !We're moving from an outside place to another outside place. if (ruhnestory>=10) { !If the storm is raging, then do we have Compass set? if (wristwatch is not worn) or (wristwatch.misc ~= 2) { !Nope... so now we run the risk of getting lost. while (okdir=0) { okdir = GetDirection(random(8)) newrm = (location.(okdir.dir_to)) if (newrm) and (newrm is not interior) and (newrm ~= landzone) { !Nothing - break out with newrm set correctly. } else { okdir = 0 } } if (rm = newrm) { !We got lucky and moved the right way !So nothing more to do. } else { PrintMsgChapter2(0,3,okdir) MovePlayer(newrm) : return true } } } !Print the message saying that we moved. if (rm > 0) { if (ruhnestory >= 10) { PrintMsgChapter2(0,9,object) } else { PrintMsgChapter2(0,8,object) } } else { if CheckForBuilding(location,object) { PrintMsgChapter2(1,22) } elseif (location = moon13,moon53,moon54) { PrintMsgChapter2(1,21,2) } else { PrintMsgChapter2(1,21,1) } return true !No default } } return false !Continue normal } } } !---------------------------------------------------------------------------- class sitesevenbuilding { inherits room extra_scenery "wheel", "wheels", "rail", "rails", "railing", "railings" misc 0,0,0,0,0,0,0,0,0 is interior out_to 0 n_to 0 s_to 0 e_to 0 w_to 0 u_to { PrintMsgChapter2(1,1) : return false } each_turn { !Here's where we begin giving hints to yell for Thyras. if (self.misc < 13) { !At 13, we've already yelled. if (self.misc=0) { if (LookForThyrasCount(1) > 0) { !Already heard the shuffling echoes PrintMsgChapter2(4,1,1) : self.misc=1 } else { !Not yet searched in any buildings. !It *is* possible to get here early, and the player has !not yet had the "realization." So, if that's the case, !we need to do a jump-ahead in the story. if (ruhnestory<4) { PrintMsgChapter2(2,3,1) ruhnestory=4 !Jump to this point. } else { PrintMsgChapter2(4,1,0) : self.misc=1 } } } elseif (self.misc=1,2,4,5,7,8,10,11) { self.misc++ !Wait 2 turns before the next hint. } elseif (self.misc=3) { if (LookForThyrasCount(4) > 0) { !Already had clue that lifts are a no-go PrintMsgChapter2(4,2,1) } else { !Getting clue about lifts being no-go PrintMsgChapter2(4,2,0) } self.misc++ !Increment for next time. } elseif (self.misc=6) { if (LookForThyrasCount(7) > 0) { !Already had clue about the noise. PrintMsgChapter2(4,3,1) } else { !Getting original clue about the noise. PrintMsgChapter2(4,3,0) } self.misc++ !Increment for next time. } elseif (self.misc=9) { if (LookForThyrasCount(10) > 0) { !Already had clue about yelling. PrintMsgChapter2(4,4,1) } else { !Getting original clue about yelling. PrintMsgChapter2(4,4,0) } self.misc++ !Increment for next time. } elseif (self.misc=12) { if (LookForThyrasCount(13) > 0) { !Already yelled somewhere at least once PrintMsgChapter2(4,5,1) } else { !Has not yet yelled "Thyras" anywhere PrintMsgChapter2(4,5,0) } self.misc=10 !Cycle back to wait for same message. } } } before { location DoGo { local rm : rm = (location.(object.dir_to)) if (object = d_obj) { VMessage(&DoGo, 2) : return true } elseif (rm = 0) { if (object = location.misc #8) or (object = out_obj) { PrintMsgChapter2(1,14,2) } else { if (object ~= u_obj) { PrintMsgChapter2(1,14,1) } } } else { if (rm is not interior) { !Was in a building, but we exited if (ruhnestory>=10) { PrintMsgChapter2(0,5,object) !Object is direction. } else { PrintMsgChapter2(0,4,object) !Object is direction. } } return false !So normal messages/movement continues } } } } !---------------------------------------------------------------------------- room landzone "Site Seven Landing Zone" { nouns "area" extra_scenery "fins", "windows", "protrusions", "surface" misc 0,3,1 !#1 is currently unused long_desc { roomdesc_seen = true !Room description was "seen" on this turn. if (ruhnestory = 0) { PrintMsgChapter2(2,0,0) : ruhnestory = 1 } PrintMsgChapter2(10) !Prints the first part of the room description. if (ruhnestory < 10) { indent "You mentally note the five buildings, counting the nearest as the first; alphis, betis, gammis, deltis, with the most distant of the five being epsis. The western wing of Alphis lies a short distance ahead, to the southeast. An almost straight walk south should take you past the eastern wing of Betis, farther still to the western wing of Gammis, ending at the northern wing of Epsis. Deltis is a westerly detour along the same route. Mountains block significant movement to the west and in any northerly direction, but a worn trail through the red dust curves east from where you stand." } indent "The drop-shuttle is nearby." } s_to moon32 e_to moon41 se_to moon42 sw_to moon22 before { location DoGo { local rm : rm = (location.(object.dir_to)) if (object = d_obj, u_obj) { VMessage(&DoGo, 2) : return true } elseif (ruhnestory >= 12) { !Are we at the end of the story? !Only reason to leave would be if we don't have it! if Contains(player,consolecard) { !So if we do, we don't need to leave. PrintMsgChapter2(0,6,0) : return true } } if (rm > 0) { !Actually a valid room that way. PrintMsgChapter2(0,6,object) !Object is direction. return false !So normal messages/movement continues } else { PrintMsgChapter2(1,21,1) : return true } } } } !---------------------------------------------------------------------------- sitesevenroom moon41 "East of the Landing Zone" { misc 0,4,1 !#1 is not yet used long_desc { roomdesc_seen = true !Room description was "seen" on this turn. if (ruhnestory>=10) { PrintMsgChapter2(2,10,1) } else { "The nearest wings of Alphis are just a short walk south or east. Farther south, the northern wing of Gammis faces this way. Betis, Deltis, and Epsis lie generally south and southwest. A wide and rocky mountain range is the only scenery north, and you have no interest in exploring the mountains. To the west, the drop-shuttle remains stationed at the landing zone." } } s_to moon42 e_to moon51 w_to landzone sw_to moon32 } !---------------------------------------------------------------------------- sitesevenroom moon51 "North of Alphis" { misc 0,5,1 !#1 is not yet used long_desc { roomdesc_seen = true !Room description was "seen" on this turn. if (ruhnestory>=10) { PrintMsgChapter2(2,10,2) } else { "The northern wing of Alphis (red) ends just south of where you stand. Mountains and hills outline Site Seven in all northerly and easterly directions. A ways to the west, the drop-shuttle is visible at the landing zone. The west wing of Alphis is around to the southwest, on a path that continues for a ways to the proximity of Betis and Deltis. A southerly detour along the way would bring you to Gammis and Epsis." } } s_to { xobject=alphisnorth : return alphis } !Enter Alphis w_to moon41 sw_to moon42 } !---------------------------------------------------------------------------- sitesevenroom moon12 "Northwest edge of Site Seven" { misc 0,1,2 !#1 is not yet used long_desc { roomdesc_seen = true !Room description was "seen" on this turn. if (ruhnestory>=10) { PrintMsgChapter2(2,10,1) } else { "Jagged mountains and rounded hills form a protective curve in all northerly and westerly directions. Betis blocks much walking to the southeast, but its northern wing is just ahead, east. Its western wing, to the south, is near the northern wing of Deltis. Alphis lies at the other side of Site Seven, to the east. A southern detour on the same route leads to Gammis and Epsis." } } s_to moon13 e_to moon22 } !---------------------------------------------------------------------------- sitesevenroom moon22 "North of Betis" { misc 0,2,2 !#1 is not yet used long_desc { roomdesc_seen = true !Room description was "seen" on this turn. if (ruhnestory>=10) { PrintMsgChapter2(2,10,2) } else { "The northern wing of Betis (white) ends to the south. Deltis is a short walk west, then south -- or a shorter walk southwest -- while the western wing of Alphis is due east a ways. Both Epsis and Gammis are southeast then south of where you stand. The landing zone is east then north of here. All northerly movement is made unnecessary by the Site's enveloping mountain range." } } s_to { xobject=betisnorth : return betis } !Enter Betis e_to moon32 w_to moon12 ne_to landzone se_to moon33 sw_to moon13 } !---------------------------------------------------------------------------- sitesevenroom moon32 "Northern edge of Site Seven" { misc 0,3,2 !#1 is not yet used long_desc { roomdesc_seen = true !Room description was "seen" on this turn. if (ruhnestory>=10) { PrintMsgChapter2(2,10,1) } else { "A short ways to the east lies Alphis. The north and east wings of Betis are a short walk west and south, respectively. At the opposite side of Site Seven is the the northern wing of Epsis, on a straight path that also edges Gammis. From here, the shortest route to Deltis would seem to be its eastern or northern wings, south then southwest or west then southwest, respectively. Deltis itself, however, is mostly hidden behind the looming shape of Betis." } } n_to landzone s_to moon33 e_to moon42 w_to moon22 ne_to moon41 se_to moon43 } !---------------------------------------------------------------------------- sitesevenroom moon42 "West of Alphis" { misc 0,4,2 !#1 is not yet used long_desc { roomdesc_seen = true !Room description was "seen" on this turn. if (ruhnestory>=10) { PrintMsgChapter2(2,10,2) } else { "Movement in all directions is unrestricted from here, save east, where the western wing of Alphis (green) ends. The landing zone is a short distance to the northwest. Northern Gammis is south. Eastern Betis is southwest, giving access to either eastern Deltis farther in the same direction, or the northern wing of Epsis to the south." } } n_to moon41 s_to moon43 e_to { xobject=alphiswest : return alphis } !Enter Alphis w_to moon32 ne_to moon51 se_to moon53 sw_to moon33 nw_to landzone } !---------------------------------------------------------------------------- sitesevenbuilding alphis "alphis" { misc 0,5,2,moon51,moon53,0,moon42,0,0 !#1 is flag. Yelled Thyras here yet? long_desc { roomdesc_seen = true !Room description was "seen" on this turn. PrintMsgChapter2(3,self) } } !---------------------------------------------------------------------------- sitesevenroom moon13 "North of Deltis, West of Betis" { misc 0,1,3 !#1 is not yet used long_desc { roomdesc_seen = true !Room description was "seen" on this turn. if (ruhnestory>=10) { PrintMsgChapter2(2,10,3) } else { "The northern wing of Deltis (green) and the western wing of Betis (blue) are south and east of here, respectively. A path showing heavy prior use angles southeast of here, between the two buildings. Westerly movement is restricted by rolling foothills. A worn path through the dusty ground forks north and northeast, the latter being the more direct route back to the landing zone. All other buildings lie east from here, after a short walk either northeast or southeast around Betis." } } n_to moon12 s_to { xobject=deltisnorth : return deltis } !Enter Deltis e_to { xobject=betiswest : return betis } !Enter Betis ne_to moon22 se_to moon24 } !---------------------------------------------------------------------------- sitesevenbuilding betis "Betis" { misc 0,2,3,moon22,moon24,moon33,moon13,0,0 !#1 is flag. Yelled Thyras yet? long_desc { roomdesc_seen = true !Room description was "seen" on this turn. PrintMsgChapter2(3,self) } } !---------------------------------------------------------------------------- sitesevenroom moon33 "East of Betis" { misc 0,3,3 !#1 is not yet used long_desc { roomdesc_seen = true !Room description was "seen" on this turn. if (ruhnestory>=10) { PrintMsgChapter2(2,10,2) } else { "The eastern wing of Betis (green) ends to the west. This appears to be the approximate center of Site Seven, with every other building just a short walk in one of several directions. The west wing of Alphis is to the northeast; western Gammis and northern Epsis are to the south; eastern Deltis is a short distance southwest, which also curves to the southern side of Betis. The landing zone, with the drop-shuttle still visible through the haze of red dust, is due north a ways." } } n_to moon32 s_to moon34 e_to moon43 w_to { xobject=betiseast : return betis } !Enter Betis ne_to moon42 sw_to moon24 nw_to moon22 } !---------------------------------------------------------------------------- sitesevenroom moon43 "North of Gammis" { misc 0,4,3 !#1 is not yet used long_desc { roomdesc_seen = true !Room description was "seen" on this turn. if (ruhnestory>=10) { PrintMsgChapter2(2,10,2) } else { "The northern wing of Gammis (blue) is to the south. The western and southern wings of Alphis lie due north and due east, in that order. Northern Epsis is a short ways to the southwest; Betis lies west of here. Deltis, residing a little farther than the others, is still only westerly walk from northern Epsis. The landing zone is north then northwest of here." } } n_to moon42 s_to { xobject=gammisnorth : return gammis } !Enter Gammis e_to moon53 w_to moon33 se_to moon54 sw_to moon34 nw_to moon32 } !---------------------------------------------------------------------------- sitesevenroom moon53 "South of Alphis" { misc 0,5,3 !#1 is not yet used long_desc { roomdesc_seen = true !Room description was "seen" on this turn. if (ruhnestory>=10) { PrintMsgChapter2(2,10,2) } else { "The southern wing of Alphis (white) touches ground to the north. A path northwest leads past its western side, and ahead to the landing zone. The nearest wings of Gammis are south and west of here; farther west being a direct course to Betis. Epsis is partially hidden behind Gammis from this vantage, accessible only by going west-southwest or south-southwest around the latter. Deltis is generally west and a little south, across to the other side of Site Seven. Low mountains form a jagged barrier to the east, bordering Site Seven on this side." } } n_to { xobject=alphissouth : return alphis } !Enter Alphis s_to moon54 w_to moon43 nw_to moon42 } !---------------------------------------------------------------------------- sitesevenbuilding deltis "Deltis" { misc 0,1,4,moon13,moon15,moon24,0,0,0 !#1 is flag. Yelled Thyras here yet? long_desc { roomdesc_seen = true !Room description was "seen" on this turn. PrintMsgChapter2(3,self) } } !---------------------------------------------------------------------------- sitesevenroom moon24 "South of Betis, East of Deltis" { misc 0,2,4 !#1 is not yet used long_desc { roomdesc_seen = true !Room description was "seen" on this turn. if (ruhnestory>=10) { PrintMsgChapter2(2,10,3) } else { "The southern wing of Betis and the eastern wing of Deltis (both red) are north and west of here, respectively. A path showing heavy prior use angles northwest of here, between the two buildings. Western Gammis and northern Epsis lie a short distance to the east. To the northeast, the western wing of Alphis is a generally straight course. The landing zone is on a course northeast then farther north from where you stand now." } } n_to { xobject=betissouth : return betis } !Enter Betis w_to { xobject=deltiseast : return deltis } !Enter Deltis s_to moon25 e_to moon34 ne_to moon33 sw_to moon15 nw_to moon13 } !---------------------------------------------------------------------------- sitesevenroom moon34 "North of Epsis, West of Gammis" { misc 0,3,4 !#1 is not yet used long_desc { roomdesc_seen = true !Room description was "seen" on this turn. if (ruhnestory>=10) { PrintMsgChapter2(2,10,3) } else { "The northern and western wings of Epsis and Gammis (both red) are to the south and east. A similar pair, southern Betis and eastern Deltis, lie a short length due west. The landing zone, due north a ways, is just visible with the angular form of the drop-shuttle rising from the red-orange haze. The southern and western wings of Alphis are a short walk northeast, then east or north. A southeasterly trail winds between the two nearest buildings." } } n_to moon33 s_to { xobject=epsisnorth : return epsis } !Enter Epsis e_to { xobject=gammiswest : return gammis } !Enter Gammis w_to moon24 ne_to moon43 se_to moon45 sw_to moon25 } !---------------------------------------------------------------------------- sitesevenbuilding gammis "Gammis" { misc 0,4,4,moon43,moon45,moon54,moon34,0,0 !#1 is flag. Yelled Thyras yet? long_desc { roomdesc_seen = true !Room description was "seen" on this turn. PrintMsgChapter2(3,self) } } !---------------------------------------------------------------------------- sitesevenroom moon54 "East of Gammis" { misc 0,5,4 !#1 is not yet used long_desc { roomdesc_seen = true !Room description was "seen" on this turn. if (ruhnestory>=10) { PrintMsgChapter2(2,10,2) } else { "The slanting eastern wing of Gammis (white) ends west of here. Both Alphis and Epsis are a short distance in differing directions, the former being a straight route north, the latter on a southwest angle. Deltis is hidden now behind Gammis, although a northwest southwest detour should bring it closer. The shortest course to Betis, its eastern wing, is northwest then west of here. From there, the landing zone is just a ways farther north. All easterly movement is needless, since tall hills form a border that way." } } n_to moon53 s_to moon55 w_to { xobject=gammiseast : return gammis } !Enter Gammis sw_to moon45 nw_to moon43 } !---------------------------------------------------------------------------- sitesevenroom moon15 "South of Deltis" { misc 0,1,5 !#1 is not yet used long_desc { roomdesc_seen = true !Room description was "seen" on this turn. if (ruhnestory>=10) { PrintMsgChapter2(2,10,2) } else { "The slanting southern wing of Deltis (blue) touches ground to the north. Southern Betis and the eastern wing of Deltis are straight northeast, while western Epsis is not far away, due east. The western wing of Gammis is east by northeast. Alphis, toward the opposite extremity of Site Seven, is a longer walk along the same northeast route that edges Deltis and Betis. A northerly detour along the same route, around mid-site, leads back to the drop-shuttle parked at the landing zone. A curve of hills west becomes tall, crooked mountains south, marking Site Seven's southwest corner." } } n_to { xobject=deltissouth : return deltis } !Enter Deltis e_to moon25 ne_to moon24 } !---------------------------------------------------------------------------- sitesevenroom moon25 "West of Epsis" { misc 0,2,5 !#1 is not yet used long_desc { roomdesc_seen = true !Room description was "seen" on this turn. if (ruhnestory>=10) { PrintMsgChapter2(2,10,2) } else { "The nearest wing is from western Epsis (green), directly east. Eastern Deltis and southern Betis are due north. A northeasterly course from here is a short stretch to the northern wing of Epsis and the western wing of Gammis. A farther walk northeast reaches to the vicinity of Alphis. Almost lost in the red-orange haze of Iurosian dust, the drop-shuttle is just visible northeast and a long walk north. Mountains denote the southern edge of Site Seven." } } n_to moon24 e_to { xobject=epsiswest : return epsis } !Enter Epsis w_to moon15 ne_to moon34 } !---------------------------------------------------------------------------- sitesevenbuilding epsis "Epsis" { misc 0,3,5,moon34,0,moon45,moon25,0,0 !#1 is flag. Yelled Thyras here yet? long_desc { roomdesc_seen = true !Room description was "seen" on this turn. PrintMsgChapter2(3,self) } } !---------------------------------------------------------------------------- sitesevenroom moon45 "South of Gammis, East of Epsis" { misc 0,4,5 !#1 is not yet used long_desc { roomdesc_seen = true !Room description was "seen" on this turn. if (ruhnestory>=10) { PrintMsgChapter2(2,10,3) } else { "To the north and west are the ramps of southern Gammis (green) and eastern Epsis (blue), in that order. A path between the two buildings slants off to the northwest, where Betis and Deltis are just a short walk farther west. From the same spot, northwest along the way between the two buildings, the landing zone is a direct course north. The shortest distance to Alphis, its southern wing, is northeast then due north. Mountains rise in across southerly directions, but only begin to curve north a short distance east of here." } } n_to { xobject=gammissouth : return gammis } !Enter Gammis e_to moon55 w_to { xobject=epsiseast : return epsis } !Enter Epsis ne_to moon54 nw_to moon34 } !---------------------------------------------------------------------------- sitesevenroom moon55 "Southeast edge of Site Seven" { misc 0,5,5 !#1 is not yet used long_desc { roomdesc_seen = true !Room description was "seen" on this turn. if (ruhnestory>=10) { PrintMsgChapter2(2,10,1) } else { "Jagged mountains and rounded hills form a protective curve in all southerly and easterly directions. Gammis blocks much walking to the northwest, but its southern wing is just ahead, west, where the eastern wing of Epsis also falls. Alphis is a straight walk north, past the eastern wing of Gammis. At Alphis, a continued course west or northwest will lead to eastern Betis or the landing zone, respectively. Deltis is on a route similar to Betis, but a generally west and northwest path is a more direct way. Bordering Site Seven to all southerly and easterly directions, tall mountains and trailing hills mark this as the area's southeast edge." } } n_to moon54 w_to moon45 } !**************************************************************************** !****(DAEMONS)*************************************************************** !**************************************************************************** !---------------------------------------------------------------------------- daemon RuhneMovement {} event in RuhneMovement { ! 1=North, 2=South, 3=East, 4=West ! 5=Northeast, 6=Southeast, 7=Southwest, 8=Northwest local nl,m1,m2,loc,ctr=0,dir,x1,y1,x2,y2,vol,idir,odir,mov=false !If the player hasn't moved, then neither does Ruhne !Nevermind, now that he can move away from the player. !!!!if (prev_location = location) { return } !If the player is somewhere out of earshot, then don't move. if (location = landzone,alphis,betis,gammis,deltis,epsis) { return } loc=parent(ruhneboy) : dir=ruhneboy.misc !Coordinates for the player's location x1=location.misc #2 : y1=location.misc #3 !First, move him to the new location, if any, this turn. We do this !because the prior clue told the player he was moving, so now he does. if (dir > 0) { mov = true !He did move this turn !He's already moving loc = loc.(dir.dir_to) : nl = loc.(dir.dir_to) move ruhneboy to loc !Now, check for an obstruction if RuhneRoomOk(nl) { !There is still a 1 in 2 chance he stops to switch dirs. if (random(2) = 1) { dir=0 } } else { !Has reached a dead end. dir=0 } } !Coordinates for Ruhne's location x2=loc.misc #2 : y2=loc.misc #3 vol=GetRuhneDistance(x1,y1,x2,y2) !Now, calculate Ruhnes position in regards to the player if (x2x1 and y2x1 and y2>y1) { idir=6 } elseif (x2y1) { idir=7 } elseif (y2y1) { idir=2 } elseif (x2>x1) { idir=3 } elseif (x20) { nl = loc.(odir.dir_to) if RuhneRoomOk(nl) { dir=odir } } !Is he capable of moving tangent to the player? if (dir=0) and (idir>0) { select odir case n_obj: { m1=nw_obj : m2=ne_obj } case s_obj: { m1=sw_obj : m2=se_obj } case e_obj: { m1=ne_obj : m2=se_obj } case w_obj: { m1=nw_obj : m2=sw_obj } case ne_obj: { m1=n_obj : m2=e_obj } case se_obj: { m1=s_obj : m2=e_obj } case sw_obj: { m1=s_obj : m2=w_obj } case nw_obj: { m1=n_obj : m2=w_obj } !So that it's not always 1 tangent versus another while (dir=0) and (ctr<5) { if (random(2)=1) { dir=m1 } else { dir=m2 } nl = loc.(dir.dir_to) if RuhneRoomOk(nl) { ctr=3 !We found a valid movement } else { dir=0 : ctr++ } } } !If he is STILL stopped, give him the opportunity to start (3/4 chance) if (dir=0) and (random(4) ~= 1) { while (dir=0) { dir=GetDirection(random(8),false) nl = loc.(dir.dir_to) !Ruhne doesn't go inside buildings... so don't allow him to. if RuhneRoomOk(nl) { !Okay to move this way. } else { dir=0 !Try again } } } ruhneboy.misc = dir PrintParaIndent !Appropriate indention or blank line if (ruhneboy in location) { EndRuhneMovement PrintMsgChapter2(6,1) } else { "For a moment, you can "; select vol case 1 : "hear the nearby "; case 2 : "hear the "; case 3 : "hear the distant "; case else : "faintly hear the "; print "sound of a child crying to the "; odir.name; ", "; if (vol<=2) { if (dir>0) { "and moving in "; if (dir=e_obj) { "an "; } else { "a "; } print dir.name; "erly direction." } else { "and not currently moving." } } else { "but it's too far away to sense any movement." } !!!!!!!!!!!! DEBUG CODE ONLY !!! indent : print "(Ruhne is now at: "; loc.name; ".)" } } !---------------------------------------------------------------------------- daemon Chapter2Story {} event in Chapter2Story { !First part of the story... everybody seems to be gone. We print a few !messages first, but then we advance the messages only as we mark off !each of the towers. !The kid is following the player at this story point. !Fixed - the boy will remain in the landing zone. if (ruhnestory>=11) { if (ruhneboy not in location) and (ruhneboy not in landzone) { move ruhneboy to location PrintMsgChapter2(6,5,1) } } !We have one thing to check first. If ruhnestory is 11, then we had to !have just finished the "white/card" dead end, and we asked the boy !about it to advance the story to 11. Now he's fully-lit as Incender, !and he wants to leave. But.... one final thing we must do first. if (ruhnestory=11) and (location is not interior) { PrintMsgChapter2(9,1) move thyras to location !Thyras now haunts us again. thyrascraft.found_in = location !Now it's here, too. ruhnestory=12 !Now, we can return to the landing zone. return } !Since this happens on every turn, give the user a clue about compass. if (ruhnestory>=10) { if (not roomdesc_seen) and (location ~= prev_location) and \ (location is not interior) { indent : PrintMsgChapter2(2,10,4) } indent : CheckWatchContext(2) !Print the "compass" message? return } if OuterRoomOk(location,false) { if (ruhnestory>=1) and (ruhnestory<=5) { PrintMsgChapter2(2,ruhnestory,0) ruhnestory++ !Increment for next time. } elseif (ruhnestory>=6) and (ruhnestory<=7) and (LookForThyrasCount(13)>=1) { PrintMsgChapter2(2,ruhnestory,0) ruhnestory++ !Increment for next time. } elseif (ruhnestory=8) and (LookForThyrasCount(13)>=2) { PrintMsgChapter2(2,ruhnestory,0) ruhnestory++ !Increment for next time. } elseif (ruhnestory=9) and (LookForThyrasCount(13)>=3) { PrintMsgChapter2(2,ruhnestory,0) ruhnestory++ !Increment for next time. } !No, let's not deactivate, so we can still give "compass" clue. !if (ruhnestory=10) { ! Deactivate(Chapter2Story) !} } } !**************************************************************************** !****(AREA ITEMS)************************************************************ !**************************************************************************** !---------------------------------------------------------------------------- object consolecard "small plastone card" { nouns "card", "key" adjectives "small", "plastone", "access" article "the" misc 0 !This will serve as a special counter for this. is hidden !So we don't show it in room description line. in ruhneboy size 10 !Nothing we can carry should have a size less than 10. long_desc { if (Chapter < 2) or (Section < 2) { PrintMsgChapter2(5,self,3) } else { if Contains(ruhneboy,self) { PrintMsgChapter2(5,self,2) } else { PrintMsgChapter2(5,self,1) } } } before { object DoGet { if (self is not moved) { local bldg : bldg = WhichWasLastBldg Acquire(player,self) PrintMsgChapter2(6,2,bldg) move ruhneboy to bldg return true } return false !Else continue as normal } object DoDrop { if (Chapter = 2) and (ruhnestory>=10) and \ (location is not interior) { PrintMsgChapter2(1,11) : return true } elseif (Chapter ~= 2) { "Although technically worthless, you value it too much to simply throw it aside." return true } return false !Continue with normal operations } } } !**************************************************************************** !****(AREA SCENERY)********************************************************** !**************************************************************************** class voice { nouns "voice" article "the" is living pronouns "it", "it", "its", "itself" before { object DoTalk,DoAsk,DoTell { if (location=alphis,betis,gammis,deltis,epsis) { PrintMsgChapter2(1,8,3) } else { if (ruhnestory>=10) { PrintMsgChapter2(1,8,2) } else { PrintMsgChapter2(1,8,1) } } return true } object DoGet { PrintMsgChapter2(1,6,word[1]) : return true } object DoLook { PrintMsgChapter2(1,6,"look at \ior\I examine") : return true } object { PrintMsgChapter2(1,7,self) : return true } } } !---------------------------------------------------------------------------- voice voice1 "voice" { !This one, we hear inside the last building. adjectives "unfamiliar", "sheeear", "female", "incender" !found_in 0 !We'll set this to the 5th building we yell in. found_in 0 before { object DoYell { PrintMsgChapter2(4,7,14) : return true } } } !---------------------------------------------------------------------------- voice voice2 "voice" { !This one is the voice of the crying kid. Starts out found_in nowhere, !but at the appropriate time, we will set them all correctly. nouns "voice", "sound", "crying", "child" adjectives "crying", "sound", "child", "child's" found_in 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 !Provide all 17 slots. before { object DoYell { PrintMsgChapter2(1,9) : return true } object DoFollow { PrintMsgChapter2(1,10) : return true } } } !---------------------------------------------------------------------------- scenery bldgdarkness "darkness above" { nouns "darkness", "above", "dark" adjectives "darkness" article "the" found_in alphis,betis,deltis,gammis,epsis long_desc { PrintMsgChapter2(5,self) } } !---------------------------------------------------------------------------- scenery bldgdoors "apartment doors" { nouns "door", "doors", "apartment", "apartments", "deck", "decks" adjectives "apartment", "narrow", "stationary" article "the" found_in alphis,betis,deltis,gammis,epsis long_desc { PrintMsgChapter2(5,self) } } !---------------------------------------------------------------------------- scenery bldgwalls "lift-wall" { nouns "wall","walls","track","tracks" adjectives "lift", "wide", "vertical" article "the" found_in alphis,betis,deltis,gammis,epsis long_desc { PrintMsgChapter2(5,self) } before { object DoClimb { PrintMsgChapter2(1,1) : return true } } } !---------------------------------------------------------------------------- scenery liftplatforms "lift platforms" { nouns "lift", "lifts", "platform", "platforms" adjectives "lift" is plural article "the" found_in alphis,betis,deltis,gammis,epsis long_desc { PrintMsgChapter2(5,self) } before { object DoEnter { PrintMsgChapter2(1,3) : return true } } } !---------------------------------------------------------------------------- scenery bldgconsole "console" { nouns "console", "panel", "cabinet" adjectives "single", "control", "transparent" article "the" key_object consolecard found_in alphis,betis,deltis,gammis,epsis is transparent, openable, not open, lockable, locked long_desc { PrintMsgChapter2(5,self) move consolebuttons to bldgconsole consolebuttons is known consolebuttons.adjectives #1 = "gray" consolebuttons.adjectives #2 = "grey" move consoleslot to location consoleslot is known } !Need to support "remove panel" as well! before { object DoUnlock,DoOpen { if (consoleslot is known) { if (self is open) { PrintMsgChapter2(1,12,5) !It's already open } else { if Contains(player,consolecard) { PrintMsgChapter2(1,12,7) !Assuming you mean... Perform(&DoPutIn,consolecard,consoleslot) } else { PrintMsgChapter2(1,12,1) !Don't have a key. } } } else { PrintMsgChapter2(1,12,4) !Have not seen the slot } return true !Supress any default and "after" messages. } object DoLock,DoClose { if (self is not open) { PrintMsgChapter2(1,12,6) !It's already closed } else { if Contains(player,consolecard) { PrintMsgChapter2(1,12,7) !Assuming you mean... Perform(&DoPutIn,consolecard,consoleslot) } else { PrintMsgChapter2(1,12,2) !Don't have a key. } } return true !Supress any default and "after" messages. } object DoHit { PrintMsgChapter2(1,13,self) return true } } } !---------------------------------------------------------------------------- object consoleslot "glowing slot" { nouns "slot", "keyhole" adjectives "console", "narrow", "glowing" article "the" is static, hidden, not known, container capacity 0 long_desc { PrintMsgChapter2(5,self) } before { xobject DoPutIn { if (object=consolecard) { if (bldgconsole is locked) { PrintMsgChapter2(1,12,&DoUnlock) PrintMsgChapter2(1,12,&DoOpen) bldgconsole is not locked : bldgconsole is open } else { PrintMsgChapter2(1,12,&DoClose) PrintMsgChapter2(1,12,&DoLock) bldgconsole is not open : bldgconsole is locked } } else { PrintMsgChapter2(1,12,3) } return true !No default } } } !---------------------------------------------------------------------------- ! Class definition for the buttons. class cb_button { nouns "control", "button" article "the" adjectives "", "","flat", "cryptic", "control", "other" !#1/2 is for the color. is static, hidden, not known misc 0 !On a button, tells what "color" the button is !But on the cb_button "object" itself, it's a "movement" flag. parse_rank 2 !Sort higher than "plural" version. long_desc { PrintMsgChapter2(5,self) } } !---------------------------------------------------------------------------- class cb_events { before { object DoPush,DoPoke,DoTouch { if (parent(self) is not open) { !Relies on the buttons to be INSIDE the bldgconsole now. PrintMsgChapter2(7,0,self) } else { local newcl,curcl newcl = self.misc curcl = location.misc #9 if (newcl = curcl) { !Already at the same color. PrintMsgChapter2(7,self,0) } else { local newdir, newout=0, curdir curdir = location.misc #8 newdir = GetNewDirection(curdir, curcl, newcl) select newdir case n_obj: { newout = location.misc #4 } case s_obj: { newout = location.misc #5 } case e_obj: { newout = location.misc #6 } case w_obj: { newout = location.misc #7 } SetTowerFacing(location, newdir, newout, newcl) if (cb_button.misc < 3) { cb_button.misc++ } PrintMsgChapter2(7,self,newdir) !Now, check to see if we did the right one. if (newcl=1) and (consolecard.misc = 0,1) and \ (location = epsis) { consolecard.misc = 1 PrintMsgChapter2(7,consolecard) } } } return true } } } !---------------------------------------------------------------------------- cb_button consolebuttons "control buttons" { nouns "control","button","controls","buttons", "grid" parse_rank 1 !Sort lower than "individual" buttons. is plural long_desc { PrintMsgChapter2(5,self) move cb_white to bldgconsole : cb_white is known move cb_green to bldgconsole : cb_green is known move cb_red to bldgconsole : cb_red is known move cb_blue to bldgconsole : cb_blue is known cb_white.adjectives #1 = "white" cb_green.adjectives #1 = "green" cb_red.adjectives #1 = "red" cb_blue.adjectives #1 = "blue" } before { object DoPush,DoPoke,DoTouch { if (parent(self) is not open) { !Relies on being INSIDE the bldgconsole now. PrintMsgChapter2(7,0,self) } else { PrintMsgChapter2(7,self) } return true } } } !---------------------------------------------------------------------------- cb_button cb_white "white button" { inherits cb_events misc 1 !White } !---------------------------------------------------------------------------- cb_button cb_green "green button" { inherits cb_events misc 2 !Green } !---------------------------------------------------------------------------- cb_button cb_red "red button" { inherits cb_events misc 3 !Red } !---------------------------------------------------------------------------- cb_button cb_blue "blue button" { inherits cb_events misc 4 !Blue } !---------------------------------------------------------------------------- scenery building "building" { nouns "alphis","betis","gammis","deltis","epsis","building", \ "buildings", "wing", "wings", "dormapod" adjectives "alphis","betis","gammis","deltis","epsis","wing" article "the" parse_rank 1 !So it doesn't carry as high a parse rank (ambiguity) found_in landzone,moon41,moon51,moon12,moon22,moon32,moon42, \ moon13,moon33,moon43,moon53,moon24,moon34,moon54,moon15, \ moon25,moon45,moon55 long_desc { PrintMsgChapter2(5,self) } } !---------------------------------------------------------------------------- class longwing { inherits scenery parse_rank 2 !So it gets parsed BEFORE the scenery-only version. misc 0,0,"" !#1 is the direction it enters to, #2 is color, #3 is bldg. article "the" long_desc { PrintMsgChapter2(5,longwing,self) } before { object DoEnter { Perform (&DoGo, self.misc) : return true } object DoClimb { PrintMsgChapter2(1,2) : return true } } } !---------------------------------------------------------------------------- class alphiswing { inherits longwing nouns "alphis", "alpha", "building", "wing", "dormapod" adjectives "alphis" } alphiswing alphisnorth "northern wing of Alphis" { misc s_obj, 3, "Alphis" found_in moon51 } alphiswing alphissouth "southern wing of Alphis" { misc n_obj, 1, "Alphis" found_in moon53 } alphiswing alphiseast "eastern wing of Alphis" { misc w_obj, 4, "Alphis" !Found nowhere } alphiswing alphiswest "western wing of Alphis" { misc e_obj, 2, "Alphis" found_in moon42 } !---------------------------------------------------------------------------- class betiswing { inherits longwing nouns "betis", "beta", "building", "wing", "dormapod" adjectives "betis" } betiswing betisnorth "northern wing of Betis" { misc s_obj, 1, "Betis" found_in moon22 } betiswing betissouth "southern wing of Betis" { misc n_obj, 3, "Betis" found_in moon24 } betiswing betiseast "eastern wing of Betis" { misc w_obj, 2, "Betis" found_in moon33 } betiswing betiswest "western wing of Betis" { misc e_obj, 4, "Betis" found_in moon13 } !---------------------------------------------------------------------------- class gammiswing { inherits longwing nouns "gammis", "gamma", "building", "wing", "dormapod" adjectives "gammis" } gammiswing gammisnorth "northern wing of Gammis" { misc s_obj, 4, "Gammis" found_in moon43 } gammiswing gammissouth "southern wing of Gammis" { misc n_obj, 2, "Gammis" found_in moon45 } gammiswing gammiseast "eastern wing of Gammis" { misc w_obj, 1, "Gammis" found_in moon54 } gammiswing gammiswest "western wing of Gammis" { misc e_obj, 3, "Gammis" found_in moon34 } !---------------------------------------------------------------------------- class deltiswing { inherits longwing nouns "deltis", "delta", "building", "wing", "dormapod" adjectives "deltis" } deltiswing deltisnorth "northern wing of Deltis" { misc s_obj, 2, "Deltis" found_in moon13 } deltiswing deltissouth "southern wing of Deltis" { misc n_obj, 4, "Deltis" found_in moon15 } deltiswing deltiseast "eastern wing of Deltis" { misc w_obj, 3, "Deltis" found_in moon24 } deltiswing deltiswest "western wing of Deltis" { misc e_obj, 1, "Deltis" !Found nowhere } !---------------------------------------------------------------------------- class epsiswing { inherits longwing nouns "epsis", "epsilon", "building", "wing", "dormapod" adjectives "epsis" } epsiswing epsisnorth "northern wing of Epsis" { misc s_obj, 3, "Epsis" found_in moon34 } epsiswing epsissouth "southern wing of Epsis" { misc n_obj, 1, "Epsis" !Found nowhere } epsiswing epsiseast "eastern wing of Epsis" { misc w_obj, 4, "Epsis" found_in moon45 } epsiswing epsiswest "western wing of Epsis" { misc e_obj, 2, "Epsis" found_in moon25 } !---------------------------------------------------------------------------- scenery dropshuttle "drop-shuttle" { article "the" nouns "shuttle", "drop-ship", "ship", "craft", "drop-shuttle" adjectives "drop" found_in landzone parse_rank 2 !Higher than hatchway door long_desc { PrintMsgChapter2(5,self) } before { object DoEnter { if (ruhnestory >= 12) { PrintMsgChapter2(1,19) } else { PrintMsgChapter2(1,17) } return true } } } !---------------------------------------------------------------------------- scenery hatchway "hatchway door" { nouns "door", "hatchway", "alcove", "hatch" adjectives "shuttle", "shuttle's", "hatchway" article "the" parse_rank 1 !Lower than shuttle itself found_in landzone is openable, lockable, not open, locked long_desc { PrintMsgChapter2(5,self) !And now, the player knows about the slot. hatchslot.found_in #1 = landzone } before { object DoOpen, DoUnlock { if (ruhnestory < 12) { Perform(&DoEnter,dropshuttle) } else { Perform(&DoPull,slidelever) } return true } } } !---------------------------------------------------------------------------- scenery slidelever "slide-lever" { nouns "lever", "slide", "slide-lever", "indention" adjectives "slide" article "the" found_in landzone long_desc { PrintMsgChapter2(5,self) } before { object DoPull { if (ruhnestory < 12) { Perform(&DoEnter,dropshuttle) } else { PrintMsgChapter2(1,20) } return true } } } !---------------------------------------------------------------------------- scenery landingramp "landing ramp" { nouns "ramp" adjectives "landing" article "the" found_in landzone long_desc { PrintMsgChapter2(5,self) } } !---------------------------------------------------------------------------- scenery hatchslot "slot in the alcove" { nouns "slot", "opening" adjectives "thin", "narrow", "small" article "the" found_in 0 !We'll set this to landzone when appropriate. is container capacity 0 long_desc { PrintMsgChapter2(5,self) } before { xobject DoPutIn { if (object = consolecard) { if (ruhnestory < 12) { !Should never get in this spot, but just in case. Perform(&DoEnter,dropshuttle) } else { !At last.... we're done with this chapter! Deactivate(Chapter2Story) PrintMsgChapter2(99) } return true } else { PrintMsgChapter2(1,12,3) } } } } !---------------------------------------------------------------------------- scenery thyrascraft "Thyras's craft" { nouns "craft", "silhouette", "ship" adjectives "small", "thyras's" found_in 0 !We'll move this to the correct location.... long_desc { PrintMsgChapter2(5,self) } } !**************************************************************************** !****(MISC CHAPTER2-ONLY ROUTINES)******************************************* !**************************************************************************** !---------------------------------------------------------------------------- routine RuhneRoomOk(loc) { !Make sure that RuhneBoy's target room is valid... and not player's loc. if (loc>0) and (loc~=location) and (loc~=landzone) and \ (loc is not interior) { return true } else { return false } } !---------------------------------------------------------------------------- routine OuterRoomOk(loc,okprev) { !Make sure that player is in an "outside" location !okprev flag tells us whether or not it's only okay if we just moved !into a different room that happens to qualify as okay. if (loc is not interior) and (loc ~= landzone) { if (loc ~= prev_location) or (okprev) { return true } } return false } !---------------------------------------------------------------------------- routine PrintWingColor(cl,cs) { if (cs=1) { select cl case 1 : { print "white"; } case 2 : { print "green"; } case 3 : { print "red"; } case 4 : { print "blue"; } } if (cs=2) { select cl case 1 : { print "WHITE"; } case 2 : { print "GREEN"; } case 3 : { print "RED"; } case 4 : { print "BLUE"; } } } !---------------------------------------------------------------------------- !How many buildings have we already visited? routine AnyBldgVisited { local abv=0 if (alphis is visited) { abv++ } if (betis is visited) { abv++ } if (gammis is visited) { abv++ } if (deltis is visited) { abv++ } if (epsis is visited) { abv++ } return(abv) } !---------------------------------------------------------------------------- !Count how many buildings we've already reached a certain "misc" count. !This is used to make sure that we don't repeat things if we move from !one building to another, *and* to know when we've yelled, in all, etc. routine LookForThyrasCount(endftc) { local lftc=0 if (alphis.misc >= endftc) { lftc++ } if (betis.misc >= endftc) { lftc++ } if (gammis.misc >= endftc) { lftc++ } if (deltis.misc >= endftc) { lftc++ } if (epsis.misc >= endftc) { lftc++ } return(lftc) } !---------------------------------------------------------------------------- ! Determine which building the woman's voice came from (last to yell in). routine WhichWasLastBldg { if (alphis.misc = 14) { return alphis } if (betis.misc = 14) { return betis } if (deltis.misc = 14) { return deltis } if (gammis.misc = 14) { return gammis } if (epsis.misc = 14) { return epsis } return 0 !Woops, not that far yet. } !---------------------------------------------------------------------------- routine StartRuhneMovement { local d=0,dmax=0 !Figure out which corner of the map is farthest from the player. d=GetRuhneDistance(location.misc #2, location.misc #3, moon51.misc #2, moon51.misc #3) if (d>dmax) { dmax=d : move ruhneboy to moon51 } d=GetRuhneDistance(location.misc #2, location.misc #3, moon12.misc #2, moon12.misc #3) if (d>dmax) { dmax=d : move ruhneboy to moon12 } d=GetRuhneDistance(location.misc #2, location.misc #3, moon15.misc #2, moon15.misc #3) if (d>dmax) { dmax=d : move ruhneboy to moon15 } d=GetRuhneDistance(location.misc #2, location.misc #3, moon55.misc #2, moon55.misc #3) if (d>dmax) { dmax=d : move ruhneboy to moon55 } !Now, fill in all the "voice" found_ins so we can interact with it. voice2.found_in = moon41,moon51,moon12,moon22,moon32,moon42,moon13, \ moon33,moon43,moon53,moon24,moon34,moon54,moon15, \ moon25,moon45,moon55 !And finally, start the script that sets him in motion! Activate(RuhneMovement) } !---------------------------------------------------------------------------- routine EndRuhneMovement { !Make the voice "gone" again by removing its found_in properties. voice2.found_in = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 !Finally, deactivate the "pacman" script. :) Deactivate(RuhneMovement) ruhneboy is not hidden } !---------------------------------------------------------------------------- routine GetRuhneDistance(x1,y1,x2,y2) { !Now, calculate how far away he is. if (abs(x1-x2)>=4) or (abs(y1-y2)>=4) { return(4) } elseif (abs(x1-x2)>=3) or (abs(y1-y2)>=3) { return(3) } elseif (abs(x1-x2)>=2) or (abs(y1-y2)>=2) { return(2) } else { return(1) } } !---------------------------------------------------------------------------- routine YellAboutThyras { if (thyras in location) { !Now he's here, atop the building we exited! Perform(&DoYell,thyras) !Yell "at" Thyras instead. } elseif (location=alphis,betis,gammis,deltis,epsis) { if (location.misc < 13) { !We did it! Print appropriate and set misc=13 PrintMsgChapter2(4,6,LookForThyrasCount(13)) if (LookForThyrasCount(13)>=4) { !This is the final building location.misc = 14 !Flag it as the final one !And just in case player somehow missed it... ruhnestory=10 !Force the dust storm to initiate. StartRuhneMovement !Start the PacMan Script. :) !And finally, make this "voice" object known voice1.found_in = location !The voice was here. } else { !One of the first four location.misc = 13 !Flag that we yelled here. } } else { !Wait, we already yelled in this one. Can't again. PrintMsgChapter2(4,7,location.misc) } } else { !If you're outside... if(ruhnestory>=10) { PrintMsgChapter2(1,4,2) } else { PrintMsgChapter2(1,4,1) } } return true } !---------------------------------------------------------------------------- !Based on the current facing direction and color, and the "new" color. routine GetNewDirection(curdir,curcol,newcol) { local offset, newdir, olddir offset = newcol-curcol newdir = curdir while (offset ~= 0) { olddir = newdir if (offset < 0) { !Rotate counterclock offset++ select olddir case n_obj: { newdir = w_obj } case w_obj: { newdir = s_obj } case s_obj: { newdir = e_obj } case e_obj: { newdir = n_obj } } else { !Rotatation is clockwise offset-- select olddir case n_obj: { newdir = e_obj } case e_obj: { newdir = s_obj } case s_obj: { newdir = w_obj } case w_obj: { newdir = n_obj } } } return (newdir) } !---------------------------------------------------------------------------- ! Call this routine to "set" the direction and color of the tower interior routine SetTowerFacing(bldg, dir, outloc, cl) { if (dir=n_obj) { bldg.n_to=outloc } else { bldg.n_to=0 } if (dir=s_obj) { bldg.s_to=outloc } else { bldg.s_to=0 } if (dir=e_obj) { bldg.e_to=outloc } else { bldg.e_to=0 } if (dir=w_obj) { bldg.w_to=outloc } else { bldg.w_to=0 } bldg.misc #8 = dir !Flag to remember the exit direction. bldg.misc #9 = cl !Set color based on wing color. bldg.out_to = outloc !If doing "out" verb } !---------------------------------------------------------------------------- routine CheckForBuilding(loc,dir) { if (dir=ne_obj) and (loc=moon43) { return true } if (dir=se_obj) and (loc=moon12,moon41,moon33,moon24) { return true } if (dir=sw_obj) and (loc=moon32,moon53) { return true } if (dir=nw_obj) and (loc=moon25,moon34,moon55) { return true } return false !Otherwise, a building doesn't block our path. } !---------------------------------------------------------------------------- routine PrintMsgChapter2(num,val1,val2) { !************* Messages when walking from place to place if(num=0) { if (val1=1) { !Val2 is dir object here. print "You enter the building to the "; val2.name; print ", passing through the entrance behind its "; print GetDirection(val2,true).name; "ern wing." } if (val1=2) { !Val2 is dir object here. print "You hurry to the "; val2.name; print ", passing quickly through the entrance behind the "; print GetDirection(val2,true).name; "ern wing, in from the dust storm that still rages outside." } if (val1=3) { !Storm causes unpredictable movement print "Without a clear source of direction to guide you through the roaring haze of red, you walk "; val2.name; " instead." } if (val1=4) { !Exiting from a building - normal print "You exit "; val2.name; " through the entrance." } if (val1=5) { !Exiting from a building - dust storm print "Torrents of red dust and the cold, roaring wind assault you as you exit "; val2.name; " through the entrance." } if (val1=6) { !Leaving the landing zone if (val2=0) { "The storm has grown even worse. Instead of further exploring Site Seven, you feel a pressing urge to board the drop-shuttle and leave Iuros." } else { if (ruhnestory>=11) and (ruhneboy in landzone) { print "The boy waits near the drop-shuttle, unwilling to follow. He seems to prefer the partial protection afforded by the craft." } print "You leave the landing zone, heading into Site Seven on "; if (val2=e_obj) { "an "; } else { "a "; } print object.name; "erly path." } } if (val1=7) { !Entering the Landing Zone if (val2=1) { "Red dust leaves a clouded trail behind you as you walk back into the landing area." } else { "Catching an ideal, momentary curtailment, you rush through the blasting wind, into the landing area." } } if (val1=8) { !Outside place to outside place - non-storm "Your boots kick up red dust as you walk to the "; print val2.name; "." } if (val1=9) { !Outside place to outside place - in the storm "Fighting for balance in the roaring wind, you walk "; print val2.name; "." } } !************* Can't move in a certain direction or "can't do that" if(num=1) { if (val1=1) { "By gripping one of the tracks just right, you are able to climb a short ways up the wall. However, you realize this is no solution to your problems when you slip and fall back down onto the platform below. It seems rather dangerous, too. You decide against trying to scale the walls." } if (val1=2) { "The walls of the building are slanted the wrong way for climbing, and the wings are too steep and slick." } if (val1=3) { "Being uncertain just how to use the lifts, and finding it very unlikely that a solution will present itself, you change your mind about stepping onto one of the platforms." } if (val1=4) { print "You "; word[1]; " your brother's name, hoping that he might hear it "; if(val2=1) { "if indeed he happens to be within earshot. "; } if(val2=2) { "above the din of the dust storm. "; } "Only the wind answers." } if (val1=5) { "The landing zone is completely obscured by the relentless dust storm. Wind whips fiercely through the area, forming an impassable torrent. You shield your face with both arms and back away from the landing zone. You can't return to the drop-shuttle until the weather is calmer." } if (val1=6) { !Note that this is also called by OTHER areas that have voices, !Not just Chapter 2, so let's keep it generic. print "It's impossible for you to\I "; val2; " \isomething that isn't a tangible object. The voice is merely sound." } if (val1=7) { !Note that this also gets called from other areas, so don't !Make it specific to any one item. General thing. :) print "You can't do that with "; art(val2); "." } if (val1=8) { if (val2=1) { print "The voice makes no reply." } if (val2=2) { print "The normal volume of your own voice is no match for the bellowing of the wind." } if (val2=3) { print "Your voice echoes in the chamber, but it isn't loud enough to be heard in the upper reaches." } } if (val1=9) { print "You "; word[1]; " above the roar, intending to identify your location to the child, but the effort has no effect. The crying continues, moving through the dust-blasted site. The child must be lost, scared, and unable to follow your voice." } if (val1=10) { "Following the voice seems like the right idea. If you can just identify the general direction, sense its movement, and gauge the distance, you may be able to track it." } if (val1=11) { "The boy seemed to place too much importance in this card to just drop it and let the horrible wind sweep it away. You change your mind, choosing to retain it instead." } if (val1=12) { !Extra messages dealing with the console slot. if (val2=1) { !Don't have a key that fits to open or unlock print "You can see no way to unlock and open the panel right now. Supposing that the glowing slot beside the console acts as a lock, you have nothing to use there." } if (val2=2) { !Don't have a key that fits to close or lock. print "you are no longer carrying "; art(consolecard); "." } if (val2=3) { !Wrong Object (supports consoleslot and hatchslot) "Only a small, flat object could possibly fit in there." } if (val2=4) { !Haven't yet seen the card slot. "You are currently unaware of any method by which the panel might be unlocked and opened. Perhaps an inspection of the console itself might lend a clue." } if (val2=5) { !Already open print CArt(bldgconsole); " is already unlocked and open." } if (val2=6) { !Already closed print CArt(bldgconsole); " is already closed and locked." } if (val2=7) { !Assuming you mean to.... print "(assuming you mean to insert "; art(consolecard); print " into "; art(consoleslot); ")" } if (val2=&DoClose) { !Close "The transparent cover slides back into place over the console. "; } if (val2=&DoLock) { !Lock "The console whirs again as the panel is once again locked." } if (val2=&DoUnlock) { !Unlock "The console whirs briefly as the panel is unlocked. "; } if (val2=&DoOpen) { !Open "The transparent panel shimmers and recedes into the wall." } } if (val1=13) { if (val2 is open) { !Hitting the open console "Without the transparent panel for protection, you might very well damage the control grid if you tried that. The "; print "urge to "; word[1]; " "; art(val2); " subsides." } else { print "The transparent panel covering "; Art(val2); " is remarkably resistant to the punishment you inflict. It's probably meant to be opened, not destroyed." } } if (val1=14) { !Trying to go the wrong way when inside a building. if (val2=1) { !No exit that way. "A solid wall blocks your way. It might be easier, you decide, to simply go\I out, \irather than remembering the right direction." } else { !Exit, but the mountains block us. "The exit now opens onto the rocky, steep start of the mountainous barrier. It isn't necessary to go that way." } } if (val1=15) { "You might risk losing it to the wind if you tried that now." } if (val1=16) { "The boy refuses to go inside, and since you have become his unwitting guardian, that precludes you from seeking shelter there. If you catch a break in the storm, however brief, you might be able to return to the landing zone." } if (val1=17) { "You came here to find Thyras, and until you find him or the search is exhausted, you plan to keep looking. The drop-shuttle will still be here when you're ready to leave." } if (val1=18) { "The boy already seems emotionally fragile right now. Yelling at him, even if that's the only way he can hear you above the noise of the raging wind, isn't necessary as long as he stays nearby." } if (val1=19) { "The hatchway door is closed." } if (val1=20) { "You tug on the slide-lever, which in most other situations would trigger the closure pistons and open the hatchway door. However, the entire assembly has become hopelessly jammed with red dust. The lever moves only partway, and you realize with a certain finality that you won't be able to open the door this way." } if (val1=21) { !Can't go into the mountains if (val2=1) { "Only the mountains can be found in that direction, and "; } else { "Rocky hills can be found that way, but "; } "you have no desire to become lost in the bleak Iurosian landscape." } if (val1=22) { !Building is in the way "The corner of a large building blocks your movement in that direction. Its wings, however, can be found around to the sides." } if (val1=23) { !Trying to "interact" with the SiteSeven object. if (val2=1) { !Generic Actions "Realizing how large Site Seven is, you abandon the idea." } elseif (val2=2) { !Attempting to search if (ruhnestory >= 12) { "You already found Thyras -- or rather, he found you." } else { "That seems reasonable, but you'll have to leave the landing zone and explore the site." } } } } !************* Story printings if(num=2) { if(val1=0) { "You take several careful steps down the steep landing ramp, then drop and turn the last bit, landing with an unnatural lack of effort. A quick pull on the slide-lever starts the brief run of hatchway closure pistons, and you step aside quickly, facing south away from the drop-shuttle to survey the Iurosian landscape." indent !Because our room description continues afterwards } if(val1>0 and val1<10) { PrintParaIndent !Print appropriate blank line or indent !Then do whatever is right per-number below. } if(val1=1) { "Something strikes you as being strange about Site Seven. It isn't the bleak landscape, nor the inverted architecture. Something else, though. Something very odd and very unexpected." } if(val1=2) { "A distant wind whistles through the mountains, reaching you like a soft wail." } if(val1=3) { "A realization rises to the surface of your mind as you once again study the area. It seems very quiet here; no noise, no people. This isn't at all how Thyras once described the place. "; if (val2=0) { !This one gets printed if the player is outside.... "Many children should be playing in the dust dunes. A makeshift darediving pool should be visible at the southeast edge of the site, but it isn't. Site Seven should be alive with the sounds of activity. Booths for commerce should line the center way. "; } else { !This one, if the player happens to be inside at this point. "Many children should have been playing among the dust dunes outside. A makeshift darediving pool should have been visible at the southeast edge of the site, but it wasn't. Site Seven should be alive with the sounds of activity. Booths for commerce should have formed rows along the center way, and Incenders should be coming and going from their homes. "; } "None of that was true, it seems." } if(val1=4) { "The wind has grown stronger, coming now as a mild roar through distant mountain passes. Red dust begins to whip against your pant legs, swirling and rolling among the buildings." } if(val1=5) { "Dust rises in clouds, whipped frantically by the rising wind. The air grows a little cooler." } if(val1=6) { "Dust collects in miniature hills against your boots, held by a growing wind. The air is a swirl of red, but visibility remains fair. Eerie sighs escape the mountains, as wind plays strange tricks among the jagged peaks and passes." } if(val1=7) { "The temperature seems to dip slightly, and the wind assumes a low, guttural roar. Red dust fills the air, beating against your skin and clothing, but visibility remains adequate." } if(val1=8) { "The air is definitely colder now. Your movements are made difficult by a wind that threatens to either carry you ahead or hold you in place, depending upon which way you are going. The air is a swirl of red dust, and visibility is poor." } if(val1=9) { "A dust storm rages around you now, obscuring visibility and blasting your skin in the process. The wind is cold as it whips around you in all directions." } if(val1=10) { if(val2=1) { "The raging dust storm obscures visibility in all directions." } if (val2=2) { "Red dust beats against your skin and clothing, and you raise one arm to shield your eyes. Visibility is obscured, but you can just see the looming form of an Incender building nearby." } if (val2=3) { "Wind rushes around and between the looming forms of two nearby Incender buildings. Red dust torments your skin, beats against your clothing, and obscures visibility." } if (val2=4) { "An intense dust storm rages around you." } } } !************* Room description for the interior of the buildings. if (num=3) { !val1 is set to the room object. "The interior of the building is a narrow entryway front to back, wider side to side, with rising walls that disappear into darkness high overhead. Three rail-guarded platforms rest against vertical tracks that scale the longer "; !The elevators are against the opposite wall from the exit if (val1.n_to > 0) { "southern "; } if (val1.s_to > 0) { "northern "; } if (val1.e_to > 0) { "western "; } if (val1.w_to > 0) { "eastern "; } "wall, opposite the "; if (val1.n_to > 0) { "northern "; } if (val1.s_to > 0) { "southern "; } if (val1.e_to > 0) { "eastern "; } if (val1.w_to > 0) { "western "; } "entrance. "; "A series of lights, glowing in dull "; : PrintWingColor(val1.misc #9, 1) ", line the floor near the wall of platforms. A single console set into the wall near the entrance blinks with brighter lighting of the same color. Aside from its towering height, the room itself seems to occupy only a portion of the building's floor area, as judged from the outside. "; if (AnyBldgVisited = 0) { "Thyras once described these as residential units. It seems reasonable that this is only the ground-level access for dwellings above." } else { print "" !Nothing printed, so end the line. } } !************* The "Search for Thyras" messages if (num=4) { if(val1<=5) { !Only indent for the "each_turn"-invoked messages. PrintParaIndent !Print appropriate blank line or indent } if (val1=1) { if(val2=0) { !Not yet yelled for Thyras anywhere "You notice that the only sounds here are the ones of your own making. Even the soft shuffle of your boots against the floor elicits an echoing of clicks that plays along the walls and returns, distorted, from the blackness high above." } else { !Already heard shuffling echoes in another building "Your footsteps send soft clicks echoing about this tall chamber as well." } } if (val1=2) { if(val2=0) { !Not yet given clue that lifts are a no-go "If Thyras is indeed here, perhaps in some apartment set into the wall above, conducting a search could be a time intensive endeavor. With only a rudimentary knowledge of Sheeear writing and Sheeear technology, usage of the lifts is an unbeatable mystery as well. This further weakens the prospect of a room by room search." } else { !Already given clue that the lifts are a no-go "If this building holds the home of Thyras and Eeeloraaa, finding it via the useless lift platforms is equally impossible here." } } if (val1=3) { if(val2=0) { !Not yet given clue about saying his name loudly "Every sound seems to carry up the dark, narrow atrium. Thyras would almost certainly hear his name, if it was loud enough. That is, of course, if he's somewhere up there to hear it." } else { !Already given clue about saying his name loudly "If Thyras is in an apartment above, he would almost certainly hear his name, if it were loud enough." } } if (val1=4) { if(val2=0) { "You don't ordinarily yell, but it might be the only way to discover whether or not Thyras is somewhere above and willing to answer." } else { "Yelling Thyras's name may work as well here as it did before -- though perhaps with more positive results." } } if (val1=5) { "You glance upward into the darkness, wondering if it might help to\I Yell Thyras \iinto the rising atrium." } if (val1=6) { print "You "; word[1]; " your brother's name. The sound echoes high into the chamber, surely heard by anyone above. "; if (val2=0) { !None yet done "You wait... wait... but no reply comes. To be sure, you yell out a second time. Nothing. Still, this was only the first of five buildings. If Thyras is here at Site Seven, he might reside at one of the others." } elseif(val2=1) { !One other done so far. "The call goes unanswered here as well. It seems unlikely, even granting your limited understanding of Incender ways, that every resident is soundly asleep. Still, three more buildings remain. Perhaps the first two are merely unused." } elseif(val2=2) { !Two others done so far "The only reply is the quickly fading echo itself. This supports your growing suspicion that Site Seven might be entirely abandoned." } elseif(val2=3) { !Three others done so far "Nothing. In growing frustration, you yell your brother's name twice more, echo feeding upon echo, ringing the walls. If Thyras isn't to be found in the only other building not yet checked, this could be a wasted trip after all." } elseif(val2=4) { !All four others done so far. "After only a moment, you can hear faint clicks from above. A small light winks into existence in the upper darkness. A distant shout is sent in reply, distorted with echoes. \"Whoever you are, leave here now. The Gods will be pleased with a sacrifice of two. You need not be a third.\" More clicks precede the vanishing of the single point of light, and silence fills the tall chamber once again. Although the voice was unfamiliar in a well of echoes, you are certain that it wasn't Thyras. The accent, the tone, the extended vowel sounds; clearly Sheeear, possibly female." } } if (val1=7) { if(val2=14) { !Trying to yell again in the final building. Note that we !should not indicate that the word "thyras" was yelled, !because we can also now "yell at voice." :) "You receive silence in reply. The voice from above will no longer answer your call." } else { !Trying to yell again in one we already did "You already tried that here, and the call went unanswered. It isn't necessary to try again. It seems that nobody is up there." } } } !************* Object and Scenery descriptions for this chapter. if (num=5) { if(val1=building) { "A closer look is possible only from a closer proximity." } if(val1=longwing) { local opdir opdir = GetDirection(val2.misc, true) "A "; : PrintWingColor(val2.misc #2, 1) " wing rises ramplike from the ground just "; print val2.misc.name; " of where you stand, angling steeply to connect near the top of the "; print opdir.name; "ern side of "; val2.misc #3; ". A large hexagonal opening in the side of the building is an entrance "; print val2.misc.name; ", behind the wing." } if(val1=bldgdarkness) { "You see nothing in the darkness above." } if(val1=bldgdoors) { "Only the decks and doors at the lower levels are visible. Higher levels disappear into the darkness. Of what remains visible closer to ground level, you see nothing to suggest activity. No doors are open, all are a flat gray, and you detect no movement along any of the visible decks." } if(val1=liftplatforms) { "The edge-wheels of each platform fit snugly into track indentions in the mildly convex wall. These seem to be lift platforms, for accessing the narrow decks at each level above. However, no visible controls reside within or near any of them -- one console is set into the wall near the exit, but that's not accessible to a rider of the lifts. Even so, it would hardly seem a handy placement for lift controls. Your limited knowledge of Sheeear technology is no help, bringing about the conclusion that you can do nothing with the lift platforms, least of all rise to upper levels on one." } if(val1=bldgwalls) { "Three sets of tracks run up the interior wall, forming indentions into which the deeply grooved wheels on the backs of each platform snugly fit. It seems to form a lift system for accessing the upper reaches of the building. Narrow, stationary decks at each level curve with the wall, presumably providing a series of stops, with access to apartment doors above." } if(val1=bldgconsole) { "The console is set into the wall near the exit, at just about chest level. "; if (self is not open) { "A transparent panel covers it. Inside, flat buttons form a grid, looking very similar to some of the cryptic controls aboard the drop-shuttle. Odd symbols appear on some of them, and several sections have been labeled in illegible print. Behind the protective panel, the console is inaccessible. "; } else { "Its protective panel has receded into the wall, exposing the grid of flat buttons within. The symbols on and around the buttons are cryptic and unknown to you. "; } "Set into the wall beside the console is a narrow slot, and from within this slot glows a "; if (self is locked) { "bright "; } else { "dim "; } PrintWingColor(location.misc #9, 1) : " light." } if(val1=consolebuttons) { local n=0, xloop "The buttons are arranged in a flat grid of black outlines. Most are gray, but one blinks steadily in "; PrintWingColor(location.misc #9, 1) : ". Three others ("; for (xloop=1; xloop<=4; xloop++) { if (location.misc #9 ~= xloop) { if (n=1) { print ", "; } if (n=2) { print " and "; } PrintWingColor(xloop,1) : n++ } } print ") are also lit, but not blinking." } if (val1=consoleslot) { "A single, narrow slot near the console spills\I "; PrintWingColor(location.misc #9, 2) : " \ilight onto the wall. Although your comprehension of Incender technology is scant at best, you have seen locking mechanisms of this sort before." } if (val1=consolecard) { if (val2=1) { "The small card isn't quite plastone, but it feels very similar. Four stripes mark one side, in each of the familiar Incender caste colors. On the other is verbiage in the Incender script, impossible to read." } elseif (val2=2) { "You can't get a very good look at the card while the boy is still holding it." } elseif (val2=3) { "Although the card hasn't been used in around twenty cycles, it shows excess wear from excess handling. It may be silly to carry it around after all this time, but it serves as a reminder, and perhaps a source of good luck. It didn't \"save the day\", after all, but it certainly saved your life." } } if (val1=cb_red,cb_white,cb_blue,cb_green) { !We share a description among these buttons. print "The button glows in "; :PrintWingColor(self.misc,1) if (self.misc = location.misc #9) { " and blinks brightly. "; } else { ", solid and unblinking. "; } "It forms a small part of the larger grid, which also contains one button each of the other three Sheeear caste colors. The remainder are lit in gray, and all feature strange symbols and indecipherable labels." } if (val1=dropshuttle) { "You never tire of looking at the outside of a drop-shuttle, especially after being confined inside one for eight days. The craft is of Incender design; sleek, tall, and elegant. The surface is a rough texture of green and gray, interrupted by fins, windows, and other less identifiable minor protrusions. Your people have been content for thousands of cycles riding in carriages mounted upon massive worms of the land, sea, and air varieties, yet these Incenders have the ability to create vehicles that carry a person across vast distances of space. Truly amazing." } if (val1=hatchway) { "The hatchway door is a rounded rectangle set into the top of an arc in a tall alcove. On the side of the drop-shuttle, just to the right of the alcove, a slide-lever is set into a long indention. Just inside the alcove, where the wall curves inward, is a thin slot labeled with typical (in other words, indecipherable) Sheeear writing." } if (val1=slidelever) { "Set into a shallow indention, the slide-lever is a long handle used to open or close the hatchway and lower or raise the landing ramp. "; if (ruhnestory >= 12) { "The indention is now saturated with red dust." } else { print "" !Nothing more to say, so end the line. } } if (val1=landingramp) { "You can't see it, since it has receded into the drop-shuttle and is presumably tucked away in an area behind the hatchway door." } if (val1=hatchslot) { if (ruhnestory >= 12) { "The slot appears to have remained safe from the brunt of the dust storm, being tucked away in the inner wall of the alcove." } else { "Where one wall curves inward to form an alcove, a small, narrow slot is set." } } if (val1=thyrascraft) { "You can't get a very good look at it through the haze, but from the shape, it's something much different than a drop-shuttle." } } !************* When we find Ruhne, these are the messages (plus talking) if (num=6) { if (val1=1) { "The punishing wind continues to carry thick dust in all directions, but you can just make out a small form nearby. Closer inspection proves that it is a young boy, perhaps the source of the prior crying. He stands motionless for a moment, then takes a small step forward. An object clutched tightly in his hand seems to be a small plastone card. \"Take... this...\" he says, his voice coming forced and fragmented above the wind. \"Inside... open console with... shift to... white sector... southern...\" He holds the card out for you. The strong, cold wind threatens to rip it from his grip. He waits for you to take it from him." } if (val1=2) { "You accept the small card. The boy raises the now-empty hand up to help the other shield his face against the storm. \"Please...\" he begins, raising his voice to be heard above the wind. \"South dormapod... unlock and open... select white... please help... the storm... must shield...\" The boy "; print "turns toward "; val2.name; " and pushes against the strong wind, disappearing quickly into the storm." } if (val1=3) { !Trying to talk to him while outside. "The relentless wind makes it impossible to carry on a conversation with him. "; if Contains(player,consolecard) { "" !Nothing else to print } else { "Besides, his only interest seems to be in convincing you to accept the plastone card." } } if (val1=4) { !Showing or asking about a certain object. if (val2=consolecard) { if (val2.misc = 0) { "The boy motions toward the exit. \"Please, help me find it. I think... maybe... the white zone of "; if (location = epsis) { "this "; } else { "the southern "; } "dormapod. I don't know...\"" } if (val2.misc = 1) { indent "His reply seems timid and tentative. \"I took it from my mother, because it can access all four zones. I was caught in the storm, trying to find an entrance into the mountains where the shielding machine is stored. I don't know why my mother turned it off. I don't even know why we're still here. I thought I could figure it out.\" He stops for a moment, maybe on the verge of crying again, but not quite. \"I can't remember the sequence. I didn't know what she was doing.\"" indent "After a long pause, the boy motions toward the exit. \"I don't want to be here. I saw you land, and I want to go with you, anywhere away from here.\" His eyes grow moist, and fresh tears dampen the dust on his cheeks. His eyes... something about his eyes... but you have no time to consider it as his entire body flashes in white, pale blue, burning red. Dust is expelled from his now-blazing form in a sudden burst, but the flames quickly settle to a more stable form." indent "This, too, you have very little time to consider, when a distant thump sends a mild shudder through the building. The boy is probably right. It's time to get away from this place." PlaySong(player.misc #9) !PlaySong will check allow_music } if (val2.misc = 2) { "\"I don't know how to do it,\" he replies. \"I thought I could use the card to open the way into the mountains, like my mother did, but I don't know how. We shouldn't waste time trying. I want to leave. I want to go with you, away in your drop-shuttle.\"" } } } if (val1=5) { !The boy is following the player around. if (val2=1) { indent "The Incender boy follows you here." } else { "The Incender boy is following you." } } } !************* !Pushing buttons messages. if (num=7) { if (val1=0) { print "You can't "; word[1]; " "; art(val2); " while"; print MatchPlural(val2,"it","they"); IsOrAre(val2,true); " behind the transparent panel." } if (val1=consolebuttons) { print capital word[1]; "ing random control buttons of the gray variety seems to get you nowhere, although you feel a strange warmth upon touching each square outline. These buttons are unlike the mechanical versions your own people use, being flat and capacitive as opposed to raised and mobile -- another simple reminder that Incender technology surpasses anything your world has previously known. You also notice that not all of the buttons are lit in gray." } if (val1=cb_red,cb_green,cb_white,cb_blue) { if (val2=0) { print "You "; word[1]; " the flashing "; val1.name; ", but nothing happens." } else { indent print "When you "; word[1]; " "; art(val1); ", a momentary period of dizziness follows. You sense a shifting, a feeling of movement or rotation. "; if (cb_button.misc = 1) { "The floor and part of the outer wall seem to have moved, sliding around the perimeter of the inner wall to bring you to a different section of the building. Nothing has changed. No, turning around toward the lift wall now, you can see that the color is different. The floor lighting near the lift wall, the glow from the card slot, and the blinking button in the console are all\I "; PrintWingColor(location.misc #9, 2) " \inow. Other subtle differences show in the platforms, the decks, the wall itself. You have accessed a different quarter of the building, and the one exit now leads out to the "; : print val2.name; ". "; } elseif (cb_button.misc = 2) { "Again, the floor and part of the outer wall move in an arc around the perimeter. This time, you glance back to see the lift wall sweep past as your own location rotates to a different section. It's a strange and disconcerting event, seeming to serve no other purpose than to provide quick access to each quarter of the building. The applicable lighting now glows in\I "; PrintWingColor(location.misc #9, 2) : print ", \iand the exit leads out to the "; val2.name; ". "; } else { "You arrive in the\I "; PrintWingColor(location.misc #9, 2) print " \isection, with an exit to the "; val2.name; ". "; } if (location.out_to = 0) { "However, that way borders the edge of Site Seven, leading into the mountains and hills." } else { "" ! nothing else to print, so end the line. } } } if (val1=consolecard) { local bldg : bldg = WhichWasLastBldg indent "According to the boy, something else should have happened now, or something should have presented itself. He was none too clear on that point. Nevertheless, you notice nothing more unusual than the prior shifting of the floor. "; if (location = bldg) { "The boy is still here, evidently moved right along with the rest of the room. "; } "Maybe it would be a good idea to find out more from him about this card." } } !************* !Descriptions of Ruhne for this chapter. if (num=8) { if (val1=0) { !He's on fire once again. "The boy is evidently an Incender. "; if (location is interior) { "His flame, though, is generally weaker than is normal. You think it likely that the intensity must increase with age. After all, Sheeear children weren't typically seen attending diplomatic functions, and that has been the bulk of your experience with them. "; } else { "The flame about his body is blown wildly by the wind. Fire of inorganic origin would surely be extinguished in such a storm, but his merely flickers under the onslaught. "; } "This certainly revises your limited understanding of Sheeear physiology. He didn't shift shapes. He didn't perform a strange illusion. He simply... combusted." } if (val1=1) { !He's outside. "You find it difficult to see the boy clearly through the blasts of red dust, but he appears to be young -- no more than seven or eight cycles, it seems." } if (val1=2) { !Inside after we got the card from him. "Red dust cakes the boy, clinging thickly to his bare skin, providing the nearest claim to clothing he has. He brushes some of it away with little effect, but he doesn't really seem too concerned with his appearance. He still draws deeply when he breathes, a lingering result of his prior exertion." } } !************* !Messages when Thyras lands on the building. if (num=9) { if (val1=1) { indent "A small craft now creates a strange silhouette in the area atop "; : print (WhichWasLastBldg).name; ". Its landing in the roaring dust storm is the likely cause of the loud thump from before. Although it isn't possible to see clearly through the wind-swept murk, it appears that a person stands at the edge, under the building's upper canopy, looking down from the top. A loud shout confirms it. \"Brother, why are you here? You don't belong here, and I suggest you leave before it's too late.\" Thyras; even distorted by the harsh wind, the voice can be none other." } if (val1=2) { !Description of Thyras "Your brother is almost hidden behind thick sheets of dust-heavy wind. He seems to be standing in the large open area under the upper canopy atop "; : print (WhichWasLastBldg).name; ", "; "against the silhouette of a flying craft the likes of which you have never seen." } if (val1=3) { !Trying to talk to Thyras in the dust storm "He can't hear your normal speaking voice above the roaring wind." } if (val1=4) { !Yelling something at Thyras "Thyras hears you, but his reply is only a reaffirmation of his prior demand. \"I'm warning you, brother. For your own good, leave this place. You can save yourself and that\I Sheeear \ichild if you board the drop-shuttle and leave now. I can't stop what is about to happen. You really have a knack for bad timing, little brother.\"" } if (val1=5) { !Trying to do something to thyras while he's up. "That's impossible. Thyras is high atop the building." } } !************* !Re-usable portion of the Landing Zone room description. if (num=10) { if (ruhnestory>=10) { "The landing zone is obscured by the dust storm." } else { "Incender Site Seven fills the basin to the south, bordered by distant mountains beyond, much nearer ones behind, and a curve of lower hills edging the site to the east and west. Five massive buildings of bizarre design rise like pyramids in the otherwise barren valley; only these structures defy convention, being narrower at the bottom, flaring wider to the top. Ramplike wings -- probably for support, but perhaps merely decorative -- slant out and away from the four sides of each building. They also widen on the incline, each wing in one of the four Sheeear caste colors; solid blue, white, green or red." } } !************* Final text before moving ahead to the next chapter if (num=99) { indent "Thank goodness for Sheeear redundancy. As you withdraw the card, the hatchway releases a short groan. Closure pistons extend, and as you step away, you notice that the boy has once again assumed a flameless appearance. Light spills from the hatchway now, and for the first time, you can see him in something close to normal visibility. Except for his skin -- like leatherwood sap, but darker -- he might pass as an ordinary child. His eyes meet yours, and the resemblance is there in his expression. This could easily be the Incender equivalent of a young Thyras. If so, your brother didn't seem to indicate recognition. Maybe the haze was simply too thick, and the boy's flame too concealing. And, further down the same path of reasoning, was that his mother's voice from high inside "; print (WhichWasLastBldg).name; "? Was that Eeeloraaa Reee?" indent "A point of bright light high in the sky, clearly visible through the thick red air, puts an end to further immediate reasoning. It grows gradually larger. You hurry up the landing ramp, checking back to make sure the boy follows. When both of you are aboard, you set the craft into upward motion before the hatchway is even fully closed. It shuts and seals as you rise above the surface of Iuros." indent "You motion the boy to a nearby flight chair, and he straps in without further instruction. The drop-shuttle has attained a good distance above Site Seven when a blinding white light forces the windows into automatic-dim. Even so, by peering out as the craft tilts slightly on edge in its outbound path, you have a clear view of the large crater where Site Seven had been only moments earlier. Massive rings of red dust circle the area, reminding you of stone-skipped ripples in a stream, but each one inside the next rather than in sequence. Clouds of dust fold back in upon the crater, once again concealing the epicenter of a destruction unlike anything in the history of your people." indent "You just catch another craft as it zooms away opposite the crater. It was far away, but a good match for Thyras's strange craft. You let out a sigh of relief at that, not really wishing harm upon him. The boy is talking, too, but you continue to peer out the still-dimmed window. \"Thank you, sir. My name is Ruuuhne. Ruuuhne Gaaahleee. What happened? Did something happen to my mother?\" The questions are lost on you at the moment, and you feign distraction." indent "Much must be considered and reviewed over the next eight days." ContinueChapter(3,1) !Print the "[Continue]" message and go forward. } }