Autor Thema: Engine Button  (Gelesen 3009 mal)

Offline Helios2000

  • BoS Neuling
  • Beiträge: 551
  • Si vis pacem, para bellum
Engine Button
« am: 02. November 2008, 22:01:51 Uhr »
Hier seine decompilierte dude_obj:
Spoiler for Hiden:
variable ProtoOfItemGiven;
variable ValueOfRollCheck := 1;
variable Scenery_Creation;
variable Scenery_Creation_Hex;
variable Scenery_Creation_Count;
variable Temp_Scenery_Creation_Hex;
variable Scenery_Creation_Ptr;
variable How_Many_Party_Members_Are_Injured;
variable How_Many_Party_Members_Armed;
variable PartyHealingItem;

procedure checkPartyMembersNearDoor;

variable global_temp;
variable dest_tile;
variable step_tile;
variable in_dialog;
variable forced_node;
variable restock_amt;
variable restock_obj;
variable restock_trash;
variable removed_qty;

procedure atoim(variable arg0, variable arg1);
procedure get_char(variable arg0, variable arg1);
procedure wordar(variable arg0, variable arg1);

variable mode;
variable cur_section_start;
variable cur_pos;
variable cur_pid;
variable cur_pcx;
variable cur_size;
variable cur_gvar;
variable cur_time;
variable cur_undo;
variable items_avail;
variable max;
variable max_undo;
variable can_batch;
variable can_undo;
variable start0;
variable start1;
variable start2;
variable start3;
variable start4;
variable start5;
variable start6;

procedure item_options_0;
procedure item_options_1;
procedure item_options_2;
procedure item_options_3;
procedure item_options_4;
procedure item_options_5;
procedure item_options_6;
procedure display_next_option(variable arg0);
procedure count_items_avail;
procedure draw_item_properties;
procedure draw_item_pcx;
procedure parse_skill_name(variable arg0);
procedure display_items_list;
procedure display_items_avail;
procedure list_next;
procedure list_back;
procedure display_item_options;
procedure display_batch_ok;
procedure display_undo_ok;
procedure exit_mode;
procedure items_list_mode;
procedure item_options_mode;
procedure batch_ok_mode;
procedure undo_ok_mode;
procedure batch_item(variable arg0);
procedure undo_batch(variable arg0);
procedure batch_one_item;
procedure batch_all_items;
procedure undo_one_item;
procedure undo_all_items;
procedure loop_mode;
procedure batch_init;
procedure redraw_win_dscr;
procedure redraw_win_idle;

variable last_timed_obj;
variable last_timed_param;
variable check_still_kill;
variable stored_msg;
variable stored_node;
variable top_msg;
variable var_num;

procedure ChooseFromList;
procedure CLICK_PREV;
procedure CLICK_0;
procedure CLICK_1;
procedure CLICK_2;
procedure CLICK_3;
procedure CLICK_4;
procedure CLICK_MORE;

variable floater_patch_msg;
variable hs_temp;

procedure getTimeBit;
procedure start;
procedure timed_event_p_proc;
procedure critter_p_proc;
procedure map_enter_p_proc;
procedure combat_p_proc;
procedure map_update_p_proc;
procedure is_dropping_p_proc;
procedure Check_Bess_Float;

variable Did_Bess_Float;

import variable prize_fighter_obj;

variable lastmsg;

procedure use_obj_on_p_proc;
procedure description_p_proc;


procedure checkPartyMembersNearDoor
begin
if (party_member_obj(16777278) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777278)) <= 5) then begin
return 1;
end
end
if (party_member_obj(16777376) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777376)) <= 5) then begin
return 1;
end
end
if (party_member_obj(16777377) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777377)) <= 5) then begin
return 1;
end
end
if (party_member_obj(16777305) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777305)) <= 5) then begin
return 1;
end
end
if (party_member_obj(16777313) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777313)) <= 5) then begin
return 1;
end
end
if (party_member_obj(16777323) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777323)) <= 5) then begin
return 1;
end
end
if (party_member_obj(16777352) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777352)) <= 5) then begin
return 1;
end
end
if (party_member_obj(16777378) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777378)) <= 5) then begin
return 1;
end
end
if (party_member_obj(16777368) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777368)) <= 5) then begin
return 1;
end
end
if (party_member_obj(16777379) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777379)) <= 5) then begin
return 1;
end
end
if (party_member_obj(16777380) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777380)) <= 5) then begin
return 1;
end
end
if (party_member_obj(16777295) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777295)) <= 5) then begin
return 1;
end
end
if (party_member_obj(16777381) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777381)) <= 5) then begin
return 1;
end
end
if (party_member_obj(16777407) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777407)) <= 5) then begin
return 1;
end
end
if (party_member_obj(16777411) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777411)) <= 5) then begin
return 1;
end
end
if (party_member_obj(16777412) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777412)) <= 5) then begin
return 1;
end
end
if (party_member_obj(16777413) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777413)) <= 5) then begin
return 1;
end
end
if (party_member_obj(16777481) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777481)) <= 5) then begin
return 1;
end
end
if (party_member_obj(16777558) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777558)) <= 5) then begin
return 1;
end
end
if (party_member_obj(16777600) != 0) then begin
if (tile_distance_objs(self_obj, party_member_obj(16777600)) <= 5) then begin
return 1;
end
end
return 0;
end

procedure atoim(variable arg0, variable arg1)
begin
variable LVar2 := 0;
variable LVar3 := 0;
variable LVar4 := 0;
LVar3 := arg1;
while((arg0 != LVar3) and (arg0 <= (LVar3 + ":")) and (arg0 >= (LVar3 + "0"))) do begin
while(not((arg0 > (LVar3 + LVar2)) and (arg0 < (LVar3 + (LVar2 + 1))) or (arg0 == (LVar3 + LVar2))) and (LVar2 < 9)) do begin
LVar2 := LVar2 + 1;
end
LVar3 := LVar3 + LVar2;
LVar4 := (LVar4 * 10) + LVar2;
LVar2 := 0;
end
return LVar4;
end

