Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int enemy::changetype(int newtype)
- {
- zprint2("enemy::changetype\n");
- bool canchange = true, del = false;
- switch(family)
- {
- case eeAQUA:
- case eeMOLD:
- case eeMANHAN:
- case eeGLEEOK:
- case eeGHOMA:
- case eeLANM:
- case eeGANON:
- case eeDIG:
- case eePATRA:
- canchange = false; break;
- //if this family cannot be changed, abort
- default: break;
- }
- sprite *e=NULL;
- if ( canchange )
- {
- switch(newtype)
- {
- //Fixme: possible enemy memory leak. (minor)
- case eeWALK:
- e = new eStalfos(*this, false, false, newtype);
- del = true;
- break;
- case eeLEV:
- e = new eLeever(*this, false, false, newtype);
- del = true;
- break;
- case eeTEK:
- e = new eTektite(*this, false, false, newtype);
- del = true;
- break;
- case eePEAHAT:
- e = new ePeahat(*this, false, false, newtype);
- del = true;
- break;
- case eeZORA:
- e = new eZora(*this, false, false, newtype);
- del = true;
- break;
- case eeGHINI:
- e = new eGhini(*this, false, false, newtype);
- del = true;
- break;
- case eeKEESE:
- e = new eKeese(*this, false, false, newtype);
- del = true;
- break;
- case eeWIZZ:
- e = new eWizzrobe(*this, false, false, newtype);
- del = true;
- break;
- case eePROJECTILE:
- e = new eProjectile(*this, false, false, newtype);
- del = true;
- break;
- case eeWALLM:
- e = new eWallM(*this, false, false, newtype);
- del = true;
- break;
- case eeAQUA:
- case eeMOLD:
- case eeMANHAN:
- case eeGLEEOK:
- case eeGHOMA:
- case eeLANM:
- case eeGANON:
- case eeDIG:
- case eePATRA:
- zprint2("Cannot change an enemy type into a boss.\n");
- break;
- case eeGUY:
- //e = new eNPC(*this, false, false);
- zprint2("Cannot change an enemy type into a guy.\n");
- del = true;
- break;
- case eeFAIRY:
- e = new eItemFairy(*this, false, false, newtype);
- del = true;
- break;
- case eeFIRE:
- e = new eFire(*this, false, false, newtype);
- del = true;
- break;
- case eeOTHER:
- e = new eOther(*this, false, false, newtype);
- del = true;
- break;
- case eeSCRIPT01:
- case eeSCRIPT02:
- case eeSCRIPT03:
- case eeSCRIPT04:
- case eeSCRIPT05:
- case eeSCRIPT06:
- case eeSCRIPT07:
- case eeSCRIPT08:
- case eeSCRIPT09:
- case eeSCRIPT10:
- case eeSCRIPT11:
- case eeSCRIPT12:
- case eeSCRIPT13:
- case eeSCRIPT14:
- case eeSCRIPT15:
- case eeSCRIPT16:
- case eeSCRIPT17:
- case eeSCRIPT18:
- case eeSCRIPT19:
- case eeSCRIPT20:
- {
- //if ( !get_bit(quest_rules, qr_SCRIPT_FRIENDLY_ENEMY_TYPES) )
- //{
- e = new eScript(*this, false, false, newtype);
- del = true;
- //}
- break;
- }
- case eeFFRIENDLY01:
- case eeFFRIENDLY02:
- case eeFFRIENDLY03:
- case eeFFRIENDLY04:
- case eeFFRIENDLY05:
- case eeFFRIENDLY06:
- case eeFFRIENDLY07:
- case eeFFRIENDLY08:
- case eeFFRIENDLY09:
- case eeFFRIENDLY10:
- {
- //if ( !get_bit(quest_rules, qr_SCRIPT_FRIENDLY_ENEMY_TYPES) )
- //{
- e = new eFriendly(*this, false, false, newtype);
- del = true;
- //}
- break;
- }
- case eeSPINTILE:
- e = new eSpinTile(*this, false, false, newtype);
- del = true;
- break;
- // and these enemies use the misc10/misc2 value
- case eeROCK:
- e = new eRock(*this, false, false, newtype);
- del = true;
- break;
- case eeTRAP:
- e = new eTrap(*this, false, false, newtype);
- del = true;
- break;
- case eeDONGO:
- e = new eDodongo(*this, false, false, newtype);
- del = true;
- break;
- case eeNONE:
- e = new eTrigger(*this, false, false, newtype);
- del = true;
- break;
- }
- if(e!=NULL)
- {
- if(guys.add(e))
- {
- sprite *newguy = guys.spr(guys.Count()-1);
- enemy *e2 = (enemy*)e;
- e2->family = newtype;
- newguy->scriptData.guyref = e2->getUID();
- newguy->scriptData.pc = ((newguy->scriptData.pc)+1);
- al_trace("newguy->scriptData.guyref: %d\n", newguy->scriptData.guyref);
- if(del)
- {
- for(word w = 0; w < guys.Count(); ++w)
- {
- if(guys.spr(w)->getUID() == getUID())
- {
- //guys.spr(w)->doscript = 0;
- //guys.del(w); //this crashes
- break;
- }
- }
- }
- return 1;
- }
- }
- }
- else zprint2("This type of npc (%d) cannot change its type.\n", family);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement