mirror of
https://github.com/fallout2-ce/fallout2-ce.git
synced 2026-07-27 16:47:11 -07:00
Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5a629f2430 | ||
|
|
2724f2308b |
@@ -48,6 +48,7 @@ The following settings were moved into [`<DAT>/config/game.cfg`](files/ce.dat/co
|
||||
| `Misc` | `ViewXPos` | `start` | `worldmap_view_x` |
|
||||
| `Misc` | `ViewYPos` | `start` | `worldmap_view_y` |
|
||||
| `Misc` | `StartGDialogFix` | `dialog` | `start_gdialog_fix` |
|
||||
| `Interface` | `WorldMapTerrainInfo` | `worldmap` | `terrain_info` |
|
||||
|
||||
## Opcodes / Metarules
|
||||
|
||||
|
||||
@@ -120,6 +120,8 @@ repair=293
|
||||
town_map_hotkeys_fix=1
|
||||
; Set to 1 to show travel markers on the world map, or 2 to show only when sneaking.
|
||||
trail_markers=0
|
||||
; Set to 1 to show the current terrain name when hovering over the stopped party marker.
|
||||
terrain_info=0
|
||||
; Set to 1 to skip the encounter with Frank Horrigan.
|
||||
disable_horrigan=0
|
||||
; City reputation overrides. Syntax: city_id:global_id pairs separated by commas.
|
||||
|
||||
@@ -234,6 +234,7 @@ namespace {
|
||||
{ kSfallMisc, "DisableHorrigan", CONTENT_CONFIG_WORLDMAP_SECTION, "disable_horrigan", "0" },
|
||||
{ kSfallMisc, "CityRepsList", CONTENT_CONFIG_WORLDMAP_SECTION, "city_reputation_list" },
|
||||
{ kSfallInterface, "WorldMapTravelMarkers", CONTENT_CONFIG_WORLDMAP_SECTION, "trail_markers", "0" },
|
||||
{ kSfallInterface, "WorldMapTerrainInfo", CONTENT_CONFIG_WORLDMAP_SECTION, "terrain_info", "0" },
|
||||
// [characters]
|
||||
{ kSfallMisc, "PremadePaths", CONTENT_CONFIG_CHARACTERS_SECTION, "premade_paths" },
|
||||
{ kSfallMisc, "PremadeFIDs", CONTENT_CONFIG_CHARACTERS_SECTION, "premade_fids" },
|
||||
|
||||
@@ -563,6 +563,7 @@ static int wmInterfaceDrawCircleOverlaySafe(CityInfo* city, CitySizeDescription*
|
||||
static void wmInterfaceDrawSubTileRectFogged(unsigned char* dest, int width, int height, int pitch);
|
||||
static int wmInterfaceDrawSubTileList(TileInfo* tileInfo, int column, int row, int x, int y, int a6);
|
||||
static int wmDrawCursorStopped();
|
||||
static void wmInterfaceDrawTerrainInfo();
|
||||
static bool wmCursorIsVisible();
|
||||
static int wmGetAreaName(CityInfo* city, char* name);
|
||||
static void wmMarkAllSubTiles(int state);
|
||||
@@ -944,6 +945,8 @@ static bool wmFaded = false;
|
||||
static int wmForceEncounterMapId = -1;
|
||||
static unsigned int wmForceEncounterFlags = 0;
|
||||
static int worldmapTrailMarkers;
|
||||
static bool worldmapTerrainInfo;
|
||||
static bool wmTerrainInfoIsVisible;
|
||||
|
||||
static inline bool cityIsValid(int city)
|
||||
{
|
||||
@@ -996,6 +999,7 @@ int wmWorldMap_init()
|
||||
// SFALL
|
||||
configGetBool(&gContentConfig, CONTENT_CONFIG_WORLDMAP_SECTION, "town_map_hotkeys_fix", &gTownMapHotkeysFix, true);
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_WORLDMAP_SECTION, "trail_markers", &worldmapTrailMarkers, 0);
|
||||
configGetBool(&gContentConfig, CONTENT_CONFIG_WORLDMAP_SECTION, "terrain_info", &worldmapTerrainInfo, false);
|
||||
|
||||
// CE: City size fids should be initialized during startup. They are used
|
||||
// during |wmTeleportToArea| to calculate worldmap position when jumping
|
||||
@@ -3206,6 +3210,7 @@ static int wmWorldMapFunc(int a1)
|
||||
unsigned int partyHealTime = 0;
|
||||
int map = -1;
|
||||
int rc = 0;
|
||||
wmTerrainInfoIsVisible = false;
|
||||
|
||||
while (true) {
|
||||
sharedFpsLimiter.mark();
|
||||
@@ -3224,6 +3229,18 @@ static int wmWorldMapFunc(int a1)
|
||||
int worldX = wmWorldOffsetX + mouseX - WM_VIEW_X;
|
||||
int worldY = wmWorldOffsetY + mouseY - WM_VIEW_Y;
|
||||
|
||||
bool terrainInfoIsVisible = worldmapTerrainInfo
|
||||
&& !wmGenData.isWalking
|
||||
&& wmGenData.currentAreaId == -1
|
||||
&& wmCursorIsVisible()
|
||||
&& mouseHitTestInWindow(wmBkWin, WM_VIEW_X, WM_VIEW_Y, WM_VIEW_WIDTH + WM_VIEW_X, WM_VIEW_HEIGHT + WM_VIEW_Y)
|
||||
&& abs(wmGenData.worldPosX - worldX) < 8
|
||||
&& abs(wmGenData.worldPosY - worldY) < 6;
|
||||
if (terrainInfoIsVisible != wmTerrainInfoIsVisible) {
|
||||
wmTerrainInfoIsVisible = terrainInfoIsVisible;
|
||||
wmInterfaceRefresh();
|
||||
}
|
||||
|
||||
if (keyCode == KEY_CTRL_Q || keyCode == KEY_CTRL_X || keyCode == KEY_F10) {
|
||||
showQuitConfirmationDialog();
|
||||
}
|
||||
@@ -6044,9 +6061,33 @@ static int wmDrawCursorStopped()
|
||||
}
|
||||
}
|
||||
|
||||
wmInterfaceDrawTerrainInfo();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void wmInterfaceDrawTerrainInfo()
|
||||
{
|
||||
if (!wmTerrainInfoIsVisible || !wmCursorIsVisible()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const char* text = wmGetCurrentTerrainName();
|
||||
int textWidth = std::min(fontGetStringWidth(text), 200);
|
||||
int textX = WM_VIEW_X + wmGenData.worldPosX - wmWorldOffsetX - textWidth / 2;
|
||||
textX = std::clamp(textX, WM_VIEW_X, WM_VIEW_X + WM_VIEW_WIDTH - textWidth);
|
||||
|
||||
int textY = WM_VIEW_Y + wmGenData.worldPosY - wmWorldOffsetY - 17;
|
||||
textY = std::clamp(textY, WM_VIEW_Y, WM_VIEW_Y + WM_VIEW_HEIGHT - fontGetLineHeight());
|
||||
|
||||
fontDrawText(
|
||||
wmBkWinBuf + WM_WINDOW_WIDTH * textY + textX,
|
||||
text,
|
||||
textWidth,
|
||||
WM_WINDOW_WIDTH,
|
||||
COLOR_GREEN | DRAW_TEXT_FLAG_SHADOWED);
|
||||
}
|
||||
|
||||
// 0x4C4490 wmCursorIsVisible
|
||||
static bool wmCursorIsVisible()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user