home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 56 / CDPowerplay56Disc2.iso / demos / blade / data1.cab / Program_Executable_Files / Lib / DMusic.py < prev    next >
Encoding:
Text File  |  2000-10-27  |  6.6 KB  |  265 lines

  1. import Bladex
  2. import whrandom
  3. import pdb
  4.  
  5. enemiesInCombat=0;
  6.  
  7.  
  8. debug_dmusic=0
  9.  
  10.  
  11. #To store the handles of enemies facing me!
  12. dictEnemiesInCombatHandles={}
  13.  
  14.  
  15. TIMEDELAY=2.0
  16.  
  17. dictDMusics={}
  18. dictExcludedEntitites={}
  19.  
  20. def getRnd(strKind):
  21.     if not dictDMusics.has_key(strKind):
  22.         return -1
  23.  
  24.     tidDMusics = dictDMusics[strKind]
  25.     return tidDMusics[whrandom.randint( 0 , len(tidDMusics)-1 )]
  26.  
  27. def newKind( strKind, tidEvent ):
  28.     dictDMusics[strKind] = tidEvent
  29.  
  30. def excludeEnt( strEnt ):
  31.     dictExcludedEntitites[strEnt] = 0
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42. #---------------------------------------------------------------------
  43. #---------------------------------------------------------------------
  44. #---------------------------------------------------------------------
  45.  
  46. def MusicWarperDelayNoSeenFunc(strName):
  47.     me = Bladex.GetEntity(strName)
  48.  
  49.     if debug_dmusic==1:
  50.         print "MusicWarperDelayNoSeenFunc"
  51.  
  52.     decEnemies(strName)
  53.  
  54.     me.Data.DelayNoSeenFuncMusicBackUp(strName)
  55.  
  56.     RemoveMusicWarperDelayNoSeenFunc(strName)
  57.  
  58.     if debug_dmusic==1:
  59.         print "MusicWarperDelayNoSeenFunc executed"
  60.  
  61.  
  62. def RestoreMusicWarperDelayNoSeenFunc(strName):
  63.     me = Bladex.GetEntity(strName)
  64.  
  65.     if me.Data.imusic_noseen_warp==0:
  66.         print "Unexpected situation in RestoreMusicWarperDelayNoSeenFunc"
  67.         return
  68.  
  69.     me.Data.DelayNoSeenFuncMusicBackUp=me.DelayNoSeenFunc
  70.     me.DelayNoSeenFunc=MusicWarperDelayNoSeenFunc
  71.  
  72.     if debug_dmusic==1:
  73.         print "RestoreMusicWarperDelayNoSeenFunc executed fine"
  74.  
  75.  
  76. def AddMusicWarperDelayNoSeenFunc(strName):
  77.     me = Bladex.GetEntity(strName)
  78.  
  79.     if me.Data.imusic_noseen_warp==1:
  80.         print "Unexpected situation in AddMusicWarperDelayNoSeenFunc"
  81.         return
  82.  
  83.     me.Data.DelayNoSeenFuncMusicBackUp=me.DelayNoSeenFunc
  84.     me.DelayNoSeenFunc=MusicWarperDelayNoSeenFunc
  85.     me.Data.imusic_noseen_warp=1
  86.  
  87.     if debug_dmusic==1:
  88.         print "AddMusicWarperDelayNoSeenFunc executed fine"
  89.  
  90.  
  91.  
  92.  
  93.  
  94. def RemoveMusicWarperDelayNoSeenFunc(strName):
  95.     me = Bladex.GetEntity(strName)
  96.  
  97.  
  98.     if me.Data.imusic_noseen_warp==0:
  99.         print "Unexpected situation in RemoveMusicWarperDelayNoSeenFunc"
  100.         return
  101.  
  102.     if not me.Data or not me.Data.DelayNoSeenFuncMusicBackUp:
  103.         print " CRITICAL->Unexpected situation in RemoveMusicWarperDelayNoSeenFunc"
  104.         return
  105.  
  106.  
  107.     me.DelayNoSeenFunc=me.Data.DelayNoSeenFuncMusicBackUp
  108.     me.Data.DelayNoSeenFuncMusicBackUp=0
  109.     me.Data.imusic_noseen_warp=0
  110.  
  111.  
  112.  
  113.  
  114.  
  115. #---------------------------------------------------------------------
  116. #---------------------------------------------------------------------
  117. #---------------------------------------------------------------------
  118.  
  119. def incEnemies(strName):
  120.     global enemiesInCombat
  121.  
  122.     me = Bladex.GetEntity(strName)
  123.  
  124.     if me.Data.imusic_noseen_warp==1:
  125.         RemoveMusicWarperDelayNoSeenFunc(strName)
  126.         return
  127.  
  128.  
  129.     if dictEnemiesInCombatHandles.has_key(strName):
  130.         #print "incEnemies-> Avoid to add an enemy IN list!!!" + strName
  131.         return
  132.  
  133.     #print "INC-> enemiesInCombat were " , enemiesInCombat , " removing " + strName
  134.     enemiesInCombat = enemiesInCombat + 1
  135.     ent = Bladex.GetEntity(strName)
  136.     handle=getRnd(ent.Name)
  137.     if handle==-1:
  138.         handle=getRnd(ent.Kind)
  139.     else:
  140.         if debug_dmusic==1:
  141.             print "Handle 4 a SPECIFIC character , NOT race"
  142.  
  143.  
  144.     Bladex.ExeMusicEvent(handle)
  145.     dictEnemiesInCombatHandles[strName]=handle
  146.  
  147.     if debug_dmusic==1:
  148.         print "IncEn-> enemies:",enemiesInCombat
  149.  
  150.  
  151. def decEnemies(strName):
  152.     global enemiesInCombat
  153.  
  154.     if not dictEnemiesInCombatHandles.has_key(strName):
  155.         #print "decEnemies-> Avoid to remove an enemy NOT in list!!!" + strName
  156.         return
  157.  
  158.  
  159.     enemiesInCombat = enemiesInCombat - 1
  160.  
  161.     del dictEnemiesInCombatHandles[strName]
  162.  
  163.     if (enemiesInCombat==0) : 
  164.         Bladex.ExeMusicEvent(-1)
  165.     else:
  166.         #Tocar musica con siguiente importancia
  167.         max_prio=-1
  168.         curr_handle=-1
  169.  
  170.         for x in dictEnemiesInCombatHandles.keys():
  171.             test_handle=dictEnemiesInCombatHandles[x]
  172.  
  173.             tmp_ent = Bladex.GetEntity(x)
  174.             if not tmp_ent or tmp_ent.Life==0:
  175.                 print "Dmusic.decEnemies() -> Deleting music entry due to death?"
  176.                 del dictEnemiesInCombatHandles[x]
  177.             elif (Bladex.GetMusicEventPriority(test_handle)>max_prio):
  178.                 max_prio=Bladex.GetMusicEventPriority(test_handle)
  179.                 curr_handle=test_handle
  180.                 tmp_ent=Bladex.GetEntity(x)
  181.                 if tmp_ent==None:
  182.                     print "ERROR in decEnemies() . CAll Jose ASAP!!!!!"
  183.  
  184.         #print "FORCED ExeMusicEvent in decEnemies 4 " , strName
  185.         Bladex.ExeMusicEvent(curr_handle,1)
  186.  
  187.     if debug_dmusic==1:
  188.         print "DecEn-> enemies:",enemiesInCombat
  189.  
  190.  
  191. def InformDead(strName):
  192.     if not dictEnemiesInCombatHandles.has_key(strName):
  193.         return
  194.     else:
  195.         if debug_dmusic==1:
  196.             print "Dmusic.InformDead calling decEnemies!!!"
  197.         decEnemies(strName)
  198.  
  199.  
  200. def notifyCombat(strName) :
  201.     global enemiesInCombat
  202.  
  203.     ent = Bladex.GetEntity(strName)
  204.  
  205.     if (not dictDMusics.has_key(ent.Name) and not dictDMusics.has_key(ent.Kind)) : return            # el tipo de enemigo no tiene asignada la musica
  206.     if (dictExcludedEntitites.has_key(ent.Name)) : return    # el tipo de enemigo esta en la lista de exclusion
  207.  
  208.  
  209.     if (not ent.InCombat) :
  210.         if ent.Life>0:
  211.             AddMusicWarperDelayNoSeenFunc(strName)
  212.  
  213.             # NOTA IMP : Quityar las dos lineas anteriores y poner en su lugar la siguiente 
  214.             #para que la musica interactiva se "vaya" al desencararse el personaje , no al de un rato
  215.             # Por si habia bugs... ( el metodo alternativo es mucho mas robusto)
  216.  
  217.             #decEnemies(strName)
  218.         else:
  219.             decEnemies(strName)
  220.     else:
  221.         incEnemies(strName)
  222.  
  223.  
  224.  
  225.  
  226. #
  227. #
  228. #
  229. #
  230. #
  231. #
  232. #
  233. #
  234. #
  235. #
  236.  
  237. def AddCombatMusic(race_name , file_name , priority , pre_open=0 , volume=1.0 , fin_t=1.0 , fout_t=1.0):
  238.     tag_name= race_name + "_dmusic"
  239.  
  240.     file_len=len(file_name)
  241.  
  242.     if (file_name[file_len-1]=='v' or file_name[file_len-1]=='V') and (file_name[file_len-2]=='a' or file_name[file_len-2]=='A') and (file_name[file_len-3]=='w' or file_name[file_len-3]=='W'):
  243.         print "Adding WAV for dinamic music for " + race_name + " , pre_open flag is " + str(pre_open)
  244.         Bladex.AddMusicEventWAV( tag_name , file_name , fin_t , fout_t , volume , priority, 0, -1 , pre_open)
  245.     elif (file_name[file_len-1]=='3') and (file_name[file_len-2]=='p' or file_name[file_len-2]=='P') and (file_name[file_len-3]=='m' or file_name[file_len-3]=='M'):
  246.         print "Adding MP3 for dinamic music for " + race_name
  247.         if pre_open==1:
  248.             print "AddCombatMusic->ERROR, trying to pre open a MP3 file"
  249.         Bladex.AddMusicEventMP3( tag_name , file_name , fin_t , fout_t , volume , priority, 0, -1 )
  250.  
  251.     tidMusics = ( Bladex.GetMusicEvent(tag_name) , )
  252.     newKind( race_name , tidMusics )
  253.  
  254.  
  255. def ExcludeMusicFor(ent_name):    
  256.     excludeEnt( ent_name)
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.