procedure get_char(variable arg0, variable arg1)
begin
if (arg0 == arg1) then begin
return "";
end
if (arg0 < (arg1 + "A")) then begin
if (arg0 < (arg1 + "1")) then begin
if (arg0 < (arg1 + ")")) then begin
if (arg0 < (arg1 + "%")) then begin
if (arg0 < (arg1 + "#")) then begin
if ((arg0 >= (arg1 + " ")) and (arg0 < (arg1 + "!"))) then begin
return " ";
end
else begin
if ((arg0 >= (arg1 + "!")) and (arg0 < (arg1 + "\""))) then begin
return "!";
end
else begin
if ((arg0 >= (arg1 + "\"")) and (arg0 < (arg1 + "#"))) then begin
return "\"";
end
end
end
end
else begin
if ((arg0 >= (arg1 + "#")) and (arg0 < (arg1 + "$"))) then begin
return "#";
end
else begin
if ((arg0 >= (arg1 + "$")) and (arg0 < (arg1 + "%"))) then begin
return "$";
end
end
end
end
else begin
if ((arg0 >= (arg1 + "%")) and (arg0 < (arg1 + "&"))) then begin
return "%";
end
else begin
if ((arg0 >= (arg1 + "&")) and (arg0 < (arg1 + "'"))) then begin
return "&";
end
else begin
if ((arg0 >= (arg1 + "'")) and (arg0 < (arg1 + "("))) then begin
return "'";
end
else begin
if ((arg0 >= (arg1 + "(")) and (arg0 < (arg1 + ")"))) then begin
return "(";
end
end
end
end
end
end
else begin
if (arg0 < (arg1 + "-")) then begin
if ((arg0 >= (arg1 + ")")) and (arg0 < (arg1 + "*"))) then begin
return ")";
end
else begin
if ((arg0 >= (arg1 + "*")) and (arg0 < (arg1 + "+"))) then begin
return "*";
end
else begin
if ((arg0 >= (arg1 + "+")) and (arg0 < (arg1 + ","))) then begin
return "+";
end
else begin
if ((arg0 >= (arg1 + ",")) and (arg0 < (arg1 + "-"))) then begin
return ",";
end
end
end
end
end
else begin
if ((arg0 >= (arg1 + "-")) and (arg0 < (arg1 + "."))) then begin
return "-";
end
else begin
if ((arg0 >= (arg1 + ".")) and (arg0 < (arg1 + "/"))) then begin
return ".";
end
else begin
if ((arg0 >= (arg1 + "/")) and (arg0 < (arg1 + "0"))) then begin
return "/";
end
else begin
if ((arg0 >= (arg1 + "0")) and (arg0 < (arg1 + "1"))) then begin
return "0";
end
end
end
end
end
end
end
else begin
if (arg0 < (arg1 + "9")) then begin
if (arg0 < (arg1 + "5")) then begin
if (arg0 < (arg1 + "3")) then begin
if ((arg0 >= (arg1 + "1")) and (arg0 < (arg1 + "2"))) then begin
return "1";
end
else begin
if ((arg0 >= (arg1 + "2")) and (arg0 < (arg1 + "3"))) then begin
return "2";
end
end
end
else begin
if ((arg0 >= (arg1 + "3")) and (arg0 < (arg1 + "4"))) then begin
return "3";
end
else begin
if ((arg0 >= (arg1 + "4")) and (arg0 < (arg1 + "5"))) then begin
return "4";
end
end
end
end
else begin
if (arg0 < (arg1 + "7")) then begin
if ((arg0 >= (arg1 + "5")) and (arg0 < (arg1 + "6"))) then begin
return "5";
end
else begin
if ((arg0 >= (arg1 + "6")) and (arg0 < (arg1 + "7"))) then begin
return "6";
end
end
end
else begin
if ((arg0 >= (arg1 + "7")) and (arg0 < (arg1 + "8"))) then begin
return "7";
end
else begin
if ((arg0 >= (arg1 + "8")) and (arg0 < (arg1 + "9"))) then begin
return "8";
end
end
end
end
end
else begin
if (arg0 < (arg1 + "=")) then begin
if (arg0 < (arg1 + ";")) then begin
if ((arg0 >= (arg1 + "9")) and (arg0 < (arg1 + ":"))) then begin
return "9";
end
else begin
if ((arg0 >= (arg1 + ":")) and (arg0 < (arg1 + ";"))) then begin
return ":";
end
end
end
else begin
if ((arg0 >= (arg1 + ";")) and (arg0 < (arg1 + "<"))) then begin
return ";";
end
else begin
if ((arg0 >= (arg1 + "<")) and (arg0 < (arg1 + "="))) then begin
return "<";
end
end
end
end
else begin
if (arg0 < (arg1 + "?")) then begin
if ((arg0 >= (arg1 + "=")) and (arg0 < (arg1 + ">"))) then begin
return "=";
end
else begin
if ((arg0 >= (arg1 + ">")) and (arg0 < (arg1 + "?"))) then begin
return ">";
end
end
end
else begin
if ((arg0 >= (arg1 + "?")) and (arg0 < (arg1 + "@"))) then begin
return "?";
end
else begin
if ((arg0 >= (arg1 + "@")) and (arg0 < (arg1 + "A"))) then begin
return "@";
end
end
end
end
end
end
end
else begin
if (arg0 < (arg1 + "a")) then begin
if (arg0 < (arg1 + "Q")) then begin
if (arg0 < (arg1 + "I")) then begin
if (arg0 < (arg1 + "E")) then begin
if (arg0 < (arg1 + "C")) then begin
if ((arg0 >= (arg1 + "A")) and (arg0 < (arg1 + "B"))) then begin
return "A";
end
else begin
if ((arg0 >= (arg1 + "B")) and (arg0 < (arg1 + "C"))) then begin
return "B";
end
end
end
else begin
if ((arg0 >= (arg1 + "C")) and (arg0 < (arg1 + "D"))) then begin
return "C";
end
else begin
if ((arg0 >= (arg1 + "D")) and (arg0 < (arg1 + "E"))) then begin
return "D";
end
end
end
end
else begin
if (arg0 < (arg1 + "G")) then begin
if ((arg0 >= (arg1 + "E")) and (arg0 < (arg1 + "F"))) then begin
return "E";
end
else begin
if ((arg0 >= (arg1 + "F")) and (arg0 < (arg1 + "G"))) then begin
return "F";
end
end
end
else begin
if ((arg0 >= (arg1 + "G")) and (arg0 < (arg1 + "H"))) then begin
return "G";
end
else begin
if ((arg0 >= (arg1 + "H")) and (arg0 < (arg1 + "I"))) then begin
return "H";
end
end
end
end
end
else begin
if (arg0 < (arg1 + "M")) then begin
if (arg0 < (arg1 + "K")) then begin
if ((arg0 >= (arg1 + "I")) and (arg0 < (arg1 + "J"))) then begin
return "I";
end
else begin
if ((arg0 >= (arg1 + "J")) and (arg0 < (arg1 + "K"))) then begin
return "J";
end
end
end
else begin
if ((arg0 >= (arg1 + "K")) and (arg0 < (arg1 + "L"))) then begin
return "K";
end
else begin
if ((arg0 >= (arg1 + "L")) and (arg0 < (arg1 + "M"))) then begin
return "L";
end
end
end
end
else begin
if (arg0 < (arg1 + "O")) then begin
if ((arg0 >= (arg1 + "M")) and (arg0 < (arg1 + "N"))) then begin
return "M";
end
else begin
if ((arg0 >= (arg1 + "N")) and (arg0 < (arg1 + "O"))) then begin
return "N";
end
end
end
else begin
if ((arg0 >= (arg1 + "O")) and (arg0 < (arg1 + "P"))) then begin
return "O";
end
else begin
if ((arg0 >= (arg1 + "P")) and (arg0 < (arg1 + "Q"))) then begin
return "P";
end
end
end
end
end
end
else begin
if (arg0 < (arg1 + "Y")) then begin
if (arg0 < (arg1 + "U")) then begin
if (arg0 < (arg1 + "S")) then begin
if ((arg0 >= (arg1 + "Q")) and (arg0 < (arg1 + "R"))) then begin
return "Q";
end
else begin
if ((arg0 >= (arg1 + "R")) and (arg0 < (arg1 + "S"))) then begin
return "R";
end
end
end
else begin
if ((arg0 >= (arg1 + "S")) and (arg0 < (arg1 + "T"))) then begin
return "S";
end
else begin
if ((arg0 >= (arg1 + "T")) and (arg0 < (arg1 + "U"))) then begin
return "T";
end
end
end
end
else begin
if (arg0 < (arg1 + "W")) then begin
if ((arg0 >= (arg1 + "U")) and (arg0 < (arg1 + "V"))) then begin
return "U";
end
else begin
if ((arg0 >= (arg1 + "V")) and (arg0 < (arg1 + "W"))) then begin
return "V";
end
end
end
else begin
if ((arg0 >= (arg1 + "W")) and (arg0 < (arg1 + "X"))) then begin
return "W";
end
else begin
if ((arg0 >= (arg1 + "X")) and (arg0 < (arg1 + "Y"))) then begin
return "X";
end
end
end
end
end
else begin
if (arg0 < (arg1 + "]")) then begin
if (arg0 < (arg1 + "[")) then begin
if ((arg0 >= (arg1 + "Y")) and (arg0 < (arg1 + "Z"))) then begin
return "Y";
end
else begin
if ((arg0 >= (arg1 + "Z")) and (arg0 < (arg1 + "["))) then begin
return "Z";
end
end
end
else begin
if ((arg0 >= (arg1 + "[")) and (arg0 < (arg1 + "\\"))) then begin
return "[";
end
else begin
if ((arg0 >= (arg1 + "\\")) and (arg0 < (arg1 + "]"))) then begin
return "\\";
end
end
end
end
else begin
if (arg0 < (arg1 + "_")) then begin
if ((arg0 >= (arg1 + "]")) and (arg0 < (arg1 + "^"))) then begin
return "]";
end
else begin
if ((arg0 >= (arg1 + "^")) and (arg0 < (arg1 + "_"))) then begin
return "^";
end
end
end
else begin
if ((arg0 >= (arg1 + "_")) and (arg0 < (arg1 + "`"))) then begin
return "_";
end
else begin
if ((arg0 >= (arg1 + "`")) and (arg0 < (arg1 + "a"))) then begin
return "`";
end
end
end
end
end
end
end
else begin
if (arg0 < (arg1 + "q")) then begin
if (arg0 < (arg1 + "i")) then begin
if (arg0 < (arg1 + "e")) then begin
if (arg0 < (arg1 + "c")) then begin
if ((arg0 >= (arg1 + "a")) and (arg0 < (arg1 + "b"))) then begin
return "a";
end
else begin
if ((arg0 >= (arg1 + "b")) and (arg0 < (arg1 + "c"))) then begin
return "b";
end
end
end
else begin
if ((arg0 >= (arg1 + "c")) and (arg0 < (arg1 + "d"))) then begin
return "c";
end
else begin
if ((arg0 >= (arg1 + "d")) and (arg0 < (arg1 + "e"))) then begin
return "d";
end
end
end
end
else begin
if (arg0 < (arg1 + "g")) then begin
if ((arg0 >= (arg1 + "e")) and (arg0 < (arg1 + "f"))) then begin
return "e";
end
else begin
if ((arg0 >= (arg1 + "f")) and (arg0 < (arg1 + "g"))) then begin
return "f";
end
end
end
else begin
if ((arg0 >= (arg1 + "g")) and (arg0 < (arg1 + "h"))) then begin
return "g";
end
else begin
if ((arg0 >= (arg1 + "h")) and (arg0 < (arg1 + "i"))) then begin
return "h";
end
end
end
end
end
else begin
if (arg0 < (arg1 + "m")) then begin
if (arg0 < (arg1 + "k")) then begin
if ((arg0 >= (arg1 + "i")) and (arg0 < (arg1 + "j"))) then begin
return "i";
end
else begin
if ((arg0 >= (arg1 + "j")) and (arg0 < (arg1 + "k"))) then begin
return "j";
end
end
end
else begin
if ((arg0 >= (arg1 + "k")) and (arg0 < (arg1 + "l"))) then begin
return "k";
end
else begin
if ((arg0 >= (arg1 + "l")) and (arg0 < (arg1 + "m"))) then begin
return "l";
end
end
end
end
else begin
if (arg0 < (arg1 + "o")) then begin
if ((arg0 >= (arg1 + "m")) and (arg0 < (arg1 + "n"))) then begin
return "m";
end
else begin
if ((arg0 >= (arg1 + "n")) and (arg0 < (arg1 + "o"))) then begin
return "n";
end
end
end
else begin
if ((arg0 >= (arg1 + "o")) and (arg0 < (arg1 + "p"))) then begin
return "o";
end
else begin
if ((arg0 >= (arg1 + "p")) and (arg0 < (arg1 + "q"))) then begin
return "p";
end
end
end
end
end
end
else begin
if (arg0 < (arg1 + "y")) then begin
if (arg0 < (arg1 + "u")) then begin
if (arg0 < (arg1 + "s")) then begin
if ((arg0 >= (arg1 + "q")) and (arg0 < (arg1 + "r"))) then begin
return "q";
end
else begin
if ((arg0 >= (arg1 + "r")) and (arg0 < (arg1 + "s"))) then begin
return "r";
end
end
end
else begin
if ((arg0 >= (arg1 + "s")) and (arg0 < (arg1 + "t"))) then begin
return "s";
end
else begin
if ((arg0 >= (arg1 + "t")) and (arg0 < (arg1 + "u"))) then begin
return "t";
end
end
end
end
else begin
if (arg0 < (arg1 + "w")) then begin
if ((arg0 >= (arg1 + "u")) and (arg0 < (arg1 + "v"))) then begin
return "u";
end
else begin
if ((arg0 >= (arg1 + "v")) and (arg0 < (arg1 + "w"))) then begin
return "v";
end
end
end
else begin
if ((arg0 >= (arg1 + "w")) and (arg0 < (arg1 + "x"))) then begin
return "w";
end
else begin
if ((arg0 >= (arg1 + "x")) and (arg0 < (arg1 + "y"))) then begin
return "x";
end
end
end
end
end
else begin
if (arg0 < (arg1 + "{")) then begin
if ((arg0 >= (arg1 + "y")) and (arg0 < (arg1 + "z"))) then begin
return "y";
end
else begin
if ((arg0 >= (arg1 + "z")) and (arg0 < (arg1 + "{"))) then begin
return "z";
end
end
end
else begin
if ((arg0 >= (arg1 + "{")) and (arg0 < (arg1 + "|"))) then begin
return "{";
end
else begin
if ((arg0 >= (arg1 + "|")) and (arg0 < (arg1 + "}"))) then begin
return "|";
end
else begin
if ((arg0 >= (arg1 + "}")) and (arg0 < (arg1 + "~"))) then begin
return "}";
end
end
end
end
end
end
end
end
return "";
end

