script ACKlint('ACKlint');
uses stdlib,system;
Var
Static_Reaction;
Evil_Critter;
Slavery_Tolerant;
Karma_Perception;
reaction_bonus_town_rep;
reaction_bonus_karma;
Only_Once;
Pole_gracza;
restock_obj;
InTimedEwent;
step_tile;
function critter_p_proc;forward;
function pickup_p_proc;forward;
function Node999;forward;
function Node998;forward;
function Node005;forward;
function Node004;forward;
function Node003;forward;
function Node002;forward;
function Node001;forward;
function Node014;forward;
function Node013;forward;
function Node012;forward;
function Node011;forward;
function Node010;forward;
function Node009;forward;
function Node008;forward;
function Node007;forward;
function Node006;forward;
function Node1001;forward;
function Node1002;forward;
function talk_p_proc;forward;
function timed_event_p_proc;forward;
function push_p_proc;forward;
function destroy_p_proc;forward;
function look_at_p_proc;forward;
function description_p_proc;forward;
function use_obj_on_p_proc;forward;
function use_skill_on_p_proc;forward;
function damage_p_proc;forward;
function map_enter_p_proc;forward;
function start;forward;
function critter_p_proc;
begin
if SVAR[2]=0 then begin
SVAR[1]:=GVAR[40];
SVAR[3]:=GVAR[41];
SVAR[6]:=GVAR[42];
if SVAR[6]=0 then begin
SVAR[6]:=6;
end;
SVAR[2]:=1;
end;
if (SVAR[1]=0 AND DistanceObj(Self,Player)<5) then begin
Talk;
end;
if ((((((SVAR[4]=0 AND NOT(IsMoving(Player))) AND NOT(IsMoving(Self))) AND GetStat(Player,35)<GetStat(Player,7)) AND GetStat(Player,35)<20>1) then begin
AddTimerEvent(Self,1,1);
SVAR[4]:=1;
end;
end;
if (SVAR[5]=1 AND See(Self,Player)) then begin
Attack(0,1,0,0,30000,0,0);
end;
if ((SVAR[1]=1 AND SVAR[3]=0) AND NOT(InTimedEwent)) then begin
if SVAR[6]=6 then begin
Pole_gracza:=GetPosByVector(GetPos(Player),Rnd(1,5),Rnd(1,2));
end else begin
Pole_gracza:=GetPosByVector(GetPos(Player),Direction(GetPos(Self),GetPos(Player)),-SVAR[6]);
end;
if DistancePos(GetPos(Self),Pole_gracza)>SVAR[6] then begin
Go(Self,Pole_gracza,1);
end else begin
if DistancePos(GetPos(Self),Pole_gracza)>SVAR[6] / 2+1 then begin
Go(Self,Pole_gracza,0);
end;
end;
if ((SVAR[6]<>6 AND IsMoving(Self)) AND DistanceObj(Self,Player)<=SVAR[6] / 2+1) then begin
RegAnimFunc(2,Self);
end;
end;
end;
function pickup_p_proc;
begin
end;
function Node999;
begin
SayWOAnswer(751,118,50);
SVAR[1]:=2;
end;
function Node998;
begin
end;
function Node005;
begin
SayForAnswer(751,121);
if GetStat(Player,35)<GetStat(Player,7) then begin
Answer(4,751,100,@..............,50);
end;
if (GetStat(Self,35)<GetStat(Self,7) AND GetStat(Self,35)<50>GetSkill(Self,6) then begin
ScreenOff(600);
ScreenOn(600);
AdvanceTime(60 * (60 * 10));
if Success(RndBySkill(Self,7,0)) then begin
Heal(Self,Rnd(10,25));
DebugPrint(GetName(Self)+' healed some using doctor skill.');
end;
end else begin
ScreenOff(600);
ScreenOn(600);
AdvanceTime(15 * (60 * 10));
if Success(RndBySkill(Self,6,0)) then begin
Heal(Self,Rnd(5,15));
DebugPrint(GetName(Self)+' healed some using first aid skill.');
end;
end;
end;
end;
end;
end;
end;
if GetStat(Self,35)=GetStat(Self,7) then begin
SayForAnswer(751,113);
end else begin
if (GetStat(Self,35) * 100) / GetStat(Self,7)>=90 then begin
SayForAnswer(751,114);
end else begin
if (GetStat(Self,35) * 100) / GetStat(Self,7)>=70 then begin
SayForAnswer(751,101);
end else begin
SayForAnswer(751,105);
end;
end;
end;
Answer(4,751,112,@Node005,50);
DebugPrint('Uzyto opcji druzyny');
end;
function Node1002;
begin
if GetSkill(Self,7)>GetSkill(Self,6) then begin
ScreenOff(600);
ScreenOn(600);
AdvanceTime(60 * (60 * 10));
if Success(RndBySkill(Self,7,0)) then begin
Heal(Player,Rnd(10,25));
DebugPrint(GetName(Player)+' healed some using doctor skill.');
end;
end else begin
ScreenOff(600);
ScreenOn(600);
AdvanceTime(15 * (60 * 10));
if Success(RndBySkill(Self,6,0)) then begin
Heal(Player,Rnd(5,15));
DebugPrint(GetName(Player)+' healed some using first aid skill.');
end;
end;
SayForAnswer(751,139);
Answer(4,751,112,@Node005,50);
DebugPrint('Uzyto opcji druzyny - leczenie gracza');
end;
function talk_p_proc;
Var
loc0, loc1, loc2, loc3;
begin
if SVAR[3]=1 then begin
OpenDialog(751,Self,4,-1,-1);
Node010;
CloseDialog;
end else begin
if SVAR[1]=0 then begin
OpenDialog(751,Self,4,-1,-1);
Node001;
CloseDialog;
end else begin
if SVAR[1]=1 then begin
loc0:=SlotX(Self,0);
OpenDialog(751,Self,4,-1,-1);
Node005;
CloseDialog;
if SlotX(Self,0)<>loc0 then begin
if SlotX(Self,0)=0 then begin
loc0:=CreateObj(16777217,0,0,751);
end else begin
if (GetObjectID(SlotX(Self,0))=1 OR GetObjectID(SlotX(Self,0))=379) then begin
loc0:=CreateObj(16777342,0,0,751);
end else begin
if ((GetObjectID(SlotX(Self,0))=232 OR GetObjectID(SlotX(Self,0))=14) OR GetObjectID(SlotX(Self,0))=3) then begin
loc0:=CreateObj(16777338,0,0,751);
end else begin
if (GetObjectID(SlotX(Self,0))=349 OR GetObjectID(SlotX(Self,0))=348) then begin
loc0:=CreateObj(16777331,0,0,751);
end else begin
if ((GetObjectID(SlotX(Self,0))=240 OR GetObjectID(SlotX(Self,0))=380) OR GetObjectID(SlotX(Self,0))=2) then begin
loc0:=CreateObj(16777344,0,0,751);
end else begin
if (GetObjectID(SlotX(Self,0))=74 OR GetObjectID(SlotX(Self,0))=265) then begin
loc0:=CreateObj(16777346,0,0,751);
end else begin
if ((GetObjectID(SlotX(Self,0))=239 OR GetObjectID(SlotX(Self,0))=17) OR GetObjectID(SlotX(Self,0))=381) then begin
loc0:=CreateObj(16777348,0,0,751);
end else begin
if (GetObjectID(SlotX(Self,0))=524 OR GetObjectID(SlotX(Self,0))=113) then begin
loc0:=CreateObj(16777700,0,0,751);
end;
end;
end;
end;
end;
end;
end;
end;
loc1:=SlotX(Self,1);
loc2:=SlotX(Self,0);
loc3:=GetStat(Self,35);
Heal(loc0,loc3);
SetVisible(Self,1);
MoveAllItems(Self,loc0);
SetCritterPos(loc0,GetPos(Self),GetFloor(Self));
Anim(loc0,1000,GetPerk(1,Self,10));
if SVAR[3]<>1 then begin
SetBattleParm(loc0,1,6,0);
SetBattleParm(loc0,1,5,GetPerk(1,Self,5));
LinkAlly(loc0);
GVAR[40]:=SVAR[1];
GVAR[41]:=SVAR[3];
GVAR[42]:=SVAR[6];
if loc1<>0 then begin
ChooseWeapon(loc0,loc1);
end;
if loc2<0>4 then begin
Say(Self,'A little blood ain t hurt no-one',8);
end else begin
if Rnd(1,6)=4 then begin
Say(Self,'I love the sound of cracking ribs!',8);
end;
end;
end;
end;
end;
function map_enter_p_proc;
Var
loc0, loc1, loc2, loc3, loc4;
begin
SVAR[4]:=0;
if (CurrentLocation=126 AND Misc(14,0)) then begin
loc4:=CreateObj(265,0,0,-1);
GiveItems(Self,loc4,1);
loc1:=CreateObj(16777217,0,0,751);
loc2:=SlotX(Self,1);
loc3:=SlotX(Self,0);
SetVisible(Self,1);
MoveAllItems(Self,loc1);
Heal(loc1,52);
SetCritterPos(loc1,GetPos(Self),GetFloor(Self));
Anim(loc1,1000,GetPerk(1,Self,10));
SetBattleParm(loc1,1,6,0);
SetBattleParm(loc1,1,5,GetPerk(1,Self,5));
GVAR[40]:=SVAR[1];
GVAR[41]:=SVAR[3];
GVAR[42]:=SVAR[6];
if loc2<>0 then begin
ChooseWeapon(loc1,loc2);
end;
if loc3<>0 then begin
ChooseWeapon(loc1,loc3);
end;
Free(Self);
end;
if (GetItemCountByXY(21303,0,33555374) AND GVAR[10]<>0) then begin
loc0:=GetItemAddressByXY(21303,0,33555374);
SetXY(loc0,19698,0);
end;
end;
function start;
begin
end;
begin
end.