!---------------------------------------------------------------------------- !************************************ GIRL MOVES FROM ROOM TO ROOM IN PART 1 !---------------------------------------------------------------------------- routine PrintText16(val1,val2) { select val1 case 0 { !Usage: (16,0,turns) !Print the introductions for the girl running away. !I'm going to vary this in different ways, since it's !something the player may have to read over and over. if (val2 > 1) and (location = prev_location) { !She was here for a few turns first *and* we didn't just !enter this room from elsewhere. She left after moments. "After several moments, the girl "; } else { !She left, as soon as we entered. rnd = random(9) !Gives it a bit more randomness. select rnd case 1,4,7: "The girl stands still, until you enter. "; case 2,5,8: "The girl is watching your movements. "; case 3,6,9: "The girl stares unflinchingly at you. "; "At your approach, she "; } rnd = random(12) !Give it more randomness select rnd case 1,7: "begins to shake. "; case 2,8: "turns away from you. "; case 3,9: "arches her back. "; case 4,10: "points at you. "; case 5,11: "leans forward. "; case 6,12: "raises her arms. "; rnd = random(6) select rnd case 1: "In an instant, she "; case 2: "Suddenly, she "; case 3: "Without warning, she "; case 4,5,6: "She "; } case hill, house, orchard, barn { if (val2 = old_location) { !The girl is going back the way the player came. "moves toward you, then "; } } case hill { !Usage: (16,from,to) select val2 case barn { "runs down the hill, southeast, toward the barn. "; } case house { "rushes south, over and around the low jutting boulders, toward the broken gate. "; } } case house { !Usage: (16,from,to) if (barn_doors is locked) { !She can't go east, because the doors are barred. And since !we couldn't have just arrived from that direction, it's !safe to assume that she tried that way first, but can't go. "heads east, toward the barn. Finding the doors barred from the other side, she "; } select val2 case hill { "heads north, toward the gap in the fence. "; } case barn { "races east, to the barn's double doors. "; if (barn_doors is not open) { "She pushes, and the large doors swing open. "; barn_doors is open !Because she opened them. } } case orchard { "runs south, back toward the orchard. "; if (south_gate is not open) { "She opens the gate, then glares back at you. "; south_gate is open !She just opened it. } } } case orchard { !Usage: (16,from,to) select val2 case barn { "speeds northeast, along the green and brown stone path, toward the barn. "; if (barn_southexit is not open) { "She stops just long enough to work the pulley. In a moment, the entrance is open. "; barn_southexit is open !She just opened it. } } case house { "bolts toward the gate, to the north. "; if (south_gate is not open) { "She opens the gate, then glares back at you. "; south_gate is open !She just opened it. } } } case barn { !Usage: (16,from,to) select val2 case hill { !Girl is going from the barn to the hill. "bolts toward the northwest exit. "; } case orchard { "glides toward the southwest exit. "; } case house { "races west, to the barn's double doors. "; if (barn_doors is not open) { "With uncanny speed but a great deal of effort, she pulls open the exit back to the yard. "; barn_doors is open !Because she opened them. } } } case 1 { !Usage: (16,1,turns) ! This is basically the ending section of the "full" version, if (bees.misc #1) { "The swarm follows after, "; rnd = random(9) !More randomness. select rnd case 1,4,7: "rolling over her in waves. "; case 2,5,8: "circling and regrouping around her. "; case 3,6,9: "reforming a cloak that trails behind her. "; } "In another moment, she's gone." PrintMessage(16,4,1) !Sometimes print hints. } case 2 { !Usage (16,2,newloc) !This is printed stand-alone when we do the short version. !It also follows (16,3) whenever it leads to short version. rnd = get_follow_girl(val2,true) !Open doors, as needed. print "The girl leaves quickly to the "; rnd.name; if (bees.found_in = location) { ", and the bees follow"; } print "." !End the sentence started above. PrintMessage(16,4,1) !Sometimes print hints. } case 3 { select val2 case 1 { !Usage (16,3,1) if (verbroutine = &DoThrowAt) { "She's too quick, and you miss. "; } else { "You don't get the chance. "; !Split, so it's dict entry. } } case 2 { !Usage (16,3,2) ! This is an alternate introduction to the girl leaving. ! This happens when we try to interact with her before she's ! trapped. This should hint to the fact that she *can* leave, ! because there is an available exit (hopefully clueing ! players to concept of trapping the girl by blocking exits. if (verbroutine = &DoThrowAt) { print "You throw "; The(object); " at "; print The(girl); ", but she easily avoids"; print MatchPlural(object,"it","them"); ". "; "With a threatening glare, she turns back to face you. "; if (bees.found_in = location) { "A streamer of black bees twists forward from her outstretched hand, forcing you back. "; } "Then, she "; !Prepare for the rest of the text. } else { rnd = random(4) select rnd case 1: "At your approach, "; case 2: "Without waiting to ascertain your intent, "; case 3: "As you advance toward her, "; case 4: "Before you can get close, "; "the girl "; rnd = random(3) select rnd case 1: "finds an escape. "; case 2: "sees a way out. "; case 3: "glances about wildly for an exit. "; select location case house,hill: "She seems to briefly consider "; case house: "the western path, "; case hill: "the northern pasture, "; case barn { rnd = false !Used as a flag, right here. if not IsAttached(rope,hatch_handle) { rnd = true !There is at least one. "She seems to briefly consider "; "the cellar"; if (loft_ladder is not distant) { " and the loft, "; } else { ", "; !only one possibility to consider. } "but she is perhaps "; } else { if (loft_ladder is not distant) { rnd = true !There is at least one. "She seems to briefly consider "; "the loft, "; "but she is perhaps "; } } if (rnd) { !These fragments are so that we share dict entries. "unwilling "; "to climb or disinclined to arrive at a dead end. "; } } case house,hill { "but she is perhaps "; "unwilling "; if (bees.found_in = location): "or unable "; "to stray so far from here. "; } !And finally, begin the line that leads to dir-to-dir text. "She "; } } } case 4 { !Some additional misc messages for the girl. select val2 case 1,2,3 { !Usage: (16,4,1) !Hints, when player is chasing her around. !Note that I'm reserving 1,2,3 so I can use VAL2 as a flag. !That way I wouldn't add any more cases for those, which might !accidentally get run if the val2 changes in this case. ! Now, players might end up following her all over. I need to ! begin giving hints in this short version, to clue them to the ! fact that they really ought to be trying to corner/trap her. ! After first round beta-testing, I have come to realize that ! the hints just weren't good enough. Players were following ! her all over the farm, waiting for her to do something. So, I ! have tweaked this some, as a first attempt at helping players ! figure out that they don't need to follow her around. I'm not ! sure I'm totally satisfied with the result, but it will have ! to do for now. Maybe I'll think of something better later. I ! have left the original version, commented out, for reference. !*** Original 1.0 version. Confusing to players. ! ! Calculate the total number of moves, automatic and forced. ! rnd = (girl_moving.misc #4) + (girl_moving.misc #5) ! if (rnd >= 8) { ! if (rnd <= 10): "\nShe's very fast." ! elseif (rnd <= 12) ! "\nShe seems fearful of being cornered." ! elseif (rnd = 14) ! "\nShe seems to take the nearest way out." ! elseif (rnd = 17) ! "\nShe's unlikely to stop, unless trapped." ! elseif (rnd = 21) ! "\nIt may be possible to corner her in the barn." ! elseif (rnd >= 25) ! "\nYou'll have to trap her in the barn." ! } !*** Updated 1.1 version. I'll see whether this works better. ! I'll start giving messages with the third one, this time. ! But, only if the player hasn't already blocked two of the ! three exits (which is new to this version). val2 = 0 !Temp flag, for the number of exits blocked, in barn. if not InList(wagon,found_on,hill): val2++ ! NW exit is blocked. if (barn_southexit is not open): val2++ ! SW exit is blocked. if (beam in barn_doors): val2++ ! West exit is also blocked. if (val2 < 2) and (girl.misc #4 = old_location) { ! We stop giving these messages, when the player has blocked ! at least two of the exits. Because this tells the player ! not to chase her, but really, it would be okay to chase. ! Also, we don't give the message unless the player came ! from the room the girl was previously at (because if he ! didn't, then he might not actually be following her). ! I have to be really careful what I say. I can see from the ! first beta just how easily players latch onto the clues I ! give. They were trying to "set trap" and "make trap from ! rope" and stuff. Then, for blocking exits, they were trying ! to move the cask over to the door, push the bin, etc. So ! if I tell them to block the exits, they may try all of ! those things. It's really a hard thing to get just right. girl.misc #5 ++ !Increment "eligible" clue counter. rnd = girl.misc #5 !It'll be shorter to work with rnd. if (rnd = 3) { "\nFollowing her around right now doesn't seem like the best course of action." } if (rnd = 5) { "\nShe seems fearful of being cornered." } if (rnd = 6) { "\nShe seems to take the nearest way out." } if (rnd = 7,8) { "\nAt the moment, there seems to be no way to corner her." } if (rnd >= 9) { "\nChasing her, for now, seems to be a wasted effort." } } } } }