procedure wordar(variable arg0, variable arg1)
begin
variable LVar2 := "";
variable LVar3 := "";
variable LVar4 := 0;
variable LVar5 := 0;
while(LVar4 < arg1) do begin
LVar5 := get_char(arg0, LVar3);
if (LVar5 == "") then begin
return "";
end
else begin
if (LVar5 == "|") then begin
LVar4 := LVar4 + 1;
end
LVar3 := LVar3 + LVar5;
end
end
while(1) do begin
LVar5 := get_char(arg0, LVar3);
if ((LVar5 == "") or (LVar5 == "|")) then begin
return LVar2;
end
else begin
LVar2 := LVar2 + LVar5;
LVar3 := LVar3 + LVar5;
end
end
return "";
end

procedure item_options_0
begin
cur_section_start := start0;
call item_options_mode;
end

procedure item_options_1
begin
cur_section_start := start1;
call item_options_mode;
end

procedure item_options_2
begin
cur_section_start := start2;
call item_options_mode;
end

procedure item_options_3
begin
cur_section_start := start3;
call item_options_mode;
end

procedure item_options_4
begin
cur_section_start := start4;
call item_options_mode;
end

procedure item_options_5
begin
cur_section_start := start5;
call item_options_mode;
end

procedure item_options_6
begin
cur_section_start := start6;
call item_options_mode;
end

procedure display_next_option(variable arg0)
begin
if (arg0 == 0) then begin
start0 := cur_section_start;
sayOption(proto_data(cur_pid, 1), item_options_0);
end
else begin
if (arg0 == 1) then begin
start1 := cur_section_start;
sayOption(proto_data(cur_pid, 1), item_options_1);
end
else begin
if (arg0 == 2) then begin
start2 := cur_section_start;
sayOption(proto_data(cur_pid, 1), item_options_2);
end
else begin
if (arg0 == 3) then begin
start3 := cur_section_start;
sayOption(proto_data(cur_pid, 1), item_options_3);
end
else begin
if (arg0 == 4) then begin
start4 := cur_section_start;
sayOption(proto_data(cur_pid, 1), item_options_4);
end
else begin
if (arg0 == 5) then begin
start5 := cur_section_start;
sayOption(proto_data(cur_pid, 1), item_options_5);
end
else begin
if (arg0 == 6) then begin
start6 := cur_section_start;
sayOption(proto_data(cur_pid, 1), item_options_6);
end
end
end
end
end
end
end
end

procedure count_items_avail
begin
variable LVar0 := 0;
LVar0 := cur_section_start;
cur_section_start := 500;
items_avail := 0;
while((message_str(2, cur_section_start) != "Error") and (message_str(2, cur_section_start) == "[ITEM]")) do begin
cur_gvar := atoim(message_str(2, cur_section_start + 4), "");
if ((message_str(2, cur_section_start + 4) == "") or global_var(cur_gvar)) then begin
items_avail := items_avail + 1;
end
cur_section_start := cur_section_start + 25;
end
cur_section_start := LVar0;
end

procedure draw_item_properties
begin
variable LVar0 := 7;
variable LVar1 := 7;
variable LVar2 := 100;
variable LVar3 := 1;
variable LVar4 := 1;
variable LVar5 := 1;
variable LVar6 := 0;
variable LVar7 := 0;
variable LVar8 := 0;
variable LVar9 := 0;
variable LVar10 := 0;
variable LVar11 := 0;
variable LVar12 := 0;
variable LVar13 := 0;
variable LVar14 := 0;
variable LVar15 := 0;
variable LVar16 := 0;
variable LVar17 := 0;
selectWin("win_dscr");
setTextColor(0.00000, 1.00000, 0.00000);
format(proto_data(cur_pid, 1), 25, LVar2, 250, 10, 2);
LVar2 := LVar2 + 30;
while((message_str(2, cur_section_start + LVar0) != "[TOOLS]") and (LVar0 < 25)) do begin
LVar0 := LVar0 + 1;
end
LVar0 := LVar0 + 1;
format(message_str(2, 300), 25, LVar2, 250, 10, 2);
LVar2 := LVar2 + 10;
LVar1 := LVar0;
while((message_str(2, cur_section_start + LVar0) != "[SKILLS]") and (LVar0 < 25) and (message_str(2, cur_section_start + LVar0) != "Error") and (message_str(2, cur_section_start) == "[ITEM]")) do begin
LVar16 := 0;
LVar17 := 0;
LVar15 := 0;
while(not(LVar15)) do begin
LVar14 := wordar(message_str(2, cur_section_start + LVar0), LVar16);
if (LVar14 == "") then begin
LVar15 := 1;
if (LVar17 == 0) then begin
LVar3 := 0;
end
end
else begin
LVar6 := atoim(LVar14, "");
if (obj_is_carrying_obj_pid(dude_obj, LVar6)) then begin
setTextColor(0.00000, 1.00000, 0.00000);
LVar17 := 1;
end
else begin
setTextColor(1.00000, 0.00000, 0.00000);
end
if (LVar16) then begin
format(message_str(2, 150) + proto_data(LVar6, 1), 25, LVar2, 250, 10, 0);
end
else begin
format(proto_data(LVar6, 1), 25, LVar2, 250, 10, 0);
end
LVar2 := LVar2 + 10;
LVar16 := LVar16 + 1;
end
end
LVar0 := LVar0 + 1;
end
if (LVar1 == LVar0) then begin
setTextColor(0.00000, 1.00000, 0.00000);
format(message_str(2, 303), 25, LVar2, 250, 10, 0);
LVar2 := LVar2 + 10;
end
LVar0 := LVar0 + 1;
setTextColor(0.00000, 1.00000, 0.00000);
format(message_str(2, 301), 25, LVar2, 250, 10, 2);
LVar2 := LVar2 + 10;
LVar1 := LVar0;
while((message_str(2, cur_section_start + LVar0) != "[COMPONENTS]") and (LVar0 < 25) and (message_str(2, cur_section_start + LVar0) != "Error") and (message_str(2, cur_section_start) == "[ITEM]")) do begin
LVar7 := parse_skill_name(message_str(2, cur_section_start + LVar0));
LVar8 := atoim(message_str(2, cur_section_start + LVar0), message_str(2, 19 + LVar7) + ":");
if (has_skill(dude_obj, LVar7) >= LVar8) then begin
setTextColor(0.00000, 1.00000, 0.00000);
end
else begin
setTextColor(1.00000, 0.00000, 0.00000);
LVar4 := 0;
end
format(message_str(2, 1 + LVar7) + ": " + LVar8, 25, LVar2, 250, 10, 0);
LVar2 := LVar2 + 10;
LVar0 := LVar0 + 1;
end
if (LVar1 == LVar0) then begin
setTextColor(0.00000, 1.00000, 0.00000);
format(message_str(2, 303), 25, LVar2, 250, 10, 0);
LVar2 := LVar2 + 10;
end
LVar0 := LVar0 + 1;
setTextColor(0.00000, 1.00000, 0.00000);
format(message_str(2, 302), 25, LVar2, 250, 10, 2);
LVar2 := LVar2 + 10;
LVar1 := LVar0;
max := 32767;
while((LVar0 < 25) and (message_str(2, cur_section_start + LVar0) != "Error") and (message_str(2, cur_section_start) == "[ITEM]")) do begin
LVar9 := atoim(message_str(2, cur_section_start + LVar0), "");
LVar10 := atoim(message_str(2, cur_section_start + LVar0), "" + LVar9 + ":");
if (obj_is_carrying_obj_pid(dude_obj, LVar9) >= LVar10) then begin
setTextColor(0.00000, 1.00000, 0.00000);
end
else begin
setTextColor(1.00000, 0.00000, 0.00000);
LVar5 := 0;
end
LVar11 := obj_is_carrying_obj_pid(dude_obj, LVar9) / LVar10;
if (LVar11 < max) then begin
max := LVar11;
end
format(proto_data(LVar9, 1) + ": " + LVar10, 25, LVar2, 250, 10, 0);
LVar2 := LVar2 + 10;
LVar0 := LVar0 + 1;
end
if (LVar1 == LVar0) then begin
setTextColor(0.00000, 1.00000, 0.00000);
format(message_str(2, 303), 25, LVar2, 250, 10, 0);
LVar2 := LVar2 + 10;
end
if (LVar3 and LVar4 and LVar5) then begin
can_batch := 1;
end
else begin
can_batch := 0;
end
cur_undo := message_str(2, cur_section_start + 6);
if ((cur_undo == "YES") and LVar3 and LVar4 and obj_is_carrying_obj_pid(dude_obj, cur_pid)) then begin
can_undo := 1;
end
else begin
can_undo := 0;
end
setTextColor(0.00000, 1.00000, 0.00000);
format(message_str(2, 304), 25, LVar2, 250, 10, 2);
LVar2 := LVar2 + 10;
cur_time := atoim(message_str(2, cur_section_start + 5), "");
LVar12 := cur_time / (60 * 10) / 60;
LVar13 := cur_time / (60 * 10) % 60;
format(message_str(2, 305) + LVar12, 25, LVar2, 250, 10, 0);
LVar2 := LVar2 + 10;
format(message_str(2, 306) + LVar13, 25, LVar2, 250, 10, 0);
showWin;
end

