Engine Button

Hilfe bei der Erstellung von Fallout 1 / 2 Modifikationen, sowie Werbung und Ankündigungen.

Moderators: Newsposter, Global Moderator, Zugriff Intern, Moderator

Post Reply
User avatar
Helios2000
Paladin
Posts: 660
Joined: Tue Aug 15, 2006 2:35 pm
Contact:

Engine Button

Post by Helios2000 »

Hier seine decompilierte dude_obj:
[spoiler]

Code: Select all

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

[/spoiler]

Ich finde es ist eine schlechte Lösung, guckt euch den Code an.
Er knallt den ganzen use_obj handler voll ach und sowieso...
Last edited by Helios2000 on Sun Nov 02, 2008 10:25 pm, edited 1 time in total.
Image
Si vis pacem, para bellum.
User avatar
Mr.Wolna
Moderator
Posts: 12939
Joined: Sun Oct 28, 2007 8:54 pm

Re: Engine Button

Post by Mr.Wolna »

: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!   <br />
Ashbury wrote: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)
User avatar
Helios2000
Paladin
Posts: 660
Joined: Tue Aug 15, 2006 2:35 pm
Contact:

Re: Engine Button

Post by Helios2000 »

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 ;)
Image
Si vis pacem, para bellum.
User avatar
Micky
FoCafé Member
Posts: 8168
Joined: Fri Jun 20, 2008 1:01 am
Location: Amberg
Contact:

Re: Engine Button

Post by Micky »

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!
Image

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."
User avatar
Mr.Wolna
Moderator
Posts: 12939
Joined: Sun Oct 28, 2007 8:54 pm

Re: Engine Button

Post by Mr.Wolna »

@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!   <br />
Ashbury wrote: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)
User avatar
Helios2000
Paladin
Posts: 660
Joined: Tue Aug 15, 2006 2:35 pm
Contact:

Re: Engine Button

Post by Helios2000 »

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?fil ... Ugfm7B.JPG
http://www.bilder-space.de/show.php?fil ... D4XuLb.JPG
http://www.bilder-space.de/show.php?fil ... VaBvLF.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 ;)
Image
Si vis pacem, para bellum.
User avatar
Mr.Wolna
Moderator
Posts: 12939
Joined: Sun Oct 28, 2007 8:54 pm

Re: Engine Button

Post by Mr.Wolna »

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!   <br />
Ashbury wrote: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)
User avatar
Helios2000
Paladin
Posts: 660
Joined: Tue Aug 15, 2006 2:35 pm
Contact:

Re: Engine Button

Post by Helios2000 »

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.
Image
Si vis pacem, para bellum.
User avatar
Lexx
Administrator
Posts: 27348
Joined: Sat Dec 10, 2005 6:27 pm

Re: Engine Button

Post by Lexx »

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
User avatar
Helios2000
Paladin
Posts: 660
Joined: Tue Aug 15, 2006 2:35 pm
Contact:

Re: Engine Button

Post by Helios2000 »

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.
Image
Si vis pacem, para bellum.
User avatar
Lexx
Administrator
Posts: 27348
Joined: Sat Dec 10, 2005 6:27 pm

Re: Engine Button

Post by Lexx »

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
User avatar
Mr.Wolna
Moderator
Posts: 12939
Joined: Sun Oct 28, 2007 8:54 pm

Re: Engine Button

Post by Mr.Wolna »

*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!   <br />
Ashbury wrote: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)
User avatar
Lexx
Administrator
Posts: 27348
Joined: Sat Dec 10, 2005 6:27 pm

Re: Engine Button

Post by Lexx »

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
User avatar
Mr.Wolna
Moderator
Posts: 12939
Joined: Sun Oct 28, 2007 8:54 pm

Re: Engine Button

Post by Mr.Wolna »

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!   <br />
Ashbury wrote: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)
User avatar
Helios2000
Paladin
Posts: 660
Joined: Tue Aug 15, 2006 2:35 pm
Contact:

Re: Engine Button

Post by Helios2000 »

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:

Code: Select all

#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:
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.
Image
Si vis pacem, para bellum.
User avatar
Mr.Wolna
Moderator
Posts: 12939
Joined: Sun Oct 28, 2007 8:54 pm

Re: Engine Button

Post by Mr.Wolna »

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!   <br />
Ashbury wrote: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)
User avatar
Jordan
Bürger
Posts: 19
Joined: Tue May 06, 2008 11:38 am
Location: Россия
Contact:

Re: Engine Button

Post by Jordan »

Helios2000
You can show the script buttons? How does write_int change the coordinates of the buttons.
User avatar
Helios2000
Paladin
Posts: 660
Joined: Tue Aug 15, 2006 2:35 pm
Contact:

Re: Engine Button

Post by Helios2000 »

Very simple ;D

Add this to your ddraw.ini:

Code: Select all

[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
Image
Si vis pacem, para bellum.
Post Reply

Return to “Fallout Modding”