// Phaedra
// phaedra.txt
// by Kelandon
// Much like basicnpc.
// 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.

begincreaturescript;

variables;

short i,target;
string dlgstr;

body;

beginstate INIT_STATE;
	if (get_memory_cell(0) == 2)
		set_mobility(ME,0);
break;

beginstate DEAD_STATE;
	change_custom_abil_uses(0,1,0 - get_custom_abil_uses(0,1));
	change_custom_abil_uses(1,1,0 - get_custom_abil_uses(1,1));
	change_custom_abil_uses(2,1,0 - get_custom_abil_uses(2,1));
	change_custom_abil_uses(3,1,0 - get_custom_abil_uses(3,1));

	if (current_town() < 18) // Phaedra died on the sidequest
		set_flag(250,4,1);
	else // Phaedra died in Mount Galthrax
		set_flag(250,5,1);
	
	i = 0;
	while (char_ok(i) == 0)
		{i = i + 1; }
	if (i == my_number())
		end();
	
	if (current_town() == 9)
		{message_dialog("Phaedra falls, horribly wounded. She lays on the ground, bleeding badly.","");
		set_flag(9,15,1);
		run_town_script(22);
		}
	
	clear_buffer();
	append_string("Phaedra falls, horribly wounded. She lays on the ground, bleeding badly. _");
	append_char_name(i);
	append_string(", please help me,_ she breathes weakly. _Take me back to the guardpost._");
	get_buffer_text(dlgstr);
	message_dialog(dlgstr,"Her eyes close. Her form is utterly prone. You must take her back to the guardpost immediately or she will surely die.");

	if (current_town() < 18) // if party has attacked Nolagh-Khar
		{if (get_flag(15,20))
			{if (get_flag(15,21) == 0)
				message_dialog("It is too late to retreat now, though. You will have to finish this fight and complete your task here before you will be able to return to the guardpost.","");
			else
				message_dialog("The most efficient way to do that would probably not be to retrace your steps through Bahssikava, but to go through the more circuitous course that you currently following.","");
			}
		}
	else // if party has approached dragon
		if (get_flag(21,6))
			message_dialog("You cannot retreat the way you came, though. You will have to keep going and finish your quest before Phaedra can get help.","");

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)) {
		do_attack();
		set_state(3);
		}
		
	// Have I been hit? Strike back!
	if (who_hit_me() >= 0) {
		set_target(ME,who_hit_me());
		do_attack();
		set_state(3);
		}
		
	// 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(START_STATE);
	do_attack();
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;