begincreaturescript;

variables;

short i,target;
short max,nowhp,needed,remark;
short last_abil_time,dtarget,ok;

body;

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

beginstate DEAD_STATE;

	message_dialog("Trahison falls over dead.  He reaches out towards you with an open fist and clenches it, as if he were trying to grab onto precious life.","Then, he goes limp and hits the floor, rigamortis having already set in.");
	award_party_xp(500,40);
	award_party_xp(500,40);
	award_party_xp(500,40);
	award_party_xp(500,40);
	award_party_xp(500,40);
	message_dialog("He drops a shiny key.  Since these things often come in handy, you pocket it.","");
	change_spec_item(27,1);
	inc_flag(33,0,1);
	if(get_flag(33,0) >= 29){
		message_dialog("Finally!  Trahison and all of his men are defeated.  Fortress Grenze's rebellion is dead.","Now, to leave.");
		set_flag(33,0,30);
		toggle_quest(4,0);
	}

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 I'm at 50% HP or less, I get the hell out of here.
	
	max = get_max_health(ME);
	nowhp = get_health(ME);
	needed = (max / 2);
	if(nowhp <= needed && remark == 0){
		message_dialog("Trahison is heavily damaged.  _You...  Bastards!  I will kill you, even if it's the last thing I ever do!_","_Your lives end here!_");
		remark = 1;
	}

	// Time to be bad.
if(enemies_nearby(10) >= 1 && get_flag(29,0) < 1){
	if(tick_difference(last_abil_time,get_current_tick()) >= 1){
		ok = 0;
		while(ok == 0){
			dtarget = get_ran(1,0,120);
			if(char_ok(dtarget) == TRUE){
	if(can_see_loc(char_loc_x(dtarget),char_loc_y(dtarget)) == TRUE && get_attitude(dtarget) != get_attitude(ME)){
put_straight_zap(my_loc_x(),my_loc_y(),char_loc_x(dtarget),char_loc_y(dtarget),5);
set_character_pose(ME,1);
force_instant_terrain_redraw();
run_animation_sound(43);
pause(5);
set_char_status(dtarget,4,-250,1,0);
damage_char(dtarget,100,4);
ok = 1;
set_character_pose(ME,2);
force_instant_terrain_redraw();
	}
			}
		}
last_abil_time = get_current_tick();
	}
}



	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;