mirror of
https://github.com/sfall-team/sfall.git
synced 2026-07-27 16:52:34 -07:00
66 lines
2.4 KiB
ObjectPascal
66 lines
2.4 KiB
ObjectPascal
/*
|
|
|
|
Resting Encounters mod for Fallout 2 by Lexx
|
|
--------------------------------------------
|
|
|
|
- Check where we are on the world map and overwrite the default desert "resting" map
|
|
- Compatible with vanilla Fallout 2 and UP/RP
|
|
|
|
Requires sfall 4.3.6/3.8.38 or higher
|
|
|
|
*/
|
|
|
|
#include "..\headers\define.h"
|
|
#include "..\headers\sfall\sfall.h"
|
|
#include "..\headers\sfall\lib.arrays.h"
|
|
|
|
procedure start;
|
|
procedure encounter_handler;
|
|
|
|
#define is_terrain_desert (get_current_terrain_name == mstr_worldmap(1000))
|
|
#define is_terrain_mountains (get_current_terrain_name == mstr_worldmap(1001))
|
|
#define is_terrain_city (get_current_terrain_name == mstr_worldmap(1002))
|
|
#define is_terrain_coast (get_current_terrain_name == mstr_worldmap(1003))
|
|
|
|
procedure start begin
|
|
if (game_loaded) then begin
|
|
register_hook_proc(HOOK_ENCOUNTER, encounter_handler);
|
|
end
|
|
end
|
|
|
|
procedure encounter_handler begin
|
|
variable
|
|
event := get_sfall_arg,
|
|
mapID := get_sfall_arg,
|
|
mapsList;
|
|
|
|
// If the player enters a map on the world map, we set it depending on the current terrain type
|
|
// event 0 is random encounter, 1 is player initiated "encounter"
|
|
if (event == 1 AndAlso mapID == MAP_RND_DESERT_1) then begin
|
|
if (is_terrain_desert) then begin
|
|
mapsList := [MAP_RND_DESERT_1];
|
|
if (global_var(GVAR_CAR_PLACED_TILE) < 0) then set_car_current_town(AREA_RND_DESERT);
|
|
end
|
|
else if (is_terrain_mountains) then begin
|
|
mapsList := [MAP_RND_MOUNTAIN1, MAP_RND_MOUNTAIN2];
|
|
if (global_var(GVAR_CAR_PLACED_TILE) < 0) then set_car_current_town(AREA_RND_MOUNTAIN);
|
|
end
|
|
else if (is_terrain_city) then begin
|
|
mapsList := [MAP_RND_CITY1, MAP_RND_CITY_2, MAP_RND_CITY_3, MAP_RND_CITY_4, MAP_RND_CITY_5, MAP_RND_CITY_6, MAP_RND_CITY_7, MAP_RND_CITY_8];
|
|
if (global_var(GVAR_CAR_PLACED_TILE) < 0) then set_car_current_town(AREA_RND_CITY);
|
|
end
|
|
else if (is_terrain_coast) then begin
|
|
mapsList := [MAP_RND_COAST1, MAP_RND_COAST2];
|
|
if (global_var(GVAR_CAR_PLACED_TILE) < 0) then set_car_current_town(AREA_RND_COAST);
|
|
end
|
|
else begin
|
|
mapsList := [MAP_RND_DESERT_1];
|
|
if (global_var(GVAR_CAR_PLACED_TILE) < 0) then set_car_current_town(AREA_RND_DESERT);
|
|
debug_msg("!!! COULDN'T DETECT TERRAIN TYPE !!!");
|
|
end
|
|
|
|
mapID := array_random_value(mapsList);
|
|
set_sfall_return(mapID);
|
|
end
|
|
end
|