procedure draw_item_pcx
begin
variable LVar0 := 0;
variable LVar1 := 0;
cur_pcx := message_str(2, cur_section_start + 2);
cur_size := atoim(message_str(2, cur_section_start + 3), "");
LVar0 := cur_size / 1000;
LVar1 := cur_size % 1000;
call redraw_win_dscr;
selectWin("win_dscr");
displayGfx(cur_pcx, 150 - (LVar0 / 2), 55 - (LVar1 / 2), LVar0, LVar1);
showWin;
end

procedure parse_skill_name(variable arg0)
begin
variable LVar1 := 0;
variable LVar2 := 4294967295;
while((LVar1 < 18) and (LVar2 < 0)) do begin
if ((arg0 > message_str(2, 19 + LVar1)) and (arg0 < (message_str(2, 19 + LVar1) + ";"))) then begin
LVar2 := LVar1;
end
LVar1 := LVar1 + 1;
end
return LVar2;
end

procedure display_items_list
begin
sayStart;
mouseShape("pcx/st1.pcx", 0, 0);
sayReply("r_display_list", message_str(2, 200));
call display_items_avail;
sayOption(message_str(2, 101), exit_mode);
sayEnd;
end

procedure display_items_avail
begin
variable LVar0 := 0;
variable LVar1 := 0;
call redraw_win_idle;
cur_section_start := 500;
if (cur_pos != 0) then begin
sayOption(message_str(2, 106), list_back);
end
while(LVar1 < cur_pos) do begin
cur_gvar := atoim(message_str(2, cur_section_start + 4), "");
if ((message_str(2, cur_section_start + 4) == "") or global_var(cur_gvar)) then begin
LVar1 := LVar1 + 1;
end
cur_section_start := cur_section_start + 25;
end
while((LVar0 < 7) and (message_str(2, cur_section_start) != "Error") and (message_str(2, cur_section_start) == "[ITEM]")) do begin
cur_pid := atoim(message_str(2, cur_section_start + 1), "");
cur_gvar := atoim(message_str(2, cur_section_start + 4), "");
if ((message_str(2, cur_section_start + 4) == "") or global_var(cur_gvar)) then begin
call display_next_option(LVar0);
LVar0 := LVar0 + 1;
end
cur_section_start := cur_section_start + 25;
end
if ((cur_pos + 7) < (items_avail - 1)) then begin
sayOption(message_str(2, 105), list_next);
end
if (items_avail == 0) then begin
sayOption(message_str(2, 107), exit_mode);
end
end

procedure list_next
begin
cur_pos := cur_pos + 7;
end

procedure list_back
begin
cur_pos := cur_pos - 7;
end

procedure display_item_options
begin
cur_pid := atoim(message_str(2, cur_section_start + 1), "");
cur_gvar := atoim(message_str(2, cur_section_start + 4), "");
max_undo := obj_is_carrying_obj_pid(dude_obj, cur_pid);
sayStart;
mouseShape("pcx/st1.pcx", 0, 0);
sayReply("r_item_options", proto_data(cur_pid, 2));
call draw_item_pcx;
call draw_item_properties;
if (can_batch and (max > 1)) then begin
sayOption(message_str(2, 108) + message_str(2, 110) + max + message_str(2, 111), batch_all_items);
end
if (can_batch) then begin
sayOption(message_str(2, 103), batch_one_item);
end
if (can_undo and (max_undo > 1)) then begin
sayOption(message_str(2, 109) + message_str(2, 110) + max_undo + message_str(2, 111), undo_all_items);
end
if (can_undo) then begin
sayOption(message_str(2, 104), undo_one_item);
end
sayOption(message_str(2, 102), items_list_mode);
sayOption(message_str(2, 101), exit_mode);
sayEnd;
end

procedure display_batch_ok
begin
sayStart;
mouseShape("pcx/st1.pcx", 0, 0);
sayReply("r_batch_item", message_str(2, 201));
sayOption(message_str(2, 100), item_options_mode);
sayOption(message_str(2, 101), exit_mode);
sayEnd;
end

procedure display_undo_ok
begin
sayStart;
mouseShape("pcx/st1.pcx", 0, 0);
sayReply("r_undo_batch", message_str(2, 202));
sayOption(message_str(2, 100), item_options_mode);
sayOption(message_str(2, 101), exit_mode);
sayEnd;
end

procedure exit_mode
begin
mode := -1;
end

procedure items_list_mode
begin
mode := 1;
end

procedure item_options_mode
begin
mode := 2;
end

procedure batch_ok_mode
begin
mode := 3;
end

procedure undo_ok_mode
begin
mode := 4;
end

procedure batch_item(variable arg0)
begin
variable LVar1 := 7;
variable LVar2 := 0;
variable LVar3 := 0;
variable LVar4 := 0;
variable LVar5 := 0;
game_time_advance(cur_time * arg0);
while((message_str(2, cur_section_start + LVar1) != "[COMPONENTS]") and (LVar1 < 25)) do begin
LVar1 := LVar1 + 1;
end
LVar1 := LVar1 + 1;
while((LVar1 < 25) and (message_str(2, cur_section_start + LVar1) != "Error") and (message_str(2, cur_section_start) == "[ITEM]")) do begin
LVar2 := atoim(message_str(2, cur_section_start + LVar1), "");
LVar3 := atoim(message_str(2, cur_section_start + LVar1), LVar2 + ":");
removed_qty := obj_is_carrying_obj_pid(dude_obj, LVar2);
if ((LVar3 * arg0) < removed_qty) then begin
removed_qty := LVar3 * arg0;
end
if (removed_qty > 0) then begin
restock_obj := obj_carrying_pid_obj(dude_obj, LVar2);
if (obj_type(self_obj) == 1) then begin
restock_obj := obj_carrying_pid_obj(dude_obj, LVar2);
if (critter_inven_obj(self_obj, 0) == restock_obj) then begin
if (obj_item_subtype(critter_inven_obj(dude_obj, 0)) == 0) then begin
restock_obj := critter_inven_obj(dude_obj, 0);
debug_msg("armour pid == " + obj_pid(restock_obj));
rm_obj_from_inven(dude_obj, restock_obj);
add_obj_to_inven(dude_obj, restock_obj);
end
end
else begin
if ((critter_inven_obj(dude_obj, 2) == restock_obj) or (critter_inven_obj(dude_obj, 1) == restock_obj)) then begin
metarule(43, dude_obj);
end
end
end
restock_amt := rm_mult_objs_from_inven(dude_obj, restock_obj, removed_qty);
destroy_object(restock_obj);
end
restock_obj := 0;
restock_amt := 0;
LVar1 := LVar1 + 1;
end
restock_obj := create_object_sid(cur_pid, 0, 0, -1);
add_mult_objs_to_inven(dude_obj, restock_obj, arg0);
LVar4 := cur_time * arg0 / (60 * 10) / 60;
LVar5 := cur_time * arg0 / (60 * 10) % 60;
display_msg(message_str(2, 400) + proto_data(cur_pid, 1) + message_str(2, 402) + arg0 + message_str(2, 403) + LVar4 + message_str(2, 404) + LVar5 + message_str(2, 405));
call batch_ok_mode;
end

procedure undo_batch(variable arg0)
begin
variable LVar1 := 7;
variable LVar2 := 0;
variable LVar3 := 0;
variable LVar4 := 0;
variable LVar5 := 0;
game_time_advance(cur_time * arg0);
while((message_str(2, cur_section_start + LVar1) != "[COMPONENTS]") and (LVar1 < 25)) do begin
LVar1 := LVar1 + 1;
end
LVar1 := LVar1 + 1;
while((LVar1 < 25) and (message_str(2, cur_section_start + LVar1) != "Error") and (message_str(2, cur_section_start) == "[ITEM]")) do begin
LVar2 := atoim(message_str(2, cur_section_start + LVar1), "");
LVar3 := atoim(message_str(2, cur_section_start + LVar1), LVar2 + ":");
restock_obj := create_object_sid(LVar2, 0, 0, -1);
add_mult_objs_to_inven(dude_obj, restock_obj, LVar3 * arg0);
LVar1 := LVar1 + 1;
end
removed_qty := obj_is_carrying_obj_pid(dude_obj, cur_pid);
if (arg0 < removed_qty) then begin
removed_qty := arg0;
end
if (removed_qty > 0) then begin
restock_obj := obj_carrying_pid_obj(dude_obj, cur_pid);
if (obj_type(self_obj) == 1) then begin
restock_obj := obj_carrying_pid_obj(dude_obj, cur_pid);
if (critter_inven_obj(self_obj, 0) == restock_obj) then begin
if (obj_item_subtype(critter_inven_obj(dude_obj, 0)) == 0) then begin
restock_obj := critter_inven_obj(dude_obj, 0);
debug_msg("armour pid == " + obj_pid(restock_obj));
rm_obj_from_inven(dude_obj, restock_obj);
add_obj_to_inven(dude_obj, restock_obj);
end
end
else begin
if ((critter_inven_obj(dude_obj, 2) == restock_obj) or (critter_inven_obj(dude_obj, 1) == restock_obj)) then begin
metarule(43, dude_obj);
end
end
end
restock_amt := rm_mult_objs_from_inven(dude_obj, restock_obj, removed_qty);
destroy_object(restock_obj);
end
restock_obj := 0;
restock_amt := 0;
LVar4 := cur_time * arg0 / (60 * 10) / 60;
LVar5 := cur_time * arg0 / (60 * 10) % 60;
display_msg(message_str(2, 401) + proto_data(cur_pid, 1) + message_str(2, 402) + arg0 + message_str(2, 403) + LVar4 + message_str(2, 404) + LVar5 + message_str(2, 405));
call undo_ok_mode;
end

procedure batch_one_item
begin
call batch_item(1);
end

procedure batch_all_items
begin
call batch_item(max);
end

procedure undo_one_item
begin
call undo_batch(1);
end

procedure undo_all_items
begin
call undo_batch(max_undo);
end

procedure loop_mode
begin
while(mode != -1) do begin
if (mode == 1) then begin
call display_items_list;
end
else begin
if (mode == 2) then begin
call display_item_options;
end
else begin
if (mode == 3) then begin
call display_batch_ok;
end
else begin
if (mode == 4) then begin
call display_undo_ok;
end
end
end
end
end
end

procedure batch_init
begin
mode := 1;
cur_section_start := 500;
cur_pos := 0;
call count_items_avail;
setFont(5);
setTextColor(0.00000, 1.00000, 0.00000);
setHighlightColor(1.00000, 1.00000, 1.00000);
setHighlightColor(1.00000, 1.00000, 0.64000);
sayReplyWindow(300, 1, 340, 179, "PCX/w_rep.pcx");
sayOptionWindow(300, 180, 340, 199, "PCX/w_opt.pcx");
sayBorder(25, 25);
createWin("win_dscr", 1, 1, 300, 378);
selectWin("win_dscr");
display("PCX/w_dscr.pcx");
showWin;
call loop_mode;
deleteWin("win_dscr");
end

procedure redraw_win_dscr
begin
deleteWin("win_dscr");
createWin("win_dscr", 1, 1, 300, 378);
selectWin("win_dscr");
display("PCX/w_dscr.pcx");
showWin;
end

procedure redraw_win_idle
begin
deleteWin("win_dscr");
createWin("win_dscr", 1, 1, 300, 378);
selectWin("win_dscr");
display("PCX/w_idle.pcx");
showWin;
end

procedure ChooseFromList
begin
variable LVar0 := 0;
gsay_reply(1, stored_msg);
if (message_str(353, top_msg - 1) != "") then begin
giq_option(1, 1, message_str(353, 150), CLICK_PREV, 50);
end
if (LVar0 == 0) then begin
if (message_str(353, top_msg + 0) != "") then begin
giq_option(1, 1, message_str(353, top_msg + 0), CLICK_0, 50);
end
else begin
LVar0 := 1;
end
end
if (LVar0 == 0) then begin
if (message_str(353, top_msg + 1) != "") then begin
giq_option(1, 1, message_str(353, top_msg + 1), CLICK_1, 50);
end
else begin
LVar0 := 1;
end
end
if (LVar0 == 0) then begin
if (message_str(353, top_msg + 2) != "") then begin
giq_option(1, 1, message_str(353, top_msg + 2), CLICK_2, 50);
end
else begin
LVar0 := 1;
end
end
if (LVar0 == 0) then begin
if (message_str(353, top_msg + 3) != "") then begin
giq_option(1, 1, message_str(353, top_msg + 3), CLICK_3, 50);
end
else begin
LVar0 := 1;
end
end
if (LVar0 == 0) then begin
if (message_str(353, top_msg + 4) != "") then begin
giq_option(1, 1, message_str(353, top_msg + 4), CLICK_4, 50);
end
else begin
LVar0 := 1;
end
end
if (LVar0 == 0) then begin
if (message_str(353, top_msg + 5) != "") then begin
giq_option(1, 1, message_str(353, 151), CLICK_MORE, 50);
end
end
end

procedure CLICK_PREV
begin
top_msg := top_msg - 5;
call ChooseFromList;
end

procedure CLICK_0
begin
set_global_var(var_num, (global_var(var_num) / 100 * 100) + (top_msg % 100));
call stored_node;
end

procedure CLICK_1
begin
set_global_var(var_num, (global_var(var_num) / 100 * 100) + ((top_msg + 1) % 100));
call stored_node;
end

procedure CLICK_2
begin
set_global_var(var_num, (global_var(var_num) / 100 * 100) + ((top_msg + 2) % 100));
call stored_node;
end

procedure CLICK_3
begin
set_global_var(var_num, (global_var(var_num) / 100 * 100) + ((top_msg + 3) % 100));
call stored_node;
end

procedure CLICK_4
begin
set_global_var(var_num, (global_var(var_num) / 100 * 100) + ((top_msg + 4) % 100));
call stored_node;
end

procedure CLICK_MORE
begin
top_msg := top_msg + 5;
call ChooseFromList;
end

procedure getTimeBit
begin
variable LVar0 := 0;
LVar0 := game_time_hour;
if ((LVar0 >= 100) and (LVar0 <= 159)) then begin
return 1;
end
if ((LVar0 >= 200) and (LVar0 <= 259)) then begin
return 2;
end
if ((LVar0 >= 300) and (LVar0 <= 359)) then begin
return 4;
end
if ((LVar0 >= 400) and (LVar0 <= 459)) then begin
return 8;
end
if ((LVar0 >= 500) and (LVar0 <= 559)) then begin
return 16;
end
if ((LVar0 >= 600) and (LVar0 <= 659)) then begin
return 32;
end
if ((LVar0 >= 700) and (LVar0 <= 759)) then begin
return 64;
end
if ((LVar0 >= 800) and (LVar0 <= 859)) then begin
return 128;
end
if ((LVar0 >= 900) and (LVar0 <= 959)) then begin
return 256;
end
if ((LVar0 >= 1000) and (LVar0 <= 1059)) then begin
return 512;
end
if ((LVar0 >= 1100) and (LVar0 <= 1159)) then begin
return 1024;
end
if ((LVar0 >= 1200) and (LVar0 <= 1259)) then begin
return 2048;
end
if ((LVar0 >= 1300) and (LVar0 <= 1359)) then begin
return 4096;
end
if ((LVar0 >= 1400) and (LVar0 <= 1459)) then begin
return 8192;
end
if ((LVar0 >= 1500) and (LVar0 <= 1559)) then begin
return 16384;
end
if ((LVar0 >= 1600) and (LVar0 <= 1659)) then begin
return 32768;
end
if ((LVar0 >= 1700) and (LVar0 <= 1759)) then begin
return 65536;
end
if ((LVar0 >= 1800) and (LVar0 <= 1859)) then begin
return 131072;
end
if ((LVar0 >= 1900) and (LVar0 <= 1959)) then begin
return 262144;
end
if ((LVar0 >= 2000) and (LVar0 <= 2059)) then begin
return 524288;
end
if ((LVar0 >= 2100) and (LVar0 <= 2159)) then begin
return 1048576;
end
if ((LVar0 >= 2200) and (LVar0 <= 2259)) then begin
return 2097152;
end
if ((LVar0 >= 2300) and (LVar0 <= 2359)) then begin
return 4194304;
end
if ((LVar0 >= 0) and (LVar0 <= 100)) then begin
return 8388608;
end
end

