home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 56 / CDPowerplay56Disc2.iso / demos / blade / data1.cab / Program_Executable_Files / Lib / GameState.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2000-10-27  |  54.8 KB  |  1,187 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 1.5)
  3.  
  4. import Bladex
  5. import BBLib
  6. import time
  7. import types
  8. import cPickle
  9. import os
  10. import shutil
  11. import string
  12. import GameStateAux
  13. import ObjStore
  14. NotSave = []
  15. ModulesToBeSaved = []
  16.  
  17. def GetPickFileName(data):
  18.     filename = None
  19.     
  20.     try:
  21.         filename = '%s/%s.dat' % ('f', data.persistent_id())
  22.     except:
  23.         if type(data) in (types.DictionaryType, types.ListType, types.TupleType):
  24.             filename = '%s/%s%s.dat' % ('f', str(type(data)), ObjStore.GetNewId())
  25.         elif type(data) == types.FunctionType:
  26.             filename = '%s/%s%s.dat' % ('f', data.func_name, ObjStore.GetNewId())
  27.         elif type(data) == types.MethodType:
  28.             filename = '%s/%s%s.dat' % ('f', data.im_func.func_name, ObjStore.GetNewId())
  29.         else:
  30.             filename = '%s/%s%s.dat' % ('f', str(type(data)), ObjStore.GetNewId())
  31.  
  32.     return filename
  33.  
  34.  
  35. def SavePickDataAux(file, aux_dir, data, assign):
  36.     if data:
  37.         filename = GetPickFileName(data)
  38.         restorestring = 'GameStateAux.GetPickledData("%s")' % (filename,)
  39.         file.write(assign % (restorestring,))
  40.         GameStateAux.SavePickData(filename, data)
  41.     
  42.  
  43.  
  44. def SavePickledObjects(file, aux_dir):
  45.     filename = '%s/%s.dat' % (aux_dir, 'DinObjs')
  46.     ObjStore.CheckStore()
  47.     funcfile = open(filename, 'wt')
  48.     p = cPickle.Pickler(funcfile)
  49.     p.dump(ObjStore.ObjectsStore)
  50.     funcfile.close()
  51.     file.write('GameStateAux.GetPickledObjects("%s")\n' % (filename,))
  52.  
  53.  
  54. class EntityState:
  55.     
  56.     def __init__(self, entity):
  57.         self.CreationProps = { }
  58.         self.SpecialProps = { }
  59.         self.CreationProps['Name'] = entity.Name
  60.         self.CreationProps['Kind'] = entity.Kind
  61.         self.CreationProps['Position'] = entity.Position
  62.         self.SpecialProps['Data'] = entity.Data
  63.         self.SpecialProps['FrameFunc'] = entity.FrameFunc
  64.         self.SpecialProps['HitFunc'] = entity.HitFunc
  65.         self.SpecialProps['InflictHitFunc'] = entity.InflictHitFunc
  66.         self.SpecialProps['DamageFunc'] = entity.DamageFunc
  67.         self.SpecialProps['TimerFunc'] = entity.TimerFunc
  68.         self.SpecialProps['HearFunc'] = entity.HearFunc
  69.         self.SpecialProps['UseFunc'] = entity.UseFunc
  70.         self.SpecialProps['SeeFunc'] = entity.SeeFunc
  71.         self.SpecialProps['StickFunc'] = entity.StickFunc
  72.         self.InWorld = entity.InWorld
  73.  
  74.     
  75.     def SaveCreation(self, file, aux_dir):
  76.         file.write('\n\n\n')
  77.         file.write('o=Bladex.CreateEntity("%s","%s",%f,%f,%f)\n' % (self.CreationProps['Name'], self.CreationProps['Kind'], self.CreationProps['Position'][0], self.CreationProps['Position'][1], self.CreationProps['Position'][2]))
  78.  
  79.     
  80.     def SaveSpecialProperties(self, file, aux_dir):
  81.         name = self.CreationProps['Name']
  82.         for i in self.SpecialProps.keys():
  83.             curr_func = self.SpecialProps[i]
  84.             f_rest_string = 'o.%s=' % i
  85.             SavePickDataAux(file, aux_dir, curr_func, f_rest_string + '%s\n')
  86.         
  87.  
  88.     
  89.     def SaveStatePass2(self, file, aux_dir):
  90.         if self.SpecialProps.keys():
  91.             save = 1
  92.         
  93.         if save or self.SpecialProps['Data']:
  94.             file.write('o=Bladex.GetEntity("%s")\n' % self.CreationProps['Name'])
  95.             self.SaveSpecialProperties(file, aux_dir)
  96.             data = self.SpecialProps['Data']
  97.             SavePickDataAux(file, aux_dir, data, 'o.Data=%s\n\n\n\n')
  98.         
  99.  
  100.  
  101.  
  102. class EntitySpotState(EntityState):
  103.     
  104.     def __init__(self, entity):
  105.         EntityState.__init__(self, entity)
  106.  
  107.  
  108.  
  109. class EntityObjectState(EntityState):
  110.     
  111.     def __init__(self, entity):
  112.         EntityState.__init__(self, entity)
  113.  
  114.  
  115.  
  116. class EntityPhysicState(EntityObjectState):
  117.     
  118.     def __init__(self, entity):
  119.         EntityObjectState.__init__(self, entity)
  120.         self.SpecialProps['OnStopFunc'] = entity.OnStopFunc
  121.  
  122.     
  123.     def SaveSpecialProperties(self, file, aux_dir):
  124.         EntityState.SaveSpecialProperties(self, file, aux_dir)
  125.         SavePickDataAux(file, aux_dir, self.SpecialProps['OnStopFunc'], 'o.OnStopFunc=%s\n')
  126.  
  127.  
  128.  
  129. class EntityWeaponState(EntityPhysicState):
  130.     
  131.     def __init__(self, entity):
  132.         EntityPhysicState.__init__(self, entity)
  133.         self.SpecialProps['HitShieldFunc'] = entity.HitShieldFunc
  134.  
  135.     
  136.     def SaveSpecialProperties(self, file, aux_dir):
  137.         EntityState.SaveSpecialProperties(self, file, aux_dir)
  138.         SavePickDataAux(file, aux_dir, self.SpecialProps['HitShieldFunc'], 'o.HitShieldFunc=%s\n')
  139.  
  140.  
  141.  
  142. class EntityActorState(EntityObjectState):
  143.     
  144.     def __init__(self, entity):
  145.         EntityObjectState.__init__(self, entity)
  146.  
  147.  
  148.  
  149. class EntityArrowState(EntityWeaponState):
  150.     
  151.     def __init__(self, entity):
  152.         EntityWeaponState.__init__(self, entity)
  153.  
  154.  
  155.  
  156. class EntityParticleSystemState(EntityState):
  157.     
  158.     def __init__(self, entity):
  159.         EntityState.__init__(self, entity)
  160.  
  161.  
  162.  
  163. class EntityFireState(EntityState):
  164.     
  165.     def __init__(self, entity):
  166.         EntityState.__init__(self, entity)
  167.  
  168.  
  169.  
  170. class EntityCameraState(EntityState):
  171.     
  172.     def __init__(self, entity):
  173.         EntityState.__init__(self, entity)
  174.  
  175.  
  176.  
  177. class EntitySlidingAreaState(EntityState):
  178.     
  179.     def __init__(self, entity):
  180.         EntityState.__init__(self, entity)
  181.         self.Displacement = entity.Displacement
  182.         self.SpecialProps['OnStopFunc'] = entity.OnStopFunc
  183.         self.Limit = entity.DisplacementLimit
  184.         self.V_D = entity.V_D
  185.         self.A_D = entity.A_D
  186.         self.IsStopped = entity.IsStopped
  187.  
  188.     
  189.     def SaveProperties(self, file, aux_dir):
  190.         EntityState.SaveProperties(self, file, aux_dir)
  191.         file.write('o.Displacement=%s\n' % str(self.Displacement))
  192.  
  193.     
  194.     def SaveSpecialProperties(self, file, aux_dir):
  195.         EntityState.SaveSpecialProperties(self, file, aux_dir)
  196.         SavePickDataAux(file, aux_dir, self.SpecialProps['OnStopFunc'], 'o.OnStopFunc=%s\n')
  197.  
  198.  
  199.  
  200. class EntityWaterState(EntityState):
  201.     
  202.     def __init__(self, entity):
  203.         EntityState.__init__(self, entity)
  204.         self.SpecialProps['TouchFluidFunc'] = entity.TouchFluidFunc
  205.  
  206.     
  207.     def SaveSpecialProperties(self, file, aux_dir):
  208.         EntityState.SaveSpecialProperties(self, file, aux_dir)
  209.         SavePickDataAux(file, aux_dir, self.SpecialProps['TouchFluidFunc'], 'o.TouchFluidFunc=%s\n')
  210.  
  211.  
  212.  
  213. class EntitySoundState(EntityState):
  214.     
  215.     def __init__(self, entity):
  216.         EntityState.__init__(self, entity)
  217.  
  218.  
  219.  
  220. class EntityMagicMissileState(EntityState):
  221.     
  222.     def __init__(self, entity):
  223.         EntityState.__init__(self, entity)
  224.  
  225.  
  226.  
  227. class EntityElectricBoltState(EntityState):
  228.     
  229.     def __init__(self, entity):
  230.         EntityState.__init__(self, entity)
  231.  
  232.  
  233.  
  234. class EntityPoolState(EntityState):
  235.     
  236.     def __init__(self, entity):
  237.         EntityState.__init__(self, entity)
  238.  
  239.  
  240.  
  241. class EntityParticleState(EntityState):
  242.     
  243.     def __init__(self, entity):
  244.         EntityState.__init__(self, entity)
  245.  
  246.  
  247.  
  248. class EntityDecalState(EntityState):
  249.     
  250.     def __init__(self, entity):
  251.         EntityState.__init__(self, entity)
  252.  
  253.  
  254.  
  255. class EntityLavaState(EntityState):
  256.     
  257.     def __init__(self, entity):
  258.         EntityState.__init__(self, entity)
  259.         self.SpecialProps['TouchFluidFunc'] = entity.TouchFluidFunc
  260.  
  261.     
  262.     def SaveSpecialProperties(self, file, aux_dir):
  263.         EntityState.SaveSpecialProperties(self, file, aux_dir)
  264.         SavePickDataAux(file, aux_dir, self.SpecialProps['TouchFluidFunc'], 'o.TouchFluidFunc=%s\n')
  265.  
  266.  
  267.  
  268. class EntityBipedState(EntityState):
  269.     
  270.     def __init__(self, entity):
  271.         EntityState.__init__(self, entity)
  272.  
  273.  
  274.  
  275. class EntityPersonState(EntityBipedState):
  276.     
  277.     def __init__(self, entity):
  278.         EntityBipedState.__init__(self, entity)
  279.         self.SpecialProps['EnterPrimaryAAFunc'] = entity.EnterPrimaryAAFunc
  280.         self.SpecialProps['EnterSecondaryAAFunc'] = entity.EnterSecondaryAAFunc
  281.         self.SpecialProps['EnterCloseFunc'] = entity.EnterCloseFunc
  282.         self.SpecialProps['EnterLargeFunc'] = entity.EnterLargeFunc
  283.         self.SpecialProps['AnmEndedFunc'] = entity.AnmEndedFunc
  284.         self.SpecialProps['DelayNoSeenFunc'] = entity.DelayNoSeenFunc
  285.         self.SpecialProps['RouteEndedFunc'] = entity.RouteEndedFunc
  286.         self.SpecialProps['ImHurtFunc'] = entity.ImHurtFunc
  287.         self.SpecialProps['ImDeadFunc'] = entity.ImDeadFunc
  288.         self.SpecialProps['EnemyDeadFunc'] = entity.EnemyDeadFunc
  289.         self.SpecialProps['NoAllowedAreaFunc'] = entity.NoAllowedAreaFunc
  290.         self.SpecialProps['EnemyNoAllowedAreaFunc'] = entity.EnemyNoAllowedAreaFunc
  291.         self.SpecialProps['CharSeeingEnemyFunc'] = entity.CharSeeingEnemyFunc
  292.         self.SpecialProps['AnmTranFunc'] = entity.AnmTranFunc
  293.         self.SpecialProps['TakeFunc'] = entity.TakeFunc
  294.         self.SpecialProps['ThrowFunc'] = entity.ThrowFunc
  295.         self.SpecialProps['MutilateFunc'] = entity.MutilateFunc
  296.         self.SpecialProps['CombatDistFlag'] = entity.CombatDistFlag
  297.         self.InitInventory(entity)
  298.  
  299.     
  300.     def SaveSpecialProperties(self, file, aux_dir):
  301.         pass
  302.  
  303.     
  304.     def InitInventory(self, entity):
  305.         import Actions
  306.         inv = entity.GetInventory()
  307.         self.Inventory = { }
  308.         self.Inventory['Objects'] = []
  309.         for i in range(inv.nKindObjects):
  310.             for name in Actions.GetListOfObjectsAt(inv, i):
  311.                 self.Inventory['Objects'].append(name)
  312.             
  313.         
  314.         self.Inventory['Weapons'] = []
  315.         for i in range(inv.nWeapons):
  316.             self.Inventory['Weapons'].append(inv.GetWeapon(i))
  317.         
  318.         self.Inventory['Shields'] = []
  319.         for i in range(inv.nShields):
  320.             self.Inventory['Shields'].append(inv.GetShield(i))
  321.         
  322.         self.Inventory['Quivers'] = []
  323.         for i in range(inv.nQuivers):
  324.             self.Inventory['Quivers'].append(inv.GetQuiver(i))
  325.         
  326.         self.Inventory['Keys'] = []
  327.         for i in range(inv.nKeys):
  328.             self.Inventory['Keys'].append(inv.GetKey(i))
  329.         
  330.         self.Inventory['SpecialKeys'] = []
  331.         for i in range(inv.nSpecialKeys):
  332.             self.Inventory['SpecialKeys'].append(inv.GetSpecialKey(i))
  333.         
  334.         self.Inventory['Tablets'] = []
  335.         for i in range(inv.nTablets):
  336.             self.Inventory['Tablets'].append(inv.GetTablet(i))
  337.         
  338.         self.Inventory['InvLeft'] = entity.InvLeft
  339.         self.Inventory['InvLeft2'] = entity.InvLeft2
  340.         self.Inventory['InvRight'] = entity.InvRight
  341.         self.Inventory['InvLeftBack'] = entity.InvLeftBack
  342.         self.Inventory['InvRightBack'] = entity.InvRightBack
  343.  
  344.     
  345.     def SaveStatePass2(self, file, aux_dir):
  346.         EntityBipedState.SaveStatePass2(self, file, aux_dir)
  347.         file.write('\no=Bladex.GetEntity("%s")\n' % self.CreationProps['Name'])
  348.         file.write('inv=o.GetInventory()\n')
  349.         for i in self.Inventory['Objects']:
  350.             file.write('Actions.ExtendedTakeObject(inv,"%s")\n' % (i,))
  351.         
  352.         for i in self.Inventory['Weapons']:
  353.             file.write('GameStateAux.AddWeaponToInventory(inv,"%s")\n' % (i,))
  354.         
  355.         for i in self.Inventory['Shields']:
  356.             file.write('inv.AddShield("%s")\n' % (i,))
  357.             real_ent = Bladex.GetEntity(i)
  358.             
  359.             try:
  360.                 a = real_ent.Data.brkobjdata
  361.                 file.write('Breakings.SetBreakableWS("%s")\n' % (i,))
  362.             except Exception:
  363.                 0
  364.                 exc = 0
  365.                 self.Inventory['Shields']
  366.                 print 'Exception in SaveStatePass2', exc
  367.             except:
  368.                 self.Inventory['Weapons']
  369.  
  370.         
  371.         for i in self.Inventory['Quivers']:
  372.             file.write('GameStateAux.AddQuiverToInventory(inv,"%s")\n' % (i,))
  373.         
  374.         for i in self.Inventory['Keys']:
  375.             file.write('inv.AddKey("%s")\n' % (i,))
  376.         
  377.         for i in self.Inventory['SpecialKeys']:
  378.             file.write('inv.AddSpecialKey("%s")\n' % (i,))
  379.         
  380.         for i in self.Inventory['Tablets']:
  381.             file.write('inv.AddTablet("%s")\n' % (i,))
  382.         
  383.  
  384.  
  385. v__entities_saved = 0
  386.  
  387. class EntitiesStateAux:
  388.     
  389.     def __init__(self, EntClass):
  390.         self.EntClass = EntClass
  391.         self.Entities = []
  392.  
  393.     
  394.     def AddEntityState(self, entity):
  395.         self.Entities.append(self.EntClass(entity))
  396.  
  397.     
  398.     def SaveStates(self, file, aux_dir):
  399.         file.write('# There are %d entities\n\n' % (len(self.Entities),))
  400.         for i in self.Entities:
  401.             i.SaveState(file, aux_dir)
  402.         
  403.  
  404.     
  405.     def SaveStatesPass2(self, file, aux_dir):
  406.         global v__entities_saved
  407.         for i in self.Entities:
  408.             v__entities_saved = v__entities_saved + 1
  409.             i.SaveStatePass2(file, aux_dir)
  410.         
  411.  
  412.     
  413.     def DestroyEntities(self):
  414.         for i in self.Entities:
  415.             pass
  416.         
  417.         self.Entities = []
  418.  
  419.  
  420.  
  421. class EntitiesState:
  422.     
  423.     def __init__(self):
  424.         self.State = { }
  425.         self.State['Entity Object'] = EntitiesStateAux(EntityObjectState)
  426.         self.State['Entity PhysicObject'] = EntitiesStateAux(EntityPhysicState)
  427.         self.State['Entity Weapon'] = EntitiesStateAux(EntityWeaponState)
  428.         self.State['Entity Arrow'] = EntitiesStateAux(EntityArrowState)
  429.         self.State['Entity Actor'] = EntitiesStateAux(EntityActorState)
  430.         self.State['Entity Biped'] = EntitiesStateAux(EntityBipedState)
  431.         self.State['Entity Person'] = EntitiesStateAux(EntityPersonState)
  432.         self.State['Entity Spot'] = EntitiesStateAux(EntitySpotState)
  433.         self.State['Entity PrtclSys'] = EntitiesStateAux(EntityParticleSystemState)
  434.         self.State['Entity Particle System D1'] = EntitiesStateAux(EntityParticleSystemState)
  435.         self.State['Entity Particle System D2'] = EntitiesStateAux(EntityParticleSystemState)
  436.         self.State['Entity Particle System D3'] = EntitiesStateAux(EntityParticleSystemState)
  437.         self.State['Entity Particle System Dobj'] = EntitiesStateAux(EntityParticleSystemState)
  438.         self.State['Entity Particle System Dperson'] = EntitiesStateAux(EntityParticleSystemState)
  439.         self.State['Entity Fire'] = EntitiesStateAux(EntityFireState)
  440.         self.State['Entity Camera'] = EntitiesStateAux(EntityCameraState)
  441.         self.State['Entity Water'] = EntitiesStateAux(EntityWaterState)
  442.         self.State['Entity Sound'] = EntitiesStateAux(EntitySoundState)
  443.         self.State['Entity Magic Missile'] = EntitiesStateAux(EntityMagicMissileState)
  444.         self.State['Entity ElectricBolt'] = EntitiesStateAux(EntityElectricBoltState)
  445.         self.State['Entity Pool'] = EntitiesStateAux(EntityPoolState)
  446.         self.State['Entity Particle'] = EntitiesStateAux(EntityParticleState)
  447.         self.State['Entity Decal'] = EntitiesStateAux(EntityDecalState)
  448.         self.State['Entity Lava'] = EntitiesStateAux(EntityLavaState)
  449.         self.State['Entity Sliding Area'] = EntitiesStateAux(EntitySlidingAreaState)
  450.  
  451.     
  452.     def GetState(self):
  453.         for i in range(Bladex.nEntities()):
  454.             entity = Bladex.GetEntity(i)
  455.             kind = entity.Kind
  456.             state = None
  457.             if kind in self.State.keys():
  458.                 self.State[kind].AddEntityState(entity)
  459.             elif entity.Static:
  460.                 self.State['Entity Object'].AddEntityState(entity)
  461.             elif entity.Person:
  462.                 self.State['Entity Person'].AddEntityState(entity)
  463.             elif entity.Weapon:
  464.                 self.State['Entity Weapon'].AddEntityState(entity)
  465.             elif entity.Arrow:
  466.                 self.State['Entity Arrow'].AddEntityState(entity)
  467.             elif entity.Physic:
  468.                 self.State['Entity PhysicObject'].AddEntityState(entity)
  469.             
  470.         
  471.  
  472.     
  473.     def SaveStatePass2(self, file, aux_dir):
  474.         for i in self.State.keys():
  475.             file.write('\n\n')
  476.         
  477.  
  478.     
  479.     def DestroyEntities(self):
  480.         for i in self.State.keys():
  481.             pass
  482.         
  483.  
  484.  
  485.  
  486. def CreateEntAux(obj_tuple, obj_kind):
  487.     obj = Bladex.GetEntity(obj_tuple[0])
  488.     if not obj:
  489.         BBLib.ReadBOD(obj_tuple[2])
  490.         obj = Bladex.CreateEntity(obj_tuple[0], obj_tuple[1], 0, 0, 0, obj_kind)
  491.     
  492.     return obj
  493.  
  494.  
  495. class SectorState:
  496.     
  497.     def __init__(self):
  498.         self.Index = -1
  499.         self.OnEnter = None
  500.         self.OnLeave = None
  501.         self.OnHit = None
  502.         self.OnWalkOn = None
  503.         self.OnWalkOut = None
  504.         self.Active = None
  505.         self.ActiveSurface = None
  506.         self.Save = 0
  507.         self.BreakInfo = None
  508.  
  509.     
  510.     def GetState(self, idx):
  511.         import Sparks
  512.         s = Bladex.GetSector(idx)
  513.         if s:
  514.             self.Index = s.Index
  515.             self.OnEnter = s.OnEnter
  516.             self.OnLeave = s.OnLeave
  517.             self.OnWalkOn = s.OnWalkOn
  518.             self.OnWalkOut = s.OnWalkOut
  519.             self.Active = s.Active
  520.             self.ActiveSurface = s.ActiveSurface
  521.             self.BreakInfo = s.BreakInfo
  522.             if Sparks.GenericSectorOnHit != s.OnHit and s.OnHit != None:
  523.                 self.OnHit = s.OnHit
  524.             
  525.             if s.Active != 1 and s.BreakInfo and s.OnEnter and s.OnLeave and s.OnWalkOn and s.OnWalkOut or self.OnHit:
  526.                 self.Save = 1
  527.             
  528.         
  529.  
  530.     
  531.     def SaveState(self, file, aux_dir):
  532.         import Sparks
  533.         if self.Save:
  534.             file.write('s=Bladex.GetSector(%d)\n' % self.Index)
  535.             self._SectorState__SaveCallbackFunction(file, 'OnEnter', aux_dir, self.OnEnter)
  536.             self._SectorState__SaveCallbackFunction(file, 'OnLeave', aux_dir, self.OnLeave)
  537.             self._SectorState__SaveCallbackFunction(file, 'OnHit', aux_dir, self.OnHit)
  538.             self._SectorState__SaveCallbackFunction(file, 'OnWalkOn', aux_dir, self.OnWalkOn)
  539.             self._SectorState__SaveCallbackFunction(file, 'OnWalkOut', aux_dir, self.OnWalkOut)
  540.             file.write('s.Active=%d\n' % self.Active)
  541.             if self.BreakInfo:
  542.                 file.write('s.BreakInfo=%s\n' % str(self.BreakInfo))
  543.             
  544.             file.write('\n\n')
  545.         
  546.  
  547.     
  548.     def __SaveCallbackFunction(self, file, cbname, aux_dir, function):
  549.         r_cb_str = 's.%s=' % (cbname,)
  550.         SavePickDataAux(file, aux_dir, function, r_cb_str + '%s\n')
  551.  
  552.  
  553.  
  554. class MapState:
  555.     
  556.     def __init__(self):
  557.         self.SectorsState = []
  558.  
  559.     
  560.     def GetState(self):
  561.         nSectors = Bladex.nSectors()
  562.         for i in range(nSectors):
  563.             s = SectorState()
  564.             s.GetState(i)
  565.         
  566.  
  567.     
  568.     def SaveState(self, file, aux_dir):
  569.         for i in self.SectorsState:
  570.             i.SaveState(file, aux_dir)
  571.         
  572.  
  573.  
  574.  
  575. class TriggerSectorState:
  576.     
  577.     def __init__(self):
  578.         self.Index = -1
  579.         self.OnEnter = None
  580.         self.OnLeave = None
  581.         self.Data = None
  582.         self.Name = None
  583.         self.Grupo = None
  584.         self.Points = []
  585.         self.FloorHeight = 0
  586.         self.RoofHeight = 0
  587.  
  588.     
  589.     def GetState(self, idx):
  590.         self.Name = Bladex.GetTriggerSectorName(idx)
  591.         self.Index = idx
  592.         self.OnEnter = Bladex.GetTriggerSectorFunc(self.Name, 'OnEnter')
  593.         self.OnLeave = Bladex.GetTriggerSectorFunc(self.Name, 'OnLeave')
  594.         self.Data = Bladex.GetTriggerSectorData(self.Name)
  595.         self.Grupo = Bladex.GetTriggerSectorGroup(self.Name)
  596.         self.Points = Bladex.GetTriggerSectorPoints(self.Name)
  597.         self.FloorHeight = Bladex.GetTriggerSectorFloorHeight(self.Name)
  598.         self.RoofHeight = Bladex.GetTriggerSectorRoofHeight(self.Name)
  599.  
  600.     
  601.     def SaveState(self, file, aux_dir):
  602.         file.write('Bladex.AddTriggerSector("%s","%s",%f,%f,%s)\n' % (self.Name, self.Grupo, self.FloorHeight, self.RoofHeight, self.Points))
  603.         SavePickDataAux(file, aux_dir, self.OnEnter, 'Bladex.SetTriggerSectorFunc("' + self.Name + '","OnEnter",%s)\n')
  604.         SavePickDataAux(file, aux_dir, self.OnLeave, 'Bladex.SetTriggerSectorFunc("' + self.Name + '","OnLeave",%s)\n')
  605.         SavePickDataAux(file, aux_dir, self.Data, 'Bladex.SetTriggerSectorData("' + self.Name + '",%s)\n')
  606.         file.write('\n\n')
  607.  
  608.  
  609.  
  610. class TriggersState:
  611.     
  612.     def __init__(self):
  613.         self.SectorsState = []
  614.  
  615.     
  616.     def GetState(self):
  617.         nSectors = Bladex.nTriggerSectors()
  618.         for i in range(nSectors):
  619.             s = TriggerSectorState()
  620.             s.GetState(i)
  621.             self.SectorsState.append(s)
  622.         
  623.  
  624.     
  625.     def SaveState(self, file, aux_dir):
  626.         for i in self.SectorsState:
  627.             i.SaveState(file, aux_dir)
  628.         
  629.  
  630.  
  631.  
  632. class WorldState:
  633.     
  634.     def __init__(self):
  635.         self.EntitiesState = EntitiesState()
  636.         self.MapState = MapState()
  637.         self.TriggersState = TriggersState()
  638.  
  639.     
  640.     def GetState(self):
  641.         self.EntitiesState.GetState()
  642.         self.MapState.GetState()
  643.  
  644.     
  645.     def SaveState(self, filename):
  646.         import os
  647.         aux_dir = os.path.splitext(filename)[0] + '_files'
  648.         if os.path.exists(aux_dir):
  649.             shutil.rmtree(aux_dir)
  650.         
  651.         
  652.         try:
  653.             os.mkdir(aux_dir)
  654.         except:
  655.             pass
  656.  
  657.         self.SaveAutoBODs(aux_dir)
  658.         file_data_aux = open('%s/%saux' % (aux_dir, 'aux'), 'wt')
  659.         file_data_aux.write(Bladex.GetCurrentMap())
  660.         file_data_aux.close()
  661.         file = open(filename, 'wt')
  662.         file.write('############################################################\n')
  663.         file.write('#   Blade Game State %s\n' % (filename,))
  664.         file.write('#   Do not modify\n')
  665.         file.write('#   File created %s \n' % (time.asctime(time.gmtime(time.time())),))
  666.         file.write('############################################################\n\n\n\n')
  667.         file.write('import Bladex\n')
  668.         file.write('import BBLib\n')
  669.         file.write('import cPickle\n')
  670.         file.write('import GameStateAux\n')
  671.         file.write('import Reference\n')
  672.         file.write('import Breakings\n')
  673.         file.write('import Sounds\n')
  674.         file.write('import Actions\n')
  675.         file.write('import os\n')
  676.         file.write('import sys\n')
  677.         file.write('import darfuncs\n\n\n\n')
  678.         file.write('import LoadBar\n\n\n\n')
  679.         file.write('############################################################\n')
  680.         file.write('#\n\n\n')
  681.         file.write('Bladex.BeginLoadGame()\n')
  682.         file.write('__load_bar=LoadBar.AutoProgressBar(%d)\n' % (Bladex.nEntities() / 5,))
  683.         file.write('GameStateAux.aux_dir="%s"\n' % (aux_dir,))
  684.         file.write('InNewMap=0\n')
  685.         file.write('if Bladex.GetCurrentMap()!="%s":\n' % (Bladex.GetCurrentMap(),))
  686.         file.write('  InNewMap=1\n')
  687.         file.write('print "InNewMap",InNewMap\n')
  688.         file.write('Bladex.SetCurrentMap("%s")\n' % (Bladex.GetCurrentMap(),))
  689.         file.write('sys.path.insert(0,os.getcwd())\n')
  690.         file.write('Bladex.SetSaveInfo(%s)\n' % str(Bladex.GetSaveInfo()))
  691.         ResFiles = self.GetMMPFiles()
  692.         file.write('__load_bar.Increment("MMPs")\n')
  693.         file.write('GameStateAux.LoadMMPs(%s)\n' % (str(ResFiles),))
  694.         file.write('__load_bar.Increment()\n')
  695.         ResFiles = self.GetBMPFiles()
  696.         file.write('__load_bar.Increment("BMPs")\n')
  697.         self.SaveList('GameStateAux.LoadBMPs(%s)\n', ResFiles, file)
  698.         file.write('__load_bar.Increment()\n')
  699.         ResFiles = self.GetAlphaBMPFiles()
  700.         file.write('__load_bar.Increment("AlphaBMPs")\n')
  701.         self.SaveList('GameStateAux.LoadAlphaBMPs(%s)\n', ResFiles, file)
  702.         file.write('__load_bar.Increment()\n')
  703.         file.write('__load_bar.Increment("Sounds")\n')
  704.         file.write('if InNewMap:\n')
  705.         file.write('  Bladex.LoadSoundDataBase("%s/Sounds.sdb")\n' % (aux_dir,))
  706.         Bladex.SaveSoundDataBase('%s/Sounds.sdb' % (aux_dir,))
  707.         file.write('__load_bar.Increment("AutoBODs")\n')
  708.         file.write('BBLib.LoadAutoBODData("%s/AutoBOD.dat")\n\n\n' % (aux_dir,))
  709.         file.write('Bladex.BodInspector()\n')
  710.         psys_data_file = aux_dir + '/psys_data.dat'
  711.         Bladex.SaveParticleSystemsData(psys_data_file)
  712.         file.write('__load_bar.Increment("Particle Systems")\n')
  713.         file.write('Bladex.LoadParticleSystemsData("%s")\n' % (psys_data_file,))
  714.         file.write('__load_bar.Increment("ObjStore")\n')
  715.         file.write('Bladex.SetTime(%f)\n' % (Bladex.GetTime(),))
  716.         self.SaveTimers(file)
  717.         file.write('if InNewMap:\n')
  718.         file.write('  Bladex.LoadWorld("%s")\n' % (Bladex.GetWorldFileName(),))
  719.         file.write('__load_bar.Increment()\n')
  720.         file.write('import ObjStore\n')
  721.         file.write('ObjStore.StoreIndex=%d\n' % (ObjStore.StoreIndex,))
  722.         file.write('import BODInit\n')
  723.         file.write('BODInit.Init()\n\n')
  724.         file.write('__load_bar.Increment()\n')
  725.         file.write('import PickInit\n')
  726.         file.write('PickInit.Init()\n\n')
  727.         file.write('__load_bar.Increment("Pick")\n')
  728.         file.write('if InNewMap:\n')
  729.         file.write('  __load_bar.Increment("SolidMask")\n')
  730.         file.write('  import SolidMask\n')
  731.         file.write('  SolidMask.Init()\n')
  732.         file.write('  __load_bar.Increment("Material")\n')
  733.         file.write('  import Material\n')
  734.         file.write('  Material.Init()\n')
  735.         file.write('__load_bar.Increment("AniSound")\n')
  736.         file.write('import AniSound\n')
  737.         file.write('__load_bar.Increment("anm_def")\n')
  738.         file.write('import anm_def\n')
  739.         file.write('anm_def.Init()\n')
  740.         file.write('__load_bar.Increment("StepSounds")\n')
  741.         file.write('import StepSounds\n')
  742.         file.write('StepSounds.Init()\n')
  743.         file.write('__load_bar.Increment("Enemies")\n')
  744.         file.write('import Enemies\n')
  745.         file.write('Enemies.Init()\n')
  746.         file.write('__load_bar.Increment("Biped")\n')
  747.         file.write('import Biped\n')
  748.         file.write('Biped.Init()\n')
  749.         file.write('__load_bar.Increment("anm_conv")\n')
  750.         file.write('import anm_conv\n')
  751.         file.write('anm_conv.Init()\n')
  752.         file.write('__load_bar.Increment("Anm_Mdf")\n')
  753.         file.write('import Anm_Mdf\n')
  754.         file.write('Anm_Mdf.Init()\n')
  755.         file.write('execfile("../../Scripts/AutoGenTextures.py")\n')
  756.         file.write('__load_bar.Increment()\n')
  757.         file.write('print "About to load World"\n')
  758.         file.write('try:\n')
  759.         file.write('  execfile("ActorsInit.py")\n')
  760.         file.write('except IOError:\n')
  761.         file.write('  print "Can\xd5\xb4 find ActorsInit.py"\n\n\n')
  762.         combustion_data_file = aux_dir + '/combustion_data.dat'
  763.         Bladex.SaveCombustionData(combustion_data_file)
  764.         file.write('print "About to load Combustion data"\n')
  765.         file.write('if InNewMap:\n')
  766.         file.write('  Bladex.LoadCombustionData("%s")\n' % (combustion_data_file,))
  767.         file.write('__load_bar.Increment()\n')
  768.         ent_data_file = aux_dir + '/ent_data.dat'
  769.         Bladex.SaveEntitiesData(ent_data_file)
  770.         file.write('__load_bar.Increment("Entities")\n')
  771.         file.write('Bladex.LoadEntitiesData("%s")\n' % (ent_data_file,))
  772.         file.write('__load_bar.Increment()\n')
  773.         import os
  774.         import sys
  775.         file.write('import sys\n')
  776.         file.write('import os\n')
  777.         str_path = os.getcwd()
  778.         adj_str_path = string.replace(str_path, '\\\\', '/')
  779.         adj_str_path = string.replace(adj_str_path, '\\', '/')
  780.         file.write('sys.path.append("%s")\n\n' % (adj_str_path,))
  781.         file.write('__load_bar.Increment("DefFuncs")\n')
  782.         file.write('try:\n')
  783.         file.write('  execfile("DefFuncs.py")\n')
  784.         file.write('except IOError:\n')
  785.         file.write('  print "Can\xb4t find DefFuncs.py"\n\n\n')
  786.         file.write('__load_bar.Increment()\n')
  787.         file.write('try:\n')
  788.         file.write('  char=Bladex.GetEntity("Player1")\n')
  789.         file.write('  execfile("MusicEvents.py")\n')
  790.         file.write('except IOError:\n')
  791.         file.write('  print "Can\xd5\xb4 find MusicEvents.py"\n\n\n')
  792.         file.write('__load_bar.Increment()\n')
  793.         file.write('try:\n')
  794.         file.write('  execfile("TextureMaterials.py")\n')
  795.         file.write('except IOError:\n')
  796.         file.write('  print "Can\xd5\xb4 find TextureMaterials.py"\n\n\n')
  797.         file.write('__load_bar.Increment()\n')
  798.         file.write('\n')
  799.         file.write('GameStateAux.InitGameState("%s")\n\n' % (aux_dir,))
  800.         file.write('__load_bar.Increment()\n')
  801.         file.write('__load_bar.Increment("Modules")\n')
  802.         self.SaveModules(file)
  803.         file.write('__load_bar.Increment("Vars")\n')
  804.         self.SaveVars(file)
  805.         file.write('__load_bar.Increment("Sounds")\n')
  806.         self.SaveSounds(file)
  807.         file.write('__load_bar.Increment("Sectors")\n')
  808.         self.SaveSectors(file)
  809.         file.write('__load_bar.Increment("Entities")\n')
  810.         self.SaveEntities(file)
  811.         file.write('__load_bar.Increment("PickledObjects")\n')
  812.         SavePickledObjects(file, aux_dir)
  813.         file.write('__load_bar.Increment("Python Objects")\n')
  814.         self.SaveObjects(file, aux_dir)
  815.         file.write('__load_bar.Increment("MapState")\n')
  816.         self.MapState.SaveState(file, aux_dir)
  817.         file.write('__load_bar.Increment("TriggerState")\n')
  818.         self.TriggersState.GetState()
  819.         self.TriggersState.SaveState(file, aux_dir)
  820.         file.write('__load_bar.Increment("State pass2")\n')
  821.         self.EntitiesState.SaveStatePass2(file, aux_dir)
  822.         file.write('__load_bar.Increment()\n')
  823.         file.write('print "About set objects relations"\n')
  824.         file.write('__load_bar.Increment("Scheduled functions")\n')
  825.         self.SaveCompVars(file, aux_dir)
  826.         file.write('__load_bar.Increment("Global comp vars")\n')
  827.         self.SaveScheduledFuncs(file)
  828.         file.write('__load_bar.Increment("AfterFrame functions")\n')
  829.         self.SaveAfterFrameFuncs(file)
  830.         GameStateAux.SaveExtraDataAux(file, aux_dir)
  831.         self.SaveModulesToBeSaved(file, aux_dir, ModulesToBeSaved)
  832.         GameStateAux.EndGameState(aux_dir)
  833.         file.write('\n')
  834.         file.write('Bladex.SetCombos("Player1",%s)' % (Bladex.GetCombos('Player1'),))
  835.         file.write('\n')
  836.         file.write('# Scorer Data init\n')
  837.         file.write('#\n')
  838.         file.write('import Scorer\n')
  839.         file.write('Scorer.ActivateScorer()\n\n')
  840.         file.write('Scorer.SetVisible(1)\n\n')
  841.         file.write('__load_bar.Increment()\n')
  842.         file.write('import CharStats\n')
  843.         file.write('__load_bar.Increment()\n')
  844.         file.write('import GameText\n')
  845.         file.write('GameText.SetLanguage("English")\n')
  846.         file.write('import DefaultScorerData\n')
  847.         file.write('DefaultScorerData.Init()\n\n')
  848.         file.write('__load_bar.Increment()\n')
  849.         file.write('# Inicio del personaje y sus marcadores\n')
  850.         file.write('char=Bladex.GetEntity("Player1")\n')
  851.         file.write('Scorer.SetLevelLimits(0,CharStats.GetCharExperienceCost(char.CharType,char.Level))\n')
  852.         file.write('Scorer.SetLevelBarValue(char.PartialLevel)\n')
  853.         file.write('#Scorer.SetLevelValue(char.Level)\n')
  854.         file.write('#\n')
  855.         file.write('# Controls ( keyboard,mouse...) stuff\n')
  856.         file.write('#\n')
  857.         file.write('execfile("../../Scripts/InputInit.py")\n')
  858.         file.write('import acts\n')
  859.         file.write('acts.InitBindings("Player1")\n')
  860.         file.write('__load_bar.Increment()\n')
  861.         file.write('try:\n')
  862.         file.write('  execfile("../../Scripts/Control.py")\n')
  863.         file.write('  print "BladeInit -> Executed Control.py"\n')
  864.         file.write('except:\n')
  865.         file.write('  execfile("../../Scripts/DefControl.py")\n')
  866.         file.write('  print "BladeInit -> Executed DefControl.py"\n\n')
  867.         file.write('__load_bar.Increment()\n')
  868.         file.write('#\n')
  869.         file.write('# Menu\n')
  870.         file.write('#\n')
  871.         file.write('#execfile("../../Scripts/Menu.py")\n')
  872.         file.write('import Menu\n')
  873.         file.write('Menu.InitMenuKeys()\n')
  874.         file.write('__load_bar.Increment()\n')
  875.         file.write('execfile("../../Scripts/Globals.py")\n')
  876.         import GotoMapVars
  877.         file.write('import GotoMapVars\n')
  878.         file.write('GotoMapVars.Get2DMapValuesAux(%s)\n' % (str(GotoMapVars.Set2DMapValuesAux()),))
  879.         import Reference
  880.         file.write('Reference.PYTHON_DEBUG=%d\n' % (Reference.PYTHON_DEBUG,))
  881.         file.write('if Reference.PYTHON_DEBUG >= 1:\n')
  882.         file.write('############### DEBUG LEVEL ONE ###############\n')
  883.         file.write('  execfile("..\\..\\Scripts\\DebugControl.py")\n')
  884.         file.write('if Reference.PYTHON_DEBUG >= 2:\n')
  885.         file.write('############### DEBUG LEVEL TWO ###############\n')
  886.         file.write('  Bladex.SetCallCheck(3)\n')
  887.         file.write('else:\n')
  888.         file.write('  Bladex.SetCallCheck(0)\n')
  889.         file.write('__load_bar.Increment("AnmCameras")\n')
  890.         file.write('import AnmCameras\n')
  891.         file.write('AnmCameras.Init()\n')
  892.         file.write('Bladex.DoneLoadGame()\n')
  893.         file.write('GameStateAux.CleanLoadTemp()\n\n\n')
  894.         file.write('try:\n')
  895.         file.write('  execfile("Positions.py")\n')
  896.         file.write('except IOError:\n')
  897.         file.write('  print "Can\xd5\xb4 find Positions.py"\n\n\n')
  898.         file.write('__load_bar.Clear()\n')
  899.         file.write('del __load_bar\n')
  900.         file.write('Bladex.SetTime(%f)\n' % (Bladex.GetTime(),))
  901.         file.write('#   Good Bye! (Enjoy The Silence)\n')
  902.         file.close()
  903.  
  904.     
  905.     def SaveCompVars(self, file, aux_dir):
  906.         globs = GetGlobals()
  907.         globs_dict = { }
  908.         global_vars = self.GetGlobalsAux(types.DictionaryType, globs)
  909.         for i in global_vars:
  910.             globs_dict[str(i[0])] = i[1]
  911.         
  912.         global_vars = self.GetGlobalsAux(types.ListType, globs)
  913.         for i in global_vars:
  914.             globs_dict[str(i[0])] = i[1]
  915.         
  916.         global_vars = self.GetGlobalsAux(types.TupleType, globs)
  917.         for i in global_vars:
  918.             globs_dict[str(i[0])] = i[1]
  919.         
  920.         filename = '%s/%s.dat' % (aux_dir, 'Globs')
  921.         globfile = open(filename, 'wt')
  922.         p = cPickle.Pickler(globfile)
  923.         p.dump(globs_dict)
  924.         globfile.close()
  925.         file.write("GameStateAux.LoadGlobalCompVars('%s',globals())\n" % (filename,))
  926.  
  927.     
  928.     def SaveVars(self, file):
  929.         '''Saves variables in the global scope.'''
  930.         globs = GetGlobals()
  931.         global_vars = self.GetGlobalsAux(types.IntType, globs)
  932.         file.write('\n# Integer variables\n')
  933.         for i in global_vars:
  934.             file.write('%s=%s\n' % (str(i[0]), str(i[1])))
  935.         
  936.         global_vars = self.GetGlobalsAux(types.FloatType, globs)
  937.         file.write('\n# Float variables\n')
  938.         for i in global_vars:
  939.             file.write('%s=%s\n' % (str(i[0]), str(i[1])))
  940.         
  941.         global_vars = self.GetGlobalsAux(types.StringType, globs)
  942.         file.write('\n# String variables\n')
  943.         for i in global_vars:
  944.             pass
  945.         
  946.  
  947.     
  948.     def SaveSounds(self, file):
  949.         '''Saves sound objects in the global scope.'''
  950.         gmadlig = Bladex.CreateSound('../../sounds/golpe_maderamed.wav', 'GolpeMaderaMediana')
  951.         snd_vars = self.GetGlobalsAux(type(gmadlig))
  952.         file.write('\n# Sound objects\n')
  953.         snd_vars_names = []
  954.         for i in snd_vars:
  955.             snd_vars_names.append((str(i[0]), i[1].Name))
  956.         
  957.         for i in snd_vars_names:
  958.             file.write('%s=Bladex.GetSound("%s")\n' % (i[0], i[1]))
  959.         
  960.  
  961.     
  962.     def SaveEntities(self, file):
  963.         '''Saves entity objects in the global scope.'''
  964.         ent = Bladex.GetEntity(0)
  965.         ent_vars = self.GetGlobalsAux(type(ent))
  966.         file.write('\n# Entity objects\n')
  967.         ent_vars_names = []
  968.         for i in ent_vars:
  969.             
  970.             try:
  971.                 ent_vars_names.append((str(i[0]), i[1].Name))
  972.             except AttributeError:
  973.                 0
  974.                 0
  975.                 ent_vars
  976.             except:
  977.                 0
  978.  
  979.         
  980.         for i in ent_vars_names:
  981.             file.write('%s=Bladex.GetEntity("%s")\n' % (i[0], i[1]))
  982.         
  983.         file.write('\n\n')
  984.  
  985.     
  986.     def SaveObjects(self, file, aux_dir):
  987.         '''Saves objects (from Lib/Object.py) in the global scope.'''
  988.         import Objects
  989.         obj = Objects.DinObj()
  990.         obj_vars = self.GetGlobalsAux(type(obj))
  991.         file.write('\n# Object objects\n')
  992.         obj_vars_names = []
  993.         omit_objs = [
  994.             '__main__.Flecha',
  995.             'state',
  996.             'InputManager']
  997.         for i in obj_vars:
  998.             print i
  999.             if i is not self and str(i[1].__class__):
  1000.                 if str(i[0]) not in omit_objs:
  1001.                     obj_vars_names.append((str(i[0]), i[1]))
  1002.                 else:
  1003.                     print 'Omited', str(i[0])
  1004.             
  1005.         
  1006.         for i in obj_vars_names:
  1007.             
  1008.             try:
  1009.                 SavePickDataAux(file, aux_dir, i[1], i[0] + '=%s\n')
  1010.             except Exception:
  1011.                 0
  1012.                 exc = 0
  1013.                 obj_vars_names
  1014.                 print 'Failed saving of', i
  1015.                 print exc
  1016.             except:
  1017.                 0
  1018.  
  1019.         
  1020.         file.write('\n\n')
  1021.  
  1022.     
  1023.     def SaveSectors(self, file):
  1024.         '''Saves sector objects in the global scope.'''
  1025.         sec = Bladex.GetSector(0)
  1026.         sec_vars = self.GetGlobalsAux(type(sec))
  1027.         file.write('\n\n# Sector objects\n')
  1028.         sec_vars_names = []
  1029.         for i in sec_vars:
  1030.             sec_vars_names.append((str(i[0]), i[1].Index))
  1031.         
  1032.         for i in sec_vars_names:
  1033.             file.write('%s=Bladex.GetSector(%d)\n' % (i[0], i[1]))
  1034.         
  1035.         file.write('\n\n')
  1036.  
  1037.     
  1038.     def SaveModulesToBeSaved(self, file, aux_dir, ModulesToBeSaved):
  1039.         for i in ModulesToBeSaved:
  1040.             filename = '%s/%sData.dat' % (aux_dir, i.__name__)
  1041.             file.write('__load_bar.Increment("Module")\n')
  1042.             i.SaveData(filename)
  1043.             file.write('import %s\n' % (i.__name__,))
  1044.             file.write('%s.LoadData("%s")\n\n' % (i.__name__, filename))
  1045.         
  1046.  
  1047.     
  1048.     def SaveScheduledFuncs(self, file):
  1049.         exclude_funcs = ('PowWidgetDraw', 'PeriodicAutoSelectPlayer1', 'PlayerRestoreEnergy', 'RepeatPeriodicSound', 'NextText', 'ClearText', 'PeriodicSound::PlayPeriodic')
  1050.         n_sched_funcs = Bladex.GetnScheduledFuncs()
  1051.         print 'SaveScheduledFuncs(). There are ', n_sched_funcs, 'functions.'
  1052.         for i in range(n_sched_funcs):
  1053.             f = Bladex.GetScheduledFunc(i)
  1054.             if f[2] not in exclude_funcs:
  1055.                 func_string = 'GameStateAux.LoadFunctionAux(%s)' % (GameStateAux.SaveFunctionAux(f[0]),)
  1056.                 filename = GetPickFileName(f[1])
  1057.                 func_parms = 'GameStateAux.GetPickledData("%s")' % (filename,)
  1058.                 print 'SaveScheduledFuncs() ', filename, f[1], f[2]
  1059.                 GameStateAux.SavePickData(filename, f[1])
  1060.                 file.write("Bladex.AddScheduledFunc(%d,%s,%s,'%s')\n" % (f[3], func_string, func_parms, f[2]))
  1061.             
  1062.         
  1063.  
  1064.     
  1065.     def SaveAfterFrameFuncs(self, file):
  1066.         exclude_funcs = ('InterpinterpLevelBar', 'InterpinterpStrengthBar', 'InterpinterpEnergyBar', 'InterpShields', 'InterpFadeText', 'InterpWeapons', 'InterpObjects', 'DefaultSelectionData', 'Fade')
  1067.         n_afrm_funcs = Bladex.GetnAfterFrameFuncs()
  1068.         print 'SaveAfterFrameFuncs(). There are ', n_afrm_funcs, 'functions.'
  1069.         for i in range(n_afrm_funcs):
  1070.             f_name = Bladex.GetAfterFrameFuncName(i)
  1071.             if f_name not in exclude_funcs:
  1072.                 f = Bladex.GetAfterFrameFunc(f_name)
  1073.                 filename = GetPickFileName(f)
  1074.                 func_string = 'GameStateAux.GetPickledData("%s")' % (filename,)
  1075.                 GameStateAux.SavePickData(filename, f)
  1076.                 print 'SaveAfterFrameFuncs() ', filename, f, f_name, func_string
  1077.                 file.write("Bladex.SetAfterFrameFunc('%s',%s)\n" % (f_name, func_string))
  1078.             
  1079.         
  1080.  
  1081.     
  1082.     def SaveModules(self, file):
  1083.         '''Saves modules in the global scope.'''
  1084.         import string
  1085.         OmitModules = [
  1086.             '__builtins__',
  1087.             'Scorer',
  1088.             'Menu',
  1089.             'GameText',
  1090.             'GameState',
  1091.             'GameStateAux']
  1092.         global_mods = self.GetGlobalsAux(types.ModuleType)
  1093.         file.write('\n# Modules\n')
  1094.         for i in global_mods:
  1095.             pass
  1096.         
  1097.  
  1098.     
  1099.     def GetGlobalsAux(self, req_type, globs = None):
  1100.         g = None
  1101.         if globs:
  1102.             g = globs
  1103.         else:
  1104.             g = GetGlobals()
  1105.         elems = []
  1106.         for i in g.items():
  1107.             pass
  1108.         
  1109.         return elems
  1110.  
  1111.     
  1112.     def SaveAutoBODs(self, path):
  1113.         name = '%s/AutoBOD.dat' % (path,)
  1114.         BBLib.SaveAutoBODData(name)
  1115.  
  1116.     
  1117.     def SaveList(self, command, lista, file):
  1118.         nchunks = len(lista) / 5
  1119.         for i in range(nchunks):
  1120.             lolimit = 5 * i
  1121.             l = lista[lolimit:lolimit + 5]
  1122.             file.write(command % (str(l),))
  1123.         
  1124.  
  1125.     
  1126.     def __AuxGetResFiles(self, kind):
  1127.         RM = BBLib.GetResourceManager()
  1128.         nRes = RM.NResources(kind)
  1129.         ResFiles = []
  1130.         for i in range(nRes):
  1131.             res_file = RM.GetResourceFile(kind, i)
  1132.         
  1133.         return ResFiles
  1134.  
  1135.     
  1136.     def __AuxGetResFilesAndNames(self, kind):
  1137.         RM = BBLib.GetResourceManager()
  1138.         nRes = RM.NResources(kind)
  1139.         ResFiles = []
  1140.         for i in range(nRes):
  1141.             res_file = RM.GetResourceFile(kind, i)
  1142.             res_name = RM.GetResourceName(kind, i)
  1143.         
  1144.         return ResFiles
  1145.  
  1146.     
  1147.     def SaveTimers(self, file):
  1148.         file.write('\n# Timers\n')
  1149.         nTimers = Bladex.GetnTimers()
  1150.         for i in range(nTimers):
  1151.             cTimer = Bladex.GetTimerInfo(i)
  1152.             file.write('Bladex.CreateTimer("%s",%f)\n\n' % (cTimer[0], cTimer[1]))
  1153.         
  1154.         file.write('\n')
  1155.  
  1156.     
  1157.     def GetMMPFiles(self):
  1158.         return self._WorldState__AuxGetResFiles(BBLib.B_CID_BITMAP)
  1159.  
  1160.     
  1161.     def GetBODFiles(self):
  1162.         return self._WorldState__AuxGetResFiles(BBLib.B_CID_OBJDSCR)
  1163.  
  1164.     
  1165.     def GetBMPFiles(self):
  1166.         return self._WorldState__AuxGetResFilesAndNames(BBLib.B_CID_BMP)
  1167.  
  1168.     
  1169.     def GetAlphaBMPFiles(self):
  1170.         return self._WorldState__AuxGetResFilesAndNames(BBLib.B_CID_ALPHABMP)
  1171.  
  1172.  
  1173.  
  1174. def GetGlobals():
  1175.     import sys
  1176.     
  1177.     try:
  1178.         1 + ''
  1179.     except:
  1180.         frame = sys.exc_info()[2].tb_frame.f_back
  1181.  
  1182.     while frame:
  1183.         globs = frame.f_globals
  1184.         frame = frame.f_back
  1185.     return globs
  1186.  
  1187.