i bought "Fallout Trillogy" from walmart,it comes with killaps unoficial patch and an older version of sfall
So it's not just steam. That's a pain; there's no easy way to blacklist it like I did with steam.Nirran said:i bought "Fallout Trillogy" from walmart,it comes with killaps unoficial patch and an older version of sfall
Nope, but tbh I haven't tried to get one since they got sued. I might give it another go now that I know it's not just on steam, if I can be bothered. (Which I probably won't be. I don't really want to waste time writing mail I know no-one is reading.)Lexx said:Let me guess, still no statement from Interplay to this?
Timeslip said:Got oversized tiles working properly at last. They'll be in the next sfall release.
I'm not touching that. Either use placeholder tiles, or put the broken tiles in and go in game to check what they look like.Lexx said:Great! This totally rocks. But: What about the mapper?
On startup sfall checks the tiles for any that are >80 in width. (It either checks them all, which slows down startup a bit, or you can provide it with a list of known oversized tiles to speed it up.) For each it finds, it first crops it down so that it's left with something that contains an exact number of regular tiles, (so you can use overlapping tiles if you like,) then splits it up and saves each individual tile in the tiles folder. Then it modifies the in-memory copy of tiles.lst, to add the extra tiles. When a map is loaded, it checks for the ids of oversized tiles, and switches them out with the replacement regular tiles. It works such that the oversized tiles expand to the right and top of the screen. (i.e. the bottom-left corner of the oversized tile is in the same place as it would be if the tile was normal size.)Lexx said:How does it work now? Is it possible to use tiles with variable size (i. e. 30x30px or 45x45px) or do they need to have exactly the size of the amount of tiles you fake-replace with them? Is it possible to "overlay" tiles?
I'm not touching that.
Yes, it is completely different. In fallout tiles are loaded from the map files once. In the mapper they can change, so it's obvious that the approach I used for fallout would fail miserably for the mapper. The mapper and fallout share a lot of code, but for tile rendering there are huge differences.Chris Parks said:Why not? Is it so totally different from the fallout coding? Surely it would be much easier to use the new tiles if this was hacked as well in a similar way?
That's not the point. There isn't any technical problem that would prevent anyone from using new versions.Lexx said:I have another question. Why is the steam version and trilogy box version with includet sfall a big problem? Wouldn't it be enough to just copy over the fallout2.exe + adding the new sfall files?
Yes, it is completely different. In fallout tiles are loaded from the map files once. In the mapper they can change, so it's obvious that the approach I used for fallout would fail miserably for the mapper. The mapper and fallout share a lot of code, but for tile rendering there are huge differences.
In any case, fallout already has all the groundwork that sfall has laid, which would have to be completely redone for the mapper. (i.e. I already knew where the lst files were in memory, and how fallout read in the tile data.) I wouldn't do that even if the codepaths were identical.
Doesn't the GoG version come with a ddraw.dll that isn't sfall? Might be worth looking at that if it's there to see what it's doing and if it's causing any interference.Lexx said:It just came into my mind because I have the GOG version installed on a other machine and there I can't get the new interface button to work, that has been done by Helios. It's very strange because on both computers are 1:1 the same Fallout (mod) files. Still, it only works on one of them. Now I thought it might be because of some hacked-in-stuff, but this should be also somehow invalid because I replaced the Fallout2.exe .... very strange.
if(Get_Skill(obj_pid(attack_weapon)) == SKILL_UNARMED_COMBAT) or (Get_Skill(obj_pid(attack_weapon)) == SKILL_MELEE) then
begin
random_roll := random(1,100);
crit_chance := get_critter_extra_stat(attacker, STAT_crit_chance) + get_critter_base_stat(attacker, STAT_crit_chance) + get_sfall_global_int("critic_4");
attacker_special_flag := 256;
target_special_flag := 256;
attacker_melee_damage := (get_critter_extra_stat(attacker, STAT_melee_dmg) + get_critter_base_stat(attacker, STAT_melee_dmg));
maximum := attacker_melee_damage + Get_Max(obj_pid(attack_weapon)) + get_sfall_global_int("melee_04");
minimum := Get_Min(obj_pid(attack_weapon)) + get_sfall_global_int("ranged_4");
//float_msg(dude_obj, "Damage Fired" + " " + obj_pid(attack_weapon) + " " + Get_Min(obj_pid(attack_weapon)) + " " + Get_Max(obj_pid(attack_weapon)), 3);
random_damage := random(minimum, maximum);
if(random(1,100) > (100 - crit_chance)) then
begin
random_damage := random_damage * 2;
attacker_special_flag := attacker_special_flag + 512;
target_special_flag := target_special_flag + 512;
knockdown_incapacitate := random(1,100);
if(knockdown_incapacitate >= 100 - (get_sfall_global_int("knock_04")))then
begin
if(obj_pid(target) != MYRON) and (obj_pid(target) != MARCUS) and (obj_pid(target) != CASSIDY) and (obj_pid(target) != SULIK) and (obj_pid(target) != LENNY)and (obj_pid(target) != CYBERDOG) and (obj_pid(target) != GORIS) and (obj_pid(target) != ROBOBRAIN) and (obj_pid(target) != VIC) and (obj_pid(target) != DAVIN) and (obj_pid(target) != MIRIA) and (obj_pid(target) != KLINT) and (obj_pid(target) != DOGMEAT) and (obj_pid(target) != K9) and (obj_pid(target) != DIAGO) and (obj_pid(target) != MERIS) and (obj_pid(target) != LENNY_HUMAN) and (obj_pid(target) != ROBOBRAIN_SKYNET) and (target != dude_obj) then
begin
target_special_flag := target_special_flag + 2;
sfall := 1;
end
else
if (has_fake_perk(Imoble) != 4) and ((obj_pid(target) == MYRON) or (obj_pid(target) == MARCUS) or (obj_pid(target) == CASSIDY) or (obj_pid(target) == SULIK) or (obj_pid(target) == LENNY)or (obj_pid(target) == CYBERDOG) or (obj_pid(target) == GORIS) or (obj_pid(target) == ROBOBRAIN) or (obj_pid(target) == VIC) or (obj_pid(target) == DAVIN) or (obj_pid(target) == MIRIA) or (obj_pid(target) == KLINT) or (obj_pid(target) == DOGMEAT) or (obj_pid(target) == K9) or (obj_pid(target) == DIAGO) or (obj_pid(target) == MERIS) or (obj_pid(target) == LENNY_HUMAN) or (obj_pid(target) == ROBOBRAIN_SKYNET)) then
begin
target_special_flag := target_special_flag + 2;
sfall := 1;
end
else
if (not(has_fake_perk(Imoble) >= 3)) and (target == dude_obj) then
begin
target_special_flag := target_special_flag + 2;
sfall := 1;
end
end
end
if(knockdown_incapacitate >= 100 - (get_sfall_global_int("knock_04")))then
begin
if(obj_pid(target) != MYRON) and (obj_pid(target) != MARCUS) and (obj_pid(target) != CASSIDY) and (obj_pid(target) != SULIK) and (obj_pid(target) != LENNY)and (obj_pid(target) != CYBERDOG) and (obj_pid(target) != GORIS) and (obj_pid(target) != ROBOBRAIN) and (obj_pid(target) != VIC) and (obj_pid(target) != DAVIN) and (obj_pid(target) != MIRIA) and (obj_pid(target) != KLINT) and (obj_pid(target) != DOGMEAT) and (obj_pid(target) != K9) and (obj_pid(target) != DIAGO) and (obj_pid(target) != MERIS) and (obj_pid(target) != LENNY_HUMAN) and (obj_pid(target) != ROBOBRAIN_SKYNET) and (target != dude_obj) then
begin
target_special_flag := target_special_flag + 2;
sfall := 1;
end
else
if (has_fake_perk(Imoble) != 2) and ((obj_pid(target) == MYRON) or (obj_pid(target) == MARCUS) or (obj_pid(target) == CASSIDY) or (obj_pid(target) == SULIK) or (obj_pid(target) == LENNY)or (obj_pid(target) == CYBERDOG) or (obj_pid(target) == GORIS) or (obj_pid(target) == ROBOBRAIN) or (obj_pid(target) == VIC) or (obj_pid(target) == DAVIN) or (obj_pid(target) == MIRIA) or (obj_pid(target) == KLINT) or (obj_pid(target) == DOGMEAT) or (obj_pid(target) == K9) or (obj_pid(target) == DIAGO) or (obj_pid(target) == MERIS) or (obj_pid(target) == LENNY_HUMAN) or (obj_pid(target) == ROBOBRAIN_SKYNET)) then
begin
target_special_flag := target_special_flag + 2;
sfall := 1;
end
else
if (not(has_fake_perk(Imoble) >= 1)) and (target == dude_obj) then
begin
target_special_flag := target_special_flag + 2;
sfall := 1;
end
end
if(target == dude_obj) then
begin
random_damage := (random_damage - (get_critter_extra_stat(dude_obj, STAT_dmg_thresh) + get_critter_base_stat(dude_obj, STAT_dmg_thresh)));
random_damage := (random_damage - (random_damage * ((get_critter_extra_stat(dude_obj, STAT_dmg_resist) + get_critter_base_stat(dude_obj, STAT_dmg_resist)) / 100)));
end
else
begin
random_damage := (random_damage - (get_critter_extra_stat(target, STAT_dmg_thresh) + get_critter_base_stat(target, STAT_dmg_thresh)));
random_damage := (random_damage - (random_damage * ((get_critter_extra_stat(target, STAT_dmg_resist) + get_critter_base_stat(target, STAT_dmg_resist)) / 100)));
end
set_sfall_return(random_damage);
set_sfall_return(0);
set_sfall_return(target_special_flag);
set_sfall_return(attacker_special_flag);
end
end
end
target := 0;
attacker := 0;
damage := 0;
attacker_melee_damage := 0;
minimum := 0;
maximum := 0;
random_damage := 0;
random_damage_remainder := 0;
remainder_pecent := 0;
attacker_damage := 0;
target_special_flag := 0;
attacker_special_flag := 0;
target_damage := 0;
knockdown_incapacitate := 0;
sfall := 0;
right_weapon := 0;
left_weapon := 0;
right_weapon_ptr := 0;
left_weapon_ptr := 0;
perk_mod := 0.0;
perk_math := 0.0;
perk_mod_math := 0.0;
attack_weapon := 0;
random_roll := 0;
crit_chance := 0;
weapon_stat := 0;
weapon_statb := 0;
weapon_used := 0;
ammo_used := 0;
ammo_stat := 0;
end
procedure Get_Min(variable weapon_used) begin
weapon_stat := get_proto_data(weapon_used, 40);
if(weapon_used == -1) then
begin
return 1;
end
else
begin
return weapon_stat;
end
end
procedure Get_Max(variable weapon_used) begin
weapon_stat := get_proto_data(weapon_used, 44);
if(weapon_used == -1) then
begin
return 3;
end
else
begin
return weapon_stat;
end
end
procedure Get_Skill(variable weapon_used) begin
weapon_stat := get_proto_data(weapon_used, 52);
weapon_statb := get_proto_data(weapon_used, 69);
if(weapon_used == -1) then
begin
return SKILL_UNARMED_COMBAT;
end
else
if(weapon_stat <2>= 3) and (weapon_statb <6> 2) then
begin
weapon_stat := SKILL_ENERGY_WEAPONS;
end
else
if (weapon_statb == 2) and (weapon_stat > 2) then
begin
weapon_stat := 18;
end
else
if (weapon_stat > 2) then
begin
weapon_stat := SKILL_SMALL_GUNS;
end
return weapon_stat;
end
procedure Get_Burst(variable weapon_used) begin
weapon_stat := get_proto_data(weapon_used, 84);
if(weapon_stat > 1) then
begin
return weapon_stat;
end
else
begin
return 1;
end
end