Advertisement
ZoriaRPG

int enemy::changetype(int newtype)

May 10th, 2020
1,340
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.46 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement