ZoriaRPG

int enemy::changetype(int newtype)

May 10th, 2020
1,239
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. int enemy::changetype(int newtype)
  2. {
  3.     zprint2("enemy::changetype\n");
  4.     bool canchange = true, del = false;
  5.     switch(family)
  6.     {
  7.         case eeAQUA:
  8.         case eeMOLD:
  9.         case eeMANHAN:
  10.         case eeGLEEOK:
  11.         case eeGHOMA:
  12.         case eeLANM:
  13.         case eeGANON:
  14.         case eeDIG:
  15.         case eePATRA:
  16.         canchange = false; break;
  17.            
  18.         //if this family cannot be changed, abort
  19.         default: break;
  20.        
  21.     }
  22.     sprite *e=NULL;
  23.    
  24.     if ( canchange )
  25.     {
  26.         switch(newtype)
  27.         {
  28.             //Fixme: possible enemy memory leak. (minor)
  29.             case eeWALK:
  30.             e = new eStalfos(*this, false, false, newtype);
  31.             del = true;
  32.             break;
  33.        
  34.             case eeLEV:
  35.             e = new eLeever(*this, false, false, newtype);
  36.             del = true;
  37.             break;
  38.        
  39.             case eeTEK:
  40.             e = new eTektite(*this, false, false, newtype);
  41.             del = true;
  42.             break;
  43.        
  44.             case eePEAHAT:
  45.             e = new ePeahat(*this, false, false, newtype);
  46.             del = true;
  47.             break;
  48.        
  49.             case eeZORA:
  50.             e = new eZora(*this, false, false, newtype);
  51.             del = true;
  52.             break;
  53.        
  54.             case eeGHINI:
  55.             e = new eGhini(*this, false, false, newtype);
  56.             del = true;
  57.             break;
  58.        
  59.             case eeKEESE:
  60.             e = new eKeese(*this, false, false, newtype);
  61.             del = true;
  62.             break;
  63.        
  64.             case eeWIZZ:
  65.             e = new eWizzrobe(*this, false, false, newtype);
  66.             del = true;
  67.             break;
  68.        
  69.             case eePROJECTILE:
  70.             e = new eProjectile(*this, false, false, newtype);
  71.             del = true;
  72.             break;
  73.        
  74.             case eeWALLM:
  75.             e = new eWallM(*this, false, false, newtype);
  76.             del = true;
  77.             break;
  78.        
  79.             case eeAQUA:
  80.             case eeMOLD:
  81.             case eeMANHAN:
  82.             case eeGLEEOK:
  83.             case eeGHOMA:
  84.             case eeLANM:
  85.             case eeGANON:
  86.             case eeDIG:
  87.             case eePATRA:
  88.             zprint2("Cannot change an enemy type into a boss.\n");
  89.             break;
  90.        
  91.             case eeGUY:
  92.             //e = new eNPC(*this, false, false);
  93.             zprint2("Cannot change an enemy type into a guy.\n");
  94.             del = true;
  95.             break;
  96.        
  97.             case eeFAIRY:
  98.             e = new eItemFairy(*this, false, false, newtype);
  99.             del = true;
  100.             break;
  101.        
  102.             case eeFIRE:
  103.             e = new eFire(*this, false, false, newtype);
  104.             del = true;
  105.             break;
  106.        
  107.             case eeOTHER:
  108.             e = new eOther(*this, false, false, newtype);
  109.             del = true;
  110.             break;
  111.        
  112.        
  113.             case eeSCRIPT01:
  114.             case eeSCRIPT02:
  115.             case eeSCRIPT03:
  116.             case eeSCRIPT04:
  117.             case eeSCRIPT05:
  118.             case eeSCRIPT06:
  119.             case eeSCRIPT07:
  120.             case eeSCRIPT08:
  121.             case eeSCRIPT09:
  122.             case eeSCRIPT10:
  123.             case eeSCRIPT11:
  124.             case eeSCRIPT12:
  125.             case eeSCRIPT13:
  126.             case eeSCRIPT14:
  127.             case eeSCRIPT15:
  128.             case eeSCRIPT16:
  129.             case eeSCRIPT17:
  130.             case eeSCRIPT18:
  131.             case eeSCRIPT19:
  132.             case eeSCRIPT20:
  133.             {
  134.                 //if ( !get_bit(quest_rules, qr_SCRIPT_FRIENDLY_ENEMY_TYPES) )
  135.                 //{
  136.                     e = new eScript(*this, false, false, newtype);
  137.                     del = true;
  138.                    
  139.                 //}
  140.                 break;
  141.             }
  142.                        
  143.             case eeFFRIENDLY01:
  144.             case eeFFRIENDLY02:
  145.             case eeFFRIENDLY03:
  146.             case eeFFRIENDLY04:
  147.             case eeFFRIENDLY05:
  148.             case eeFFRIENDLY06:
  149.             case eeFFRIENDLY07:
  150.             case eeFFRIENDLY08:
  151.             case eeFFRIENDLY09:
  152.             case eeFFRIENDLY10:
  153.             {
  154.                 //if ( !get_bit(quest_rules, qr_SCRIPT_FRIENDLY_ENEMY_TYPES) )
  155.                 //{
  156.                     e = new eFriendly(*this, false, false, newtype);
  157.                 del = true;
  158.                 //}
  159.                 break;
  160.                        
  161.             }  
  162.        
  163.             case eeSPINTILE:
  164.             e = new eSpinTile(*this, false, false, newtype);
  165.             del = true;
  166.             break;
  167.        
  168.             // and these enemies use the misc10/misc2 value
  169.             case eeROCK:
  170.             e = new eRock(*this, false, false, newtype);
  171.             del = true;
  172.             break;
  173.            
  174.             case eeTRAP:
  175.             e = new eTrap(*this, false, false, newtype);
  176.             del = true;
  177.             break;
  178.        
  179.             case eeDONGO:
  180.             e = new eDodongo(*this, false, false, newtype);
  181.             del = true;
  182.             break;
  183.        
  184.             case eeNONE:
  185.             e = new eTrigger(*this, false, false, newtype);
  186.             del = true;
  187.             break;
  188.         }
  189.         if(e!=NULL)
  190.         {
  191.             if(guys.add(e))
  192.             {
  193.                 sprite *newguy = guys.spr(guys.Count()-1);
  194.                 enemy *e2 = (enemy*)e;
  195.                 e2->family = newtype;
  196.                 newguy->scriptData.guyref = e2->getUID();
  197.                 newguy->scriptData.pc = ((newguy->scriptData.pc)+1);
  198.                
  199.                
  200.                
  201.                
  202.                 al_trace("newguy->scriptData.guyref: %d\n", newguy->scriptData.guyref);
  203.                
  204.                 if(del)
  205.                 {
  206.                     for(word w = 0; w < guys.Count(); ++w)
  207.                     {
  208.                         if(guys.spr(w)->getUID() == getUID())
  209.                         {
  210.                             //guys.spr(w)->doscript = 0;
  211.                             //guys.del(w); //this crashes
  212.                             break;
  213.                         }
  214.                     }
  215.                 }
  216.                 return 1;
  217.             }
  218.         }
  219.     }
  220.     else zprint2("This type of npc (%d) cannot change its type.\n", family);
  221.     return 0;
  222. }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×