diff --git a/python/maps/witherspoon_manor/README b/python/maps/witherspoon_manor/README new file mode 100644 index 000000000..b7d56cdff --- /dev/null +++ b/python/maps/witherspoon_manor/README @@ -0,0 +1,23 @@ +All the scripts in this directory are for the Witherspoon ghost quest. + +Player can help a ghost accept his death and disappear. + +Basic storyline: player finds a ghost and is supposed to go dig a find the body. + +Body is near Scorn's east lake. + +Quest has 3 endings: +* dig the body, lose it: ghost becomes angry and tries to kill the player (high level ghost, don't mess!) +* give back the body, small reward +* find the real story, get a bigger reward + + +All the dialogs are in the scripts and not in the maps. + + +Scripts and associated maps: +* devourers.py: for the Devourers priest in Scorn's temple, will recognize the runes on the dagger +* ghost.py: Witherspoon's ghost script, quest start and end +* rolanda.py: Rolanda the witch, in /scorn/houses/rolanda, will give the real story +* tomb.py: linked to the detector near the lake west of Scorn, will give the body and the dagger +* weapon_shop.py: merchand in Scorn's weapon shop, will direct to a priest to identify the runes on the dagger diff --git a/python/maps/witherspoon_manor/devourers.py b/python/maps/witherspoon_manor/devourers.py new file mode 100644 index 000000000..7a6087822 --- /dev/null +++ b/python/maps/witherspoon_manor/devourers.py @@ -0,0 +1,96 @@ +''' +This script is part of the Witherspoon quest, that starts in /scorn/mansion/witherspoon_manor_attic. +Check the README file in the same directory as this file for more details. + +Script for the priest of Devourers in Scorn. + +Will handle the 'give' event to examine the dagger or money, and various events. + +This script should be called for the 'TIMER', 'TIME' and 'custom' events. +''' + +import Crossfire + +whoami = Crossfire.WhoAmI() +whoisother = Crossfire.WhoIsOther() +command = Crossfire.WhatIsMessage() +event = Crossfire.WhatIsEvent() +pl = Crossfire.WhoIsActivator() + +#Message color for player +color = Crossfire.MessageFlag.NDI_BROWN + +def do_give(): + '''Player gives an item to the priest.''' + if whoami.ReadKey('got_offrand') == '': + if whoisother.ArchName == 'platinacoin': + if whoisother.Quantity < 10: + pl.Message('The priest looks at your money and sighes deeply, but doesn\'t take it.', color) + return + + rem = whoisother.Quantity + if whoisother.Quantity > 50: + rem = 50 + whoami.Say('Now, now, I can\' accept all that money.') + pl.Message('The priest takes 50 platinum coins.', color) + else: + pl.Message('The priest accepts your money.', color) + + whoisother.Quantity = whoisother.Quantity - rem + + whoami.WriteKey('got_offrand', '1', 1) + whoami.Say('Many thanks for your offrand!') + + return + + whoami.Say('Our church needs some restoration, could you donate to it?') + + return + + whoami.WriteKey('got_offrand', '', 1) + + if whoisother.ReadKey('special_item') != 'ghost_dagger': + whoami.Say('Nice %s.'%whoisother.Name) + return + + whoami.Say('My, my, those runes are pretty interesting.') + pl.Message('The priest takes the %s and looks at it carefully.'%whoisother.Name, color) + whoami.CreateTimer(8, 1) + whoami.WriteKey('examining_item', '1', 1) + whoami.WriteKey('examining_for', pl.Name, 1) + + return + +def do_timer(): + '''Priest finished examining the item.''' + whoami.WriteKey('examining_item', '0', 1) + + #let's see if the player is still around + pl = Crossfire.FindPlayer(whoami.ReadKey('examining_for')) + if pl == None: + # just in case someone else is around ^_- + whoami.Say('Tss, people just aren\'t patient...') + return + + pl.WriteKey('witherspoon_know_dagger', '1', 1) + whoami.Say('As far as I can tell, the runes on this dagger represent an invocation to our Lord. It is meant to keep the soul in the body for hours after the death.') + whoami.Map.Print('The priest shudders.', color) + whoami.Say('The victim of the spell can still feel pain, even agonizing one, but will not die before the spell effect wears out.') + whoami.Say('Even our Lord, in his mercy, does not inflict on his followers such agonizing pain.') + whoami.Say('For someone to use such a spell, the victim must have been so hated!') + whoami.Map.Print('The priest thinks for a few seconds.', color) + whoami.Say('I think there is a witch, Olandi or something, who lives south of Scorn and specializes in Devourers magic.') + whoami.Say('Maybe she could help you?') + +if command == 'give': + if whoami.ReadKey('examining_item') == '1': + pl.Message('The priest is busy.', color) + else: + do_give() +elif event.Subtype == Crossfire.EventType.TIMER: + do_timer() +elif event.Subtype == Crossfire.EventType.TIME: + if whoami.ReadKey('examining_item') == '1': + #No moving while examining. + Crossfire.SetReturnValue(1) + diff --git a/python/maps/witherspoon_manor/ghost.py b/python/maps/witherspoon_manor/ghost.py index 6fa26cdf6..e77036eac 100644 --- a/python/maps/witherspoon_manor/ghost.py +++ b/python/maps/witherspoon_manor/ghost.py @@ -1,9 +1,8 @@ ''' -Script for the ghost in Witherspoon manor (south-west of Scorn). +This script is part of the Witherspoon quest, that starts in /scorn/mansion/witherspoon_manor_attic. +Check the README file in the same directory as this file for more details. -Associated script is tomb.py which should be in the same directory. - -Both scripts are linked, so if you change something make sure to change both scripts! +Script for the ghost in Witherspoon manor (south-east of Scorn). ''' import random @@ -30,13 +29,20 @@ def check_body(player, rule): return False +def start_disappear(ghost, player): + '''ghost should disappear, called for 2 endings.''' + ghost.WriteKey(key_disappear, '1', 1) + ghost.CreateTimer(5, 1) + ghost.StandStill = True + player.Write('The %s starts fading...'%ghost.Name) + def found_body(player, rule): '''Does the player have the body?''' if player.ReadKey('witherspoon_tomb') != 'dig': return False player.WriteKey('witherspoon_tomb', '', 1) - #reset our dialog anyway - the player did dig, so quest ends (for now) + #reset our dialog anyway - the player did dig, so quest ends (nicely or badly) player.WriteKey('dialog_witherspoon_ghost', '', 1) #try to find the body, if not found then get angry @@ -47,10 +53,7 @@ def found_body(player, rule): if body: #all fine! body.Remove() - ghost.WriteKey(key_disappear, '1', 1) - ghost.CreateTimer(5, 1) - ghost.StandStill = True - player.Write('The %s starts fading...'%ghost.Name) + start_disappearing(ghost, player) return 1 #oh oh, bad, ghost is getting angry! @@ -73,6 +76,25 @@ def do_dialog(): if not can_talk(None, None): return + whoami = Crossfire.WhoAmI() + pl = Crossfire.WhoIsActivator() + if pl.ReadKey('witherspoon_know_all') == '1': + # player found the real story, through Rolanda. + whoami.Say('Oh...') + whoami.Map.Print('The %s manages to blush.'%whoami.Name) + whoami.Say('Now I remember. I\'m so stupid. Poor Rolanda, will she ever forgive me...') + whoami.Say('Well, I guess I can go now. Many thanks for your help!') + whoami.WriteKey('bonus', '1', 1) + start_disappear(whoami, pl) + return + + if pl.ReadKey('witherspoon_know_dagger') == '1': + # player talked to the priest of Devourers, and knows the dagger is special. + whoami.Say('Oh, please find who could be as cruel as to use such a horrible spell on me!') + return + + # default dialog, just talk + # If you ever change this key, change the value in tomb.py too! speech = Dialog(Crossfire.WhoIsActivator(), Crossfire.WhoAmI(), "witherspoon_ghost") @@ -138,9 +160,13 @@ def do_disappear(): ghost.Say('Thanks a lot! Please take those small presents as a token of my gratitude.') + bonus = 0 + if ghost.ReadKey('bonus') == '1': + bonus = 25 + presents = ['gem', 'ruby', 'emerald', 'pearl', 'sapphire'] got = ghost.Map.CreateObject(presents[random.randint(0, len(presents) - 1)], ghost.X, ghost.Y) - got.Quantity = random.randint(3, 7) + got.Quantity = random.randint(3 + bonus, 7 + bonus) ghost.Remove() diff --git a/python/maps/witherspoon_manor/rolanda.py b/python/maps/witherspoon_manor/rolanda.py new file mode 100644 index 000000000..723e0ac7c --- /dev/null +++ b/python/maps/witherspoon_manor/rolanda.py @@ -0,0 +1,105 @@ +''' +This script is part of the Witherspoon quest, that starts in /scorn/mansion/witherspoon_manor_attic. +Check the README file in the same directory as this file for more details. + +Script for Rolanda, in /scorn/houses/rolanda. + +Support to be called for TIME, TIMER and CUSTOM events. +''' + +import Crossfire +import CFMove +import random + +whoami = Crossfire.WhoAmI() +whoisother = Crossfire.WhoIsOther() +command = Crossfire.WhatIsMessage() +event = Crossfire.WhatIsEvent() +pl = Crossfire.WhoIsActivator() + + +# Message color for player +color = Crossfire.MessageFlag.NDI_BROWN + +# coordinates to look for chairs +search_chairs = [ [ 0, -1 ], [ 0, 1 ], [ -1, 0 ], [ 1, 0 ] ] + +def do_give(): + '''handle the player giving an item.''' + if whoisother.ReadKey('special_item') != 'ghost_dagger': + whoami.Say('And what am I supposed to do with this %s.'%whoisother.Name) + return + + whoami.Say('Ohhhhhhhh... This, this dagger...'); + pl.Message('%s puts her hand to her forehead, and staggers.'%whoami.Name) + whoami.WriteKey('witherspoon_saw_dagger', '1', 1) + whoami.WriteKey('witherspoon_seated', '', 1) + whoami.WriteKey('explaining_for', pl.Name, 1) + +def search_chair(): + '''if fainting, try to find a chair when TIME happens.''' + for search in range(0, len(search_chairs)): + x = whoami.X + search_chairs[search][0] + y = whoami.Y + search_chairs[search][1] + obj = whoami.Map.ObjectAt(x, y) + while obj: + if obj.Name == 'chair': + whoami.WriteKey('witherspoon_seated', '1', 1) + whoami.Say('Thank you very much.') + whoami.WriteKey('chair_x', str(x), 1) + whoami.WriteKey('chair_y', str(y), 1) + return + obj = obj.Above + +def move_to_chair(): + '''trying to move to first found chair.''' + m = CFMove.get_object_to(whoami, int(whoami.ReadKey('chair_x')), int(whoami.ReadKey('chair_y'))) + if m == 0: + whoami.WriteKey('witherspoon_seated', '2', 1) + whoami.Map.Print('%s sits on the chair.'%whoami.Name, color) + whoami.Say('I shall explain everything...') + whoami.Map.Print('%s starts sobbing.'%whoami.Name, color) + whoami.CreateTimer(random.randint(5, 10), 1) + elif m == 2: + whoami.Say('Please let me sit...') + +def explain(): + '''explanation of the ghost story. Let Rolanda be still from now on.''' + + pl = Crossfire.FindPlayer(whoami.ReadKey('explaining_for')) + if pl == None: + # just in case someone else is around ^_- + whoami.Say('Tss, people just aren\'t patient...') + return + pl.WriteKey('witherspoon_know_all', '1', 1) + + whoami.Say('See, this dagger...') + whoami.Say('Alfred wanted...') + whoami.Map.Print('%s sighes deeply, and goes on.'%whoami.Name) + whoami.Say('he wanted to have some, shall I say, different experience, the kind a man and a woman can have together.') + whoami.Say('And since he likes pain, he asked to suffer, to see if the pain would... excite him.') + whoami.Map.Print('%s sobs'%whoami.Name) + whoami.Say('But he didn\'t think he would die!') + whoami.Say('So I... I hide the body, hoping to forget him.') + whoami.Say('But now I can\'t forget him! Ever!') + pl.Write('You wonder what the ghost (Alfred, according to %s) will make of that...'%whoami.Name, color) + +if event.Subtype == Crossfire.EventType.USER and command == 'give': + do_give() +elif event.Subtype == Crossfire.EventType.TIME: + if whoami.ReadKey('witherspoon_saw_dagger') != '': + # No moving while fainting + Crossfire.SetReturnValue(1) + if whoami.ReadKey('witherspoon_seated') == '': + search_chair() + elif whoami.ReadKey('witherspoon_seated') == '1': + move_to_chair() +elif event.Subtype == Crossfire.EventType.SAY: + if whoami.ReadKey('witherspoon_saw_dagger') != '': + # No talking while fainting + Crossfire.SetReturnValue(1) + whoami.Say('Ohhhhhhh......') + pl.Message('%s seems to be ready to faint.'%whoami.Name) +elif event.Subtype == Crossfire.EventType.TIMER: + if whoami.ReadKey('witherspoon_seated') == '2': + explain() diff --git a/python/maps/witherspoon_manor/tomb.py b/python/maps/witherspoon_manor/tomb.py index 381dc0a38..bf4f4c727 100644 --- a/python/maps/witherspoon_manor/tomb.py +++ b/python/maps/witherspoon_manor/tomb.py @@ -1,11 +1,10 @@ ''' -Script for the ghost in Witherspoon manor (south-west of Scorn). +This script is part of the Witherspoon quest, that starts in /scorn/mansion/witherspoon_manor_attic. +Check the README file in the same directory as this file for more details. + +Script for the tomb near the lake west of Scorn. This script is called when the player steps on the correct spot where the body is buried. - -Associated script is ghost.py which should be in the same directory. - -Both scripts are linked, so if you change something make sure to change both scripts! ''' import Crossfire @@ -53,10 +52,20 @@ def main(): #don't want the player to dig again! Will be reset by the ghost later on pl.WriteKey('witherspoon_tomb', 'dig', 1) - body = pl.CreateObject('corpse') + body = Crossfire.CreateObjectByName('corpse') # so it doesn't merge with another item + body.WriteKey('special_item', 'ghost_body', 1) body.Name = 'tortured body' body.NamePl = 'tortured bodies' + body.Message = 'You suppose this is the body of the ghost in Witherspoon Manor. It is covered in scars, as if someone really wanted to make him pay for something.' + body.InsertInto(pl) - pl.Write('You find a body!') + dagger = Crossfire.CreateObjectByName('dagger') + dagger.WriteKey('special_item', 'ghost_dagger', 1) + dagger.Name = 'strange dagger' + dagger.NamePl = 'strange daggers' + dagger.Message = 'You found this dagger with the body of the Witherspoon Manor ghost. It has some weird look. You wonder if a marchant could figure what the symbols mean.' + dagger.InsertInto(pl) + + pl.Write('You find a body with a dagger in it!') main() diff --git a/python/maps/witherspoon_manor/weapon_shop.py b/python/maps/witherspoon_manor/weapon_shop.py new file mode 100644 index 000000000..ae03a0cda --- /dev/null +++ b/python/maps/witherspoon_manor/weapon_shop.py @@ -0,0 +1,61 @@ +''' +This script is part of the Witherspoon quest, that starts in /scorn/mansion/witherspoon_manor_attic. +Check the README file in the same directory as this file for more details. + +Script for the shop owner of the weapon shop in Scorn. + +Will handle the 'give' event to examine the dagger, and various events. + +This script should be called for the 'TIMER', 'TIME' and 'custom' events. +''' + +import Crossfire + +whoami = Crossfire.WhoAmI() +whoisother = Crossfire.WhoIsOther() +command = Crossfire.WhatIsMessage() +event = Crossfire.WhatIsEvent() +pl = Crossfire.WhoIsActivator() + +#Message color for player +color = Crossfire.MessageFlag.NDI_BROWN + +def do_give(): + '''Player gives an item to the owner.''' + if whoisother.ReadKey('special_item') != 'ghost_dagger': + whoami.Say('Nice %s.'%whoisother.Name) + return + + whoami.Say('Oh, this looks like a really interesting dagger.') + pl.Message('The owner takes the %s and starts examining it carefully.'%whoisother.Name, color) + whoami.CreateTimer(8, 1) + whoami.WriteKey('examining_item', '1', 1) + whoami.WriteKey('examining_for', pl.Name, 1) + + return + +def do_timer(): + '''Owner finished examining the item.''' + whoami.WriteKey('examining_item', '0', 1) + + #let's see if the player is still around + pl = Crossfire.FindPlayer(whoami.ReadKey('examining_for')) + if pl == None: + # just in case someone else is around ^_- + whoami.Say('Tss, people just aren\'t patient...') + return + + whoami.Say('This dagger is pretty old, and is covered with runes. Unfortunately I can\'t describe what they mean, but they sure look like religious ones. Maybe you could go ask a priest?') + +if command == 'give': + if whoami.ReadKey('examining_item') == '1': + pl.Message('The owner is busy.', color) + else: + do_give() +elif event.Subtype == Crossfire.EventType.TIMER: + do_timer() +elif event.Subtype == Crossfire.EventType.TIME: + if whoami.ReadKey('examining_item') == '1': + #No moving while examining. + Crossfire.SetReturnValue(1) + diff --git a/scorn/houses/rolanda b/scorn/houses/rolanda new file mode 100644 index 000000000..192eeb307 --- /dev/null +++ b/scorn/houses/rolanda @@ -0,0 +1,620 @@ +arch map +name Rolanda's house +width 10 +height 10 +msg +Created: 2008-01-24 Nicolas Weeger +Modified: 2008-01-24 Nicolas Weeger +endmsg +end +arch marble +end +arch woodwall_2_2_2 +end +arch marble +y 1 +end +arch woodwall_2_1_1 +y 1 +end +arch marble +y 2 +end +arch woodwall_2_1_1 +y 2 +end +arch marble +y 3 +end +arch woodwall_win1 +y 3 +end +arch marble +y 4 +end +arch woodwall_2_1_1 +y 4 +end +arch marble +y 5 +end +arch woodwall_3_2 +y 5 +end +arch marble +y 6 +end +arch woodwall_2_1_1 +y 6 +end +arch marble +y 7 +end +arch woodwall_2_1_1 +y 7 +end +arch marble +y 8 +end +arch woodwall_2_1_1 +y 8 +end +arch marble +y 9 +end +arch woodwall_2_2_1 +y 9 +end +arch marble +x 1 +end +arch woodwall_2_1_2 +x 1 +end +arch bluemarblemedium +x 1 +y 1 +end +arch bluemarblemedium +x 1 +y 2 +end +arch bluemarblemedium +x 1 +y 3 +end +arch bluemarblemedium +x 1 +y 4 +end +arch marble +x 1 +y 5 +end +arch woodwall_2_1_2 +x 1 +y 5 +end +arch lightgreenmarble +x 1 +y 6 +end +arch lightgreenmarble +x 1 +y 7 +end +arch lightgreenmarble +x 1 +y 8 +end +arch cauldron +x 1 +y 8 +container 0 +is_cauldron 0 +end +arch marble +x 1 +y 9 +end +arch woodwall_2_1_2 +x 1 +y 9 +end +arch marble +x 2 +end +arch woodwall_2_1_2 +x 2 +end +arch bluemarblemedium +x 2 +y 1 +end +arch bluemarblemedium +x 2 +y 2 +end +arch bluemarblemedium +x 2 +y 3 +end +arch bluemarblemedium +x 2 +y 4 +end +arch marble +x 2 +y 5 +end +arch woodwall_2_1_2 +x 2 +y 5 +end +arch lightgreenmarble +x 2 +y 6 +end +arch chair_1.1 +x 2 +y 6 +end +arch lightgreenmarble +x 2 +y 7 +end +arch lightgreenmarble +x 2 +y 8 +end +arch marble +x 2 +y 9 +end +arch woodwall_2_1_2 +x 2 +y 9 +end +arch marble +x 3 +end +arch woodwall_2_1_2 +x 3 +end +arch bluemarblemedium +x 3 +y 1 +end +arch bluemarblemedium +x 3 +y 2 +end +arch bluemarblemedium +x 3 +y 3 +end +arch bluemarblemedium +x 3 +y 4 +end +arch marble +x 3 +y 5 +end +arch woodwall_2_2_3 +x 3 +y 5 +end +arch marble +x 3 +y 6 +end +arch woodwall_1_2 +x 3 +y 6 +end +arch lightgreenmarble +x 3 +y 7 +end +arch door_1 +x 3 +y 7 +move_block 0 +end +arch marble +x 3 +y 8 +end +arch woodwall_1_1 +x 3 +y 8 +end +arch marble +x 3 +y 9 +end +arch woodwall_2_2_4 +x 3 +y 9 +end +arch marble +x 4 +end +arch woodwall_2_1_2 +x 4 +end +arch bluemarblemedium +x 4 +y 1 +end +arch bluemarblemedium +x 4 +y 2 +end +arch bluemarblemedium +x 4 +y 3 +end +arch bluemarblemedium +x 4 +y 4 +end +arch bluemarblemedium +x 4 +y 5 +end +arch lightgreenmarble +x 4 +y 6 +end +arch lightgreenmarble +x 4 +y 7 +end +arch marble +x 4 +y 8 +end +arch exit +slaying /world/world_105_116 +hp 7 +sp 4 +x 4 +y 9 +end +arch marble +x 4 +y 9 +end +arch door_look_1 +x 4 +y 9 +move_block 0 +end +arch marble +x 5 +end +arch woodwall_win2 +x 5 +end +arch bluemarblemedium +x 5 +y 1 +end +arch bluemarblemedium +x 5 +y 2 +end +arch bluemarblemedium +x 5 +y 3 +end +arch woman2 +name Rolanda +x 5 +y 3 +speed -0.05 +random_movement 1 +arch event_user +title Python +slaying /python/maps/witherspoon_manor/rolanda.py +end +arch event_timer +title Python +slaying /python/maps/witherspoon_manor/rolanda.py +end +arch event_time +title Python +slaying /python/maps/witherspoon_manor/rolanda.py +end +arch event_say +title Python +slaying /python/maps/witherspoon_manor/rolanda.py +end +end +arch bluemarblemedium +x 5 +y 4 +end +arch bluemarblemedium +x 5 +y 5 +end +arch lightgreenmarble +x 5 +y 6 +end +arch lightgreenmarble +x 5 +y 7 +end +arch marble +x 5 +y 8 +end +arch exit +slaying /world/world_105_116 +hp 7 +sp 4 +x 5 +y 9 +end +arch marble +x 5 +y 9 +end +arch door_look_1 +x 5 +y 9 +move_block 0 +end +arch marble +x 6 +end +arch woodwall_2_1_2 +x 6 +end +arch bluemarblemedium +x 6 +y 1 +end +arch bluemarblemedium +x 6 +y 2 +end +arch bluemarblemedium +x 6 +y 3 +end +arch bluemarblemedium +x 6 +y 4 +end +arch marble +x 6 +y 5 +end +arch woodwall_2_2_2 +x 6 +y 5 +end +arch marble +x 6 +y 6 +end +arch woodwall_1_2 +x 6 +y 6 +end +arch lightgreenmarble +x 6 +y 7 +end +arch door_1 +x 6 +y 7 +move_block 0 +end +arch marble +x 6 +y 8 +end +arch woodwall_1_1 +x 6 +y 8 +end +arch marble +x 6 +y 9 +end +arch woodwall_2_2_1 +x 6 +y 9 +end +arch marble +x 7 +end +arch woodwall_2_1_2 +x 7 +end +arch bluemarblemedium +x 7 +y 1 +end +arch bluemarblemedium +x 7 +y 2 +end +arch bluemarblemedium +x 7 +y 3 +end +arch bluemarblemedium +x 7 +y 4 +end +arch marble +x 7 +y 5 +end +arch woodwall_2_1_2 +x 7 +y 5 +end +arch lightgreenmarble +x 7 +y 6 +end +arch lightgreenmarble +x 7 +y 7 +end +arch lightgreenmarble +x 7 +y 8 +end +arch marble +x 7 +y 9 +end +arch woodwall_2_1_2 +x 7 +y 9 +end +arch marble +x 8 +end +arch woodwall_2_1_2 +x 8 +end +arch bluemarblemedium +x 8 +y 1 +end +arch bluemarblemedium +x 8 +y 2 +end +arch bluemarblemedium +x 8 +y 3 +end +arch bluemarblemedium +x 8 +y 4 +end +arch marble +x 8 +y 5 +end +arch woodwall_2_1_2 +x 8 +y 5 +end +arch lightgreenmarble +x 8 +y 6 +end +arch lightgreenmarble +x 8 +y 7 +end +arch table_3 +x 8 +y 7 +end +arch lightgreenmarble +x 8 +y 8 +end +arch chair_1.3 +x 8 +y 8 +end +arch marble +x 8 +y 9 +end +arch woodwall_2_1_2 +x 8 +y 9 +end +arch marble +x 9 +end +arch woodwall_2_2_3 +x 9 +end +arch marble +x 9 +y 1 +end +arch woodwall_2_1_1 +x 9 +y 1 +end +arch marble +x 9 +y 2 +end +arch woodwall_win1 +x 9 +y 2 +end +arch marble +x 9 +y 3 +end +arch woodwall_2_1_1 +x 9 +y 3 +end +arch marble +x 9 +y 4 +end +arch woodwall_2_1_1 +x 9 +y 4 +end +arch marble +x 9 +y 5 +end +arch woodwall_3_4 +x 9 +y 5 +end +arch marble +x 9 +y 6 +end +arch woodwall_2_1_1 +x 9 +y 6 +end +arch marble +x 9 +y 7 +end +arch woodwall_2_1_1 +x 9 +y 7 +end +arch marble +x 9 +y 8 +end +arch woodwall_2_1_1 +x 9 +y 8 +end +arch marble +x 9 +y 9 +end +arch woodwall_2_2_4 +x 9 +y 9 +end diff --git a/scorn/misc/templedevour b/scorn/misc/templedevour index cda25fd8d..fa1ba9b6b 100644 --- a/scorn/misc/templedevour +++ b/scorn/misc/templedevour @@ -7,6 +7,7 @@ height 16 msg Created: 1997-04-16 David Sundqvist (azzie@tellutec.se) Altar to level 120 20050527 (cvstry2) +Modified: 2008-01-03 Nicolas Weeger endmsg end arch grass @@ -275,15 +276,26 @@ arch blackmarble x 2 y 10 end -arch sage -msg -@match devourers|Devourers -They will suck your soul out! -@match * -Welcome to the temple of Devourers. -endmsg +arch dave +name priest of Devourers x 2 y 10 +speed 0.05 +unaggressive 1 +sleep 0 +random_movement 1 +arch event_time +title Python +slaying /python/maps/witherspoon_manor/devourers.py +end +arch event_timer +title Python +slaying /python/maps/witherspoon_manor/devourers.py +end +arch event_user +title Python +slaying /python/maps/witherspoon_manor/devourers.py +end end arch blackmarble x 2 diff --git a/scorn/shops/weaponshop b/scorn/shops/weaponshop index 587ec1ac7..89dd11dec 100644 --- a/scorn/shops/weaponshop +++ b/scorn/shops/weaponshop @@ -10,6 +10,7 @@ height 16 enter_y 14 msg Created: 1993-10-15 +Modified: 2008-01-03 Nicolas Weeger endmsg end arch shop_empty @@ -504,6 +505,27 @@ arch shop_empty x 5 y 6 end +arch fighter +name Shop owner +x 5 +y 6 +speed 0.05 +sleep 0 +no_damage 1 +random_movement 1 +arch event_user +title Python +slaying /python/maps/witherspoon_manor/weapon_shop.py +end +arch event_time +title Python +slaying /python/maps/witherspoon_manor/weapon_shop.py +end +arch event_timer +title Python +slaying /python/maps/witherspoon_manor/weapon_shop.py +end +end arch shop_empty x 5 y 7 diff --git a/world/world_105_116 b/world/world_105_116 index 4f14e57a1..e85ce9f6a 100644 --- a/world/world_105_116 +++ b/world/world_105_116 @@ -8,7 +8,7 @@ height 50 enter_x 1 enter_y 1 msg -Modified: 2007-12-24 tchize +Modified: 2008-01-24 Nicolas Weeger endmsg outdoor 1 tile_path_1 world_105_115 @@ -2360,7 +2360,10 @@ y 4 elevation 11718 end arch house_2 -name Rolando's house +name Rolanda's house +slaying /scorn/houses/rolanda +hp 5 +sp 9 x 7 y 4 end