;ò _‰;c@sÙdZdkZdkZdkZdkTdkZdkZdkZdkl Z dZ dZ dfd„ƒYZ dfd „ƒYZ d fd „ƒYZd fd „ƒYZedjo dZeeƒZeiƒndS(s?LevelsData - parse a levels.txt file and build a data structureN(s*(s NestedDictiisActorcBstZdd„Zd„ZRS(NicCs\||_||_||_||_||_||_|ti |_t |_ g|_ dS(N( snamesselfs class_stringsparameters_sequences is_objectives max_instancessintervals probabilitysgamesadd_actor_intervalsNones class_objects parameters(sselfsnames probabilitys max_instancess class_stringsparameters_sequences is_objectivesinterval((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/levelsdata.pys__init__s       cCs0d|i|i|i|i|i|ifSdS(NsActor('%s',%f,%s,'%s',%s,%d)(sselfsnames probabilitys max_instancess class_stringsparameters_sequencesinterval(sself((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/levelsdata.pys__repr__)s(s__name__s __module__s__init__s__repr__(((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/levelsdata.pysActors sMissioncBstZd„Zd„ZRS(NcCs1||_||_||_||_||_dS(N(snamesselfs descriptionsorderspartss refuel_actor(sselfsnames descriptionsorderspartss refuel_actor((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/levelsdata.pys__init__/s     cCs$d|i|i|i|ifSdS(NsMission('%s','%s',%d,%s)(sselfsnames descriptionsordersparts(sself((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/levelsdata.pys__repr__8s(s__name__s __module__s__init__s__repr__(((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/levelsdata.pysMission.s s MissionPartcBstZd„Zd„ZRS(NcCs||_||_||_dS(N(snamesselfstimesactors(sselfsnamestimesactors((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/levelsdata.pys__init__<s  cCsd|i|i|ifSdS(NsMissionPart('%s',%d,%s)(sselfsnamestimesactors(sself((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/levelsdata.pys__repr__As(s__name__s __module__s__init__s__repr__(((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/levelsdata.pys MissionPart;s s LevelsDatacBsYtZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z e d„Z RS( stParse a text string into a Levels data structure On success, self.missions holds the missions array. cCsad|_t|ƒ}|itjo d‚nt|_|i|ƒ|io|i ƒndS(NisError parsing levels_text.( sselfsdebugs NestedDicts levels_texts levels_dictsdatasNonesmissionss parse_levelssshow(sselfs levels_texts levels_dict((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/levelsdata.pys__init__Ls      c CsU|i} | idƒoti| dƒ|_n d|_| idƒo| d|_n|i dt ƒ|i |iht ƒx7|ii ƒD]&}|i|}|i |gt ƒq“W| idƒo| d|_n|i dt ƒ|i |iht ƒg|_x|ii ƒD]ó} |i| }|idƒo(|d}|d=|i |dt ƒn|i d | ƒq|id ƒoti|d ƒ}|d =n|i d | ƒq|id ƒoG|d }|d =|ii|ƒ o|i d || fƒqq)n|i d| ƒqt}|idƒoÍ|diƒ}ti|ƒ\}}ti|ƒ}|d=|ii|ƒ o|i d|| fƒqq |ii|ƒo|i|\} }n|i d|ƒqt |dd| |d|ƒ}n|idƒo(|d}|d=|i |ht ƒnh}g}x`|i ƒD]R}||}g}|idƒoti|dƒ}|d=nd}|i d| |fƒxÕ|i ƒ|i ƒD]½} |ii| ƒo|i| \} }n|i d| ƒqÕt}d}|i| ƒo‘|| iƒ} ti| ƒ}t-|ƒdjoAti.|dƒ}t-|ƒdjoti|dƒ}qÂqS|i d| | |fƒnŽ|| iƒ} ti| ƒ}t-|ƒdjoAti.|dƒ}t-|ƒdjoti|dƒ}qSn|i d| | |fƒ| |jo d}nd}|i0t | ||| ||ƒƒqÕW|i0t1|||ƒƒq]W|i2|i3ƒt-|ƒdjo|i d| t ƒn|ii0t4| ||||ƒƒqW|ii2|i5ƒt-|iƒdjo|i dt ƒndS(sËTurn a nested dict into a levels array of the form: (mission1, mission2, ... missionn) The input dictionary, levels_dict, must have the following keys defined: components: a dict of names and tuples, tuples = (class parameters) missions: a dict of dictionaries, one for each mission The missions dict must have the following keys defined: name: the name of the mission order: the order in the list of missions objective: an component name (destroying this completes mission) Other keys in this dict are of the form component_name: probability per frame sdebugisactorssMissing 'actors' dictionary.smissionssMissing 'missions' dictionary.s descriptionssNo mission description for %s.sordersNo order for %s.s objectives5Objective %s not in actors dictionary for mission %s.sNo objective for %s.srefuels8Refuel Actor %s not in actors dictionary for mission %s.s)Refuel Actor %s not in Actors dictionary.f1.0isdefaultstimes%s: %s has no time value.s"Actor %s not in Actors dictionary.f0.0s%No probability for Actor %s in %s:%s.s'Mission %s must have at least one part!s#There must be at least one mission!N(6s levels_dictsdatas levels_datashas_keysstringsatoisselfsdebugs actors_dictserrorsFATALs check_typeskeysskeysvalues missions_dictsmissionss mission_names mission_datas mission_descrs mission_ordersmission_objectivesNones refuel_actorsstrips refuel_strssplitsrefuel_actor_namesrefuel_interval_strsrefuel_intervals class_stringsparameters_sequencesActorsdefault_part_datas default_partspartss part_names part_datasactorsstimesactors max_instancess probabilitysactor_data_strsactor_data_listslensatofs is_objectivesappends MissionPartssorts compare_partssMissionscompare_missions(sselfs levels_dicts refuel_strs probabilitysdefault_part_datasactor_data_lists part_datasparameters_sequences mission_orders class_stringsactor_data_strsactors levels_datas mission_names mission_datasrefuel_interval_strsactorss mission_descrsmission_objectivesrefuel_actor_names max_instancess refuel_actorskeys is_objectives part_namespartssvaluestimes default_partsrefuel_interval((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/levelsdata.pys parse_levels\sÖ               &cCs­|ioŸdGHx—|iD]ˆ}d|iGHd|iGHd|iGHdG|iGH|i}xF|D]>}d|i|i fGH|i }x|D]}dG|GHqŠWq_WqWndS(Ns Showing...s%s:s descr: %ss order %ds refuel actor:s %s: time: %ds ( sselfsdebugsmissionssmissionsnames descriptionsorders refuel_actorspartsspartstimesactorssactor(sselfsmissionsactorspartssactorsspart((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/levelsdata.pysshows         cCs>|i|ijodSn |i|ijodSndSdS(s%compare two part arrays- sort by timeiÿÿÿÿiiN(sxstimesy(sselfsxsy((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/levelsdata.pys compare_parts#s cCs>|i|ijodSn |i|ijodSndSdS(s)compare two mission arrays- sort by orderiÿÿÿÿiiN(sxsordersy(sselfsxsy((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/levelsdata.pyscompare_missions,s cCsØt|ƒ}|thƒjo3h}x"|iƒD]}||||