diff --git a/python/CFMapTransformer.py b/python/CFMapTransformer.py new file mode 100644 index 000000000..cf5de0ea2 --- /dev/null +++ b/python/CFMapTransformer.py @@ -0,0 +1,121 @@ +# CFMapTransformer.py - CFMapTransformer class +# +# Copyright (C) 2007 David Delbecq +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# The author can be reached via e-mail at tchize+cfpython@gmail.com +# +# Small helper class. Instanciate with +# transform = CFMapTransformer(key) +# or +# transform = CFMapTransformer(key, map) +# default map value is to use The map of current event. +# +# The key is used to keep track of transform. Different transforms +# on same map should use different key to prevent mixup + +# transformAll(criteria,whatTo) +# criteria can be a single String or a list, +# whatTo can be a single String or a list. +# This will scan the whole map for item's whose +# "name" are in the list of criteria and transform +# the to one of the whatTo objects, choosen randomly. +# original object is kept in inventory of newly created +# item and can be restored from there +# untransformAll() +# this no argument method cancel all changes that have been +# made by transformAll +import Crossfire +import random + + +def GetObjectMap(o): + while (o.Env): + o=o.Env + if (o.Map): + return o.Map + return None + +def MakeIdentifier(key): + m = Crossfire.CreateObjectByName("force") + m.Name= key + m.Speed=0 + return m + +class CFMapTransformer: + key = None + cfmap = None + def __init__(self,key,cfmap=None): + self.key=key + if (cfmap): + self.cfmap=cfmap + else: + o = Crossfire.WhoAmI() + while (o.Env): + o = o.Env + self.cfmap = o.Map + + def transformAll(self, criteria, whatTo): + mustClean = False + if (not isinstance (criteria,list)): + criteria = [criteria] + for x in range (self.cfmap.Width): + for y in range (self.cfmap.Height): + top = self.cfmap.ObjectAt(x,y) + while (top): + #print "testing %s at (%d %d) for match against criteria %s" %(top.Name,x,y,criteria) + next = top.Above + if (set([top.Name]) & set (criteria) ): + #print "matched" + #do the replace + if isinstance(whatTo,list): + ob = Crossfire.CreateObjectByName(whatTo[random.randint(0,len(whatTo)-1)]) + else: + ob = Crossfire.CreateObjectByName(whatTo) + force = MakeIdentifier(self.key) + force.InsertInto(ob) + top.InsertInto(ob) + self.cfmap.Insert(ob,x,y) + #handle living stuff by freezing them + force.WriteKey("inside_speed","%f" %top.Speed,1) + top.Speed = 0 + top=next + def untransformAll(self): + for x in range(self.cfmap.Width): + for y in range(self.cfmap.Height): + top = self.cfmap.ObjectAt(x,y) + while (top): + #print "checking at (%d,%d) if %s need a restore" %(x,y,top.Name) + next = top.Above + match = False + inv = top.Inventory + torestore = None + while(inv): + #print " checking inventory item %s" %inv.Name + if (inv.Type == Crossfire.Type.FORCE) and (inv.Name == self.key): + oldspeed = float(inv.ReadKey("inside_speed")) + #print "i found the force, luke" + match = True + elif (inv.Type != Crossfire.Type.EVENT_CONNECTOR): + #print "found what to restore" + torestore = inv + inv = inv.Below + if match and (torestore != None): + #print "found something to restore" + torestore.Speed = oldspeed + self.cfmap.Insert(torestore,x,y) + top.Remove() + top=next diff --git a/python/CFTimeOfDay.py b/python/CFTimeOfDay.py new file mode 100644 index 000000000..c97cb2315 --- /dev/null +++ b/python/CFTimeOfDay.py @@ -0,0 +1,20 @@ +import Crossfire + +class TimeOfDay: + def __init__(self): + self.now = Crossfire.GetTime() + self.current = [Crossfire.GetMonthName(self.now[1]),Crossfire.GetWeekdayName(self.now[5]),Crossfire.GetSeasonName(self.now[7]),Crossfire.GetPeriodofdayName(self.now[8])] + + def matchAny(self,what): + if isinstance(what,list): + return bool(set(what) & set(self.current)) + else: + return bool(set([what]) & set (self.current)) + + def matchAll(self,what): + if isinstance(what,list): + return bool(not (set(what) - set(self.current))) + else: + return bool(not (set([what]) - set (self.current))) + def log(self): + Crossfire.Log(Crossfire.LogDebug,"current time is seen as %s" %self.current) diff --git a/python/tod/filter_all_periods.py b/python/tod/filter_all_periods.py index 3e287a4c2..df3dd3411 100644 --- a/python/tod/filter_all_periods.py +++ b/python/tod/filter_all_periods.py @@ -18,6 +18,7 @@ # # # +# Uses JSON notation for parameters # This script make the event it is attached to (not global!) # works only in specific moment of year/day # exemple, to make an "apply" work only on @@ -26,21 +27,18 @@ # arch event_apply # title Python # slaying /python/tod/filter_all_periods.py -# name the Day of the Moon,The Season of the Blizzard,Morning +# msg +# { +# "when":["Moon","The Season of the Blizzard","Morning"] +# } +# endmsg # end import Crossfire import string - -now = Crossfire.GetTime() -parameters = string.split(Crossfire.ScriptParameters(),",") -current = [Crossfire.GetMonthName(now[1]),Crossfire.GetWeekdayName(now[5]),Crossfire.GetSeasonName(now[7]),Crossfire.GetPeriodofdayName(now[8])] -#Crossfire.Log(Crossfire.LogDebug , "Seasons to check for are %s" %parameters) -#Crossfire.Log(Crossfire.LogDebug , "now is %s" %current) - +from CFTimeOfDay import TimeOfDay +import cjson +parameters = cjson.decode(Crossfire.WhatIsEvent().Message) #default: allow operation (0) -Crossfire.SetReturnValue() -if (set(parameters) - set(current)): -#some parameters had no match on 'now' -> refuse operation +Crossfire.SetReturnValue(0) +if TimeOfDay().matchAny(parameters["when"]): Crossfire.SetReturnValue(1) - - diff --git a/python/tod/filter_one_period.py b/python/tod/filter_one_period.py index 0db31c4c1..f72fd3e68 100644 --- a/python/tod/filter_one_period.py +++ b/python/tod/filter_one_period.py @@ -17,7 +17,7 @@ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # # -# +# Uses JSON notation for parameters # This script make the event it is attached to (not global!) # works only in specific moment of year/day. Periods are separated # by comas. See wiki doc list of possible values @@ -26,20 +26,19 @@ # arch event_apply # title Python # slaying /python/tod/filter_one_period.py -# name The Season of New Year,The Season of the Blizzard,Morning +# msg +# { +# "when":["The Season of New Year","The Season of the Blizzard","Morning"] +# } +# endmsg # end import Crossfire import string - -now = Crossfire.GetTime() -parameters = string.split(Crossfire.ScriptParameters(),",") -current = [Crossfire.GetMonthName(now[1]),Crossfire.GetWeekdayName(now[5]),Crossfire.GetSeasonName(now[7]),Crossfire.GetPeriodofdayName(now[8])] -#Crossfire.Log(Crossfire.LogDebug , "Seasons to check for are %s" %parameters) -#Crossfire.Log(Crossfire.LogDebug , "now is %s" %current) - -#default: cancel operation (<>0). If non empty intersection, we have a match, set to continur operation (0) +from CFTimeOfDay import TimeOfDay +import cjson +parameters = cjson.decode(Crossfire.WhatIsEvent().Message) Crossfire.SetReturnValue(1) -if (set(parameters) & set(current)): +if TimeOfDay().matchAny(parameters["when"]): Crossfire.SetReturnValue(0) diff --git a/python/tod/push_all_periods.py b/python/tod/push_all_periods.py index 49c64389a..de51d7f41 100644 --- a/python/tod/push_all_periods.py +++ b/python/tod/push_all_periods.py @@ -38,24 +38,25 @@ # arch event_time # title Python # slaying /python/tod/push_all_periods.py -# name 69,Morning,The Season of New Year +# msg +# { +# "connected":69 +# "when":["Morning","The Season of New Year"] +# } +# endmsg # end # parameters are separated by comas. First one # is connected value to trigger, other ones are # one or more periods where state must become "pushed" import Crossfire import string +from CFTimeOfDay import TimeOfDay +import cjson event = Crossfire.WhatIsEvent() +parameters = cjson.decode(event.Message) alreadymatched = (event.Value!=0) - -parameters = string.split(Crossfire.ScriptParameters(),",") -connected = int(parameters.pop(0)) -now = Crossfire.GetTime() -current = [Crossfire.GetMonthName(now[1]),Crossfire.GetWeekdayName(now[5]),Crossfire.GetSeasonName(now[7]),Crossfire.GetPeriodofdayName(now[8])] -if (set(parameters) - set(current)): - match = False -else: - match=True +connected = int(parameters["connected"])) +match = TimeOfDay().matchAll(parameters["when"]) #pushdown if needed if (match & (not alreadymatched)): op = event @@ -73,7 +74,3 @@ if ( (not match) & alreadymatched): map.TriggerConnected(connected,0,Crossfire.WhoAmI()) event.Value=0 -#Crossfire.Log(Crossfire.LogDebug , "Seasons to check for are %s" %parameters) -#Crossfire.Log(Crossfire.LogDebug , "Current seasons are %s" %current) -#Crossfire.Log(Crossfire.LogDebug , "Current match status is %d but will be %d" %(alreadymatched,match)) -#Crossfire.Log(Crossfire.LogDebug , "Connecte to trigger is %i" %connected) diff --git a/python/tod/push_one_period.py b/python/tod/push_one_period.py index 13904ed98..2a74c23d9 100644 --- a/python/tod/push_one_period.py +++ b/python/tod/push_one_period.py @@ -38,24 +38,25 @@ # arch event_time # title Python # slaying /python/tod/push_one_period.py -# name 69,Morning,Noon +# msg +# { +# "connected":69 +# "when":["Morning","Noon"] +# } +# endmsg # end # parameters are separated by comas. First one # is connected value to trigger, other ones are # one or more periods where state must become "pushed" import Crossfire import string -event = Crossfire.WhatIsEvent() +from CFTimeOfDay import TimeOfDay +import cjson +event = Crossfire.WhatIsEvent() +parameters = cjson.decode(event.Message) alreadymatched = (event.Value!=0) - -parameters = string.split(Crossfire.ScriptParameters(),",") -connected = int(parameters.pop(0)) -now = Crossfire.GetTime() -current = [Crossfire.GetMonthName(now[1]),Crossfire.GetWeekdayName(now[5]),Crossfire.GetSeasonName(now[7]),Crossfire.GetPeriodofdayName(now[8])] -if (set(parameters) & set(current)): - match = True -else: - match=False +connected = int(parameters["connected"]) +match = TimeOfDay().matchAny(parameters["when"]) #pushdown if need if (match & (not alreadymatched)): op = event @@ -72,7 +73,3 @@ if ( (not match) & alreadymatched): map.TriggerConnected(connected,0,Crossfire.WhoAmI()) event.Value=0 -#Crossfire.Log(Crossfire.LogDebug , "Seasons to check for are %s" %parameters) -#Crossfire.Log(Crossfire.LogDebug , "Current seasons are %s" %current) -#Crossfire.Log(Crossfire.LogDebug , "Current match status is %d but will be %d" %(alreadymatched,match)) -#Crossfire.Log(Crossfire.LogDebug , "Connecte to trigger is %i" %connected) diff --git a/python/tod/replace_all_periods.py b/python/tod/replace_all_periods.py index 87d4aeeb6..df19da54b 100644 --- a/python/tod/replace_all_periods.py +++ b/python/tod/replace_all_periods.py @@ -17,7 +17,7 @@ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # # -# +# Uses JSON notation for parameters # This script make the object is is attached to swap at # given periods of day with a specifc object in the event's inventory # To use it, give this event's parameter the name of @@ -28,30 +28,28 @@ # # arch event_time # title Python -# slaying /python/tod/replace_one_period.py -# name Morning,Noon +# slaying /python/tod/replace_all_periods.py +# msg +# { +# "when":["Morning","The Season of the Blizzard"] +# } +# endmsg # arch beholder # end # end # -# parameters are separated by comas. Those -# are the periods of day where the swap is active - import Crossfire import string +from CFTimeOfDay import TimeOfDay +import cjson event = Crossfire.WhatIsEvent() +parameters = cjson.decode(event.Message) alreadymatched = (event.Value!=0) -parameters = string.split(Crossfire.ScriptParameters(),",") -now = Crossfire.GetTime() -current = [Crossfire.GetMonthName(now[1]),Crossfire.GetWeekdayName(now[5]),Crossfire.GetSeasonName(now[7]),Crossfire.GetPeriodofdayName(now[8])] -if (set(parameters) - set(current)): - match = False -else: - match = True -if ( (match and (not alreadymatched)) or (alreadymatched and (not match))): - Crossfire.Log(Crossfire.LogDebug, "replace_one_period") +match = TimeOfDay().matchAll(parameters["when"]) +if ( match != alreadymatched ): + #Crossfire.Log(Crossfire.LogDebug, "replace_all_periods") event = Crossfire.WhatIsEvent() current = Crossfire.WhoAmI() future = event.Inventory @@ -61,11 +59,11 @@ if ( (match and (not alreadymatched)) or (alreadymatched and (not match))): while ( (future != None) & (future.Type == Crossfire.Type.EVENT_CONNECTOR)): future=future.Below if (future): - if (future.Below): - Crossfire.Log(Crossfire.LogDebug, "future.Below is %s" %future.Below.Name) - Crossfire.Log(Crossfire.LogDebug, "current is %s, future is %s, event is %s" %(current.Name, future.Name, event.Name)) + #if (future.Below): + #Crossfire.Log(Crossfire.LogDebug, "future.Below is %s" %future.Below.Name) + #Crossfire.Log(Crossfire.LogDebug, "current is %s, future is %s, event is %s" %(current.Name, future.Name, event.Name)) if (current.Env): - Crossfire.Log(Crossfire.LogDebug, "env mode") + #Crossfire.Log(Crossfire.LogDebug, "env mode") env = current.Env future.InsertInto(env) event.InsertInto(future) @@ -75,19 +73,19 @@ if ( (match and (not alreadymatched)) or (alreadymatched and (not match))): else: event.Value=1 elif (current.Map): - Crossfire.Log(Crossfire.LogDebug, "Map mode") + #Crossfire.Log(Crossfire.LogDebug, "Map mode") mymap = current.Map x = current.X y = current.Y - Crossfire.Log(Crossfire.LogDebug, "inserting future %s in map" %future.Name) + #Crossfire.Log(Crossfire.LogDebug, "inserting future %s in map" %future.Name) mymap.Insert(future,x,y) - Crossfire.Log(Crossfire.LogDebug, "inserting event %s in future" %event.Name) + #Crossfire.Log(Crossfire.LogDebug, "inserting event %s in future" %event.Name) event.InsertInto(future) - Crossfire.Log(Crossfire.LogDebug, "inserting current %s in event" %current.Name) + #Crossfire.Log(Crossfire.LogDebug, "inserting current %s in event" %current.Name) current.InsertInto(event) if (alreadymatched): event.Value=0 else: event.Value=1 - else: - Crossfire.Log(Crossfire.LogDebug, "neither env object nor map found") + #else: + #Crossfire.Log(Crossfire.LogDebug, "neither env object nor map found") diff --git a/python/tod/replace_in_map_one_period.py b/python/tod/replace_in_map_one_period.py new file mode 100644 index 000000000..089dcfc32 --- /dev/null +++ b/python/tod/replace_in_map_one_period.py @@ -0,0 +1,31 @@ +import Crossfire +import random +from CFMapTransformer import CFMapTransformer +from CFTimeOfDay import TimeOfDay +import cjson + + +event = Crossfire.WhatIsEvent() +alreadymatched = (event.Value!=0) +parameters = cjson.decode(event.Message) +current = TimeOfDay() +#current.log() +match = current.matchAny(parameters["when"]) +#print "match is %s and alreadymatched is %s" %(match,alreadymatched) + +if (match != alreadymatched): + transformer = CFMapTransformer(parameters["key"]) + if (match): + Crossfire.Log(Crossfire.LogDebug,"Transforming %s into %s" %(parameters["from"],parameters["to"])) + transformer.transformAll(parameters["from"],parameters["to"]) + event.Value=1 + else: + transformer.untransformAll() + event.Value=0 + +#if random.randint(0,2) == 0 : +# print "transform mode" +# transformer.transformAll("skeleton",["bones1","bones2","bones3","bones4"]) +#else: +# print "untransform mode" +# transformer.untransformAll() diff --git a/python/tod/replace_one_period.py b/python/tod/replace_one_period.py index 646091a61..773a5c52f 100644 --- a/python/tod/replace_one_period.py +++ b/python/tod/replace_one_period.py @@ -17,7 +17,7 @@ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # # -# +# Uses JSON notation for parameters # This script make the object is is attached to swap at # given periods of day with a specifc object in the event's inventory # To use it, give this event's parameter the name of @@ -29,28 +29,26 @@ # arch event_time # title Python # slaying /python/tod/replace_one_period.py -# name Morning,Noon +# msg +# { +# "when":["Noon","Morning"] +# } +# endmsg # arch beholder # end # end # -# parameters are separated by comas. Those -# are the periods of day where the swap is active import Crossfire import string +from CFTimeOfDay import TimeOfDay +import cjson event = Crossfire.WhatIsEvent() +parameters = cjson.decode(event.Message) alreadymatched = (event.Value!=0) - -parameters = string.split(Crossfire.ScriptParameters(),",") -now = Crossfire.GetTime() -current = [Crossfire.GetMonthName(now[1]),Crossfire.GetWeekdayName(now[5]),Crossfire.GetSeasonName(now[7]),Crossfire.GetPeriodofdayName(now[8])] -if (set(parameters) & set(current)): - match = True -else: - match = False -if ( (match and (not alreadymatched)) or (alreadymatched and (not match))): +match = TimeOfDay().matchAny(parameters["when"]) +if ( match != alreadymatched ): Crossfire.Log(Crossfire.LogDebug, "replace_one_period") event = Crossfire.WhatIsEvent() current = Crossfire.WhoAmI() @@ -61,11 +59,11 @@ if ( (match and (not alreadymatched)) or (alreadymatched and (not match))): while ( (future != None) & (future.Type == Crossfire.Type.EVENT_CONNECTOR)): future=future.Below if (future): - if (future.Below): - Crossfire.Log(Crossfire.LogDebug, "future.Below is %s" %future.Below.Name) - Crossfire.Log(Crossfire.LogDebug, "current is %s, future is %s, event is %s" %(current.Name, future.Name, event.Name)) + #if (future.Below): + #Crossfire.Log(Crossfire.LogDebug, "future.Below is %s" %future.Below.Name) + #Crossfire.Log(Crossfire.LogDebug, "current is %s, future is %s, event is %s" %(current.Name, future.Name, event.Name)) if (current.Env): - Crossfire.Log(Crossfire.LogDebug, "env mode") + #Crossfire.Log(Crossfire.LogDebug, "env mode") env = current.Env future.InsertInto(env) event.InsertInto(future) @@ -75,19 +73,19 @@ if ( (match and (not alreadymatched)) or (alreadymatched and (not match))): else: event.Value=1 elif (current.Map): - Crossfire.Log(Crossfire.LogDebug, "Map mode") + #Crossfire.Log(Crossfire.LogDebug, "Map mode") mymap = current.Map x = current.X y = current.Y - Crossfire.Log(Crossfire.LogDebug, "inserting future %s in map" %future.Name) + #Crossfire.Log(Crossfire.LogDebug, "inserting future %s in map" %future.Name) mymap.Insert(future,x,y) - Crossfire.Log(Crossfire.LogDebug, "inserting event %s in future" %event.Name) + #Crossfire.Log(Crossfire.LogDebug, "inserting event %s in future" %event.Name) event.InsertInto(future) - Crossfire.Log(Crossfire.LogDebug, "inserting current %s in event" %current.Name) + #Crossfire.Log(Crossfire.LogDebug, "inserting current %s in event" %current.Name) current.InsertInto(event) if (alreadymatched): event.Value=0 else: event.Value=1 - else: - Crossfire.Log(Crossfire.LogDebug, "neither env object nor map found") + #else: + #Crossfire.Log(Crossfire.LogDebug, "neither env object nor map found") diff --git a/test/tod b/test/tod index 0318b6435..d8484ce84 100644 --- a/test/tod +++ b/test/tod @@ -5,7 +5,7 @@ width 20 height 20 msg Created: 2007-11-11 tchize -Modified: 2007-11-17 tchize +Modified: 2007-11-19 tchize endmsg end arch brush @@ -196,7 +196,11 @@ x 2 y 3 move_on walk fly_low fly_high arch event_trigger -name The Season of New Year +msg +{ + "when":"The Season of New Year" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -213,7 +217,11 @@ x 2 y 4 move_on walk fly_low fly_high arch event_trigger -name The Season of Growth +msg +{ + "when":"The Season of Growth" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -230,7 +238,11 @@ x 2 y 5 move_on walk fly_low fly_high arch event_trigger -name The Season of Harvest +msg +{ + "when":"The Season of Harvest" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -247,7 +259,11 @@ x 2 y 6 move_on walk fly_low fly_high arch event_trigger -name The Season of Decay +msg +{ + "when":"The Season of Decay" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -264,7 +280,11 @@ x 2 y 7 move_on walk fly_low fly_high arch event_trigger -name The Season of the Blizzard +msg +{ + "when":"The Season of the Blizzard" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -442,7 +462,11 @@ x 4 y 3 move_on walk fly_low fly_high arch event_trigger -name Month of Winter +msg +{ + "when":"Month of Winter" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -459,7 +483,11 @@ x 4 y 4 move_on walk fly_low fly_high arch event_trigger -name Month of the Ice Dragon +msg +{ + "when":"Month of the Ice Dragon" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -476,7 +504,11 @@ x 4 y 5 move_on walk fly_low fly_high arch event_trigger -name Month of the Frost Giant +msg +{ + "when":"Month of the Frost Giant" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -493,7 +525,11 @@ x 4 y 6 move_on walk fly_low fly_high arch event_trigger -name Month of Valriel +msg +{ + "when":"Month of Valriel" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -510,7 +546,11 @@ x 4 y 7 move_on walk fly_low fly_high arch event_trigger -name Month of Lythander +msg +{ + "when":"Month of Lythander" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -527,7 +567,11 @@ x 4 y 8 move_on walk fly_low fly_high arch event_trigger -name Month of the Harvest +msg +{ + "when":"Month of the Harvest" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -544,7 +588,11 @@ x 4 y 9 move_on walk fly_low fly_high arch event_trigger -name Month of Gaea +msg +{ + "when":"Month of Gaea" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -561,7 +609,11 @@ x 4 y 10 move_on walk fly_low fly_high arch event_trigger -name Month of Futility +msg +{ + "when":"Month of Futility" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -578,7 +630,11 @@ x 4 y 11 move_on walk fly_low fly_high arch event_trigger -name Month of the Dragon +msg +{ + "when":"Month of the Dragon" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -595,7 +651,11 @@ x 4 y 12 move_on walk fly_low fly_high arch event_trigger -name Month of the Sun +msg +{ + "when":"Month of the Sun" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -612,7 +672,11 @@ x 4 y 13 move_on walk fly_low fly_high arch event_trigger -name Month of the Great Infernus +msg +{ + "when":"Month of the Great Infernus" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -629,7 +693,11 @@ x 4 y 14 move_on walk fly_low fly_high arch event_trigger -name Month of Ruggilli +msg +{ + "when":"Month of Ruggilli" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -646,7 +714,11 @@ x 4 y 15 move_on walk fly_low fly_high arch event_trigger -name Month of the Dark Shades +msg +{ + "when":"Month of the Dark Shades" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -663,7 +735,11 @@ x 4 y 16 move_on walk fly_low fly_high arch event_trigger -name Month of the Devourers +msg +{ + "when":"Month of the Devourers" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -680,7 +756,11 @@ x 4 y 17 move_on walk fly_low fly_high arch event_trigger -name Month of Sorig +msg +{ + "when":"Month of Sorig" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -697,7 +777,11 @@ x 4 y 18 move_on walk fly_low fly_high arch event_trigger -name Month of the Ancient Darkness +msg +{ + "when":"Month of the Ancient Darkness" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -714,7 +798,11 @@ x 4 y 19 move_on walk fly_low fly_high arch event_trigger -name Month of Gorokh +msg +{ + "when":"Month of Gorokh" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -844,7 +932,11 @@ x 6 y 3 move_on walk fly_low fly_high arch event_trigger -name the Day of the Moon +msg +{ + "when":"the Day of the Moon" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -861,7 +953,11 @@ x 6 y 4 move_on walk fly_low fly_high arch event_trigger -name the Day of the Bull +msg +{ + "when":"the Day of the Bull" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -878,7 +974,11 @@ x 6 y 5 move_on walk fly_low fly_high arch event_trigger -name the Day of the Deception +msg +{ + "when":"the Day of the Deception" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -895,7 +995,11 @@ x 6 y 6 move_on walk fly_low fly_high arch event_trigger -name the Day of Thunder +msg +{ + "when":"the Day of Thunder" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -912,7 +1016,11 @@ x 6 y 7 move_on walk fly_low fly_high arch event_trigger -name the Day of Freedom +msg +{ + "when":"the Day of Freedom" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -929,7 +1037,11 @@ x 6 y 8 move_on walk fly_low fly_high arch event_trigger -name the Day of the Great Gods +msg +{ + "when":"the Day of the Great Gods" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -946,7 +1058,11 @@ x 6 y 9 move_on walk fly_low fly_high arch event_trigger -name the Day of the Sun +msg +{ + "when":"the Day of the Sun" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -1110,7 +1226,11 @@ x 8 y 3 move_on walk fly_low fly_high arch event_trigger -name Night +msg +{ + "when":"Night" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -1127,7 +1247,11 @@ x 8 y 4 move_on walk fly_low fly_high arch event_trigger -name Dawn +msg +{ + "when":"Dawn" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -1144,7 +1268,11 @@ x 8 y 5 move_on walk fly_low fly_high arch event_trigger -name Morning +msg +{ + "when":"Morning" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -1161,7 +1289,11 @@ x 8 y 6 move_on walk fly_low fly_high arch event_trigger -name Noon +msg +{ + "when":"Noon" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -1178,7 +1310,11 @@ x 8 y 7 move_on walk fly_low fly_high arch event_trigger -name Evening +msg +{ + "when":"Evening" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -1195,7 +1331,11 @@ x 8 y 8 move_on walk fly_low fly_high arch event_trigger -name Dusk +msg +{ + "when":"Dusk" +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -1850,9 +1990,14 @@ y 15 stand_still 1 no_damage 1 arch event_time -name 79,Morning,Noon,Evening title Python slaying /python/tod/push_one_period.py +msg +{ + "connected":79, + "when":["Morning","Noon","Evening"] +} +endmsg end end arch brush @@ -1950,14 +2095,16 @@ end arch beholder x 16 y 11 -connected 80 arch event_trigger -name Dusk,Night title Python slaying /python/tod/replace_one_period.py +msg +{ + "when" : ["Dusk","Night"] +} +endmsg subtype 8 arch black_dragon1 -connected 80 end end end @@ -2074,14 +2221,16 @@ end arch beholder x 17 y 11 -connected 80 arch event_trigger -name Dawn,Morning title Python slaying /python/tod/replace_one_period.py +msg +{ + "when" : ["Dawn","Morning"] +} +endmsg subtype 8 arch black_dragon1 -connected 80 end end end @@ -2198,14 +2347,16 @@ end arch beholder x 18 y 11 -connected 80 arch event_trigger -name Noon,Evening title Python slaying /python/tod/replace_one_period.py +msg +{ + "when" : ["Noon","Evening"] +} +endmsg subtype 8 arch black_dragon1 -connected 80 end end end @@ -2260,7 +2411,11 @@ arch light_sword name Day sword x 19 arch event_attack -name Morning,Noon,Evening +msg +{ + "when":["Morning","Noon","Evening"] +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -2287,7 +2442,11 @@ name Night sword x 19 y 2 arch event_attack -name Night,Dawn,Dusk +msg +{ + "when":["Night","Dawn","Dusk"] +} +endmsg title Python slaying /python/tod/filter_one_period.py end @@ -2312,6 +2471,13 @@ arch brush x 19 y 7 end +arch ladder_down +slaying tod2 +hp 19 +sp 7 +x 19 +y 7 +end arch afloor_blue_right x 19 y 8 @@ -2342,14 +2508,16 @@ end arch beholder x 19 y 11 -connected 80 arch event_trigger -name Evening,Dusk title Python slaying /python/tod/replace_one_period.py +msg +{ + "when" : ["Dusk","Evening"] +} +endmsg subtype 8 arch black_dragon1 -connected 80 end end end diff --git a/test/tod2 b/test/tod2 new file mode 100644 index 000000000..ef7be9c97 --- /dev/null +++ b/test/tod2 @@ -0,0 +1,1768 @@ +arch map +name tod2 +width 20 +height 20 +msg +Created: 2007-11-18 tchize +Modified: 2007-11-19 tchize +endmsg +end +arch flagstone +end +arch flagstone +y 1 +end +arch flagstone +y 2 +end +arch flagstone +y 3 +end +arch flagstone +y 4 +end +arch flagstone +y 5 +end +arch flagstone +y 6 +end +arch flagstone +y 7 +end +arch flagstone +y 8 +end +arch flagstone +y 9 +end +arch flagstone +y 10 +end +arch flagstone +y 11 +end +arch flagstone +y 12 +end +arch flagstone +y 13 +end +arch flagstone +y 14 +end +arch flagstone +y 15 +end +arch flagstone +y 16 +end +arch flagstone +y 17 +end +arch flagstone +y 18 +end +arch flagstone +y 19 +end +arch flagstone +x 1 +end +arch flagstone +x 1 +y 1 +end +arch flagstone +x 1 +y 2 +end +arch flagstone +x 1 +y 3 +end +arch flagstone +x 1 +y 4 +end +arch flagstone +x 1 +y 5 +end +arch flagstone +x 1 +y 6 +end +arch flagstone +x 1 +y 7 +end +arch flagstone +x 1 +y 8 +end +arch flagstone +x 1 +y 9 +end +arch flagstone +x 1 +y 10 +end +arch flagstone +x 1 +y 11 +end +arch flagstone +x 1 +y 12 +end +arch flagstone +x 1 +y 13 +end +arch flagstone +x 1 +y 14 +end +arch flagstone +x 1 +y 15 +end +arch flagstone +x 1 +y 16 +end +arch flagstone +x 1 +y 17 +end +arch flagstone +x 1 +y 18 +end +arch flagstone +x 1 +y 19 +end +arch flagstone +x 2 +end +arch flagstone +x 2 +y 1 +end +arch flagstone +x 2 +y 2 +end +arch flagstone +x 2 +y 3 +end +arch flagstone +x 2 +y 4 +end +arch flagstone +x 2 +y 5 +end +arch flagstone +x 2 +y 6 +end +arch flagstone +x 2 +y 7 +end +arch flagstone +x 2 +y 8 +end +arch flagstone +x 2 +y 9 +end +arch flagstone +x 2 +y 10 +end +arch flagstone +x 2 +y 11 +end +arch flagstone +x 2 +y 12 +end +arch flagstone +x 2 +y 13 +end +arch flagstone +x 2 +y 14 +end +arch flagstone +x 2 +y 15 +end +arch flagstone +x 2 +y 16 +end +arch flagstone +x 2 +y 17 +end +arch flagstone +x 2 +y 18 +end +arch flagstone +x 2 +y 19 +end +arch flagstone +x 3 +end +arch flagstone +x 3 +y 1 +end +arch flagstone +x 3 +y 2 +end +arch generate_skeleton +x 3 +y 2 +end +arch flagstone +x 3 +y 3 +end +arch flagstone +x 3 +y 4 +end +arch flagstone +x 3 +y 5 +end +arch flagstone +x 3 +y 6 +end +arch generate_skeleton +x 3 +y 6 +end +arch flagstone +x 3 +y 7 +end +arch flagstone +x 3 +y 8 +end +arch flagstone +x 3 +y 9 +end +arch flagstone +x 3 +y 10 +end +arch generate_skeleton +x 3 +y 10 +end +arch flagstone +x 3 +y 11 +end +arch flagstone +x 3 +y 12 +end +arch flagstone +x 3 +y 13 +end +arch flagstone +x 3 +y 14 +end +arch flagstone +x 3 +y 15 +end +arch flagstone +x 3 +y 16 +end +arch flagstone +x 3 +y 17 +end +arch flagstone +x 3 +y 18 +end +arch flagstone +x 3 +y 19 +end +arch flagstone +x 4 +end +arch flagstone +x 4 +y 1 +end +arch flagstone +x 4 +y 2 +end +arch flagstone +x 4 +y 3 +end +arch flagstone +x 4 +y 4 +end +arch flagstone +x 4 +y 5 +end +arch flagstone +x 4 +y 6 +end +arch flagstone +x 4 +y 7 +end +arch flagstone +x 4 +y 8 +end +arch flagstone +x 4 +y 9 +end +arch flagstone +x 4 +y 10 +end +arch flagstone +x 4 +y 11 +end +arch flagstone +x 4 +y 12 +end +arch flagstone +x 4 +y 13 +end +arch flagstone +x 4 +y 14 +end +arch flagstone +x 4 +y 15 +end +arch flagstone +x 4 +y 16 +end +arch flagstone +x 4 +y 17 +end +arch flagstone +x 4 +y 18 +end +arch flagstone +x 4 +y 19 +end +arch flagstone +x 5 +end +arch flagstone +x 5 +y 1 +end +arch flagstone +x 5 +y 2 +end +arch flagstone +x 5 +y 3 +end +arch flagstone +x 5 +y 4 +end +arch generate_skeleton +x 5 +y 4 +end +arch flagstone +x 5 +y 5 +end +arch flagstone +x 5 +y 6 +end +arch flagstone +x 5 +y 7 +end +arch flagstone +x 5 +y 8 +end +arch generate_skeleton +x 5 +y 8 +end +arch flagstone +x 5 +y 9 +end +arch flagstone +x 5 +y 10 +end +arch flagstone +x 5 +y 11 +end +arch flagstone +x 5 +y 12 +end +arch generate_skeleton +x 5 +y 12 +end +arch flagstone +x 5 +y 13 +end +arch flagstone +x 5 +y 14 +end +arch flagstone +x 5 +y 15 +end +arch flagstone +x 5 +y 16 +end +arch flagstone +x 5 +y 17 +end +arch flagstone +x 5 +y 18 +end +arch flagstone +x 5 +y 19 +end +arch flagstone +x 6 +end +arch flagstone +x 6 +y 1 +end +arch flagstone +x 6 +y 2 +end +arch flagstone +x 6 +y 3 +end +arch flagstone +x 6 +y 4 +end +arch flagstone +x 6 +y 5 +end +arch flagstone +x 6 +y 6 +end +arch flagstone +x 6 +y 7 +end +arch flagstone +x 6 +y 8 +end +arch flagstone +x 6 +y 9 +end +arch flagstone +x 6 +y 10 +end +arch flagstone +x 6 +y 11 +end +arch flagstone +x 6 +y 12 +end +arch flagstone +x 6 +y 13 +end +arch flagstone +x 6 +y 14 +end +arch flagstone +x 6 +y 15 +end +arch flagstone +x 6 +y 16 +end +arch flagstone +x 6 +y 17 +end +arch flagstone +x 6 +y 18 +end +arch flagstone +x 6 +y 19 +end +arch flagstone +x 7 +end +arch flagstone +x 7 +y 1 +end +arch flagstone +x 7 +y 2 +end +arch flagstone +x 7 +y 3 +end +arch flagstone +x 7 +y 4 +end +arch flagstone +x 7 +y 5 +end +arch flagstone +x 7 +y 6 +end +arch flagstone +x 7 +y 7 +end +arch flagstone +x 7 +y 8 +end +arch flagstone +x 7 +y 9 +end +arch flagstone +x 7 +y 10 +end +arch flagstone +x 7 +y 11 +end +arch flagstone +x 7 +y 12 +end +arch flagstone +x 7 +y 13 +end +arch flagstone +x 7 +y 14 +end +arch flagstone +x 7 +y 15 +end +arch flagstone +x 7 +y 16 +end +arch flagstone +x 7 +y 17 +end +arch flagstone +x 7 +y 18 +end +arch flagstone +x 7 +y 19 +end +arch flagstone +x 8 +end +arch flagstone +x 8 +y 1 +end +arch flagstone +x 8 +y 2 +end +arch flagstone +x 8 +y 3 +end +arch flagstone +x 8 +y 4 +end +arch flagstone +x 8 +y 5 +end +arch flagstone +x 8 +y 6 +end +arch flagstone +x 8 +y 7 +end +arch flagstone +x 8 +y 8 +end +arch flagstone +x 8 +y 9 +end +arch skeleton +x 8 +y 9 +end +arch flagstone +x 8 +y 10 +end +arch flagstone +x 8 +y 11 +end +arch flagstone +x 8 +y 12 +end +arch flagstone +x 8 +y 13 +end +arch flagstone +x 8 +y 14 +end +arch flagstone +x 8 +y 15 +end +arch flagstone +x 8 +y 16 +end +arch flagstone +x 8 +y 17 +end +arch flagstone +x 8 +y 18 +end +arch flagstone +x 8 +y 19 +end +arch flagstone +x 9 +end +arch flagstone +x 9 +y 1 +end +arch flagstone +x 9 +y 2 +end +arch flagstone +x 9 +y 3 +end +arch flagstone +x 9 +y 4 +end +arch flagstone +x 9 +y 5 +end +arch flagstone +x 9 +y 6 +end +arch flagstone +x 9 +y 7 +end +arch flagstone +x 9 +y 8 +end +arch flagstone +x 9 +y 9 +end +arch flagstone +x 9 +y 10 +end +arch flagstone +x 9 +y 11 +end +arch flagstone +x 9 +y 12 +end +arch flagstone +x 9 +y 13 +end +arch flagstone +x 9 +y 14 +end +arch flagstone +x 9 +y 15 +end +arch flagstone +x 9 +y 16 +end +arch flagstone +x 9 +y 17 +end +arch flagstone +x 9 +y 18 +end +arch flagstone +x 9 +y 19 +end +arch flagstone +x 10 +end +arch flagstone +x 10 +y 1 +end +arch flagstone +x 10 +y 2 +end +arch flagstone +x 10 +y 3 +end +arch flagstone +x 10 +y 4 +end +arch flagstone +x 10 +y 5 +end +arch flagstone +x 10 +y 6 +end +arch flagstone +x 10 +y 7 +end +arch flagstone +x 10 +y 8 +end +arch flagstone +x 10 +y 9 +end +arch flagstone +x 10 +y 10 +end +arch flagstone +x 10 +y 11 +end +arch flagstone +x 10 +y 12 +end +arch flagstone +x 10 +y 13 +end +arch flagstone +x 10 +y 14 +end +arch flagstone +x 10 +y 15 +end +arch flagstone +x 10 +y 16 +end +arch flagstone +x 10 +y 17 +end +arch flagstone +x 10 +y 18 +end +arch flagstone +x 10 +y 19 +end +arch flagstone +x 11 +end +arch flagstone +x 11 +y 1 +end +arch flagstone +x 11 +y 2 +end +arch flagstone +x 11 +y 3 +end +arch flagstone +x 11 +y 4 +end +arch skeleton +x 11 +y 4 +end +arch flagstone +x 11 +y 5 +end +arch flagstone +x 11 +y 6 +end +arch flagstone +x 11 +y 7 +end +arch flagstone +x 11 +y 8 +end +arch flagstone +x 11 +y 9 +end +arch flagstone +x 11 +y 10 +end +arch flagstone +x 11 +y 11 +end +arch flagstone +x 11 +y 12 +end +arch flagstone +x 11 +y 13 +end +arch flagstone +x 11 +y 14 +end +arch flagstone +x 11 +y 15 +end +arch flagstone +x 11 +y 16 +end +arch flagstone +x 11 +y 17 +end +arch flagstone +x 11 +y 18 +end +arch flagstone +x 11 +y 19 +end +arch flagstone +x 12 +end +arch flagstone +x 12 +y 1 +end +arch flagstone +x 12 +y 2 +end +arch flagstone +x 12 +y 3 +end +arch flagstone +x 12 +y 4 +end +arch flagstone +x 12 +y 5 +end +arch flagstone +x 12 +y 6 +end +arch flagstone +x 12 +y 7 +end +arch skeleton +x 12 +y 7 +end +arch flagstone +x 12 +y 8 +end +arch flagstone +x 12 +y 9 +end +arch flagstone +x 12 +y 10 +end +arch flagstone +x 12 +y 11 +end +arch flagstone +x 12 +y 12 +end +arch flagstone +x 12 +y 13 +end +arch flagstone +x 12 +y 14 +end +arch flagstone +x 12 +y 15 +end +arch flagstone +x 12 +y 16 +end +arch flagstone +x 12 +y 17 +end +arch flagstone +x 12 +y 18 +end +arch flagstone +x 12 +y 19 +end +arch flagstone +x 13 +end +arch flagstone +x 13 +y 1 +end +arch flagstone +x 13 +y 2 +end +arch flagstone +x 13 +y 3 +end +arch flagstone +x 13 +y 4 +end +arch skeleton +x 13 +y 4 +end +arch flagstone +x 13 +y 5 +end +arch flagstone +x 13 +y 6 +end +arch flagstone +x 13 +y 7 +end +arch skeleton +x 13 +y 7 +end +arch flagstone +x 13 +y 8 +end +arch flagstone +x 13 +y 9 +end +arch flagstone +x 13 +y 10 +end +arch flagstone +x 13 +y 11 +end +arch skeleton +x 13 +y 11 +end +arch flagstone +x 13 +y 12 +end +arch flagstone +x 13 +y 13 +end +arch flagstone +x 13 +y 14 +end +arch flagstone +x 13 +y 15 +end +arch flagstone +x 13 +y 16 +end +arch flagstone +x 13 +y 17 +end +arch flagstone +x 13 +y 18 +end +arch flagstone +x 13 +y 19 +end +arch flagstone +x 14 +end +arch flagstone +x 14 +y 1 +end +arch flagstone +x 14 +y 2 +end +arch flagstone +x 14 +y 3 +end +arch flagstone +x 14 +y 4 +end +arch flagstone +x 14 +y 5 +end +arch flagstone +x 14 +y 6 +end +arch flagstone +x 14 +y 7 +end +arch flagstone +x 14 +y 8 +end +arch flagstone +x 14 +y 9 +end +arch flagstone +x 14 +y 10 +end +arch flagstone +x 14 +y 11 +end +arch flagstone +x 14 +y 12 +end +arch flagstone +x 14 +y 13 +end +arch flagstone +x 14 +y 14 +end +arch flagstone +x 14 +y 15 +end +arch flagstone +x 14 +y 16 +end +arch flagstone +x 14 +y 17 +end +arch flagstone +x 14 +y 18 +end +arch flagstone +x 14 +y 19 +end +arch flagstone +x 15 +end +arch flagstone +x 15 +y 1 +end +arch flagstone +x 15 +y 2 +end +arch flagstone +x 15 +y 3 +end +arch skeleton +x 15 +y 3 +end +arch flagstone +x 15 +y 4 +end +arch flagstone +x 15 +y 5 +end +arch pedestal +x 15 +y 5 +connected 1 +end +arch flagstone +x 15 +y 6 +end +arch pedestal +x 15 +y 6 +connected 1 +end +arch flagstone +x 15 +y 7 +end +arch pedestal +x 15 +y 7 +connected 1 +end +arch flagstone +x 15 +y 8 +end +arch pedestal +x 15 +y 8 +connected 1 +end +arch flagstone +x 15 +y 9 +end +arch pedestal +x 15 +y 9 +connected 1 +end +arch flagstone +x 15 +y 10 +end +arch skeleton +x 15 +y 10 +end +arch flagstone +x 15 +y 11 +end +arch flagstone +x 15 +y 12 +end +arch flagstone +x 15 +y 13 +end +arch flagstone +x 15 +y 14 +end +arch flagstone +x 15 +y 15 +end +arch flagstone +x 15 +y 16 +end +arch flagstone +x 15 +y 17 +end +arch flagstone +x 15 +y 18 +end +arch flagstone +x 15 +y 19 +end +arch flagstone +x 16 +end +arch awall_1_1 +x 16 +end +arch flagstone +x 16 +y 1 +end +arch awall_2_1_1 +x 16 +y 1 +end +arch flagstone +x 16 +y 2 +end +arch awall_2_1_1 +x 16 +y 2 +end +arch flagstone +x 16 +y 3 +end +arch awall_2_1_1 +x 16 +y 3 +end +arch flagstone +x 16 +y 4 +end +arch awall_2_1_1 +x 16 +y 4 +end +arch flagstone +x 16 +y 5 +end +arch awall_2_2_1 +x 16 +y 5 +end +arch flagstone +x 16 +y 6 +end +arch grate_closed_2 +x 16 +y 6 +connected 1 +end +arch flagstone +x 16 +y 7 +end +arch grate_closed_2 +x 16 +y 7 +connected 1 +end +arch flagstone +x 16 +y 8 +end +arch grate_closed_2 +x 16 +y 8 +connected 1 +end +arch flagstone +x 16 +y 9 +end +arch awall_1_4 +x 16 +y 9 +end +arch flagstone +x 16 +y 10 +end +arch flagstone +x 16 +y 11 +end +arch flagstone +x 16 +y 12 +end +arch flagstone +x 16 +y 13 +end +arch flagstone +x 16 +y 14 +end +arch flagstone +x 16 +y 15 +end +arch flagstone +x 16 +y 16 +end +arch flagstone +x 16 +y 17 +end +arch flagstone +x 16 +y 18 +end +arch flagstone +x 16 +y 19 +end +arch flagstone +x 17 +end +arch flagstone +x 17 +y 1 +end +arch flagstone +x 17 +y 2 +end +arch sage +x 17 +y 2 +arch event_time +title Python +slaying /python/tod/replace_in_map_one_period.py +msg +{ + "key" : "skeleton kills" + "when" : ["Dawn","Morning","Noon","Evening","Dusk"] + "from" : ["skeleton","generator"], + "to" : ["bones1","bones2","bones3"] +} +endmsg +end +end +arch flagstone +x 17 +y 3 +end +arch flagstone +x 17 +y 4 +end +arch flagstone +x 17 +y 5 +end +arch awall_2_1_2 +x 17 +y 5 +end +arch flagstone +x 17 +y 6 +end +arch pedestal +x 17 +y 6 +connected 1 +end +arch flagstone +x 17 +y 7 +end +arch pedestal +x 17 +y 7 +connected 1 +end +arch flagstone +x 17 +y 8 +end +arch pedestal +x 17 +y 8 +connected 1 +end +arch flagstone +x 17 +y 9 +end +arch awall_2_1_2 +x 17 +y 9 +end +arch flagstone +x 17 +y 10 +end +arch flagstone +x 17 +y 11 +end +arch flagstone +x 17 +y 12 +end +arch flagstone +x 17 +y 13 +end +arch flagstone +x 17 +y 14 +end +arch flagstone +x 17 +y 15 +end +arch flagstone +x 17 +y 16 +end +arch flagstone +x 17 +y 17 +end +arch flagstone +x 17 +y 18 +end +arch flagstone +x 17 +y 19 +end +arch flagstone +x 18 +end +arch flagstone +x 18 +y 1 +end +arch flagstone +x 18 +y 2 +end +arch flagstone +x 18 +y 3 +end +arch flagstone +x 18 +y 4 +end +arch flagstone +x 18 +y 5 +end +arch awall_2_1_2 +x 18 +y 5 +end +arch flagstone +x 18 +y 6 +end +arch sign +msg +This map is full of skeletons, generated by +skeletons generators. When Dawn comes, +all skeletons are converted to dead skeletons. +When night falls, deads come back to live. + +This demo is not the same as beholder one +above. This is because here, all map is affected +while in beholder case, it's was individual behaviour +endmsg +x 18 +y 6 +end +arch flagstone +x 18 +y 7 +end +arch flagstone +x 18 +y 8 +end +arch flagstone +x 18 +y 9 +end +arch awall_2_1_2 +x 18 +y 9 +end +arch flagstone +x 18 +y 10 +end +arch flagstone +x 18 +y 11 +end +arch flagstone +x 18 +y 12 +end +arch flagstone +x 18 +y 13 +end +arch flagstone +x 18 +y 14 +end +arch flagstone +x 18 +y 15 +end +arch flagstone +x 18 +y 16 +end +arch flagstone +x 18 +y 17 +end +arch flagstone +x 18 +y 18 +end +arch flagstone +x 18 +y 19 +end +arch flagstone +x 19 +end +arch flagstone +x 19 +y 1 +end +arch flagstone +x 19 +y 2 +end +arch flagstone +x 19 +y 3 +end +arch flagstone +x 19 +y 4 +end +arch flagstone +x 19 +y 5 +end +arch awall_1_3 +x 19 +y 5 +end +arch flagstone +x 19 +y 6 +end +arch flagstone +x 19 +y 7 +end +arch ladder_up +slaying tod +hp 19 +sp 7 +x 19 +y 7 +end +arch flagstone +x 19 +y 8 +end +arch flagstone +x 19 +y 9 +end +arch awall_1_3 +x 19 +y 9 +end +arch flagstone +x 19 +y 10 +end +arch flagstone +x 19 +y 11 +end +arch flagstone +x 19 +y 12 +end +arch flagstone +x 19 +y 13 +end +arch flagstone +x 19 +y 14 +end +arch flagstone +x 19 +y 15 +end +arch flagstone +x 19 +y 16 +end +arch flagstone +x 19 +y 17 +end +arch flagstone +x 19 +y 18 +end +arch flagstone +x 19 +y 19 +end