home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 56 / CDPowerplay56Disc2.iso / demos / blade / data1.cab / Program_Executable_Files / Lib / GameState.py < prev    next >
Encoding:
Python Source  |  2000-10-27  |  45.5 KB  |  1,296 lines

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