procedure start
begin
if (local_var(0) == 0) then begin
set_local_var(0, game_time);
set_global_var(104, global_var(104) + 1);
if (global_var(104) < 0) then begin
set_global_var(104, 0);
end
else begin
if (global_var(104) > (100 + (2 * (get_critter_stat(dude_obj, 2) - 10)))) then begin
set_global_var(104, 100 + (2 * (get_critter_stat(dude_obj, 2) - 10)));
end
end
end
end

procedure timed_event_p_proc
begin
if (fixed_param == 1) then begin
critter_dmg(self_obj, 400, 0);
display_msg(message_str(14, 400));
end
else begin
if (fixed_param == 2) then begin
if ((global_var(173) == 3) and global_var(172)) then begin
move_to(dude_obj, tile_num(dude_obj), 1);
gfade_in(1);
end
end
else begin
if (fixed_param == 3) then begin
if (not(Check_Bess_Float)) then begin
add_timer_event(dude_obj, 1, 3);
end
end
else begin
if (fixed_param == 4) then begin
set_global_var(630, game_time + (7 * (24 * (60 * (60 * 10))) * 2));
end
end
end
end
end

procedure critter_p_proc
begin
if (global_var(630) != 0) then begin
if ((game_time > global_var(630)) and not((global_var(429) bwand 2) != 0) and (cur_map_index != 40)) then begin
set_global_var(582, global_var(582) bwor 1);
set_global_var(630, 0);
end
end
if (global_var(695) == 1) then begin
if (not(combat_is_initialized)) then begin
script_overrides;
set_global_var(695, 0);
call batch_init;
end
end
end

procedure map_enter_p_proc
begin
end

procedure combat_p_proc
begin
if (cur_map_index == 55) then begin
if (prize_fighter_obj == 0) then begin
end
else begin
if (fixed_param == 4) then begin
if (global_var(507) != 0) then begin
if ((((global_var(507) - game_time) / 10) <= 0) and (global_var(507) != 0)) then begin
last_timed_obj := prize_fighter_obj;
last_timed_param := last_timed_param;
metarule3(100, prize_fighter_obj, 42, 0);
add_timer_event(prize_fighter_obj, 0, 42);
end
else begin
if ((critter_state(dude_obj) bwand 2) or (critter_state(prize_fighter_obj) bwand 2)) then begin
last_timed_obj := prize_fighter_obj;
last_timed_param := last_timed_param;
metarule3(100, prize_fighter_obj, 41, 0);
add_timer_event(prize_fighter_obj, 0, 41);
end
end
end
end
end
end
end

procedure map_update_p_proc
begin
variable LVar0 := 0;
variable LVar1 := 0;
LVar0 := (1 + has_trait(1, dude_obj, 0)) * (game_time - local_var(0)) / (60 * 10 * 3);
if (LVar0 > 0) then begin
set_global_var(104, global_var(104) + 1);
if (global_var(104) < 0) then begin
set_global_var(104, 0);
end
else begin
if (global_var(104) > (100 + (2 * (get_critter_stat(dude_obj, 2) - 10)))) then begin
set_global_var(104, 100 + (2 * (get_critter_stat(dude_obj, 2) - 10)));
end
end
end
if (global_var(192) == 0) then begin
if (global_var(193) > 0) then begin
LVar1 := (game_time / (10 * 60 * 60 * 24)) - global_var(133);
if (LVar1 > 30) then begin
if (global_var(193) < 5) then begin
display_msg(message_str(1, 140));
set_global_var(193, 5);
set_global_var(192, 1);
end
end
else begin
if (LVar1 > 25) then begin
if (global_var(193) < 4) then begin
display_msg(message_str(1, 130));
set_global_var(193, 4);
end
end
else begin
if (LVar1 > 20) then begin
if (global_var(193) < 3) then begin
display_msg(message_str(1, 120));
set_global_var(193, 3);
end
end
else begin
if (LVar1 > 15) then begin
if (global_var(193) < 2) then begin
display_msg(message_str(1, 110));
set_global_var(193, 2);
end
end
end
end
end
end
end
if (self_obj) then begin
if (obj_carrying_pid_obj(self_obj, 366) and not(global_var(629))) then begin
set_global_var(629, 1);
display_msg(message_str(1, 150) + 4000 + message_str(1, 151));
give_exp_points(4000);
end
end
end

procedure is_dropping_p_proc
begin
if (obj_pid(source_obj) == 366) then begin
script_overrides;
display_msg(message_str(14, 1099));
end
end

procedure Check_Bess_Float
begin
if (tile_distance(19894, tile_num(dude_obj)) < 10) then begin
if (not(Did_Bess_Float)) then begin
Did_Bess_Float := 1;
float_msg(dude_obj, message_str(1, 141), 0);
end
return 1;
end
return 0;
end

procedure use_obj_on_p_proc
begin
if (source_obj == dude_obj) then begin
if ((obj_being_used_with == 106) or (obj_being_used_with == 124) or (obj_being_used_with == 125) or (obj_being_used_with == 126)) then begin
set_global_var(104, global_var(104) + 1);
if (global_var(104) < 0) then begin
set_global_var(104, 0);
end
else begin
if (global_var(104) > (100 + (2 * (get_critter_stat(dude_obj, 2) - 10)))) then begin
set_global_var(104, 100 + (2 * (get_critter_stat(dude_obj, 2) - 10)));
end
end
end
else begin
if ((obj_being_used_with == 81) or (obj_being_used_with == 103)) then begin
set_global_var(104, global_var(104) + 1);
if (global_var(104) < 0) then begin
set_global_var(104, 0);
end
else begin
if (global_var(104) > (100 + (2 * (get_critter_stat(dude_obj, 2) - 10)))) then begin
set_global_var(104, 100 + (2 * (get_critter_stat(dude_obj, 2) - 10)));
end
end
end
else begin
if ((obj_being_used_with == 226) or (obj_being_used_with == 227)) then begin
set_global_var(104, global_var(104) + 1);
if (global_var(104) < 0) then begin
set_global_var(104, 0);
end
else begin
if (global_var(104) > (100 + (2 * (get_critter_stat(dude_obj, 2) - 10)))) then begin
set_global_var(104, 100 + (2 * (get_critter_stat(dude_obj, 2) - 10)));
end
end
end
else begin
if (0) then begin
set_global_var(104, global_var(104) + 1);
if (global_var(104) < 0) then begin
set_global_var(104, 0);
end
else begin
if (global_var(104) > (100 + (2 * (get_critter_stat(dude_obj, 2) - 10)))) then begin
set_global_var(104, 100 + (2 * (get_critter_stat(dude_obj, 2) - 10)));
end
end
end
else begin
if (0) then begin
set_global_var(104, global_var(104) + 1);
if (global_var(104) < 0) then begin
set_global_var(104, 0);
end
else begin
if (global_var(104) > (100 + (2 * (get_critter_stat(dude_obj, 2) - 10)))) then begin
set_global_var(104, 100 + (2 * (get_critter_stat(dude_obj, 2) - 10)));
end
end
end
else begin
if (0) then begin
set_global_var(104, global_var(104) + 1);
if (global_var(104) < 0) then begin
set_global_var(104, 0);
end
else begin
if (global_var(104) > (100 + (2 * (get_critter_stat(dude_obj, 2) - 10)))) then begin
set_global_var(104, 100 + (2 * (get_critter_stat(dude_obj, 2) - 10)));
end
end
end
end
end
end
end
end
end
end

procedure description_p_proc
begin
end


Ich finde es ist eine schlechte Lösung, guckt euch den Code an.
Er knallt den ganzen use_obj handler voll ach und sowieso...
« Letzte Änderung: 02. November 2008, 22:25:53 Uhr von Mr.Wolna »

Si vis pacem, para bellum.

Offline Mr.Wolna

  • Moderator
  • Heilige Granate
  • Beiträge: 7.049
  • >>>FALLOUT4EVER<<<
Re: Engine Button
« Antwort #1 am: 02. November 2008, 22:11:20 Uhr »
 :wtf


whoha, ich habe noch nie so nen riseen script für FO gesehen. Ich dachte der macht es direkt über die Engine.
RPÜ/German Restoration Project Tanslation
Ich habe ein Gewehr, eine Schaufel und 5 Hektar Land hinter dem Haus. Man wird dich nie finden - leg dich also nicht mit mir an!  
P.s. Nein es ist nicht die Gewalt was mich an der Fallout Reihe gereizt hat,aber sie war immer die Kirsche auf der Sahnetorte ( Und ich will verdammt nochmal ne Kirsche oben drauf haben)

Offline Helios2000

  • BoS Neuling
  • Beiträge: 551
  • Si vis pacem, para bellum
