// Town 44 Chief v1.0
// t44chief.txt
// by Kelandon (tomwatts@berkeley.edu), based on basicnpc by Jeff Vogel
//
// Like Basicnpc, but has a few specific effects at different points.
//
// 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 - Which town state to call when dead. If left at 0, none.
//	 Cell 2 - Distractibility factor. This number minus one times ten is the
//		percent chance of a creature getting distracted from its current target
//		and attacking the most recent thing that hit it. If left at 0, this
//		defaults to 4, which gives a 30% chance. (If set to 1, it has a 0%
//		chance, and if set to 11, it has a 100% chance.)
//   Cell 3 - Dialogue node to start with if talked to. if left at 0, this
//     character doesn't talk.
//   Cell 4 - If not talking, chooses the message to use.

begincreaturescript;

variables;

short i,j,target,freeze = 1;

body;

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

	if (get_memory_cell(2) == 0)
		set_memory_cell(2,4);
break;

beginstate DEAD_STATE;
	// Call a town state.
	if (get_memory_cell(1) > 0)
		run_town_script(get_memory_cell(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)) {
		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);
	
	// Distractibility.
	if (who_hit_me() >= 0)
		if (get_ran(1,1,10) < get_memory_cell(2))
			set_target(my_number(),who_hit_me());
		
	if (freeze)	
		if (get_char_status(my_number(),4) == 0) {
			i = 0;
			j = 0;
			while (i <= 3) {
				if (char_loc_x(i) <= 10)
					j = 1;
				i = i + 1;
				}
			if (j)
				message_dialog("Vakhoss, now vulnerable and enraged, does something you've never seen before. He utters words of terrible magic, and you feel the air itself constrict around you. You suddenly can't move! No one else seems to be affected, though.","You will have to deal with this enemy from where you are standing.");
			else
				message_dialog("Vakhoss, now vulnerable and enraged, does something you've never seen before. He utters words of terrible magic, and you feel the air itself constrict around him. You cannot get anywhere near him, even though no one else seems to be affected.","You will have to deal with this enemy from a distance, then.");
			freeze = 0;
			set_flag(44,6,1);
			}
			
	do_attack();
break;

beginstate TALKING_STATE;
	if (get_memory_cell(3) == 0)
		print_str("Talking: It doesn't respond.");
	else
		begin_talk_mode(get_memory_cell(3));
break;