// mimic.txt // A creature with this script will steal the abilities of its opponent. // It can be set to aquire only physical stats, magical stats, or both. // Note that since it does not change its level, it will remain weaker // than an opponant with a higher level than it. Also, it will not decrease // its own stats below their original values. After it has beaten an opponent // it loses whatever it gained from that opponent. // // Memory Cells: // Cell 0 - How creature moves. // 0 - If 0, wander randomly. // 1 - Stands still until a target appears. // 2 - Completely immobile, even if target appears. // Cell 1,2 - Stuff done flag. If both 0, nothing. Otherwise when this // is killed, set to 1. (Example: If cell 1 is 3 and cell 2 is 5, when // creature is killed, sets SDF(3,5) to 1.) // Cell 3 - Dialogue node to start with if talked to. if left at 0, this // character doesn't talk. // Cell 4 - What stats to aquire from enemy. // 0 - First group + physical // 1 - First group + magical // 2 - All // Cells 5-9 - Reserved for script's use: // 5 - Strength // 6 - Dexterity // 7 - Intelligence // 8 - Endurance // 9 - Melee Weapons begincreaturescript; variables; short target; short pol, bow, mis, har, def, asn, mag, pri, luc, qui, par, bla, gym, mry, res, eff, rip, sha; string text; body; beginstate INIT_STATE; if (get_memory_cell(0) == 2) set_mobility(ME,0); break; beginstate DEAD_STATE; // Set the appropriate stuff done flag for this character being dead if ((get_memory_cell(1) != 0) || (get_memory_cell(2) != 0)) set_flag(get_memory_cell(1),get_memory_cell(2),1); break; beginstate START_STATE; // if I have a target for some reason, go attack it if (target_ok()) { if (dist_to_char(get_target()) <= 16) set_state(3); else set_target(ME,-1); } // Look for a target, attack it if visible if (select_target(ME,8,0)) { target = -1; set_state_continue(4); } // Have I been hit? Strike back! if (who_hit_me() >= 0) { set_target(ME,who_hit_me()); target = -1; set_state_continue(4); } // Otherwise, just peacefully move around. Go back to start, if I'm too far // from where I started. if ((my_dist_from_start() >= 6) || ((my_dist_from_start() > 0) && (get_memory_cell(0) > 0))) { if (get_ran(1,1,100) < 40) return_to_start(ME,1); } else if (get_memory_cell(0) == 0) { fidget(ME,25); } // if we're in combat and the above didn't give me anything to do, just // stop now. Otherwise, game will keep running script, and that eats up CPU time. if (am_i_doing_action() == FALSE) end_combat_turn(); break; beginstate 3; // attacking if (target_ok() == FALSE) set_state_continue(5); do_attack(); break; beginstate 4; //stealing skills //The creature MUST have a target here if(get_target() == target) set_state_continue(3); target = get_target(); set_memory_cell(5,get_stat(ME,0)); set_memory_cell(6,get_stat(ME,1)); set_memory_cell(7,get_stat(ME,2)); set_memory_cell(8,get_stat(ME,3)); set_memory_cell(9,get_stat(ME,4)); pol = get_stat(ME,5); bow = get_stat(ME,6); mis = get_stat(ME,7); har = get_stat(ME,8); def = get_stat(ME,9); asn = get_stat(ME,10); mag = get_stat(ME,11); pri = get_stat(ME,12); luc = get_stat(ME,18); qui = get_stat(ME,19); par = get_stat(ME,20); bla = get_stat(ME,21); gym = get_stat(ME,23); mry = get_stat(ME,25); res = get_stat(ME,26); eff = get_stat(ME,27); rip = get_stat(ME,29); sha = get_stat(ME,30); if(get_stat(target,0) > get_stat(ME,0)) alter_stat(ME,0,get_stat(target,0)-get_stat(ME,0)); if(get_stat(target,1) > get_stat(ME,1)) alter_stat(ME,1,get_stat(target,1)-get_stat(ME,1)); if(get_stat(target,2) > get_stat(ME,2)) alter_stat(ME,2,get_stat(target,2)-get_stat(ME,2)); if(get_stat(target,3) > get_stat(ME,3)) alter_stat(ME,3,get_stat(target,3)-get_stat(ME,3)); if((get_stat(target,4) > get_stat(ME,4)) && (get_memory_cell(4) != 1)) alter_stat(ME,4,get_stat(target,4)-get_stat(ME,4)); if((get_stat(target,5) > get_stat(ME,5)) && (get_memory_cell(4) != 1)) alter_stat(ME,5,get_stat(target,5)-get_stat(ME,5)); if((get_stat(target,6) > get_stat(ME,6)) && (get_memory_cell(4) != 1)) alter_stat(ME,6,get_stat(target,6)-get_stat(ME,6)); if((get_stat(target,7) > get_stat(ME,7)) && (get_memory_cell(4) != 1)) alter_stat(ME,7,get_stat(target,7)-get_stat(ME,7)); if((get_stat(target,8) > get_stat(ME,8)) && (get_memory_cell(4) != 1)) alter_stat(ME,8,get_stat(target,8)-get_stat(ME,8)); if((get_stat(target,9) > get_stat(ME,9)) && (get_memory_cell(4) != 1)) alter_stat(ME,9,get_stat(target,9)-get_stat(ME,9)); if((get_stat(target,10) > get_stat(ME,10)) && (get_memory_cell(4) != 1)) alter_stat(ME,10,get_stat(target,10)-get_stat(ME,10)); if((get_stat(target,11) > get_stat(ME,11)) && (get_memory_cell(4) != 0)){ alter_stat(ME,11,get_stat(target,11)-get_stat(ME,11)); if(get_stat(ME,11) >= 1){ change_spell_level(ME,0,0,get_spell_level(target,0,0)-get_spell_level(ME,0,0)); change_spell_level(ME,0,1,get_spell_level(target,0,1)-get_spell_level(ME,0,1)); } if(get_stat(ME,11) >= 2){ change_spell_level(ME,0,2,get_spell_level(target,0,2)-get_spell_level(ME,0,2)); change_spell_level(ME,0,3,get_spell_level(target,0,3)-get_spell_level(ME,0,3)); } if(get_stat(ME,11) >= 3){ change_spell_level(ME,0,4,get_spell_level(target,0,4)-get_spell_level(ME,0,4)); } if(get_stat(ME,11) >= 4){ change_spell_level(ME,0,5,get_spell_level(target,0,5)-get_spell_level(ME,0,5)); } if(get_stat(ME,11) >= 5){ change_spell_level(ME,0,6,get_spell_level(target,0,6)-get_spell_level(ME,0,6)); } if(get_stat(ME,11) >= 6){ change_spell_level(ME,0,7,get_spell_level(target,0,7)-get_spell_level(ME,0,7)); change_spell_level(ME,0,8,get_spell_level(target,0,8)-get_spell_level(ME,0,8)); } if(get_stat(ME,11) >= 7){ change_spell_level(ME,0,9,get_spell_level(target,0,9)-get_spell_level(ME,0,8)); } if(get_stat(ME,11) >= 8){ change_spell_level(ME,0,10,get_spell_level(target,0,10)-get_spell_level(ME,0,10)); } if(get_stat(ME,11) >= 9){ change_spell_level(ME,0,11,get_spell_level(target,0,11)-get_spell_level(ME,0,11)); } if(get_stat(ME,11) >= 10){ change_spell_level(ME,0,12,get_spell_level(target,0,12)-get_spell_level(ME,0,12)); } if(get_stat(ME,11) >= 11){ change_spell_level(ME,0,13,get_spell_level(target,0,13)-get_spell_level(ME,0,13)); } if(get_stat(ME,11) >= 12){ change_spell_level(ME,0,14,get_spell_level(target,0,14)-get_spell_level(ME,0,14)); } if(get_stat(ME,11) >= 13){ change_spell_level(ME,0,15,get_spell_level(target,0,15)-get_spell_level(ME,0,15)); } if(get_stat(ME,11) >= 14){ change_spell_level(ME,0,16,get_spell_level(target,0,16)-get_spell_level(ME,0,16)); } if(get_stat(ME,11) >= 15){ change_spell_level(ME,0,17,get_spell_level(target,0,17)-get_spell_level(ME,0,17)); } if(get_stat(ME,11) >= 16){ change_spell_level(ME,0,18,get_spell_level(target,0,18)-get_spell_level(ME,0,18)); } if(get_stat(ME,11) >= 17){ change_spell_level(ME,0,19,get_spell_level(target,0,19)-get_spell_level(ME,0,19)); } } if((get_stat(target,12) > get_stat(ME,12)) && (get_memory_cell(4) != 0)){ alter_stat(ME,12,get_stat(target,12)-get_stat(ME,12)); if(get_stat(ME,12) >= 1){ change_spell_level(ME,1,0,get_spell_level(target,1,0)-get_spell_level(ME,1,0)); change_spell_level(ME,1,1,get_spell_level(target,1,1)-get_spell_level(ME,1,1)); change_spell_level(ME,1,2,get_spell_level(target,1,2)-get_spell_level(ME,1,2)); } if(get_stat(ME,12) >= 2){ change_spell_level(ME,1,3,get_spell_level(target,1,3)-get_spell_level(ME,1,3)); } if(get_stat(ME,12) >= 3){ change_spell_level(ME,1,4,get_spell_level(target,1,4)-get_spell_level(ME,1,4)); } if(get_stat(ME,12) >= 4){ change_spell_level(ME,1,5,get_spell_level(target,1,5)-get_spell_level(ME,1,5)); } if(get_stat(ME,12) >= 5){ change_spell_level(ME,1,6,get_spell_level(target,1,6)-get_spell_level(ME,1,6)); change_spell_level(ME,1,7,get_spell_level(target,1,7)-get_spell_level(ME,1,7)); } if(get_stat(ME,12) >= 6){ change_spell_level(ME,1,8,get_spell_level(target,1,8)-get_spell_level(ME,1,8)); } if(get_stat(ME,12) >= 7){ change_spell_level(ME,1,9,get_spell_level(target,1,9)-get_spell_level(ME,1,9)); } if(get_stat(ME,12) >= 8){ change_spell_level(ME,1,10,get_spell_level(target,1,10)-get_spell_level(ME,1,10)); change_spell_level(ME,1,11,get_spell_level(target,1,11)-get_spell_level(ME,1,11)); } if(get_stat(ME,12) >= 9){ change_spell_level(ME,1,12,get_spell_level(target,1,12)-get_spell_level(ME,1,12)); } if(get_stat(ME,12) >= 10){ change_spell_level(ME,1,13,get_spell_level(target,1,13)-get_spell_level(ME,1,13)); } if(get_stat(ME,12) >= 11){ change_spell_level(ME,1,14,get_spell_level(target,1,14)-get_spell_level(ME,1,14)); } if(get_stat(ME,12) >= 12){ change_spell_level(ME,1,15,get_spell_level(target,1,15)-get_spell_level(ME,1,15)); } if(get_stat(ME,12) >= 13){ change_spell_level(ME,1,16,get_spell_level(target,1,16)-get_spell_level(ME,1,16)); } if(get_stat(ME,12) >= 15){ change_spell_level(ME,1,17,get_spell_level(target,1,17)-get_spell_level(ME,1,17)); } if(get_stat(ME,12) >= 16){ change_spell_level(ME,1,18,get_spell_level(target,1,18)-get_spell_level(ME,1,18)); } if(get_stat(ME,12) >= 17){ change_spell_level(ME,1,19,get_spell_level(target,1,19)-get_spell_level(ME,1,19)); } } if(get_stat(target,18) > get_stat(ME,18)) alter_stat(ME,18,get_stat(target,18)-get_stat(ME,18)); if((get_stat(target,19) > get_stat(ME,19)) && (get_memory_cell(4) != 1)) alter_stat(ME,19,get_stat(target,19)-get_stat(ME,19)); if((get_stat(target,20) > get_stat(ME,20)) && (get_memory_cell(4) != 1)) alter_stat(ME,20,get_stat(target,20)-get_stat(ME,20)); if((get_stat(target,21) > get_stat(ME,21)) && (get_memory_cell(4) != 1)) alter_stat(ME,21,get_stat(target,21)-get_stat(ME,21)); if((get_stat(target,23) > get_stat(ME,23)) && (get_memory_cell(4) != 1)) alter_stat(ME,23,get_stat(target,23)-get_stat(ME,23)); if((get_stat(target,25) > get_stat(ME,25)) && (get_memory_cell(4) != 0)) alter_stat(ME,25,get_stat(target,25)-get_stat(ME,25)); if(get_stat(target,26) > get_stat(ME,26)) alter_stat(ME,26,get_stat(target,26)-get_stat(ME,26)); if((get_stat(target,27) > get_stat(ME,27)) && (get_memory_cell(4) != 0)) alter_stat(ME,27,get_stat(target,27)-get_stat(ME,27)); if((get_stat(target,29) > get_stat(ME,29)) && (get_memory_cell(4) != 1)) alter_stat(ME,29,get_stat(target,29)-get_stat(ME,29)); if((get_stat(target,30) > get_stat(ME,30)) && (get_memory_cell(4) != 1)) alter_stat(ME,30,get_stat(target,30)-get_stat(ME,30)); clear_buffer(); append_char_name(ME); append_string(" steals "); append_char_name(target); append_string("'s skills!"); get_buffer_text(text); play_sound(65); print_str_color(text,3); set_state_continue(3); break; beginstate 5; //reseting state if(get_stat(ME,0) > get_memory_cell(5)) alter_stat(ME,0,get_memory_cell(5) - get_stat(ME,0)); if(get_stat(ME,1) > get_memory_cell(6)) alter_stat(ME,1,get_memory_cell(6) - get_stat(ME,1)); if(get_stat(ME,2) > get_memory_cell(7)) alter_stat(ME,2,get_memory_cell(7) - get_stat(ME,2)); if(get_stat(ME,3) > get_memory_cell(8)) alter_stat(ME,3,get_memory_cell(8) - get_stat(ME,3)); if(get_stat(ME,4) > get_memory_cell(9)) alter_stat(ME,4,get_memory_cell(9) - get_stat(ME,4)); if(get_stat(ME,5) > pol) alter_stat(ME,5,pol - get_stat(ME,5)); if(get_stat(ME,6) > bow) alter_stat(ME,6,bow - get_stat(ME,6)); if(get_stat(ME,7) > mis) alter_stat(ME,7,mis - get_stat(ME,7)); if(get_stat(ME,8) > har) alter_stat(ME,8,har - get_stat(ME,8)); if(get_stat(ME,9) > def) alter_stat(ME,9,def - get_stat(ME,9)); if(get_stat(ME,10) > asn) alter_stat(ME,10,asn - get_stat(ME,10)); if(get_stat(ME,11) > mag) alter_stat(ME,11,mag - get_stat(ME,11)); if(get_stat(ME,12) > pri) alter_stat(ME,12,pri - get_stat(ME,12)); if(get_stat(ME,18) > luc) alter_stat(ME,18,luc - get_stat(ME,18)); if(get_stat(ME,19) > qui) alter_stat(ME,19,qui - get_stat(ME,19)); if(get_stat(ME,20) > par) alter_stat(ME,20,par - get_stat(ME,20)); if(get_stat(ME,21) > bla) alter_stat(ME,21,bla - get_stat(ME,21)); if(get_stat(ME,23) > gym) alter_stat(ME,23,gym - get_stat(ME,23)); if(get_stat(ME,25) > mry) alter_stat(ME,25,mry - get_stat(ME,25)); if(get_stat(ME,26) > res) alter_stat(ME,26,res - get_stat(ME,26)); if(get_stat(ME,27) > eff) alter_stat(ME,27,eff - get_stat(ME,27)); if(get_stat(ME,29) > rip) alter_stat(ME,29,rip - get_stat(ME,29)); if(get_stat(ME,30) > sha) alter_stat(ME,30,sha - get_stat(ME,30)); set_state(START_STATE); break; beginstate TALKING_STATE; if (get_memory_cell(3) == 0) { print_str("Talking: It doesn't respond."); end(); } begin_talk_mode(get_memory_cell(3)); break; //*=always taken //Æ=physical //%=magical //¥=never taken // //*0 - Strength //*1 - Dexterity //*2 - Intelligence //*3 - Endurance //Æ4 - Melee Weapons //Æ5 - Pole Weapons //Æ6 - Bows //Æ7 - Thrown Missiles //Æ8 - Hardiness //Æ9 - Defense //Æ10 - Assassination //%11 - Mage Spells //%12 - Priest Spells //¥13 - Arcane Lore //¥14 - Potion Making //¥15 - Tool Use //¥16 - Nature Lore //¥17 - First Aid //*18 - Luck //Æ19 - Quick Strike //Æ20 - Parry //Æ21 - Blademaster //¥22 - Anatomy //Æ23 - Gymnastics //¥24 - Pathfinder //%25 - Magery //*26 - Resistance //%27 - Magical Efficiency //¥28 - Lethal Blow //Æ29 - Riposte //Æ30 - Sharpshooter //¥31 - Dread Curse