Re: Engine Button
« Antwort #2 am: 02. November 2008, 22:17:22 Uhr »
Wolna, das ist dude+fixit+sein kram. Meine dude ist leider noch länger, aber nicht so unsauber.
Vorallem kann man meine neue nicht mehr decompilieren ;)

Si vis pacem, para bellum.

Offline Micky

  • FoCafé Member
  • Heilige Granate
  • Beiträge: 4.319
  • Don't f* with teh gorilla, cause teh gorilla f* u!
    • Fallout RPG-Forum
Re: Engine Button
« Antwort #3 am: 02. November 2008, 22:25:35 Uhr »
Helios du kannst dem Forum nicht einfach den Rücken zukehren! Nur weil irgendso ein Russe denkt er macht bessere Buttons wie du. Ich hab mir die Dinger nicht angeschaut, aber die sind bestimmt nicht mal halb so gut wie deine. Von deinem Geheimprojekt will ich gar nicht reden, dass soll der Mistkerl erstmal nachmachen. Du als Fallout Modding Genie solltest wenigstens deinen Arsch hochkriegen und die BoS Mod fertig machen. Kann mich noch erinnern das du und Wolna die um jeden Preis fertigmachen wolltet. Ansonsten wäre ich schon sehr enttäuscht von dir, hab dich anders eingeschätzt. Was bei Zero abgeht geht mir nichts an, da misch ich mich auch net ein. Ich hab nur irgendwas gehört das es da grad auch nicht optimal läuft. Wenn du deine Account löschen würdest wäre das ein riesiger Verlust für unsere Community, also bitte komm zu Vernunft Kumpel!


Brian Fargo während der Arbeit an Wasteland 2 zum Thema 'Publisher': "I don’t have any crazy people in my office telling me what to do."

Offline Mr.Wolna

  • Moderator
  • Heilige Granate
  • Beiträge: 7.049
  • >>>FALLOUT4EVER<<<
Re: Engine Button
« Antwort #4 am: 02. November 2008, 22:27:37 Uhr »
@Helios, was glaubst du wie ich mich fühle, er macht auch die Option button, dann ist meine Projekt fürn Artsch -.-

RPÜ/German Restoration Project Tanslation
Ich habe ein Gewehr, eine Schaufel und 5 Hektar Land hinter dem Haus. Man wird dich nie finden - leg dich also nicht mit mir an!  
P.s. Nein es ist nicht die Gewalt was mich an der Fallout Reihe gereizt hat,aber sie war immer die Kirsche auf der Sahnetorte ( Und ich will verdammt nochmal ne Kirsche oben drauf haben)

Offline Helios2000

  • BoS Neuling
  • Beiträge: 551
  • Si vis pacem, para bellum
Re: Engine Button
« Antwort #5 am: 03. November 2008, 17:48:13 Uhr »
Ich werde mich bis auf weiteres in den Urlaub verabschieden,
es ist das beste wenn ich erstmal generell eine Pause vom PC einlege, ich hoffe ihr habt dafür Verständniss.
Und nein es liegt nicht daran, das Ray Engine Buttons gemacht hat. Es hat vielschichtige Gründe.

Allerdings will ich euch noch kurz etwas zu seiner Methode sagen:
Ich weiß das wahrscheinlich keiner von euch richtig versteht wie sfall funktioniert, geschweige den Assembler Code lesen kann.
Deshalb bin ich den Weg gegangen, es über Scripts zu realisieren. Also über die erweiterten
Scriptfunktionen. Habe selber noch einige neue Kandiaten ausfindig gemacht, wie man im sfall thread nachlesen kann.
Es ist momentan möglich die ganze Fo Engine Scriptseitig auszuwerten und bald sogar sie
über Scripts zu manipulieren. Wie gesagt das ist der Weg den ich Gewählt habe.

Ray hat es nur über die Engine umgesetzt. Das bedeutet, er definiert alles über
sfall Funktionen und ruft diese dann nur über eine globale Variable auf. Wobei mir sein genereller Styl überhaupt nicht gefällt.

Konsequenz: Momentan kann er nur 9 neue Buttons definieren. Und diese werden momentan nur über Sfall definiert.
Also ist es sozusagen dann wieder hardcodet aber diesmal in Sfall. Also, Positionen, Bilder, Sound, callback Function.
Timeslip hat 3 bzw. 4 Möglichkeiten.
1.Er baut das alles um und gibt es als zusätzlichen befehl mit zu den Scripts. Dann könnte man die Parameter Variable fassen.
2.Er legt die Einstellungen,  in die .ini. Zwar auch Variable, aber die .ini umfasst jetzt schon mehrere Seiten.
3.Er baut es so ein wie es ist. Also nur Zugängi für Leute die sfall verändern und neu compilieren können.
4.Er baut es gar nicht ein. Was aber unwahrscheinlich ist.

Achso vom "Ingame" spiel Gefühl, ist es eigentlich egal.
Da dürften beide Buttonarten ziemlich gleich sein.
Und ja es ist auch ziemlich egal wo man die Buttons hinhaben will. Meine Buttons lassen sich
auch in jedes andere Vorhandene Menü einbauen, wenn man weiß wie sowas geht.

So damit man überhaut weiß wovon ich hier rede, noch ein paar Bilder:
http://www.bilder-space.de/show.php?file=bQh2tTN6IUgfm7B.JPG
http://www.bilder-space.de/show.php?file=vNPkgPtEVD4XuLb.JPG
http://www.bilder-space.de/show.php?file=1WUahqa2XVaBvLF.JPG

Natürlich ist es zum Beispiel mit  "read_int(4578308);" möglich die X-Achse des Skill Buttons auszulesen,
nur ist es momentan noch nicht möglich die Position per Script zu ändern. Deshalb habe ich
erstmal das andere Design gewählt. Aber sobald write_int() eingebaut ist wird auch das gehen, wie oben erläutert.

So, dann wünsche ich euch eine gute Zeit, und bis in ein paar Wochen ;)

Si vis pacem, para bellum.

Offline Mr.Wolna

  • Moderator
  • Heilige Granate
  • Beiträge: 7.049
  • >>>FALLOUT4EVER<<<
Re: Engine Button
« Antwort #6 am: 03. November 2008, 18:15:43 Uhr »
Helios es wäre ein traum, wenn ich die Engine per global scripte verändern könnte, ich hoffe di verfolgst das weiter, wenn du für deinen Urlaub zurück kommst, denn dann bin ich ebenfalls am Start, und wir ziehen es dann zusammen richtig durch (dann bin ich auch immer da).

Denn Umständen entsprechend möchte ich ebenfalls meine Pause ankündigen, allerdings nur was das Fallout Modden angeht, d.H. ich bin immer noch aktiv hier im Board. Warum ich mich so entscheide hat mehrere Gründe.

1.Ich habe dann Zeit, endlich mehr Zeit für das Board, d.H. das fertig zu machen, was ich versprochen habe (Ich vergesse nie meine Versprechen).
Das wären die fehlenden Buttons, das zu Ende übersetzen von meinen Perk Tutorial und der Van Buren Beitrag für die Homepage, sowie das zu Ende scripten des Tols "Fallout Forum Keys".

2. Hab ich ebenfalls ne Pause vom modden nötig, (AHK bedinngt ) weil ich grad nur damit unterwegs bin und den Syntax lerne!

3. Kann ich sowieso, die Metzger Mod ohne gewisse Leute(die jetz ebenfalls nicht können) veröffentlichen!

4. Helios macht ne Pause, und die Zeit passt mir auch, wenn er dann wider da ist, starten wir richtig durch!

So siehts aus ;)

MfG
Wolna
RPÜ/German Restoration Project Tanslation
Ich habe ein Gewehr, eine Schaufel und 5 Hektar Land hinter dem Haus. Man wird dich nie finden - leg dich also nicht mit mir an!  
P.s. Nein es ist nicht die Gewalt was mich an der Fallout Reihe gereizt hat,aber sie war immer die Kirsche auf der Sahnetorte ( Und ich will verdammt nochmal ne Kirsche oben drauf haben)

Offline Helios2000

  • BoS Neuling
  • Beiträge: 551
  • Si vis pacem, para bellum
Re: Engine Button
« Antwort #7 am: 25. November 2008, 21:20:25 Uhr »
So erstmal ein kleiner Screenshot  ;D

http://www.bilder-space.de/show.php?file=25.11sARQxJStMjAUOBa.JPG

Also es ist ohne weiteres möglich die Positionen der Buttons zu verändern. Die Tage werde ich eine sfall version mit einer dementsprechenden *.ini Veröffentlichen.
Desweiteren ist es mir bisher möglich die größe der Buttons und die Button Images zu verändern, allerdings noch nicht alle aber bin dran ;)

Wie gesagt ich spreche über die Engine Buttons, nicht über die Script Buttons.

Si vis pacem, para bellum.

Offline Lexx

  • Administrator
  • Auserwähltes Wesen
  • Beiträge: 17.726
Re: Engine Button
« Antwort #8 am: 25. November 2008, 21:50:00 Uhr »
Hast du dich jetzt an die Version von dingsbums orientiert und die Buttons in den Sfall Code geschrieben?
only when you no-life you can exist forever, because what does not live cannot die

Offline Helios2000

  • BoS Neuling
  • Beiträge: 551
  • Si vis pacem, para bellum
Re: Engine Button
« Antwort #9 am: 25. November 2008, 22:19:31 Uhr »
Nein das sind die Original Buttons, sieht man vielleicht etwas schlecht wegen dem iface.frm.

Hier mit schwarzem iface.frm :
http://www.bilder-space.de/show.php?file=25.11XyR9ApM6KoXZtsF.JPG

Mir reicht es wenn man die Engine Buttons einfach editieren kann.
Wie gesagt ich denke das es per Script besser und vor allem einfacher geht neue Buttons zu machen.
Es ist eine Abwägung... alles hat so seine vor und nachteile.
Ich meine gucken wir mal was timeslip macht aber bisher hat er sich ja zu den Buttons nicht geäußert.

 

Si vis pacem, para bellum.

Offline Lexx

  • Administrator
  • Auserwähltes Wesen
  • Beiträge: 17.726
Re: Engine Button
« Antwort #10 am: 25. November 2008, 22:53:36 Uhr »
Glaube, von Timeslip brauchen wir in nächster Zeit nicht viel zu erwarten. Er arbeitet zur Zeit an den Fallout 3 Tools usw. Ich würde sogar so weit gehen und sagen, es kann eine ganze Weile dauern bis aus der Richtung überhaupt wieder irgendwas kommen wird.
only when you no-life you can exist forever, because what does not live cannot die

Offline Mr.Wolna

  • Moderator
  • Heilige Granate
  • Beiträge: 7.049
  • >>>FALLOUT4EVER<<<
Re: Engine Button
« Antwort #11 am: 25. November 2008, 23:29:48 Uhr »
*g* Was will er mit Fallout 3? Egal wie mann das moddet, die typischen Elemente z.b. das scheiß Kampfsystem und das allgemeine Gameplay werden immer gleich bleiben , d.h. kein Fo Feeling, und daß heißt, für mich persönlich egal wie mann f3 modden will, es wird nie ein guter Nachfolger.
RPÜ/German Restoration Project Tanslation
Ich habe ein Gewehr, eine Schaufel und 5 Hektar Land hinter dem Haus. Man wird dich nie finden - leg dich also nicht mit mir an!  
P.s. Nein es ist nicht die Gewalt was mich an der Fallout Reihe gereizt hat,aber sie war immer die Kirsche auf der Sahnetorte ( Und ich will verdammt nochmal ne Kirsche oben drauf haben)

Offline Lexx

  • Administrator
  • Auserwähltes Wesen
  • Beiträge: 17.726
Re: Engine Button
« Antwort #12 am: 25. November 2008, 23:31:49 Uhr »
Er hat seine Tweaks usw. für Morrowind und Oblivion geschrieben. Als Fallout 3 _richtig_ in Entwicklung war, ist er bei NMA angekommen. Die Zeit in der Fallout 3 in Arbeit war, hat er sich recht viel mit Fallout 1, 2 bzw. seinen Tweaks beschäftigt. Jetzt ist Fallout 3 draußen, es ist von Bethesda, es ist wie Oblivion -> Man muss kein super Intelligenzbolzen sein, um 1 und 1 zusammen zu zählen.
only when you no-life you can exist forever, because what does not live cannot die

Offline Mr.Wolna

  • Moderator
  • Heilige Granate
  • Beiträge: 7.049
  • >>>FALLOUT4EVER<<<
Re: Engine Button
« Antwort #13 am: 26. November 2008, 10:07:34 Uhr »
ja leider :( schade, das ganze.. gut das wir helios haben , was;)
RPÜ/German Restoration Project Tanslation
Ich habe ein Gewehr, eine Schaufel und 5 Hektar Land hinter dem Haus. Man wird dich nie finden - leg dich also nicht mit mir an!  
P.s. Nein es ist nicht die Gewalt was mich an der Fallout Reihe gereizt hat,aber sie war immer die Kirsche auf der Sahnetorte ( Und ich will verdammt nochmal ne Kirsche oben drauf haben)

Offline Helios2000

  • BoS Neuling
  • Beiträge: 551
  • Si vis pacem, para bellum
Re: Engine Button
« Antwort #14 am: 26. November 2008, 14:14:05 Uhr »
Ja keine Angst so schwierig ist sfall auch nicht zu verstehen bzw. zu ändern.
Allerdings ist mein Assembler Skill noch etwas niedrig  :s000:
Wenn es ansonsten  noch wünsche gibt oder sowas müsst ihr mir bescheid sagen, ich kann dann gucken ob es machbar wäre.

Ja Wolna ich weiß was du dir wünschst ;) Ich meine darüber hinaus.

Also ich habe die nächsten Tage geplant:

1. Das ganze iface variable zu machen(erstmal nur per *.ini), wahrscheinlich erstmal auch nur die Positionierung und eventuell die größe. Also vom iface selber und den Buttons. Wozu für mich auch der Bildschirm Links gehört, besonders bei einer höheren Auflösung finde ich ihn viel zu klein.

2. Meine write_int() funktion zu verbessern. Es ist momentan so das man damit zwar ohne Abstürze die Engine umschreiben kann, allerdings gibt es Bereiche bei denen die Änderungen keine Folgen ingame haben. Das jetzt zu erklären ist etwas zu kompliziert bin aber zuversichtlich das auch noch anzupassen.

3. Arbeite ich zur Zeit an neuen Headern, das hat den Hintergrund das ihr (Fo modder) dann nicht mehr mit den Abstrakten Offsets hantieren müsst.
Ein kleines Beispiel:
#define get_mouse_pos_x read_int(6997908) //Mouse X Position
#define get_mouse_pos_y read_int(6997916) //Mouse Y Position
#define get_mouse_pressed read_int(5366444) //Mouse Press: 0=No, 1=Left Button, 2=Right Button, 3=Left+Right

Das gleiche gilt natürlich auch für write_int().


Die Offset suche habe ich übrigens durch einen Script wesentlich vereinfacht ;)
Man gibt die Start und End Position der Suche ein (theoretisch könnte man auch ganz Fallout in einem Zug auswerten). Zusätzlich grenzt man den Wert ein den die Offset enthalten soll also zum Beispiel zwischen 1-100. Ingame drückt man dann ne Taste und schon wird gesucht und die Ergebnisse in der Log gespeichert.
Das sieht dann zum Beispiel so aus:
Zitat
Offset: 4578008
Value0: 34
Offset: 4578013
Value1: 62
Offset: 4578020
Value2: 210
Offset: 4578083
Value3: 6
Offset: 4578144
Value4: 7
Offset: 4578149
Value5: 6
Offset: 4578210
Value6: 6
Offset: 4578296
Value7: 22
Offset: 4578301
Value8: 6
Offset: 4578308
Value9: 523
...
...

Das sind übrigens die Offsets + Werte für einen Teil der Buttons  :s000:
Dieser Script erspart einem also sehr viel Arbeit wenn man weiss wo man nach welchen Werten suchen muss. Kann mehrere tausend Offsets in der Sekunde auswerten je nach Methode bräuchte man dafür unter Umständen sonst Tage.

Si vis pacem, para bellum.

Offline Mr.Wolna

  • Moderator
  • Heilige Granate
  • Beiträge: 7.049
  • >>>FALLOUT4EVER<<<
Re: Engine Button
« Antwort #15 am: 26. November 2008, 15:02:59 Uhr »
sehr schön endlich macht mal einer, das was ich seit jahren rumposaune.

Helios, eine offset für einen 4rten Preamde cahr wäre schön ;)
RPÜ/German Restoration Project Tanslation
Ich habe ein Gewehr, eine Schaufel und 5 Hektar Land hinter dem Haus. Man wird dich nie finden - leg dich also nicht mit mir an!  
P.s. Nein es ist nicht die Gewalt was mich an der Fallout Reihe gereizt hat,aber sie war immer die Kirsche auf der Sahnetorte ( Und ich will verdammt nochmal ne Kirsche oben drauf haben)

Offline Jordan

  • Bürger
  • Beiträge: 18
Re: Engine Button
« Antwort #16 am: 27. November 2008, 17:08:04 Uhr »
Helios2000

Zitat
http://www.bilder-space.de/show.php?file=25.11XyR9ApM6KoXZtsF.JPG

You can show the script buttons? How does write_int change the coordinates of the buttons.


Offline Helios2000

  • BoS Neuling
  • Beiträge: 551
  • Si vis pacem, para bellum
Re: Engine Button
« Antwort #17 am: 28. November 2008, 23:22:32 Uhr »
Very simple ;D

Add this to your ddraw.ini:
[Iface]

;Iface Position
IfacXPos=-1
IfacYPos=-1

;Hand Slot Position
HSloXPos=-1
HSloYPos=-1

;Hand Slot Button Position
SloBXPos=-1
SloBYPos=-1

;Char Button Position
ChaBXPos=-1
ChaBYPos=-1

;Inventory Button Position
InvBXPos=-1
InvBYPos=-1

;Skilldex Button Position
SkiBXPos=-1
SkiBYPos=-1

;Map Button Position
MapBXPos=-1
MapBYPos=-1

;Pipboy Button Position
PipBXPos=-1
PipBYPos=-1

;Map Button Position
OptBXPos=-1
OptBYPos=-1

And use this sfall Version:
http://www.file-upload.net/download-1283347/ddraw.dll.html

Si vis pacem, para bellum.