246 Commits
Author SHA1 Message Date
Marco Antonio J. Costaandmajcosta 3d3e1bbfc6 refactor Translate()
it returns true but no consumers use it. its return type is void, then
2026-07-21 18:39:50 -03:00
Marco Antonio J. Costaandmajcosta 738225d2a2 move ImportStrings to i18n 2026-07-21 18:39:50 -03:00
Marco Antonio J. Costaandmajcosta 4be9b106f4 give more local functions internal linkage 2026-07-21 18:39:50 -03:00
Marco Antonio J. Costaandmajcosta af4eeb09f4 make local-only functions static 2026-07-21 18:39:50 -03:00
Marco Antonio J. Costaandmajcosta 15821498a3 text declarations go into text.h 2026-07-21 18:39:50 -03:00
Marco Antonio J. Costaandmajcosta 54bdce6c46 cleanup: dead code removal 2026-07-21 18:39:50 -03:00
Marco Antonio J. Costaandmajcosta 433de0e67b use exhaustive switch instead of if statements 2026-07-21 18:39:50 -03:00
Marco Antonio J. Costaandmajcosta 30e5d8f91c i18n: we already have one Language enum, no need for two 2026-07-21 18:39:50 -03:00
Marco Antonio J. Costaandmajcosta 506ea842b8 i18n: pull some TUs that do not belong in Utils 2026-07-21 18:39:50 -03:00
Marco Antonio J. Costaandmajcosta 9adc1ad998 node20 is deprecated, clear the warnings
bump action versions and change the MSVC action to a composite one that doesn't use node at all

also remove msbuild which we don't need
2026-07-21 14:45:04 -03:00
Marco Antonio J. Costaandmajcosta 8d1877d26d read language from Language.ini file
to avoid having to ship a whole ja2.ini for languages that
currently don't

command-line /language:german still works, but INI file is
prioritized

format:

```
[Language]
LANGUAGE = ITALIAN
```
2026-07-21 14:42:52 -03:00
Marco Antonio J. Costaandmajcosta d03989051a remove Languages from CI
no need anymore
2026-07-21 11:23:08 -03:00
Marco Antonio J. Costaandmajcosta 5da2ee8bf6 better initialization of language defaults 2026-07-21 09:46:41 -03:00
Marco Antonio J. Costaandmajcosta aa0aac2bfe remove unused includes 2026-07-21 09:46:41 -03:00
ee098125e6 Strip dead per-language .slf entries from gGameLibaries
InitializeFileDatabase, the only reader of gGameLibaries[], is called
nowhere in the tree — VFS replaced this legacy loader. Delete the
7 #ifdef GERMAN/POLISH/DUTCH/ITALIAN/RUSSIAN/FRENCH/CHINESE entries
outright rather than runtime-selecting them.

NPC.h: two commented-out #if defined(CRIPPLED_VERSION)||defined(RUSSIAN)
triplets. AimMembers.cpp: two commented-out #ifdef POLISH character-remap
switch blocks. All already-dead. Verify grep for language macros outside
i18n/ now returns only unrelated hits (filename literal, dev-tool CLI flag,
stray comment, historical prose) — no #ifdef guards left.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 09:46:41 -03:00
Marco Antonio J. Costaandmajcosta bada3ef31a cleanup: remove last remnants of language preprocessor definitions
good riddance
2026-07-21 09:46:41 -03:00
Marco Antonio J. Costaandmajcosta 00a805cc39 remove lying, outdated or superfluous comments
no more guards, no more cpp files included
2026-07-21 09:46:41 -03:00
fd2c74727e Make LANGUAGE switchable in runtime (#653)
squashed into a single commit because doing it in steps that all
compiled involved a lot of boilerplate that is pointless to commit to
the repository. GH still has the PR for reference.

g_lang, MAX_MESSAGES_ON_MAP_BOTTOM, and GetLanguagePrefix() were
compile-time constants selected by the ENGLISH/GERMAN/... build
define. They're now runtime, defaulting to the same per-exe value the
define used to pick, and overridable at startup from [Ja2 Settings]
LANGUAGE in Ja2.ini.

-

XMLTacticalMessages is filled at runtime from NewTacticalMessages.xml,
never from compiled-in per-language data: all 8 per-language definitions
were the identical all-zero { L"" }. Delete them and define one shared
buffer in Utils/XML_Language.cpp (the loader) instead of pointer-rebinding
it like the static tables — this drops 9 dead 800KB zero-buffers (8
namespaced copies in LanguageStrings.cpp plus the standalone one) and
leaves no bind-ordering hazard for the XML load path.

-

ExportStrings.cpp privately recompiled one language's full text table
by #including the raw _<LANG>Text.cpp inside namespace Loc, keyed off
the exe-level ENGLISH/GERMAN/... compile macro (whichever the build
happened to select). That's redundant with the pointer globals every
other subsystem already uses (Text.h / LanguageStrings.cpp).

Drop the private copy; the unqualified table names in Loc::ExportStrings
now resolve to the global pointer externs, which BindLanguageStrings has
already rebound to the runtime g_lang by the time this runs (EXPORT_STRINGS
ini flag, checked after GetRuntimeSettings in sgp.cpp). gs_Lang (used only
by Loc::Translate for the Polish/Russian byte remap on raw .edt exports) is
now derived from g_lang via ToLocLanguage, so the export always matches
whatever language is actually active instead of a compile-time pick.

-

Editor/popupmenu.cpp and Strategic/Scheduling.cpp kept their own
call-site extern of gszScheduleActions as CHAR16[NUM_SCHEDULE_ACTIONS][20]
after the real definition changed into a rebindable pointer
(CHAR16 (*)[20], LanguageStrings.cpp). MSVC decays the outer array
dimension when mangling globals, so both declarations produce the same
symbol (?gszScheduleActions@@3PAY0BE@_WA) and the mismatch linked
silently -- but the array-typed TUs then indexed the 4-byte pointer
slot itself as string data, so the editor schedule popup and the map
schedule message text read garbage.

-

add text.def to be single-source of truth on symbol names and use it
 .much simpler, less error prone if adding more strings

-

add pseudo interface for language state. MAX_SAGES_ON_BOTTOM must always
 change in lockstep with g_lang. this isn't foolproof but better

---------

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-07-21 05:33:03 -03:00
steph-pgandAsdow ba64ed53c6 Items can now be taken from non colapsed POWs 2026-07-02 19:16:55 +03:00
Asdow c61f57bd9b Whitespace adjustment 2026-06-22 00:21:31 +03:00
Asdow 4d5593ebcb Fix render misalignment at 960x540 resolution
Should also work for any custom resolution that suffers from the same issue
2026-06-22 00:21:31 +03:00
Asdow 601fabf401 Fix tile rendering misalignment at 1440x900 and 1600x900 resolutions
Shamelessly stolen from Stracciatella code
2026-06-22 00:21:31 +03:00
steph-pgandAsdow eb8ecb31f0 fix POWs in LOS keeps you in turnbased mode 2026-06-20 20:03:16 +03:00
Asdow 2801af552e Set moved item old entry to not existing 2026-06-20 17:11:37 +03:00
Asdow ef30192b29 Leave merc equipment to current sector in UB 2026-06-20 08:49:56 +03:00
Asdow 392ba66df3 Enable dismissing mercs in UB before game start
Jerry Melo complains about too many mercs if player has hired over 6 mercs and refuses to fly. This allows player to dismiss mercs until the pilot is happy.
2026-06-20 08:49:56 +03:00
Asdow d4dd5f07df Disable contract renewal in UB 2026-06-20 08:49:56 +03:00
db29feed11 Don't strip robot's installed components on mapscreen drop-all
The mapscreen "drop everything" hotkey (Shift+W) looped over every
inventory slot from HELMETPOS to NUM_INV_SLOTS and dumped each one.
Madlab's robot stores its installed gear in those same slots - ammo (14),
targeting (15), chassis/armour (16) and utility (17). Dropping these left
the robot defenceless, and the player cannot re-install the components
through normal inventory, so the loss was permanent.

Skip the robot's component slots in the drop loop; only its general cargo
slot (ROBOT_INVENTORY_SLOT) may still be emptied. Regular mercs are
unaffected.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 23:06:33 +03:00
Asdow 1fc5f939bf Use new RandomGridNoUnloadedSector() for autoresolve
* Load required mapinfo for checking suitable gridnos
* Modify SOLDIERTYPE::DropSectorEquipment( ) to take an external gridno when placing items into an unloaded sector
2026-06-15 22:01:07 +03:00
Asdow 9e0105caec Add function for choosing random gridno in an unloaded sector 2026-06-15 22:01:07 +03:00
Asdow 0cc7fb4e39 Add function for loading world height data 2026-06-15 22:01:07 +03:00
Asdow db15679ec1 Add missing Iter->Exists() checks 2026-06-12 15:52:24 +03:00
Asdow 6a8a22aba2 Move iter->exists() check to first 2026-06-12 15:52:24 +03:00
Asdow 9b654ff3f1 Fix typo 2026-06-12 15:51:03 +03:00
Asdow a67f4b8a8f Formatting 2026-06-12 15:51:03 +03:00
Asdow 673dea01af Use correct sector for Chitzena 2026-06-12 15:51:03 +03:00
Marco Antonio J. Costaandmajcosta b44b6cebb8 Revert PR544
"Corpses are not properly shown even if within mercs' vision due to the check only
running intermittently since we're not constantly running the reveal roofs and items
function. In addition, mercs such as Raven who have the quoteexpheadshotonly set to true,
will NEVER reveal any corpses"

Revert "Remove extra line"

This reverts commit 1e1eb88864.

Revert "Move visibility check after already included pCorpse check"

This reverts commit 72e586a378.

Revert "Make 3rd party corpses invisible till they in fov"

This reverts commit 07dbf9c848.
2026-06-02 19:17:31 -03:00
Asdow 8bc3dbd0aa Prevent RebelCommand::DailyUpdate() from running twice when loading autosave 2026-06-02 23:59:30 +03:00
Marco Antonio J. Costaandmajcosta b4176bb2d9 Fix/drag unconscious softlock
Same logic but cleaned up version of https://github.com/1dot13/source/pull/602 which Tais contributed with Claude Code's help

Most calls to SOLDIERTYPE::IsDragging() aren't supposed to have a side effect of cancelling a drag, being simple queries.
Changing the default to reflect that is right move.

Assisted-by: Claude:
2026-06-01 21:45:55 -03:00
Asdow 8b3e417872 Guard against illegal array access
Hovering mouse over an option long enough that the popup text appears and scrolling to last page with mouse wheel would run into assertion error in gprintfdirty()  Assert(pFontString!=NULL); if the option was one of the last ones that didn't have a text box in the last option page.
2026-05-28 17:44:21 +03:00
AsdowandClaude Opus 4.7 b949189881 Fix palette resolution
The LayerProp palette lookup was gated on the *filter* attribute instead
of the *palette* attribute -- the filter checks from the line above were
copy-pasted verbatim. As a result, any LayerProp with an empty filter but
a real palette never resolved its palette table: paletteTable stayed NULL
and the layer fell back to the merc's shade table.

The most visible victim is the heli fast-rope arrival layer
(filter="" palette="hats"): rendered with the merc palette, the rope's
pixel indices (45-81, 166-172) hit the merc's unreplaced orange/red glow
ramp instead of the rope's own tan/green, painting orange specks along the
rope. Testing the palette attribute restores the intended "hats" palette
and the correct rope colours; it also fixes any other empty-filter layers.

Co-Authored-By: Claude Opus 4.7
2026-05-28 16:33:48 +03:00
JuqiandAsdow cc19490898 update Chinese translations 2026-05-25 08:37:30 +03:00
GreysaandAsdow 9fac0a8ecd Tidy up code 2026-05-23 21:22:28 +03:00
GreysaandAsdow 346e5c6293 fix for issue #580 2026-05-23 21:22:28 +03:00
GreysaandAsdow 0bea84374e fixed some screenmsg strings not changed 2026-05-23 21:22:28 +03:00
GreysaandAsdow 3d589bd78e A little code cleanup and moved debug reload to shift + alt + r 2026-05-23 21:22:28 +03:00
GreysaandAsdow e1c8bee1d1 Message strings added to language files. 2026-05-23 21:22:28 +03:00
GreysaandAsdow ead2932316 Added dual wielding unjamming, tidied up reload and unjam code a little 2026-05-23 21:22:28 +03:00
GreysaandAsdow bb55299ff6 Basic implementaion of unjamming on reload hotkey.
TODO:
text strings
check dual wielding
2026-05-23 21:22:28 +03:00
JuqiandAsdow 2d4f62a5b6 Correct two errors in the Chinese translation 2026-05-13 16:02:28 +03:00
Asdow 03a7b017b6 Change mouse cursor if attachment attempt fails 2026-05-06 23:23:07 +03:00
Asdow edf8f2f086 Fix crash when failing an attachment via item desc popup callback 2026-05-06 23:23:07 +03:00
Asdow 78ed49c73d Remove corpse structure from world when removing corpse
Fixes not being able to take all corpses from one tile, if multiple corpses were stacked on top of each other. With the structure not deleted, the  GetCorpseAtGridNo would not find an existing corpse anymore.
2026-05-06 11:28:11 +03:00
Asdow 5697acabb3 Take most recent corpse from tile
Fixes crash when taking a corpse on roof when multiple corpses are stacked on one tile.
2026-05-06 11:28:11 +03:00
Asdow 09197e421c Add a function for finding last matching structure 2026-05-06 11:28:11 +03:00
JuqiandAsdow 46afd90fdc Add Chinese translation 2026-05-04 12:10:10 +03:00
JuqiandAsdow 80ba0a05d7 Revert "Add Chinese translation"
This reverts commit e7d436d9fa.
2026-05-04 12:10:10 +03:00
JuqiandAsdow aab34bff20 Add Chinese translation 2026-05-04 12:10:10 +03:00
JuqiandAsdow ef325c1cde (Chinese) Add support for line breaks in ITEMS.XML
Added detection of the NEWLINE_CHAR character "±" to enable line breaks not only when text exceeds display width, but also upon encountering NEWLINE_CHAR.
Note: This character has been conventionally adopted in the Chinese community as a line break marker within XML item descriptions. The modification affects Chinese text display only.
2026-05-02 09:39:03 +03:00
Asdow 99a4ff1527 Guard against invalid value 2026-05-02 09:31:09 +03:00
Marco Antonio J. Costaandmajcosta f2d1b09fc6 add comment to CMakeLists.txt
save people a trip to learn.microsoft.com
2026-04-08 15:25:48 -03:00
Marco Antonio J. CostaandAsdow 31970291bd make preprocessor definitions consistent in every single lib
SGP did not seem to make any use of compilationFlags or debugFlags when
translating from msbuild to cmake, but there could be a thrice removed
transitive include I've missed.

there's a small probability this fixes some obscure UB or one-definition rule
violation that's causing the mystery crashes people have reported
2026-04-08 21:06:34 +03:00
GreysaandGitHub 0a758179c2 Advanced repairs skill check (#581)
* Add technician level skill check for advanced repair

* changed readability
2026-03-17 10:35:29 +01:00
noooooo4499andAsdow 481e95d42d Avoid breaking compatibility with gamedirs with old HourlyUpdate scripts
They are mapped to the right variable now
2026-02-25 10:47:47 +02:00
Asdow 8f178a59ab Add filename to error text for pngloader 2026-02-23 18:23:08 +02:00
Asdow a6d96f5f31 Remove compiler warnings 2026-02-21 21:00:38 +02:00
Asdow 67f41d4de6 Remove superfluous variable 2026-02-21 21:00:38 +02:00
Asdow 1d53b92731 Add const keyword 2026-02-21 21:00:38 +02:00
Asdow 42b2cbc7f5 add const keyword 2026-02-21 21:00:38 +02:00
Asdow 04ace5df24 add const keyword 2026-02-21 21:00:38 +02:00
Asdow 323944757d Improve DisplayCover() performance
* Replaced gCoverViewArea[2000][2000][2] with std::vector that is adjusted to the actual viewport size. Size difference for example in 720p resolution is 8 000 000 vs 3969 elements
* FPS improved in merc view mode 6-8 frames and in enemy view mode 10-20 frames
2026-02-21 21:00:38 +02:00
noooooo4499andAsdow 7d5a1c2e9e Remove useless lua gameclock variables, add lua externalized function to heal boxers
- These gameclock variables were not updated properly so it created a discrepancy between it and the proper gameclock variables, and it was causing issues with the lua hourly update script

- Function that heals boxers after they finish resting
2026-02-12 10:24:47 +02:00
noooooo4499andAsdow dc107f5044 Fix Darren sometimes never giving fights if the boxers's IDs aren't assigned 2026-02-07 12:03:03 +02:00
Asdow f3ce1d5ff9 Fix Tank suppression fire
Code used wrong item to calculate recoil and burst APs causing the burst length loop to be stuck until the whole 2000 round mg magazine would be fired in one go.
2026-01-10 16:38:00 +02:00
Asdow b1c076416c Remove magic numbers 2026-01-04 14:57:55 +02:00
Asdow cc984b09f6 Fix comparison check 2026-01-03 17:27:43 +02:00
Asdow 8d00a316c5 Remove unused enum conditionals 2026-01-03 17:27:43 +02:00
Asdow d51f1e6088 Add comment 2026-01-03 17:27:43 +02:00
Asdow 1c86d96e9d Remove custom_email.edt
Unfinished feature as far as I can tell and new emails will be easier to add via Emails.xml
2026-01-03 17:27:43 +02:00
Asdow 1368962244 Rename function to be more descriptive 2026-01-03 17:27:43 +02:00
Asdow 6f6aadf89c Remove unused & unfinished email externalizations 2026-01-03 17:27:43 +02:00
Asdow 96de96e9c6 Remove unused includes
* Formatting
2026-01-03 17:27:43 +02:00
Asdow ebcc5449c5 Make functions static 2026-01-03 17:27:43 +02:00
Asdow 6b7bc51a52 Remove commented out variables 2026-01-03 17:27:43 +02:00
Asdow 622cffce82 Use #define instead of magic numbers 2026-01-03 17:27:43 +02:00
Asdow 5ed79c3edb Fix email sorting
* Simplify pSubject copying else ifs
* Formatting
2026-01-03 17:27:43 +02:00
Asdow fe69dba958 Add missing email 2026-01-03 17:27:43 +02:00
Asdow f8b6ee1672 Use externalized emails 2026-01-03 17:27:43 +02:00
Asdow 30070035cc Correct pSubject size 2026-01-03 17:27:43 +02:00
Asdow ff3079ff23 Formatting 2026-01-03 17:27:43 +02:00
Asdow aba3688b4b Add framework for adding externalized emails
Emails from new GameDir file TableData/Email/Emails.xml can be added via lua scripting using calls to AddEmailFromXML & AddPreReadEmailFromXML. The order of emails in Emails.xml acts as the index to be referenced and provided when calling lua  functions.

An error message  will be displayed if an email is added with an out-of-scope index but game will be able to continue.

Localization is supported and was tested on Chinese localization.
2026-01-03 17:27:43 +02:00
Asdow d6b30c6f43 Add #ifdef for cheats.h include 2025-12-09 00:35:18 +02:00
Asdow 4fcf03d31a Include cleanup Tactical/.*cpp 2025-12-09 00:35:18 +02:00
Asdow 03edc532e1 Clean up Strategic/*:cpp includes 2025-12-09 00:35:18 +02:00
Asdow 1db41f4c36 Fix helicopter airspace view when switching to travel mode
* Clicking destination column in teamlist for a squad in a helicopter will switch to first airspace view that shows safe / unsafe air sectors instead of the second sector.

* Clicking destination column in teamlist for a squad not in a helicopter while in either airspace view will now correctly turn it off
2025-12-04 23:06:08 +02:00
majcostaandAsdow 96ede9299f Change CMake build type from Release to RelWithDebInfo 2025-12-04 19:47:04 +02:00
Asdow b226f2a21d set functions static 2025-12-03 23:52:05 +02:00
Asdow 6629562b34 Formatting 2025-12-03 23:52:05 +02:00
Asdow 91d7620c0b include cleanup 2025-12-03 23:52:05 +02:00
Asdow c341402fe1 set functions static 2025-12-03 23:52:05 +02:00
Asdow 80b1af930a include cleanup 2025-12-03 23:52:05 +02:00
Asdow 608eb8e4e6 set functions static 2025-12-03 23:52:05 +02:00
Asdow ec1c6fc112 include cleanup 2025-12-03 23:52:05 +02:00
Asdow 4fabab680f set functions static 2025-12-03 23:52:05 +02:00
Asdow def815988b include cleanup 2025-12-03 23:52:05 +02:00
Asdow 21df179941 Set function static 2025-12-03 23:52:05 +02:00
Asdow ff674e79b9 Set function static 2025-12-03 23:52:05 +02:00
Asdow 9efa5e1108 Include cleanup 2025-12-03 23:52:05 +02:00
Asdow c235345a22 formatting 2025-12-03 23:52:05 +02:00
Asdow 97791bfcc3 include cleanup 2025-12-03 23:52:05 +02:00
Asdow d49185c291 Move nullptr check to be checked first
Kinda defeats the purpose of checking for nullptr if we dereference it before the check, no?
2025-12-03 23:52:05 +02:00
Asdow 41eba8ff3a include cleanup 2025-12-03 23:52:05 +02:00
Asdow 2fd5e2c255 set functions static 2025-12-03 23:52:05 +02:00
Asdow a83bb00d52 include cleanup 2025-12-03 23:52:05 +02:00
Asdow cb27d0cd72 Set functions static 2025-12-03 23:52:05 +02:00
Asdow 020cd270c0 include cleanup 2025-12-03 23:52:05 +02:00
Asdow a6e1b93af0 Set functions static 2025-12-03 23:52:05 +02:00
Asdow 5dd4043f00 Formatting 2025-12-03 23:52:05 +02:00
Asdow 61f8efaac0 include cleanup 2025-12-03 23:52:05 +02:00
Asdow 3ee22bdb31 Set functions static 2025-12-03 23:52:05 +02:00
Asdow 032ac8e566 Remove forward declarations that are included already 2025-12-03 23:52:05 +02:00
Asdow 1e78fc68bc Formatting 2025-12-03 23:52:05 +02:00
Asdow a074dbf3ee include cleanup 2025-12-03 23:52:05 +02:00
Asdow 9cfcfac376 include cleanup 2025-12-03 23:52:05 +02:00
Asdow fb8feca896 include cleanup 2025-12-03 23:52:05 +02:00
Asdow be70cd18a2 Formatting 2025-12-03 23:52:05 +02:00
Asdow 6a1b84e53b include cleanup 2025-12-03 23:52:05 +02:00
Asdow 584e10d14f include cleanup 2025-12-03 23:52:05 +02:00
Asdow 4f0f6f9f23 set function static 2025-12-03 23:52:05 +02:00
Asdow 2f13ef79b6 Remove unused function declaration 2025-12-03 23:52:05 +02:00
Asdow f8f9c18cda Remove duplicate includes 2025-12-03 23:52:05 +02:00
Asdow 37c081f3db Formatting 2025-12-03 23:52:05 +02:00
Asdow e684f61f55 include cleanup 2025-12-03 23:52:05 +02:00
Asdow c2f4ca5da1 Set functions static 2025-12-03 23:52:05 +02:00
Asdow 5befb47881 Include cleanup 2025-12-03 23:52:05 +02:00
Asdow 780831611d Remove unused #defines 2025-12-03 23:52:05 +02:00
Asdow bb13225778 Include cleanup 2025-12-03 23:52:05 +02:00
Asdow 2f62d6fe44 Set functions static 2025-12-03 23:52:05 +02:00
Asdow 6e94ac144b formatting 2025-12-03 23:52:05 +02:00
Asdow 6e45ca9825 include cleanup 2025-12-03 23:52:05 +02:00
Asdow 142de9b02e Formatting 2025-12-03 23:52:05 +02:00
Asdow 7a024aecd7 include cleanup 2025-12-03 23:52:05 +02:00
Asdow c81d290957 Remove duplicate include 2025-12-03 23:52:05 +02:00
Asdow 3c498abe82 Set function static 2025-12-03 23:52:05 +02:00
Asdow fdf494c28a Remove unused LaserLock system 2025-12-03 23:52:05 +02:00
Asdow b903ead06a Formatting 2025-12-03 23:52:05 +02:00
Asdow 591a1a63c8 include cleanup 2025-12-03 23:52:05 +02:00
Asdow e60dcbc3e9 Remove unused function 2025-12-03 23:52:05 +02:00
Asdow d73d56d85a Formatting 2025-12-03 23:52:05 +02:00
Asdow d21293d4ad include cleanup 2025-12-03 23:52:05 +02:00
Asdow 297d052670 Formatting 2025-12-03 23:52:05 +02:00
Asdow f21508ad15 include cleanup 2025-12-03 23:52:05 +02:00
Asdow 4c53bb70f3 Formatting 2025-12-03 23:52:05 +02:00
Asdow 6c5f94c0cc Combine JA2UB ifdefs 2025-12-03 23:52:05 +02:00
Asdow 65e5c1768a include cleanup 2025-12-03 23:52:05 +02:00
Asdow 04f03fb2cc formatting 2025-12-03 23:52:05 +02:00
Asdow a8218462e1 include cleanup 2025-12-03 23:52:05 +02:00
Asdow 00c8bd0aa7 Remove duplicate include 2025-12-03 23:52:05 +02:00
Asdow d3cd51e7eb Formatting 2025-12-03 23:52:05 +02:00
Asdow 37795bb73c Remove unused and transitive includes 2025-12-03 23:52:05 +02:00
Asdow 5b4099a828 Set functions static 2025-12-03 23:52:05 +02:00
Asdow 977b7a5b2d Remove unused includes 2025-12-03 23:52:05 +02:00
Asdow e6824bf15d set function static 2025-12-03 23:52:05 +02:00
Asdow 63a58502d1 Remove duplicate includes 2025-12-03 23:52:05 +02:00
Asdow 173f786f55 Remove unused includes 2025-12-03 23:52:05 +02:00
Asdow ea1a3a9e9e Set functions static 2025-12-03 23:52:05 +02:00
Asdow c1b8309753 Expand UB_SetNumberJa25EnemiesInSurfaceSector
* Allow adding jeeps and robots to sectors now
* From Lua side, it is now possible to add differing amount of arguments to the function. Minimum required is 3 (sector x & y and amount of admins)
So all of the following examples will work correctly:

- UB_SetNumberJa25EnemiesInSurfaceSector( x, y, ubNumAdmins )

- UB_SetNumberJa25EnemiesInSurfaceSector( x, y, ubNumAdmins, ubNumTroops )

- - UB_SetNumberJa25EnemiesInSurfaceSector( x, y, ubNumAdmins, ubNumTroops,ubNumElites )

- UB_SetNumberJa25EnemiesInSurfaceSector( x, y, ubNumAdmins, ubNumTroops,ubNumElites, ubNumTanks )

- UB_SetNumberJa25EnemiesInSurfaceSector( x, y, ubNumAdmins, ubNumTroops,ubNumElites, ubNumTanks , ubNumJeeps )

- UB_SetNumberJa25EnemiesInSurfaceSector( x, y, ubNumAdmins, ubNumTroops,ubNumElites, ubNumTanks , ubNumJeeps, ubNumRobots )
2025-11-29 11:46:45 +02:00
Asdow d86dc39f9f Add enemies also on insane difficulty 2025-11-27 22:38:29 +02:00
Asdow b580459e57 Remove unused local variable 2025-11-27 22:38:29 +02:00
Asdow b562b45c00 Externalize tunnel sectors for adding enemies to 2025-11-27 22:38:29 +02:00
Asdow 4a43b7704e Set functions static 2025-11-23 18:28:17 +02:00
Asdow 4a813e567a Remove unused includes 2025-11-23 18:28:17 +02:00
Asdow ea4cea2231 Set functions static 2025-11-23 18:28:17 +02:00
Asdow f263c7270f Remouve unused function declarations 2025-11-23 18:28:17 +02:00
Asdow 4b38f56d1f Set functions static 2025-11-23 18:28:17 +02:00
Asdow 9bf289561b Move includes to top of file 2025-11-23 18:28:17 +02:00
Asdow 10fa5f37d6 Formatting 2025-11-23 18:28:17 +02:00
Asdow 0d8873d2c0 Remove unused includes 2025-11-23 18:28:17 +02:00
Asdow f2b88ef080 Remove duplicate include 2025-11-23 18:28:17 +02:00
Asdow 1e6586f187 Set functions static 2025-11-23 18:28:17 +02:00
Asdow dbb1c0a929 Formatting 2025-11-23 18:28:17 +02:00
Asdow 91ae6e1223 Remove unused includes 2025-11-23 18:28:17 +02:00
Asdow 04bf102614 Remove duplicate include 2025-11-23 18:28:17 +02:00
Asdow 677b320534 Set functions static 2025-11-23 18:28:17 +02:00
Asdow 265a7c0af7 Remove unused function declaration 2025-11-23 18:28:17 +02:00
Asdow 04b1937caa Fix function definition 2025-11-23 18:28:17 +02:00
Asdow 842009ab3f Make function static 2025-11-23 18:28:17 +02:00
Asdow f27164b9dc Remove unused includes 2025-11-23 18:28:17 +02:00
Asdow 20ee284e42 Remove transitive include 2025-11-23 18:28:17 +02:00
Asdow ec6401ee5d Initialize variables 2025-11-23 18:28:17 +02:00
Asdow d8d3db89d2 Make functions static 2025-11-23 18:28:17 +02:00
Asdow af1ad3885f Fix typo 2025-11-23 18:28:17 +02:00
Asdow 0199084f05 Remove commented out extern 2025-11-23 18:28:17 +02:00
Asdow 1db9af545c Remove commented out function 2025-11-23 18:28:17 +02:00
Asdow 951a88e947 Combine JA2UB includes with its function declaration ifdef 2025-11-23 18:28:17 +02:00
Asdow b6e276ac34 Formatting & whitespace 2025-11-23 18:28:17 +02:00
Asdow 3a3b415cc5 Remove unused includes 2025-11-23 18:28:17 +02:00
Asdow d0b86e69d8 Combine JA2UB ifdef includes 2025-11-23 18:28:17 +02:00
Asdow 10f6a48f50 Remove duplicate includes 2025-11-23 18:28:17 +02:00
Asdow 18dfda46f2 Remove unused function declarations and commented out functions 2025-11-23 18:28:17 +02:00
Asdow 4e24a6b9ba Fix nullptr dereference when spotting mines 2025-11-22 17:10:58 +02:00
Asdow 3061237e58 Fix Debug build includes 2025-11-22 16:11:45 +02:00
Asdow d05e9ec916 Fix actionitem conversion 2025-11-22 16:06:20 +02:00
Asdow 8fe051dc8d Declare functions static 2025-11-19 21:11:19 +02:00
Asdow 9c9d6ebb4a Remove unused includes 2025-11-19 21:11:19 +02:00
Asdow 8bda0aaaf3 Remove unused includes 2025-11-19 21:11:19 +02:00
Asdow fc824fb556 Declare functions static 2025-11-19 21:11:19 +02:00
Asdow e3845520f8 Remove unused includes 2025-11-19 21:11:19 +02:00
Asdow fa8e3113fe Declare function static 2025-11-19 21:11:19 +02:00
Asdow 62fbf90daa Remove unnecessary function declaration 2025-11-19 21:11:19 +02:00
Asdow 10ac8624fe Move ExecuteAdditionalCharacterDialogue defintion before the first call
This allows us to declare it static
2025-11-19 21:11:19 +02:00
Asdow 4e60877add Declare compatible functions static 2025-11-19 21:11:19 +02:00
Asdow 740a1a8851 Remove duplicate include 2025-11-19 21:11:19 +02:00
Asdow 55afb83eb2 Move UB specific header under UB #ifdef 2025-11-19 21:11:19 +02:00
Asdow dfd5cfd42e Remove unused includes 2025-11-19 21:11:19 +02:00
Asdow 518f7959aa Remove commented out include 2025-11-19 21:11:19 +02:00
Asdow f4f1bb25b6 Replace transitive include with explicit 2025-11-19 21:11:19 +02:00
Asdow 731f3a7d99 Remove unused includes 2025-11-19 21:11:19 +02:00
Asdow cf048f9629 Remvoe unused includes 2025-11-19 21:11:19 +02:00
Asdow 34a369938b Declare compatible functions static 2025-11-19 21:11:19 +02:00
Asdow 2979f49e8d Remove unused includes 2025-11-19 21:11:19 +02:00
Asdow 0dc080b01d Declare compatbile function static 2025-11-19 21:11:19 +02:00
Asdow 014b06641e Remove unused function declarations 2025-11-19 21:11:19 +02:00
Asdow 56d4499262 Remove unused includes 2025-11-19 21:11:19 +02:00
Asdow 92c58d9fb6 Declare compatible function static 2025-11-19 21:11:19 +02:00
Asdow 330470353c Remove unused include 2025-11-19 21:11:19 +02:00
Asdow 7c274fd87a Declare compatible functions static 2025-11-19 21:11:19 +02:00
Asdow 5e28730c2a Make fallthrough explicit 2025-11-19 21:11:19 +02:00
Asdow fccb2e15bd Replace transitive include with explicit 2025-11-19 21:11:19 +02:00
Asdow e354885b16 Remove unused includes 2025-11-19 21:11:19 +02:00
Asdow 056fc5ea6e Remove unused function declaration 2025-11-19 21:11:19 +02:00
Asdow 2c50518b61 Make compatible function static 2025-11-19 21:11:19 +02:00
Asdow 803ee8d90b Declare compatible function static 2025-11-19 21:11:19 +02:00
Asdow 243e22a8c6 Remove unused includes 2025-11-19 21:11:19 +02:00
Asdow d85643b895 Initialize local variable 2025-11-19 21:11:19 +02:00
Asdow 413eaa08fb Declare compatible functions static 2025-11-19 21:11:19 +02:00
Asdow 08c82aa056 Remove unused local variable 2025-11-19 21:11:19 +02:00
Asdow 03e4898061 Declare compatible functions static 2025-11-19 21:11:19 +02:00
Asdow 6799d68b3c Remove duplicate includes 2025-11-19 21:11:19 +02:00
Asdow 5f6114fed9 Remove unused files 2025-11-19 21:11:19 +02:00
Asdow eace375a3b Remove unused function declaration 2025-11-19 21:11:19 +02:00
Asdow 419f9f3bf5 Remove duplicate includes 2025-11-19 21:11:19 +02:00
Asdow 9e4b819f69 Declare compatible functions static 2025-11-19 21:11:19 +02:00
Asdow 8296bfbf8a Move Handle UI.h include under JA2UB define 2025-11-19 21:11:19 +02:00
Asdow 12250a34ae Remove unused includes 2025-11-19 21:11:19 +02:00
Asdow 9f7b545528 Combine search loops into one
Reduces code duplication and fixes an illegal memory access that was still present.
2025-11-19 13:57:41 +02:00
298 changed files with 5883 additions and 7210 deletions
+166 -27
View File
@@ -9,11 +9,6 @@ on:
# allows to manually trigger a build # allows to manually trigger a build
workflow_dispatch: workflow_dispatch:
inputs: inputs:
build_all_languages:
description: build all languages
required: false
default: false
type: boolean
assemble_release: assemble_release:
description: create release description: create release
required: false required: false
@@ -27,7 +22,6 @@ jobs:
workflow_setup: workflow_setup:
runs-on: ubuntu-latest runs-on: ubuntu-latest
outputs: outputs:
languages_json_array: ${{ steps.global_vars.outputs.languages_json_array }}
assemble_release: ${{ steps.global_vars.outputs.assemble_release }} assemble_release: ${{ steps.global_vars.outputs.assemble_release }}
steps: steps:
- id: global_vars - id: global_vars
@@ -37,15 +31,6 @@ jobs:
full_release='${{ ( github.repository == '1dot13/source' && github.ref_name == 'master' ) || startsWith(github.ref, 'refs/tags/v') }}' full_release='${{ ( github.repository == '1dot13/source' && github.ref_name == 'master' ) || startsWith(github.ref, 'refs/tags/v') }}'
if [[ '${{ inputs.build_all_languages }}' == 'true' || ( '${{ inputs.build_all_languages }}' == '' && "$full_release" == 'true' ) ]]
then
languages_json_array='["Chinese", "German", "English", "French", "Polish", "Italian", "Dutch", "Russian"]';
else
# English + some other language for compilation testing
languages_json_array='["German", "English"]'
fi
echo "languages_json_array=$languages_json_array" >> $GITHUB_OUTPUT
if [[ '${{ inputs.assemble_release }}' == 'true' || ( '${{ inputs.assemble_release }}' == '' && "$full_release" == 'true' ) ]] if [[ '${{ inputs.assemble_release }}' == 'true' || ( '${{ inputs.assemble_release }}' == '' && "$full_release" == 'true' ) ]]
then then
assemble_release='true' assemble_release='true'
@@ -154,39 +139,193 @@ jobs:
cat dist/versions.env cat dist/versions.env
- name: Upload - name: Upload
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
with: with:
name: versions.env name: versions.env
path: dist/ path: dist/
build: # every executable contains all languages and picks one at runtime, so one build serves every package
compile:
needs: [ workflow_setup ] needs: [ workflow_setup ]
runs-on: windows-latest # required for the MSVC toolchain
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
language: ${{ fromJson(needs.workflow_setup.outputs.languages_json_array) }} application: [ja2, ja2mapeditor, ja2ub, ja2ubmapeditor]
uses: ./.github/workflows/build_language.yml
with: steps:
language: ${{ matrix.language }} - name: Checkout source
assemble: ${{ needs.workflow_setup.outputs.assemble_release == 'true' }} uses: actions/checkout@v7
# at least English and some other lang have to work
continue-on-error: ${{ matrix.language != 'English' && matrix.language != 'German' }} - name: Download versions.env
uses: actions/download-artifact@v8
with:
name: versions.env
path: artifacts
- name: Restore versions.env
shell: bash
run: cat artifacts/versions.env >> $GITHUB_ENV
# TODO: Move this into CMake, just taking the GitHub Actions parameters as -D variables
- name: Update GameVersion.cpp
shell: bash
run: |
set -eux
GAME_VERSION=$(echo "$GAME_VERSION" | tr -cd '[:print:]' | tr -d '"\\')
GAME_BUILD=$(echo "$GAME_BUILD_INFORMATION" | tr -cd '[:print:]' | tr -d '"\\')
sed -i "s|@Version@|${GAME_VERSION:0:15}|" Ja2/GameVersion.cpp
sed -i "s|@Build@|${GAME_BUILD:0:255}|" Ja2/GameVersion.cpp
cat Ja2/GameVersion.cpp
- name: Prepare build properties
shell: bash
run: |
set -eux
touch CMakePresets.json
JA2Application=$(echo '${{ matrix.application }}' | tr '[:lower:]' '[:upper:]')
echo "
JA2Application=$JA2Application
" >> $GITHUB_ENV
- uses: egor-tensin/vs-shell@v2
with:
arch: x86
- name: Prepare build
run: |
cmake -S . -B build -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DApplications="$Env:JA2Application"
- name: Build
run: |
cmake --build build/ -- -v
- name: List build artifacts
shell: bash
run: |
find build/
- name: Upload
uses: actions/upload-artifact@v7
with:
name: ${{ matrix.application }}
path: build/*.exe
# only the game data differs per language, every package gets the same executables
assemble:
needs: [ workflow_setup, compile ]
if: needs.workflow_setup.outputs.assemble_release == 'true'
runs-on: windows-latest # required for case-insensitive filesystem handling
# at least English has to work
continue-on-error: ${{ matrix.language != 'English' }}
strategy:
fail-fast: false
matrix:
language: [Chinese, German, English, French, Polish, Italian, Dutch, Russian]
steps:
- name: Download versions.env
uses: actions/download-artifact@v8
with:
name: versions.env
path: artifacts
- name: Restore versions.env
shell: bash
run: cat artifacts/versions.env >> $GITHUB_ENV
- name: Checkout gamedir
uses: actions/checkout@v7
with:
repository: ${{ env.GAMEDIR_REPOSITORY }}
ref: ${{ env.GAMEDIR_COMMIT_SHA }}
path: gamedir
- name: Checkout gamedir-languages
if: matrix.language != 'English'
uses: actions/checkout@v7
with:
repository: ${{ env.GAMEDIR_LANGUAGES_REPOSITORY }}
ref: ${{ env.GAMEDIR_LANGUAGES_COMMIT_SHA }}
path: gamedir-languages
- name: Copy gamedir-languages files to gamedir
if: matrix.language != 'English'
shell: bash
run: |
set -eux
cp -a gamedir-languages/${{ matrix.language }}_Version/* gamedir/
- name: Download applications
uses: actions/download-artifact@v8
with:
pattern: ja2*
path: artifacts
- name: Copy application files to gamedir
shell: bash
run: |
set -eux
for APP in ja2 ja2mapeditor ja2ub ja2ubmapeditor
do
mv artifacts/${APP}/*.exe gamedir/${APP}.exe
done
- name: Create version information file
shell: bash
run: |
set -eux
# "-" separates words, "_" combines words, see double-click behavior
DIST_PREFIX='JA2_113'
DIST_NAME="${DIST_PREFIX}-${GAME_VERSION}-G${GAMEDIR_COMMIT_SHA:0:4}L${GAMEDIR_LANGUAGES_COMMIT_SHA:0:4}-${{ matrix.language }}"
echo "DIST_NAME=$DIST_NAME" >> $GITHUB_ENV
echo "If you encounter problems during gameplay, please provide the following version information:
Distribution Name: $DIST_NAME
Game Version: $GAME_VERSION
Language: ${{ matrix.language }}
Build Information: $GAME_BUILD_INFORMATION
Source Repository: $GITHUB_REPOSITORY
Source Commit SHA: $GITHUB_SHA
Source Commit Date: $SOURCE_COMMIT_DATETIME
Gamedir Repository: $GAMEDIR_REPOSITORY
Gamedir Commit SHA: $GAMEDIR_COMMIT_SHA
Gamedir Commit Date: $GAMEDIR_COMMIT_DATETIME
Gamedir Languages Repository: $GAMEDIR_LANGUAGES_REPOSITORY
Gamedir Languages Commit SHA: $GAMEDIR_LANGUAGES_COMMIT_SHA
Gamedir Languages Commit Date: $GAMEDIR_LANGUAGES_COMMIT_DATETIME
" > "gamedir/${DIST_PREFIX}-Version.txt"
cat "gamedir/${DIST_PREFIX}-Version.txt"
- name: Create release archive
shell: bash
run: |
set -eux
mkdir dist/
cd gamedir/
7z a -bb -xr'!.*' "../dist/${DIST_NAME}.7z" .
- name: Upload
uses: actions/upload-artifact@v7
with:
name: ${{ matrix.language }}_release
path: dist/
compression-level: 0
release: release:
needs: [ workflow_setup, build ] needs: [ workflow_setup, assemble ]
if: needs.workflow_setup.outputs.assemble_release == 'true' if: needs.workflow_setup.outputs.assemble_release == 'true'
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Download artifacts - name: Download artifacts
uses: actions/download-artifact@v4 uses: actions/download-artifact@v8
with: with:
path: dist path: dist
pattern: '*_release' pattern: '*_release'
merge-multiple: true merge-multiple: true
- name: Checkout Repo - name: Checkout Repo
uses: actions/checkout@v4 uses: actions/checkout@v7
with: with:
path: source path: source
fetch-depth: 1 fetch-depth: 1
-206
View File
@@ -1,206 +0,0 @@
name: build language
on:
workflow_call:
inputs:
language:
description: 'any of Chinese German English French Polish Italian Dutch Russian'
required: true
default: 'English'
type: string
assemble:
description: 'assemble full package'
required: true
default: true
type: boolean
continue-on-error:
description: 'allows a language to fail, used when building all languages'
required: false
default: false
type: boolean
jobs:
compile:
runs-on: windows-latest # required for msbuild
continue-on-error: ${{ inputs.continue-on-error }}
strategy:
fail-fast: false
matrix:
application: [ja2, ja2mapeditor, ja2ub, ja2ubmapeditor]
steps:
- name: Checkout source
uses: actions/checkout@v4
- name: Download versions.env
uses: actions/download-artifact@v4
with:
name: versions.env
path: artifacts
- name: Restore versions.env
shell: bash
run: cat artifacts/versions.env >> $GITHUB_ENV
# TODO: Move this into CMake, just taking the GitHub Actions parameters as -D variables
- name: Update GameVersion.cpp
shell: bash
run: |
set -eux
INPUTS_LANGUAGE=${{ inputs.language }}
GAME_VERSION=$(echo "$GAME_VERSION" | tr -cd '[:print:]' | tr -d '"\\')
GAME_BUILD="${INPUTS_LANGUAGE:0:2} $GAME_BUILD_INFORMATION"
GAME_BUILD=$(echo "$GAME_BUILD" | tr -cd '[:print:]' | tr -d '"\\')
sed -i "s|@Version@|${GAME_VERSION:0:15}|" Ja2/GameVersion.cpp
sed -i "s|@Build@|${GAME_BUILD:0:255}|" Ja2/GameVersion.cpp
cat Ja2/GameVersion.cpp
- name: Prepare build properties
shell: bash
run: |
set -eux
touch CMakePresets.json
JA2Language=$(echo '${{ inputs.language }}' | tr '[:lower:]' '[:upper:]')
JA2Application=$(echo '${{ matrix.application }}' | tr '[:lower:]' '[:upper:]')
echo "
JA2Language=$JA2Language
JA2Application=$JA2Application
" >> $GITHUB_ENV
- uses: microsoft/setup-msbuild@v2
with:
msbuild-architecture: x86
- uses: ilammy/msvc-dev-cmd@v1
with:
arch: x86
- name: Prepare build
run: |
cmake -S . -B build -GNinja -DCMAKE_BUILD_TYPE=Release -DLanguages="$Env:JA2Language" -DApplications="$Env:JA2Application"
- name: Build
run: |
cmake --build build/ -- -v
- name: List build artifacts
shell: bash
run: |
find build/
- name: Upload
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.language }}_${{ matrix.application }}
path: build/*.exe
assemble:
needs: [ compile ]
if: inputs.assemble
runs-on: windows-latest # required for case-insensitive filesystem handling
continue-on-error: ${{ inputs.continue-on-error }}
steps:
- name: Download versions.env
uses: actions/download-artifact@v4
with:
name: versions.env
path: artifacts
- name: Restore versions.env
shell: bash
run: cat artifacts/versions.env >> $GITHUB_ENV
- name: Checkout gamedir
uses: actions/checkout@v4
with:
repository: ${{ env.GAMEDIR_REPOSITORY }}
ref: ${{ env.GAMEDIR_COMMIT_SHA }}
path: gamedir
- name: Checkout gamedir-languages
if: inputs.language != 'English'
uses: actions/checkout@v4
with:
repository: ${{ env.GAMEDIR_LANGUAGES_REPOSITORY }}
ref: ${{ env.GAMEDIR_LANGUAGES_COMMIT_SHA }}
path: gamedir-languages
- name: Copy gamedir-languages files to gamedir
if: inputs.language != 'English'
shell: bash
run: |
set -eux
cp -a gamedir-languages/${{ inputs.language }}_Version/* gamedir/
- name: Download ja2
uses: actions/download-artifact@v4
with:
name: ${{ inputs.language }}_ja2
path: artifacts/ja2
- name: Download ja2mapeditor
uses: actions/download-artifact@v4
with:
name: ${{ inputs.language }}_ja2mapeditor
path: artifacts/ja2mapeditor
- name: Download ja2ub
uses: actions/download-artifact@v4
with:
name: ${{ inputs.language }}_ja2ub
path: artifacts/ja2ub
- name: Download ja2ubmapeditor
uses: actions/download-artifact@v4
with:
name: ${{ inputs.language }}_ja2ubmapeditor
path: artifacts/ja2ubmapeditor
- name: Copy application files to gamedir
shell: bash
run: |
set -eux
for APP in ja2 ja2mapeditor ja2ub ja2ubmapeditor
do
mv artifacts/${APP}/*.exe gamedir/${APP}.exe
done
- name: Create version information file
shell: bash
run: |
set -eux
# "-" separates words, "_" combines words, see double-click behavior
DIST_PREFIX='JA2_113'
DIST_NAME="${DIST_PREFIX}-${GAME_VERSION}-G${GAMEDIR_COMMIT_SHA:0:4}L${GAMEDIR_LANGUAGES_COMMIT_SHA:0:4}-${{ inputs.language }}"
echo "DIST_NAME=$DIST_NAME" >> $GITHUB_ENV
echo "If you encounter problems during gameplay, please provide the following version information:
Distribution Name: $DIST_NAME
Game Version: $GAME_VERSION
Language: ${{ inputs.language }}
Build Information: $GAME_BUILD_INFORMATION
Source Repository: $GITHUB_REPOSITORY
Source Commit SHA: $GITHUB_SHA
Source Commit Date: $SOURCE_COMMIT_DATETIME
Gamedir Repository: $GAMEDIR_REPOSITORY
Gamedir Commit SHA: $GAMEDIR_COMMIT_SHA
Gamedir Commit Date: $GAMEDIR_COMMIT_DATETIME
Gamedir Languages Repository: $GAMEDIR_LANGUAGES_REPOSITORY
Gamedir Languages Commit SHA: $GAMEDIR_LANGUAGES_COMMIT_SHA
Gamedir Languages Commit Date: $GAMEDIR_LANGUAGES_COMMIT_DATETIME
" > "gamedir/${DIST_PREFIX}-Version.txt"
cat "gamedir/${DIST_PREFIX}-Version.txt"
- name: Create release archive
shell: bash
run: |
set -eux
mkdir dist/
cd gamedir/
7z a -bb -xr'!.*' "../dist/${DIST_NAME}.7z" .
- name: Upload
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.language }}_release
path: dist/
compression-level: 0
+29 -27
View File
@@ -27,7 +27,11 @@ if(ADDRESS_SANITIZER)
endif() endif()
if(MSVC) if(MSVC)
add_compile_options("/wd4838") # TODO: fix the warnings here and turn them on
# https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199
add_compile_options("/wd4838") # silence implicit narrowing conversion warnings
# add_compile_options("/w14061")
# add_compile_options("/w14062")
endif() endif()
# whether we are using MSBuild as a generator # whether we are using MSBuild as a generator
@@ -102,15 +106,13 @@ foreach(lib IN LISTS Ja2_Libs)
add_subdirectory(${lib}) add_subdirectory(${lib})
endforeach() endforeach()
# language library relies on Application _and_ Language preprocessor definition. very bad. # language library relies on Application preprocessor definition; compiled once per app
# with all 8 languages built in and selected at runtime (docs/plans/language-design.md).
add_subdirectory(i18n) add_subdirectory(i18n)
# simple function to validate Languages and Application choices # simple function to validate the Application choice
include(cmake/ValidateOptions.cmake) include(cmake/ValidateOptions.cmake)
set(ValidLanguages CHINESE DUTCH ENGLISH FRENCH GERMAN ITALIAN POLISH RUSSIAN)
ValidateOptions("${ValidLanguages}" "Languages" "${Languages}" "LangTargets")
set(ValidApplications JA2 JA2MAPEDITOR JA2UB JA2UBMAPEDITOR) set(ValidApplications JA2 JA2MAPEDITOR JA2UB JA2UBMAPEDITOR)
ValidateOptions("${ValidApplications}" "Applications" "${Applications}" "ApplicationTargets") ValidateOptions("${ValidApplications}" "Applications" "${Applications}" "ApplicationTargets")
@@ -136,32 +138,32 @@ foreach(app IN LISTS ApplicationTargets)
target_compile_definitions(${game_library} PRIVATE ${compilationFlags} ${debugFlags}) target_compile_definitions(${game_library} PRIVATE ${compilationFlags} ${debugFlags})
endforeach() endforeach()
foreach(lang IN LISTS LangTargets) # executable for the application, e.g. JA2.exe
# executable for an application/language combination, e.g. JA2_ENGLISH.exe set(exe ${app})
set(exe ${app}_${lang}) add_executable(${exe} WIN32
add_executable(${exe} WIN32 sgp/sgp.cpp
sgp/sgp.cpp Ja2/Res/ja2.rc
Ja2/Res/ja2.rc )
) target_link_libraries(${exe} PRIVATE ${Ja2_Libraries} $<IF:${usingMsBuild},legacy_stdio_definitions.lib,>)
target_link_libraries(${exe} PRIVATE ${Ja2_Libraries} $<IF:${usingMsBuild},legacy_stdio_definitions.lib,>) target_link_options(${exe} PRIVATE $<IF:${usingMsBuild},/SAFESEH:NO,>)
target_link_options(${exe} PRIVATE $<IF:${usingMsBuild},/SAFESEH:NO,>) target_compile_definitions(${exe} PRIVATE ${compilationFlags} ${debugFlags})
target_compile_definitions(${exe} PRIVATE ${compilationFlags} ${debugFlags})
# language library for an application, e.g. JA2MAPEDITOR_ENGLISH_i18n # language library for the application, e.g. JA2MAPEDITOR_i18n — one per app, all 8
set(language_library ${exe}_i18n) # languages compiled in, selected at runtime by BindLanguageStrings
add_library(${language_library}) set(language_library ${exe}_i18n)
target_sources(${language_library} PRIVATE ${i18nSrc}) add_library(${language_library})
target_compile_definitions(${language_library} PRIVATE ${compilationFlags} ${debugFlags} ${lang}) target_sources(${language_library} PRIVATE ${i18nSrc})
target_link_libraries(${exe} PRIVATE ${language_library}) target_compile_definitions(${language_library} PRIVATE ${compilationFlags} ${debugFlags})
target_compile_options(${language_library} PRIVATE /w14062)
target_link_libraries(${exe} PRIVATE ${language_library})
# go through all game libraries again and link them to the app/language executable # go through all game libraries again and link them to the app executable
foreach(lib IN LISTS Ja2_Libs) foreach(lib IN LISTS Ja2_Libs)
target_link_libraries(${exe} PRIVATE ${app}_${lib}) target_link_libraries(${exe} PRIVATE ${app}_${lib})
endforeach()
endforeach() endforeach()
# for SGP only # for SGP only
target_link_libraries(${app}_sgp PRIVATE "ddraw.lib" "${PROJECT_SOURCE_DIR}/fmodvc.lib") target_link_libraries(${app}_sgp PRIVATE "ddraw.lib" "${PROJECT_SOURCE_DIR}/fmodvc.lib")
target_link_libraries(${app}_sgp PRIVATE libpng) target_link_libraries(${app}_sgp PRIVATE libpng)
target_compile_definitions(${app}_sgp PRIVATE NO_ZLIB_COMPRESSION) target_compile_definitions(${app}_sgp PRIVATE ${compilationFlags} ${debugFlags} NO_ZLIB_COMPRESSION)
endforeach() endforeach()
+2 -2
View File
@@ -29,7 +29,7 @@ void IncreaseSelectionDensity();
void DecreaseSelectionDensity(); void DecreaseSelectionDensity();
void RemoveCursors(); void RemoveCursors();
extern STR16 wszSelType[6]; extern STR16 *wszSelType;
extern BOOLEAN gfCurrentSelectionWithRightButton; extern BOOLEAN gfCurrentSelectionWithRightButton;
@@ -40,4 +40,4 @@ extern BOOLEAN gfCurrentSelectionWithRightButton;
#endif #endif
#endif #endif
+1 -1
View File
@@ -325,7 +325,7 @@ extern UINT8 gubCurrMercMode, gubPrevMercMode;
#define NUM_DIFF_LVLS 5 #define NUM_DIFF_LVLS 5
extern STR16 zDiffNames[NUM_DIFF_LVLS]; extern STR16 *zDiffNames;
extern INT16 sCurBaseDiff; extern INT16 sCurBaseDiff;
extern INT16 gsSelectedMercID; extern INT16 gsSelectedMercID;
extern INT32 gsSelectedMercGridNo; extern INT32 gsSelectedMercGridNo;
+1 -1
View File
@@ -40,7 +40,7 @@ MOUSE_REGION popupRegion;
UINT16 gusEntryHeight; UINT16 gusEntryHeight;
BOOLEAN fWaitingForLButtonRelease = FALSE; BOOLEAN fWaitingForLButtonRelease = FALSE;
extern CHAR16 gszScheduleActions[ NUM_SCHEDULE_ACTIONS ][20]; extern CHAR16 (*gszScheduleActions)[20]; // NUM_SCHEDULE_ACTIONS entries
//Finds the string for any popup menu in JA2 -- the strings are stored //Finds the string for any popup menu in JA2 -- the strings are stored
//in different ways in each instance. //in different ways in each instance.
-1
View File
@@ -13,7 +13,6 @@
#include "Font Control.h" #include "Font Control.h"
#include "Cursors.h" #include "Cursors.h"
#include "Font.h" #include "Font.h"
#include "WordWrap.h"
#include "sysutil.h" #include "sysutil.h"
#include "input.h" #include "input.h"
#include "english.h" #include "english.h"
+24 -37
View File
@@ -1,40 +1,27 @@
#include "types.h" #include "types.h"
#include "FeaturesScreen.h" #include "FeaturesScreen.h"
#include "video.h" #include "video.h"
#include "Font Control.h" #include "Font Control.h"
#include "Game Clock.h" #include "Game Clock.h"
#include "Text Input.h" #include "Text Input.h"
#include "WordWrap.h" #include "WordWrap.h"
#include "SaveLoadScreen.h" #include "SaveLoadScreen.h"
#include "Render Dirty.h" #include "Render Dirty.h"
#include "WordWrap.h" #include "WCheck.h"
#include "WCheck.h" #include "Utilities.h"
#include "Utilities.h" #include "Sound Control.h"
#include "DEBUG.H" #include "Ambient Control.h"
#include "Sound Control.h" #include "GameSettings.h"
#include "Ambient Control.h" #include "Game Init.h"
#include "WorldDat.h" #include "english.h"
#include "worlddef.h" #include "Cursors.h"
#include "GameSettings.h" #include "sysutil.h"
#include "Game Init.h" #include "Text.h"
#include "english.h" #include "Interface Control.h"
#include "Overhead.h" #include "message.h"
#include "GAP.H" #include "Multi Language Graphic Utils.h"
#include "Cursors.h" #include "connect.h"
#include "sysutil.h" #include "mainmenuscreen.h"
#include "Exit Grids.h"
#include "Text.h"
#include "Interface Control.h"
#include "message.h"
#include "Multi Language Graphic Utils.h"
#include "Map Information.h"
#include "Sys Globals.h"
#include "insurance.h"
#include "connect.h"
#include "worldman.h"
#include "Init.h"
#include "Game Events.h"
extern UINT32 guiDoneButton; // symbol already declared globally in AimArchives.cpp (jonathanl) extern UINT32 guiDoneButton; // symbol already declared globally in AimArchives.cpp (jonathanl)
+22 -30
View File
@@ -1,38 +1,30 @@
#include "types.h" #include "types.h"
#include "GameInitOptionsScreen.h" #include "GameInitOptionsScreen.h"
#include "GameSettings.h" #include "GameSettings.h"
#include "Utilities.h" #include "Utilities.h"
#include "WCheck.h" #include "WCheck.h"
#include "Font Control.h" #include "Font Control.h"
#include "WordWrap.h" #include "WordWrap.h"
#include "Render Dirty.h" #include "Render Dirty.h"
#include "input.h" #include "input.h"
#include "Options Screen.h" #include "Options Screen.h"
#include "english.h" #include "english.h"
#include "sysutil.h" #include "sysutil.h"
#include "Fade Screen.h" #include "Fade Screen.h"
#include "Cursor Control.h" #include "Cursor Control.h"
#include "Music Control.h" #include "Music Control.h"
#include "Cursors.h" #include "Cursors.h"
#include "Intro.h" #include "Intro.h"
#include "Text.h" #include "Text.h"
#include "_Ja25EnglishText.h" #include "_Ja25EnglishText.h"
#include "Soldier Profile.h" #include "Soldier Profile.h"
#include "gameloop.h"
#include "connect.h"
#include "SaveLoadScreen.h" #include "SaveLoadScreen.h"
#ifdef JA2UB
#include "ub_config.h"
#endif
#include <vfs/Core/vfs.h> #include <vfs/Core/vfs.h>
#include <vfs/Core/vfs_init.h>
#include <vfs/Tools/vfs_property_container.h> #include <vfs/Tools/vfs_property_container.h>
#include <vfs/Core/vfs_os_functions.h>
#ifdef JA2UB #ifdef JA2UB
#include "ub_config.h"
// ********************************* // *********************************
// Unfinished Business: Initial Game Screen // Unfinished Business: Initial Game Screen
+3 -4
View File
@@ -13,7 +13,6 @@
#include "HelpScreen.h" #include "HelpScreen.h"
#include "INIReader.h" #include "INIReader.h"
#include "Shade Table Util.h" #include "Shade Table Util.h"
#include "soldier profile type.h"
#include "random.h" #include "random.h"
#include "SaveLoadGame.h" #include "SaveLoadGame.h"
#include "sgp.h" #include "sgp.h"
@@ -36,7 +35,6 @@
#include "connect.h" #include "connect.h"
#include "sgp_logger.h" #include "sgp_logger.h"
#include "Map Information.h"
#include "GameInitOptionsScreen.h" #include "GameInitOptionsScreen.h"
@@ -156,7 +154,7 @@ BOOLEAN UsingInventoryCostsAPSystem()
return ( gGameExternalOptions.fInventoryCostsAP ); return ( gGameExternalOptions.fInventoryCostsAP );
} }
std::string StringToLower(std::string strToConvert) static std::string StringToLower(std::string strToConvert)
{//change each element of the string to lower case {//change each element of the string to lower case
for(unsigned int i=0;i<strToConvert.length();i++) for(unsigned int i=0;i<strToConvert.length();i++)
{ {
@@ -185,7 +183,7 @@ BOOLEAN IsNIVModeValid(bool checkRes)
return isValid; return isValid;
} }
void UpdateFeatureFlags() static void UpdateFeatureFlags()
{ {
// do we need to override some ini settings? // do we need to override some ini settings?
if (gGameSettings.fFeatures[FF_FEATURES_SCREEN]) if (gGameSettings.fFeatures[FF_FEATURES_SCREEN])
@@ -2751,6 +2749,7 @@ void LoadSkillTraitsExternalSettings()
gSkillTraitValues.ubTERepairRobotPenaltyReduction = iniReader.ReadInteger("Technician","REPAIR_SPEED_ROBOT_PENALTY_REDUCTION", 30, 0, 100); gSkillTraitValues.ubTERepairRobotPenaltyReduction = iniReader.ReadInteger("Technician","REPAIR_SPEED_ROBOT_PENALTY_REDUCTION", 30, 0, 100);
if (gSkillTraitValues.ubTETraitsNumToRepairRobot == 2) {gSkillTraitValues.ubTERepairRobotPenaltyReduction /= 2; } if (gSkillTraitValues.ubTETraitsNumToRepairRobot == 2) {gSkillTraitValues.ubTERepairRobotPenaltyReduction /= 2; }
gSkillTraitValues.fTETraitsCanRestoreItemThreshold = iniReader.ReadBoolean( "Technician", "MERCS_CAN_DO_ADVANCED_REPAIRS", FALSE ); gSkillTraitValues.fTETraitsCanRestoreItemThreshold = iniReader.ReadBoolean( "Technician", "MERCS_CAN_DO_ADVANCED_REPAIRS", FALSE );
gSkillTraitValues.ubTechLevelNeededForAdvancedRepair = iniReader.ReadInteger("Technician", "TECH_LEVEL_NEEDED_FOR_ADVANCED_REPAIR", 2, 1, 2);
// DOCTOR // DOCTOR
gSkillTraitValues.ubDONumberTraitsNeededForSurgery = iniReader.ReadInteger("Doctor","NUMBER_OF_TRAITS_NEEDED_FOR_SURGERY", 1, 0, 2); gSkillTraitValues.ubDONumberTraitsNeededForSurgery = iniReader.ReadInteger("Doctor","NUMBER_OF_TRAITS_NEEDED_FOR_SURGERY", 1, 0, 2);
+3
View File
@@ -8,8 +8,10 @@
#include "Campaign Types.h" #include "Campaign Types.h"
#include "environment.h" #include "environment.h"
#include <string_view>
#define GAME_INI_FILE "Ja2.ini" #define GAME_INI_FILE "Ja2.ini"
constexpr std::string_view LANGUAGE_INI_FILE{"Language.ini"};
//If you add any options, MAKE sure you add the corresponding string to the Options Screen string array. //If you add any options, MAKE sure you add the corresponding string to the Options Screen string array.
// look up : zOptionsScreenHelpText , zOptionsToggleText // look up : zOptionsScreenHelpText , zOptionsToggleText
//Also, define its initialization and add its load/save to INI lines in : InitGameSettings() , SaveGameSettings() , LoadGameSettings() //Also, define its initialization and add its load/save to INI lines in : InitGameSettings() , SaveGameSettings() , LoadGameSettings()
@@ -2145,6 +2147,7 @@ typedef struct
UINT8 ubTERepairRobotPenaltyReduction; UINT8 ubTERepairRobotPenaltyReduction;
UINT8 ubTETraitsNumToRepairRobot; UINT8 ubTETraitsNumToRepairRobot;
BOOLEAN fTETraitsCanRestoreItemThreshold; BOOLEAN fTETraitsCanRestoreItemThreshold;
UINT8 ubTechLevelNeededForAdvancedRepair; // if we have a high enough technician level, we can repair items above the normal threshold (1 for technician, 2 for engineer)
// DOCTOR // DOCTOR
UINT8 ubDONumberTraitsNeededForSurgery; UINT8 ubDONumberTraitsNeededForSurgery;
+20 -25
View File
@@ -1,27 +1,23 @@
#include "sgp.h" #include "sgp.h"
#include "sysutil.h" #include "sysutil.h"
#include "vobject_blitters.h" #include "WCheck.h"
#include "WCheck.h" #include "Cursors.h"
#include "Cursors.h" #include "Font Control.h"
#include "Font Control.h" #include "Render Dirty.h"
#include "Cursor Control.h" #include "Text.h"
#include "Render Dirty.h" #include "Utilities.h"
#include "Text.h" #include "WordWrap.h"
#include "Utilities.h" #include "HelpScreen.h"
#include "WordWrap.h" #include "HelpScreenText.h"
#include "Font Control.h" #include "line.h"
#include "Text.h" #include "Game Clock.h"
#include "HelpScreen.h" #include "GameSettings.h"
#include "HelpScreenText.h" #include "laptop.h"
#include "line.h" #include "Text Input.h"
#include "Game Clock.h" #include "english.h"
#include "GameSettings.h" #include "renderworld.h"
#include "laptop.h" #include "Game Init.h"
#include "Text Input.h" #include "Overhead.h"
#include "english.h"
#include "renderworld.h"
#include "Game Init.h"
#include "Overhead.h"
extern INT16 gsVIEWPORT_END_Y; extern INT16 gsVIEWPORT_END_Y;
extern void PrintDate( void ); extern void PrintDate( void );
@@ -308,7 +304,6 @@ void SelectHelpScrollAreaCallBack( MOUSE_REGION * pRegion, INT32 iReason );
// region to mask the background // region to mask the background
MOUSE_REGION gHelpScreenScrollAreaArrows; MOUSE_REGION gHelpScreenScrollAreaArrows;
void SelectHelpScrollAreaArrowsCallBack( MOUSE_REGION * pRegion, INT32 iReason );
//checkbox to toggle show help again toggle //checkbox to toggle show help again toggle
+98 -173
View File
@@ -1,55 +1,47 @@
#include "builddefines.h" #include "builddefines.h"
#include <stdio.h> #include <stdio.h>
#include "sgp.h" #include "sgp.h"
#include "gameloop.h" #include "Screens.h"
#include "Screens.h" #include "vobject_blitters.h"
#include "INIReader.h" #include "sysutil.h"
#include "vobject_blitters.h" #include "worlddef.h"
#include "renderworld.h" #include "Animation Data.h"
#include "mousesystem.h" #include "Overhead.h"
#include "sysutil.h" #include "Font Control.h"
#include "worlddef.h" #include <himage.h>
#include "Animation Data.h" #include <vobject.h>
#include "Overhead.h" #include "Timer Control.h"
#include "Font Control.h" #include "Utilities.h"
#include "Button System.h" #include "Render Dirty.h"
#include "Timer Control.h" #include "Sound Control.h"
#include "Utilities.h" #include "lighting.h"
#include "Radar Screen.h" #include "Cursor Control.h"
#include "Render Dirty.h" #include "Music Control.h"
#include "Sound Control.h" #include "video.h"
#include "Event Pump.h" #include "maputility.h"
#include "lighting.h" #include "strategic.h"
#include "Cursor Control.h" #include "Dialogue Control.h"
#include "Music Control.h" #include "Text.h"
#include "video.h" #include "laptop.h"
#include "mapscreen.h" #include "MercTextBox.h"
#include "Interface Items.h" #include "Tile Cache.h"
#include "maputility.h" #include "strategicmap.h"
#include "strategic.h" #include "Map Information.h"
#include "Dialogue Control.h" #include "Shade Table Util.h"
#include "Text.h" #include "Exit Grids.h"
#include "laptop.h" #include "Summary Info.h"
#include "NPC.h" #include "GameSettings.h"
#include "MercTextBox.h" #include "Game Init.h"
#include "Tile Cache.h" #include "Init.h"
#include "strategicmap.h" #include "jascreens.h"
#include "Map Information.h" #include "XML.h"
#include "Shade Table Util.h" #include "SaveLoadGame.h"
#include "Exit Grids.h" #include "Weapons.h"
#include "Summary Info.h" #include "Strategic Movement.h"
#include "GameSettings.h" #include "Vehicles.h"
#include "Game Init.h" #include "Multilingual Text Code Generator.h"
#include "Init.h" #include "editscreen.h"
#include "jascreens.h" #include "Arms Dealer Init.h"
#include "XML.h"
#include "SaveLoadGame.h"
#include "Weapons.h"
#include "Strategic Movement.h"
#include "Vehicles.h"
#include "Multilingual Text Code Generator.h"
#include "editscreen.h"
#include "Arms Dealer Init.h"
#include "Map Screen Interface Bottom.h" #include "Map Screen Interface Bottom.h"
#include "MPXmlTeams.hpp" #include "MPXmlTeams.hpp"
#include "Strategic Mines LUA.h" #include "Strategic Mines LUA.h"
@@ -57,8 +49,6 @@
#include "lua_state.h" #include "lua_state.h"
#include "Interface.h" #include "Interface.h"
#include "Strategic Town Loyalty.h"
#include "Soldier Profile.h"
#include "aim.h" #include "aim.h"
#include "mainmenuscreen.h" #include "mainmenuscreen.h"
#include "email.h" #include "email.h"
@@ -70,7 +60,6 @@
#include "ub_config.h" #include "ub_config.h"
#include "Civ Quotes.h"
#include "LuaInitNPCs.h" #include "LuaInitNPCs.h"
#include "BriefingRoom_Data.h" #include "BriefingRoom_Data.h"
#include "AimArchives.h" #include "AimArchives.h"
@@ -96,20 +85,6 @@ extern BOOLEAN GetCDromDriveLetter( STR8 pString );
extern BOOLEAN gfUseConsecutiveQuickSaveSlots; extern BOOLEAN gfUseConsecutiveQuickSaveSlots;
#endif #endif
#if defined( GERMAN ) && !defined( _DEBUG )
//#define LASERLOCK_ENABLED
#endif
#ifdef LASERLOCK_ENABLED
int LASERLOK_Init( HINSTANCE hInstance );
int LASERLOK_Run();
int LASERLOK_Check();
BOOLEAN PrepareLaserLockSystem();
void HandleLaserLockResult( BOOLEAN fSuccess );
// int TestCall( int n);
#endif
extern HINSTANCE ghInstance; extern HINSTANCE ghInstance;
@@ -140,7 +115,7 @@ static void AddLanguagePrefix(STR fileName)
AddLanguagePrefix( fileName, GetLanguagePrefix()); AddLanguagePrefix( fileName, GetLanguagePrefix());
} }
void ResetEmptyRPCFaceSlots() static void ResetEmptyRPCFaceSlots()
{ {
//legion by jazz (load small faces from rpcs) //legion by jazz (load small faces from rpcs)
// reset empty slots with "-1" // reset empty slots with "-1"
@@ -1209,40 +1184,61 @@ if( g_lang != i18n::Lang::en ) {
} }
} }
if ( ReadXMLEmail == TRUE ) if ( ReadXMLEmail == TRUE )
{ {
// Externalized emails
strcpy(fileName, directoryName);
strcat(fileName, EMAILSFILENAME);
// Only load external emails if we find the file
if ( FileExists(fileName) )
{
DebugMsg(TOPIC_JA2, DBG_LEVEL_3, String("LoadExternalGameplayData, fileName = %s", fileName));
SGP_THROW_IFFALSE(ReadInExternalizedEmails(fileName, FALSE), EMAILSFILENAME);
if ( g_lang != i18n::Lang::en )
{
AddLanguagePrefix(fileName);
if ( FileExists(fileName) )
{
DebugMsg(TOPIC_JA2, DBG_LEVEL_3, String("LoadExternalGameplayData, fileName = %s", fileName));
if ( !ReadInExternalizedEmails(fileName, TRUE) )
return FALSE;
}
}
}
// EMAIL MERC AVAILABLE by Jazz // EMAIL MERC AVAILABLE by Jazz
strcpy(fileName, directoryName); strcpy(fileName, directoryName);
strcat(fileName, EMAILMERCAVAILABLE); strcat(fileName, EMAILMERCAVAILABLE);
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("LoadExternalGameplayData, fileName = %s", fileName)); DebugMsg(TOPIC_JA2, DBG_LEVEL_3, String("LoadExternalGameplayData, fileName = %s", fileName));
SGP_THROW_IFFALSE(ReadInEmailMercAvailable(fileName,FALSE), EMAILMERCAVAILABLE); SGP_THROW_IFFALSE(ReadInEmailMercAvailable(fileName, FALSE), EMAILMERCAVAILABLE);
if( g_lang != i18n::Lang::en ) { if ( g_lang != i18n::Lang::en )
AddLanguagePrefix(fileName);
if ( FileExists(fileName) )
{ {
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("LoadExternalGameplayData, fileName = %s", fileName)); AddLanguagePrefix(fileName);
if(!ReadInEmailMercAvailable(fileName,TRUE)) if ( FileExists(fileName) )
return FALSE; {
DebugMsg(TOPIC_JA2, DBG_LEVEL_3, String("LoadExternalGameplayData, fileName = %s", fileName));
if ( !ReadInEmailMercAvailable(fileName, TRUE) )
return FALSE;
}
} }
}
// EMAIL MERC LEVEL UP by Jazz // EMAIL MERC LEVEL UP by Jazz
strcpy(fileName, directoryName); strcpy(fileName, directoryName);
strcat(fileName, EMAILMERCLEVELUP); strcat(fileName, EMAILMERCLEVELUP);
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("LoadExternalGameplayData, fileName = %s", fileName)); DebugMsg(TOPIC_JA2, DBG_LEVEL_3, String("LoadExternalGameplayData, fileName = %s", fileName));
SGP_THROW_IFFALSE(ReadInEmailMercLevelUp(fileName,FALSE), EMAILMERCLEVELUP); SGP_THROW_IFFALSE(ReadInEmailMercLevelUp(fileName, FALSE), EMAILMERCLEVELUP);
if( g_lang != i18n::Lang::en ) { if ( g_lang != i18n::Lang::en ) {
AddLanguagePrefix(fileName); AddLanguagePrefix(fileName);
if ( FileExists(fileName) ) if ( FileExists(fileName) )
{ {
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("LoadExternalGameplayData, fileName = %s", fileName)); DebugMsg(TOPIC_JA2, DBG_LEVEL_3, String("LoadExternalGameplayData, fileName = %s", fileName));
if(!ReadInEmailMercLevelUp(fileName,TRUE)) if ( !ReadInEmailMercLevelUp(fileName, TRUE) )
return FALSE; return FALSE;
}
} }
}
}
/* /*
// EMAIL OTHER by Jazz // EMAIL OTHER by Jazz
strcpy(fileName, directoryName); strcpy(fileName, directoryName);
@@ -1250,16 +1246,18 @@ if( g_lang != i18n::Lang::en ) {
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("LoadExternalGameplayData, fileName = %s", fileName)); DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("LoadExternalGameplayData, fileName = %s", fileName));
SGP_THROW_IFFALSE(ReadInEmailOther(fileName,FALSE), EMAILOTHER); SGP_THROW_IFFALSE(ReadInEmailOther(fileName,FALSE), EMAILOTHER);
if( g_lang != i18n::Lang::en ) { if( g_lang != i18n::Lang::en ) {
AddLanguagePrefix(fileName); AddLanguagePrefix(fileName);
if ( FileExists(fileName) ) if ( FileExists(fileName) )
{ {
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("LoadExternalGameplayData, fileName = %s", fileName)); DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("LoadExternalGameplayData, fileName = %s", fileName));
if(!ReadInEmailOther(fileName,TRUE)) if(!ReadInEmailOther(fileName,TRUE))
return FALSE; return FALSE;
}
} }
}
*/ */
}
//new vehicles by Jazz //new vehicles by Jazz
InitNewVehicles (); InitNewVehicles ();
@@ -1412,11 +1410,6 @@ if( g_lang != i18n::Lang::en ) {
UINT32 InitializeJA2(void) UINT32 InitializeJA2(void)
{ {
#ifdef LASERLOCK_ENABLED
HandleLaserLockResult( PrepareLaserLockSystem() );
#endif
HandleJA2CDCheck( ); HandleJA2CDCheck( );
gfWorldLoaded = FALSE; gfWorldLoaded = FALSE;
@@ -1680,74 +1673,6 @@ void ShutdownJA2(void)
} }
#ifdef LASERLOCK_ENABLED
BOOLEAN PrepareLaserLockSystem()
{
INT32 iInitRetVal=0;
INT32 iRunRetVal=0;
INT32 iCheckRetVal=0;
CHAR8 zDirectory[512];
CHAR8 zCdLocation[ SGPFILENAME_LEN ];
CHAR8 zCdFile[ SGPFILENAME_LEN ];
//Get the "current" file directory
GetFileManCurrentDirectory( zDirectory );
if( GetCDromDriveLetter( zCdLocation ) )
{
// OK, build filename
sprintf( zCdFile, "%s%s", zCdLocation, "Data" );
}
else
{
goto FAILED_LASERLOK;
}
//Go back to the root directory
SetFileManCurrentDirectory( zCdFile );
//Init the laser lock system
iInitRetVal = LASERLOK_Init( ghInstance );
if( iInitRetVal != 0 )
goto FAILED_LASERLOK;
//makes the verification of the laserlok system
iRunRetVal = LASERLOK_Run();
if( iRunRetVal != 0 )
goto FAILED_LASERLOK;
//checks the result of the laserlok run function
iCheckRetVal = LASERLOK_Check();
if( iCheckRetVal != 0 )
goto FAILED_LASERLOK;
//Restore back to the proper directory
SetFileManCurrentDirectory( zDirectory );
return( TRUE );
FAILED_LASERLOK:
//Restore back to the proper directory
SetFileManCurrentDirectory( zDirectory );
return( FALSE );
}
void HandleLaserLockResult( BOOLEAN fSuccess )
{
if( !fSuccess )
{
CHAR8 zString[512];
sprintf( zString, "%S", gzLateLocalizedString[56] );
// ShowCursor(TRUE);
// ShowCursor(TRUE);
ShutdownWithErrorBox( zString );
}
}
#endif
void SetupMaxActionPointsAnimation() void SetupMaxActionPointsAnimation()
{ {
gubMaxActionPoints[REGMALE] = APBPConstants[AP_MAXIMUM]; gubMaxActionPoints[REGMALE] = APBPConstants[AP_MAXIMUM];
-1
View File
@@ -7,7 +7,6 @@
#include "LogicalBodyTypes/SurfaceDB.h" #include "LogicalBodyTypes/SurfaceDB.h"
#include "LogicalBodyTypes/FilterDB.h" #include "LogicalBodyTypes/FilterDB.h"
#include "LogicalBodyTypes/EnumeratorDB.h" #include "LogicalBodyTypes/EnumeratorDB.h"
#include "LogicalBodyTypes/BodyTypeDB.h"
#include "LogicalBodyTypes/PaletteDB.h" #include "LogicalBodyTypes/PaletteDB.h"
#include <iostream> #include <iostream>
+14 -37
View File
@@ -1,41 +1,18 @@
#include "sgp.h" #include "sgp.h"
#include "sysutil.h" #include "sysutil.h"
#include "vobject_blitters.h" #include "Cursor Control.h"
#include "Font Control.h" #include "Render Dirty.h"
#include "Cursor Control.h" #include "Utilities.h"
#include "Render Dirty.h" #include "Intro.h"
#include "Text.h" #include "Cinematics.h"
#include "Utilities.h"
#include "WordWrap.h"
#include "Text.h"
#include "line.h"
#include "Intro.h"
#include "Cinematics.h"
#include "Cinematics Bink.h"
#include "mainmenuscreen.h"
#include "Music Control.h"
#include "LibraryDataBase.h"
#include "english.h"
#include "soldier profile type.h"
#include "MessageBoxScreen.h"
#include "sgp_logger.h"
#include "Soldier Profile.h"
#include "Game Init.h"
#include "INIReader.h"
#include <vfs/Core/vfs.h>
#include "Luaglobal.h"
#ifdef JA2UB
#include "strategicmap.h"
#include "Map Screen Interface Map.h"
#include "Map Screen Interface.h"
#include "End Game.h"
#include "Cinematics Bink.h" #include "Cinematics Bink.h"
#endif #include "mainmenuscreen.h"
#include "Music Control.h"
#include "english.h"
#include "sgp_logger.h"
#include "INIReader.h"
#include "Luaglobal.h"
#include "LuaInitNPCs.h" #include "LuaInitNPCs.h"
#include "XML.h"
#include <language.hpp> #include <language.hpp>
BOOLEAN Style_JA = TRUE; BOOLEAN Style_JA = TRUE;
@@ -197,7 +174,7 @@ private:
static VideoPlayer s_VP(VideoPlayer::VT_SMK | VideoPlayer::VT_BINK); static VideoPlayer s_VP(VideoPlayer::VT_SMK | VideoPlayer::VT_BINK);
extern STR16 gzIntroScreen[]; extern STR16* gzIntroScreen;
extern HVSURFACE ghFrameBuffer; extern HVSURFACE ghFrameBuffer;
enum enum
+1 -62
View File
@@ -1,72 +1,11 @@
#include "builddefines.h" #include <types.h>
#include <wchar.h>
#include <stdio.h>
#include <string.h>
#include "Render Fun.h"
#include "stdlib.h"
#include "DEBUG.H"
#include "MemMan.h"
#include "Overhead Types.h"
//#include "Soldier Control.h"
#include "Animation Cache.h"
#include "Animation Data.h"
#include "Animation Control.h"
#include <math.h>
#include "PATHAI.H"
#include "random.h"
#include "Isometric Utils.h"
#include "renderworld.h"
#include "video.h"
#include "Weapons.h"
#include "vobject_blitters.h"
#include "Handle UI.h"
#include "Event Pump.h"
#include "ai.h"
#include "Interface.h"
#include "lighting.h"
#include "faces.h"
#include "Soldier Profile.h"
#include "Soldier macros.h"
#include "english.h"
#include "Squads.h"
#ifdef NETWORKED #ifdef NETWORKED
#include "Networking.h" #include "Networking.h"
#include "NetworkEvent.h" #include "NetworkEvent.h"
#endif #endif
#include "Items.h"
#include "soundman.h"
#include "Utilities.h"
#include "strategic.h"
#include "soldier tile.h"
#include "Smell.h"
#include "Keys.h"
#include "Dialogue Control.h"
#include "Soldier Functions.h"
#include "Exit Grids.h"
#include "Quests.h"
#include "message.h"
#include "SkillCheck.h"
#include "interface Dialogue.h"
#include "GameSettings.h"
#include "ShopKeeper Interface.h"
#include "Vehicles.h"
#include "strategicmap.h"
#include "Morale.h"
#include "Drugs And Alcohol.h"
#include "SkillCheck.h"
#include "Map Information.h"
#include "Buildings.h"
#include "Text.h"
#include "Campaign Types.h"
#include "Strategic Status.h"
#include "Civ Quotes.h"
#include "Debug Control.h"
#ifdef JA2UB #ifdef JA2UB
#include "Ja25_Tactical.h"
#include "Ja25 Strategic Ai.h"
INT16 JA2_5_START_SECTOR_X; INT16 JA2_5_START_SECTOR_X;
INT16 JA2_5_START_SECTOR_Y; INT16 JA2_5_START_SECTOR_Y;
-5
View File
@@ -5,11 +5,6 @@
#ifdef JA2UB #ifdef JA2UB
//Used in the editor to compensate for the 2_<map name>
#define JA25_EXP_MAP_NAME_PREFIX L""
#define JA25_EXP_MAP_NAME_SIZE_OFFSET 0
//The starting sector of the Expanion pack //The starting sector of the Expanion pack
extern INT16 JA2_5_START_SECTOR_X; extern INT16 JA2_5_START_SECTOR_X;
extern INT16 JA2_5_START_SECTOR_Y; extern INT16 JA2_5_START_SECTOR_Y;
+2 -3
View File
@@ -19,7 +19,6 @@ extern HVSURFACE ghFrameBuffer;
extern BOOLEAN gfSchedulesHosed; extern BOOLEAN gfSchedulesHosed;
#ifdef JA2UB #ifdef JA2UB
#include "Ja25_Tactical.h"
#include "Ja25 Strategic Ai.h" #include "Ja25 Strategic Ai.h"
#endif #endif
UINT8 gubLastLoadingScreenID = LOADINGSCREEN_NOTHING; UINT8 gubLastLoadingScreenID = LOADINGSCREEN_NOTHING;
@@ -344,7 +343,7 @@ static void BuildLoadscreenFilename(std::string& dst, const char* path, int reso
dst.append(".sti"); dst.append(".sti");
} }
std::string GetResolutionSuffix(SCREEN_RESOLUTION resolution) static std::string GetResolutionSuffix(SCREEN_RESOLUTION resolution)
{ {
switch (resolution) switch (resolution)
{ {
@@ -376,7 +375,7 @@ std::string GetResolutionSuffix(SCREEN_RESOLUTION resolution)
} }
} }
std::string FindBestFittingLoadscreenFilename(const std::string& baseName, SCREEN_RESOLUTION resolution) static std::string FindBestFittingLoadscreenFilename(const std::string& baseName, SCREEN_RESOLUTION resolution)
{ {
for (SCREEN_RESOLUTION res = resolution; res <= _2560x1600; res = (SCREEN_RESOLUTION)(res + 1)) for (SCREEN_RESOLUTION res = resolution; res <= _2560x1600; res = (SCREEN_RESOLUTION)(res + 1))
{ {
+21 -22
View File
@@ -1,24 +1,23 @@
#include "sgp.h" #include "sgp.h"
#include "screenids.h" #include "screenids.h"
#include "Timer Control.h" #include "Timer Control.h"
#include "Fade Screen.h" #include "Fade Screen.h"
#include "sysutil.h" #include "sysutil.h"
#include "vobject_blitters.h" #include "vobject_blitters.h"
#include "MercTextBox.h" #include "MercTextBox.h"
#include "Cursors.h" #include "Cursors.h"
#include "Font Control.h" #include "Font Control.h"
#include "Map Screen Interface.h" #include "Map Screen Interface.h"
#include "renderworld.h" #include "renderworld.h"
#include "gameloop.h" #include "gameloop.h"
#include "english.h" #include "english.h"
#include "GameSettings.h" #include "GameSettings.h"
#include "Cursor Control.h" #include "Cursor Control.h"
#include "laptop.h" #include "Text.h"
#include "Text.h" #include "Text Input.h"
#include "Text Input.h" #include "overhead map.h"
#include "overhead map.h" #include "MPChatScreen.h"
#include "MPChatScreen.h" #include "WordWrap.h"
#include "WordWrap.h"
#include "message.h" #include "message.h"
#include "Utilities.h" #include "Utilities.h"
#include "connect.h" #include "connect.h"
@@ -90,7 +89,7 @@ extern BOOLEAN gfDontOverRideSaveBuffer; //this variable can be unset if u
extern void HandleTacticalUILoseCursorFromOtherScreen( ); extern void HandleTacticalUILoseCursorFromOtherScreen( );
extern STR16 pUpdatePanelButtons[]; extern STR16* pUpdatePanelButtons;
#define NUM_CHAT_TOGGLES 2 #define NUM_CHAT_TOGGLES 2
+22 -33
View File
@@ -1,38 +1,28 @@
#include "sgp.h" #include "sgp.h"
#include "screenids.h" #include "screenids.h"
#include "Timer Control.h" #include "Timer Control.h"
#include "sysutil.h" #include "sysutil.h"
#include "vobject_blitters.h" #include "Cursors.h"
#include "MercTextBox.h" #include "Font Control.h"
#include "Cursors.h" #include "mainmenuscreen.h"
#include "Font Control.h" #include "Cursor Control.h"
#include "mainmenuscreen.h" #include "Render Dirty.h"
#include "Cursor Control.h" #include "Music Control.h"
#include "Render Dirty.h"
#include "Music Control.h"
#include "GameSettings.h"
#include "SaveLoadScreen.h"
#include "SaveLoadGame.h"
#include "Options Screen.h"
#include "english.h"
#include "gameloop.h"
#include "Game Init.h"
#include "Utilities.h"
#include "WordWrap.h"
#include "Font Control.h"
#include "Text.h"
#include "Multi Language Graphic Utils.h"
#include "Encrypted File.h"
#include "JA2 Splash.h"
#include "GameVersion.h"
#include "GameSettings.h" #include "GameSettings.h"
#include "SaveLoadScreen.h"
#include "SaveLoadGame.h"
#include "Options Screen.h"
#include "english.h"
#include "gameloop.h"
#include "Game Init.h"
#include "WordWrap.h"
#include "Text.h"
#include "Multi Language Graphic Utils.h"
#include "JA2 Splash.h"
#include "GameVersion.h"
#include "connect.h" #include "connect.h"
#include "strategic.h" #include "strategic.h"
#include "Strategic Movement.h" #include "Strategic Movement.h"
#include "Overhead.h"
#include "Init.h"
#include "XML.h"
#include <vfs/Core/vfs.h> #include <vfs/Core/vfs.h>
#include <vfs/Core/vfs_profile.h> #include <vfs/Core/vfs_profile.h>
@@ -83,7 +73,6 @@ void MenuButtonCallback(GUI_BUTTON *btn, INT32 reason);
void HandleMainMenuKeyboardInput(); void HandleMainMenuKeyboardInput();
void HandleMainMenuInput(); void HandleMainMenuInput();
void HandleMainMenuScreen(); void HandleMainMenuScreen();
void DisplayAssignmentText();
void ClearMainMenu(); void ClearMainMenu();
void SelectMainMenuBackGroundRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason ); void SelectMainMenuBackGroundRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason );
void SetMainMenuExitScreen( UINT32 uiNewScreen ); void SetMainMenuExitScreen( UINT32 uiNewScreen );
@@ -428,7 +417,7 @@ void MenuButtonCallback(GUI_BUTTON *btn,INT32 reason)
} }
} }
void MenuButtonMoveCallback(GUI_BUTTON *btn,INT32 reason) static void MenuButtonMoveCallback(GUI_BUTTON *btn,INT32 reason)
{ {
if(reason & MSYS_CALLBACK_REASON_LOST_MOUSE) if(reason & MSYS_CALLBACK_REASON_LOST_MOUSE)
{ {
+1 -3
View File
@@ -14,12 +14,10 @@
#include "GameSettings.h" #include "GameSettings.h"
#include "Interface Control.h" #include "Interface Control.h"
#include "Cursor Control.h" #include "Cursor Control.h"
#include "laptop.h"
#include "Text.h" #include "Text.h"
#include "Text Input.h" #include "Text Input.h"
#include "overhead map.h" #include "overhead map.h"
#include "DropDown.h" // added by Flugente #include "DropDown.h" // added by Flugente
#include "Utilities.h" // added by Flugente for FilenameForBPP(...)
#include "FeaturesScreen.h" #include "FeaturesScreen.h"
#define MSGBOX_DEFAULT_WIDTH 300 #define MSGBOX_DEFAULT_WIDTH 300
@@ -71,7 +69,7 @@ BOOLEAN gfStartedFromMapScreen = FALSE;
BOOLEAN fRestoreBackgroundForMessageBox = FALSE; BOOLEAN fRestoreBackgroundForMessageBox = FALSE;
BOOLEAN gfDontOverRideSaveBuffer = TRUE; //this variable can be unset if ur in a non gamescreen and DONT want the msg box to use the save buffer BOOLEAN gfDontOverRideSaveBuffer = TRUE; //this variable can be unset if ur in a non gamescreen and DONT want the msg box to use the save buffer
extern void HandleTacticalUILoseCursorFromOtherScreen( ); extern void HandleTacticalUILoseCursorFromOtherScreen( );
extern STR16 pUpdatePanelButtons[]; extern STR16* pUpdatePanelButtons;
CHAR16 gzUserDefinedButton1[ 128 ]; CHAR16 gzUserDefinedButton1[ 128 ];
CHAR16 gzUserDefinedButton2[ 128 ]; CHAR16 gzUserDefinedButton2[ 128 ];
+1 -1
View File
@@ -1822,7 +1822,7 @@ void HandleHighLightedText( BOOLEAN fHighLight )
bLastRegion = -1; bLastRegion = -1;
} }
if( bHighLight != -1 ) if( bHighLight != -1 && toggle_box_array[bHighLight] != -1)
{ {
if( bHighLight < OPT_FIRST_COLUMN_TOGGLE_CUT_OFF ) if( bHighLight < OPT_FIRST_COLUMN_TOGGLE_CUT_OFF )
{ {
+119 -211
View File
@@ -1,162 +1,127 @@
#include "types.h" #include "types.h"
#include "Soldier Profile.h" #include "Soldier Profile.h"
#include "FileMan.h" #include "FileMan.h"
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>
#include "DEBUG.H" #include "DEBUG.H"
#include "Overhead.h" #include "Overhead.h"
#include "Keys.h" #include "Keys.h"
#include "finances.h" #include "finances.h"
#include "history.h" #include "history.h"
#include "files.h" #include "files.h"
#include "laptop.h" #include "Font.h"
#include "INIReader.h" #include "Font Control.h"
#include "email.h" #include "email.h"
#include "strategicmap.h" #include "strategicmap.h"
#include "Game Events.h" #include "Game Events.h"
#include "Game Clock.h" #include "Game Clock.h"
#include "Soldier Create.h" #include "Soldier Create.h"
#include "worlddef.h" #include "worlddef.h"
#include "LaptopSave.h" #include "LaptopSave.h"
#include "strategicmap.h" #include "Queen Command.h"
#include "Queen Command.h" #include "SaveLoadGame.h"
#include "SaveLoadGame.h" #include "Tactical Save.h"
#include "Tactical Save.h" #include "Squads.h"
#include "Squads.h" #include "environment.h"
#include "environment.h" #include "lighting.h"
#include "lighting.h" #include "Strategic Movement.h"
#include "Strategic Movement.h" #include "strategic.h"
#include "strategic.h" #include "Isometric Utils.h"
#include "Isometric Utils.h" #include "Quests.h"
#include "Quests.h" #include "opplist.h"
#include "opplist.h" #include "message.h"
#include "message.h" #include "NPC.h"
#include "NPC.h" #include "Merc Hiring.h"
#include "Merc Hiring.h" #include "SaveLoadScreen.h"
#include "SaveLoadScreen.h" #include "GameVersion.h"
#include "GameVersion.h" #include "GameSettings.h"
#include "GameSettings.h" #include "Music Control.h"
#include "Music Control.h" #include "Options Screen.h"
#include "Options Screen.h" #include "ai.h"
#include "ai.h" #include "renderworld.h"
#include "renderworld.h" #include "SmokeEffects.h"
#include "SmokeEffects.h" #include "random.h"
#include "random.h" #include "Map Screen Interface.h"
#include "Map Screen Interface.h" #include "Map Screen Interface Border.h"
#include "Map Screen Interface Border.h" #include "Map Screen Interface Bottom.h"
#include "Map Screen Interface Bottom.h" #include "Interface.h"
#include "Map Screen Helicopter.h"
#include "Interface.h" #include "Arms Dealer Init.h"
#include "Map Screen Helicopter.h" #include "Tactical Placement GUI.h"
#include "environment.h" #include "Strategic Mines.h"
#include "Arms Dealer Init.h" #include "Strategic Town Loyalty.h"
#include "Tactical Placement GUI.h" #include "Vehicles.h"
#include "Merc Contract.h"
#include "Strategic Mines.h" #include "Bullets.h"
#include "Strategic Town Loyalty.h" #include "Air Raid.h"
#include "Vehicles.h" #include "physics.h"
#include "Merc Contract.h" #include "Strategic Pathing.h"
#include "Bullets.h" #include "TeamTurns.h"
#include "Air Raid.h" #include "Explosion Control.h"
#include "physics.h" #include "Creature Spreading.h"
#include "Strategic Pathing.h" #include "Strategic Status.h"
#include "PreBattle Interface.h"
#include "TeamTurns.h" #include "Boxing.h"
#include "Strategic AI.h"
#include "Explosion Control.h" #include "Map Screen Interface Map.h"
#include "Creature Spreading.h" #include "Meanwhile.h"
#include "Strategic Status.h" #include "Dialogue Control.h"
#include "PreBattle Interface.h" #include "Text.h"
#include "Boxing.h" #include "LightEffects.h"
#include "Strategic AI.h" #include "HelpScreen.h"
#include "Map Screen Interface Map.h" #include "Animated ProgressBar.h"
#include "MercTextBox.h"
#include "Meanwhile.h" #include "Render Dirty.h"
#include "Dialogue Control.h" #include "Map Information.h"
#include "Text.h" #include "Interface Items.h"
#include "Map Screen Interface.h" #include "Civ Quotes.h"
#include "LightEffects.h" #include "Scheduling.h"
#include "HelpScreen.h" #include "Animation Data.h"
#include "Animated ProgressBar.h" #include "Game Init.h"
#include "MercTextBox.h" #include "Cheats.h"
#include "Render Dirty.h" #include "Strategic Event Handler.h"
#include "Map Information.h" #include "Interface Panels.h"
#include "Interface Items.h" #include "interface Dialogue.h"
#include "Civ Quotes.h" #include "Assignments.h"
#include "Scheduling.h" #include "ShopKeeper Interface.h"
#include "Animation Data.h" #include "PostalService.h"
#include "Game Init.h" #include "MilitiaSquads.h"
#include "Cheats.h" #include "Facilities.h"
#include "Strategic Event Handler.h" #include "Town Militia.h"
#include "Interface Panels.h" #include "Items.h"
#include "interface Dialogue.h" #include "Encyclopedia_new.h"
#include "Assignments.h" #include "CampaignStats.h" // added by Flugente
#include "Interface Items.h" #include "DynamicDialogue.h" // added by Flugente
#include "ShopKeeper Interface.h" #include "PMC.h" // added by Flugente
#include "PostalService.h" #include "ASD.h" // added by Flugente
// HEADROCK HAM B1: Additional Include for HAM #include "MilitiaIndividual.h" // added by Flugente
#include "MilitiaSquads.h" #include "Rebel Command.h"
// HEADROCK HAM 3.5: Another include for HAM #include "BobbyR.h"
#include "Facilities.h" #include "IMP Portraits.h"
// HEADROCK HAM 3.6: Yet another include, goddammit #include "Loading Screen.h"
#include "Town Militia.h" #include "Interface Utils.h"
#include "Items.h"
#include "Encyclopedia_new.h"
#include "CampaignStats.h" // added by Flugente
#include "DynamicDialogue.h" // added by Flugente
#include "PMC.h" // added by Flugente
#include "ASD.h" // added by Flugente
#include "MilitiaIndividual.h" // added by Flugente
#include "Rebel Command.h"
#include "BobbyR.h"
#include "IMP Portraits.h"
#include "Loading Screen.h"
#include "Interface Utils.h"
#include "Squads.h"
#include "IMP Confirm.h"
#include "Enemy Soldier Save.h" #include "Enemy Soldier Save.h"
#include "BobbyRMailOrder.h" #include "BobbyRMailOrder.h"
#include "mercs.h" #include "mercs.h"
#include "INIReader.h"
#include "mercs.h"
#include "Soldier Profile.h"
#ifdef JA2UB
#include "Ja25 Strategic Ai.h"
#include "Ja25_Tactical.h"
#endif
#include "LuaInitNPCs.h" #include "LuaInitNPCs.h"
#include "Vehicles.h"
#include "BriefingRoom_Data.h" #include "BriefingRoom_Data.h"
#include <vfs/Core/vfs.h>
//rain
//end rain
#include "connect.h" #include "connect.h"
#include "Map Screen Interface Map Inventory.h"//dnl ch51 081009 #include "Map Screen Interface Map Inventory.h"//dnl ch51 081009
#include "Sys Globals.h"//dnl ch74 201013
#include "Ambient Control.h" // added by Flugente for HandleNewSectorAmbience(...) #include "Ambient Control.h" // added by Flugente for HandleNewSectorAmbience(...)
#include "WorldDat.h"
///////////////////////////////////////////////////// /////////////////////////////////////////////////////
// //
// Local Defines // Local Defines
// //
///////////////////////////////////////////////////// /////////////////////////////////////////////////////
#ifdef JA2UB
#include "Strategic Movement.h"
#include "LuaInitNPCs.h"
#include "ub_config.h"
#include "Ja25Update.h"
#endif
#include "LuaInitNPCs.h"
#include <language.hpp> #include <language.hpp>
#ifdef JA2UB #ifdef JA2UB
//void ConvertWeapons( SOLDIERTYPE *pSoldier ); #include "Ja25 Strategic Ai.h"
#include "Ja25_Tactical.h"
#include "ub_config.h"
#include "Ja25Update.h"
extern void MakeBadSectorListFromMapsOnHardDrive( BOOLEAN fDisplayMessages ); // ja25 UB extern void MakeBadSectorListFromMapsOnHardDrive( BOOLEAN fDisplayMessages ); // ja25 UB
#endif #endif
@@ -205,8 +170,6 @@ extern BOOLEAN gfCreatureMeanwhileScenePlayed;
BOOLEAN gMusicModeToPlay = FALSE; BOOLEAN gMusicModeToPlay = FALSE;
//extern BOOLEAN gfFirstTimeInGameHeliCrash;
#ifdef JA2BETAVERSION #ifdef JA2BETAVERSION
BOOLEAN gfDisplaySaveGamesNowInvalidatedMsg = FALSE; BOOLEAN gfDisplaySaveGamesNowInvalidatedMsg = FALSE;
#endif #endif
@@ -214,14 +177,13 @@ BOOLEAN gfDisplaySaveGamesNowInvalidatedMsg = FALSE;
BOOLEAN gfUseConsecutiveQuickSaveSlots = FALSE; BOOLEAN gfUseConsecutiveQuickSaveSlots = FALSE;
UINT32 guiCurrentQuickSaveNumber = 0; UINT32 guiCurrentQuickSaveNumber = 0;
UINT32 guiLastSaveGameNum = 1; UINT32 guiLastSaveGameNum = 1;
BOOLEAN DoesAutoSaveFileExist( BOOLEAN fLatestAutoSave );
UINT32 guiJA2EncryptionSet = 0; UINT32 guiJA2EncryptionSet = 0;
UINT32 CalcJA2EncryptionSet( SAVED_GAME_HEADER * pSaveGameHeader ); UINT32 CalcJA2EncryptionSet( SAVED_GAME_HEADER * pSaveGameHeader );
typedef struct typedef struct
{ {
//The screen that the gaem was saved from //The screen that the game was saved from
UINT32 uiCurrentScreen; UINT32 uiCurrentScreen;
UINT32 uiCurrentUniqueSoldierId; UINT32 uiCurrentUniqueSoldierId;
@@ -532,10 +494,6 @@ BOOLEAN LoadSavedMercProfiles( HWFILE hwFile );
BOOLEAN SaveSoldierStructure( HWFILE hFile ); BOOLEAN SaveSoldierStructure( HWFILE hFile );
BOOLEAN LoadSoldierStructure( HWFILE hFile ); BOOLEAN LoadSoldierStructure( HWFILE hFile );
// CHRISL: New functions to save and load LBENODE data
BOOLEAN SaveLBENODEToSaveGameFile( HWFILE hFile );
BOOLEAN LoadLBENODEFromSaveGameFile( HWFILE hFile );
//BOOLEAN SavePtrInfo( PTR *pData, UINT32 uiSizeOfObject, HWFILE hFile ); //BOOLEAN SavePtrInfo( PTR *pData, UINT32 uiSizeOfObject, HWFILE hFile );
//BOOLEAN LoadPtrInfo( PTR *pData, UINT32 uiSizeOfObject, HWFILE hFile ); //BOOLEAN LoadPtrInfo( PTR *pData, UINT32 uiSizeOfObject, HWFILE hFile );
@@ -623,28 +581,7 @@ void ValidateStrategicGroups();
//if all that sounds compilcated, it is //if all that sounds compilcated, it is
extern int gLastLBEUniqueID; extern int gLastLBEUniqueID;
/*
// CHRISL: New function to save/load LBENODE data
BOOLEAN SaveLBENODEToSaveGameFile( HWFILE hFile )
{
UINT32 uiNumBytesWritten;
if ( !FileWrite( hFile, &gLastLBEUniqueID, sizeof(int), &uiNumBytesWritten ) )
{
return(FALSE);
}
return TRUE;
}
BOOLEAN LoadLBENODEFromSaveGameFile( HWFILE hFile )
{
UINT32 uiNumBytesRead;
if ( !FileRead( hFile, &gLastLBEUniqueID, sizeof(int), &uiNumBytesRead ) )
{
return(FALSE);
}
return TRUE;
}
*/
BOOLEAN LBENODE::Load( HWFILE hFile ) BOOLEAN LBENODE::Load( HWFILE hFile )
{ {
UINT32 uiNumBytesRead; UINT32 uiNumBytesRead;
@@ -660,7 +597,7 @@ BOOLEAN LBENODE::Load( HWFILE hFile )
//when combined with copy assignment which makes a new LBENODE //when combined with copy assignment which makes a new LBENODE
gLastLBEUniqueID = uniqueID + 1; gLastLBEUniqueID = uniqueID + 1;
} }
int size; int size = 0;
if ( !FileRead( hFile, &size, sizeof(int), &uiNumBytesRead ) ) if ( !FileRead( hFile, &size, sizeof(int), &uiNumBytesRead ) )
{ {
return(FALSE); return(FALSE);
@@ -725,7 +662,7 @@ BOOLEAN LBENODE::Save( HWFILE hFile, bool fSavingMap )
return TRUE; return TRUE;
} }
BOOLEAN LoadArmsDealerInventoryFromSavedGameFile( HWFILE hFile ) static BOOLEAN LoadArmsDealerInventoryFromSavedGameFile( HWFILE hFile )
{ {
UINT32 uiNumBytesRead; UINT32 uiNumBytesRead;
UINT8 ubArmsDealer; UINT8 ubArmsDealer;
@@ -736,7 +673,7 @@ BOOLEAN LoadArmsDealerInventoryFromSavedGameFile( HWFILE hFile )
if (guiCurrentSaveGameVersion >= NIV_SAVEGAME_DATATYPE_CHANGE) if (guiCurrentSaveGameVersion >= NIV_SAVEGAME_DATATYPE_CHANGE)
{ {
int dealers; int dealers = 0;
if (!FileRead( hFile, &dealers, sizeof( int ), &uiNumBytesRead )) if (!FileRead( hFile, &dealers, sizeof( int ), &uiNumBytesRead ))
{ {
return( FALSE ); return( FALSE );
@@ -764,7 +701,7 @@ BOOLEAN LoadArmsDealerInventoryFromSavedGameFile( HWFILE hFile )
//loop through all the dealers inventories //loop through all the dealers inventories
for( ubArmsDealer=0; ubArmsDealer<dealers; ++ubArmsDealer ) for( ubArmsDealer=0; ubArmsDealer<dealers; ++ubArmsDealer )
{ {
int size; int size = 0;
if (!FileRead( hFile, &size, sizeof( int ), &uiNumBytesRead )) if (!FileRead( hFile, &size, sizeof( int ), &uiNumBytesRead ))
{ {
return( FALSE ); return( FALSE );
@@ -1505,7 +1442,7 @@ BOOLEAN MERCPROFILESTRUCT::Load(HWFILE hFile, bool forceLoadOldVersion, bool for
numBytesRead = ReadFieldByField(hFile, &filler, sizeof(filler), sizeof(UINT8), numBytesRead); numBytesRead = ReadFieldByField(hFile, &filler, sizeof(filler), sizeof(UINT8), numBytesRead);
//DBrot: More rooms //DBrot: More rooms
int size; int size = 0;
if ( numBytesRead + buffer != SIZEOF_MERCPROFILESTRUCT_POD ) if ( numBytesRead + buffer != SIZEOF_MERCPROFILESTRUCT_POD )
{ {
return(FALSE); return(FALSE);
@@ -6359,8 +6296,10 @@ BOOLEAN LoadSavedGame( int ubSavedGameID )
#ifdef JA2UB #ifdef JA2UB
#else #else
if(!fBookMark && !fEmail) if ( !fBookMark && !fEmail )
AddEmail(MERC_INTRO, MERC_INTRO_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin( ), -1, -1 , TYPE_EMAIL_EMAIL_EDT); {
AddEmail(MERC_INTRO, MERC_INTRO_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_SPECK_INTRO);
}
#endif #endif
} }
@@ -7082,10 +7021,6 @@ if( g_lang == i18n::Lang::de ) {
} }
} }
} }
//#ifdef JA2UB
//if the soldier has the NON weapon version of the merc knofe or merc umbrella
//ConvertWeapons( &Menptr[ cnt ] );
//#endif
// JA2Gold: fix next-to-previous attacker value // JA2Gold: fix next-to-previous attacker value
Menptr[cnt].ubNextToPreviousAttackerID = NOBODY; Menptr[cnt].ubNextToPreviousAttackerID = NOBODY;
@@ -8732,7 +8667,7 @@ BOOLEAN SaveGeneralInfo( HWFILE hFile )
extern UINT32 guiRainLoop; extern UINT32 guiRainLoop;
//end rain //end rain
void EnsureValidLoadScreen( UINT32* puiScreen ) static void EnsureValidLoadScreen( UINT32* puiScreen )
{ {
if (!puiScreen) if (!puiScreen)
return; return;
@@ -9802,30 +9737,3 @@ UINT32 CalcJA2EncryptionSet( SAVED_GAME_HEADER * pSaveGameHeader )
return( uiEncryptionSet ); return( uiEncryptionSet );
} }
//inshy: Now we dont need this convertation, all items chenged in the maps
/*
#ifdef JA2UB
void ConvertWeapons( SOLDIERTYPE *pSoldier )
{
INT32 iCnt;
for( iCnt=0; iCnt< NUM_INV_SLOTS; iCnt++)
{
if(UsingNewInventorySystem() == false && gGameOptions.ubAttachmentSystem == ATTACHMENT_OLD )
{
if( pSoldier->inv[ iCnt ].usItem == 97 || pSoldier->inv[ iCnt ].usItem == 1346 || pSoldier->inv[ iCnt ].usItem == 99
|| pSoldier->inv[ iCnt ].usItem == 1347 || pSoldier->inv[ iCnt ].usItem == 584 || pSoldier->inv[ iCnt ].usItem == 551 )
pSoldier->inv[ iCnt ].usItem = 129;
if( pSoldier->inv[ iCnt ].usItem == 117 || pSoldier->inv[ iCnt ].usItem == 349 || pSoldier->inv[ iCnt ].usItem == 1263 )
pSoldier->inv[ iCnt ].usItem = 71;
}
}
}
#endif
*/
-7
View File
@@ -9,7 +9,6 @@
#include "stdio.h" #include "stdio.h"
#include "WordWrap.h" #include "WordWrap.h"
#include "strategicmap.h" #include "strategicmap.h"
#include "finances.h"
#include "WCheck.h" #include "WCheck.h"
#include "Utilities.h" #include "Utilities.h"
#include "Cursors.h" #include "Cursors.h"
@@ -19,7 +18,6 @@
#include "Options Screen.h" #include "Options Screen.h"
#include "GameVersion.h" #include "GameVersion.h"
#include "sysutil.h" #include "sysutil.h"
#include "Tactical Save.h"
#include "Overhead.h" #include "Overhead.h"
#include "gamescreen.h" #include "gamescreen.h"
#include "GameSettings.h" #include "GameSettings.h"
@@ -31,7 +29,6 @@
#include "message.h" #include "message.h"
#include "Map Screen Interface.h" #include "Map Screen Interface.h"
#include "Multi Language Graphic Utils.h" #include "Multi Language Graphic Utils.h"
#include "Campaign Types.h"
#include "PostalService.h" #include "PostalService.h"
#include "connect.h" #include "connect.h"
@@ -41,10 +38,6 @@
#include <vfs/Core/vfs_file_raii.h> #include <vfs/Core/vfs_file_raii.h>
#ifdef JA2UB #ifdef JA2UB
#include "Strategic Movement.h"
//#include "Strategic Movement Costs.h"
#include "LuaInitNPCs.h" #include "LuaInitNPCs.h"
#endif #endif
+21 -29
View File
@@ -1,30 +1,22 @@
#include "builddefines.h" #include "builddefines.h"
#include <stdio.h> #include <stdio.h>
#include <time.h> #include <types.h>
#include "sgp.h" #include <video.h>
#include "gameloop.h" #include <MemMan.h>
#include "himage.h" #include <Overhead Types.h>
#include "vobject.h" #include <Soldier Control.h>
#include "vobject_blitters.h" #include "renderworld.h"
#include "worlddef.h" #include "input.h"
#include "renderworld.h" #include "Font.h"
#include "input.h" #include "screenids.h"
#include "Font.h" #include "Overhead.h"
#include "screenids.h" #include "Font Control.h"
#include "Overhead.h" #include "Animation Control.h"
#include "sysutil.h" #include "Animation Data.h"
#include "Font Control.h" #include "Render Dirty.h"
#include "Animation Control.h" #include "Sys Globals.h"
#include "Animation Data.h" #include "english.h"
#include "Event Pump.h" #include "MessageBoxScreen.h"
#include "Render Dirty.h"
#include "Sys Globals.h"
#include "Interface.h"
#include <wchar.h>
#include <tchar.h>
#include "english.h"
#include "FileMan.h"
#include "MessageBoxScreen.h"
//forward declarations of common classes to eliminate includes //forward declarations of common classes to eliminate includes
class OBJECTTYPE; class OBJECTTYPE;
@@ -44,7 +36,7 @@ static UINT8 ubNumStates = 0;
static UINT16 *pusStates = NULL; static UINT16 *pusStates = NULL;
static INT8 ubCurLoadedState = 0; static INT8 ubCurLoadedState = 0;
void CycleAnimations( ) static void CycleAnimations( )
{ {
INT32 cnt; INT32 cnt;
@@ -318,7 +310,7 @@ UINT32 AniEditScreenHandle(void)
} }
UINT16 GetAnimStateFromName( STR8 zName ) static UINT16 GetAnimStateFromName( STR8 zName )
{ {
INT32 cnt; INT32 cnt;
+1 -6
View File
@@ -1,4 +1,3 @@
#include <stdio.h>
#include <time.h> #include <time.h>
#include "sgp.h" #include "sgp.h"
#include "gameloop.h" #include "gameloop.h"
@@ -17,20 +16,16 @@
#include "Tactical Save.h" #include "Tactical Save.h"
#include "Interface.h" #include "Interface.h"
#include "GameSettings.h" #include "GameSettings.h"
#include "mapscreen.h"
#include "Interface Control.h" #include "Interface Control.h"
#include "Text.h" #include "Text.h"
#include "HelpScreen.h" #include "HelpScreen.h"
#include "PreBattle Interface.h" #include "PreBattle Interface.h"
#include "Tactical Placement GUI.h"//dnl ch45 071009
#include "Map Screen Interface Map Inventory.h"//dnl ch51 081009 #include "Map Screen Interface Map Inventory.h"//dnl ch51 081009
#include "World Items.h"//dnl ch77 191113 #include "World Items.h"//dnl ch77 191113
#include "Overhead.h" // added by Flugente
#include "Ambient Control.h" // sevenfm #include "Ambient Control.h" // sevenfm
#include "SaveLoadScreen.h" #include "SaveLoadScreen.h"
#include "Lua Interpreter.h"
//**ddd direct link libraries //**ddd direct link libraries
#pragma comment (lib, "user32.lib") #pragma comment (lib, "user32.lib")
#pragma comment (lib, "gdi32.lib") #pragma comment (lib, "gdi32.lib")
@@ -80,7 +75,7 @@ void HandleNewScreenChange( UINT32 uiNewScreen, UINT32 uiOldScreen );
#ifdef JA2BETAVERSION #ifdef JA2BETAVERSION
BOOLEAN gubReportMapscreenLock = 0; BOOLEAN gubReportMapscreenLock = 0;
void ReportMapscreenErrorLock() static void ReportMapscreenErrorLock()
{ {
switch( gubReportMapscreenLock ) switch( gubReportMapscreenLock )
{ {
+64 -81
View File
@@ -1,85 +1,68 @@
#include "builddefines.h" #include "builddefines.h"
#include <stdio.h> #include <stdio.h>
#include <time.h> #include "sgp.h"
#include "sgp.h" #include "gameloop.h"
#include "gameloop.h" #include <Overhead Types.h>
#include "vobject.h" #include <Soldier Control.h>
#include "worlddef.h" #include "renderworld.h"
#include "renderworld.h" #include "Font.h"
#include "Font.h" #include "screenids.h"
#include "screenids.h" #include "Screens.h"
#include "Screens.h" #include <Meanwhile.h>
#include "Overhead.h" #include "HelpScreen.h"
#include "Isometric Utils.h" #include "Overhead.h"
#include "sysutil.h" #include "Event Pump.h"
#include "input.h" #include "Font Control.h"
#include "Event Pump.h" #include "Timer Control.h"
#include "Font Control.h" #include "Radar Screen.h"
#include "Timer Control.h" #include "Render Dirty.h"
#include "Radar Screen.h" #include "Interface.h"
#include "Render Dirty.h" #include "Handle UI.h"
#include "Interface.h" #include "Cursors.h"
#include "Handle UI.h" #include "vobject_blitters.h"
#include <wchar.h> #include "Button System.h"
#include <tchar.h> #include "lighting.h"
#include "Cursors.h" #include "Sys Globals.h"
#include "vobject_blitters.h" #include "environment.h"
#include "Button System.h" #include "Bullets.h"
#include "lighting.h" #include <mousesystem.h>
#include "renderworld.h" #include "message.h"
#include "Sys Globals.h" #include "overhead map.h"
#include "environment.h" #include "Strategic Exit GUI.h"
#include "Bullets.h" #include "Tactical Placement GUI.h"
#include "Assignments.h" #include "Air Raid.h"
#include "message.h" #include "Game Clock.h"
#include <string.h> #include "Game Init.h"
#include "overhead map.h"
#include "Strategic Exit GUI.h"
#include "Strategic Movement.h"
#include "Tactical Placement GUI.h"
#include "Air Raid.h"
#include "Game Clock.h"
#include "Game Init.h"
//DEF: Test Code
#ifdef NETWORKED
#include "Networking.h"
#endif
#include "Interface Control.h"
#include "Game Clock.h"
#include "physics.h"
#include "Fade Screen.h"
#include "Dialogue Control.h"
#include "Soldier macros.h"
#include "faces.h"
#include "strategicmap.h"
#include "gamescreen.h"
#include "Interface.h"
#include "Cursor Control.h"
#include "Strategic Turns.h"
#include "merc entering.h"
#include "Soldier Create.h"
#include "Soldier Init List.h"
#include "Interface Panels.h"
#include "Map Information.h"
#include "environment.h"
#include "Squads.h"
#include "interface Dialogue.h"
#include "Auto Bandage.h"
#include "Meanwhile.h"
#include "Strategic AI.h"
#include "HelpScreen.h"
#include "PreBattle Interface.h"
#include "Sound Control.h"
#include "MessageBoxScreen.h"
#include "Text.h"
#include "GameSettings.h"
#include "random.h"
#include "editscreen.h"
#include "Scheduling.h"
#include "Animated ProgressBar.h"
//DEF: Test Code
#ifdef NETWORKED
#include "Networking.h"
#endif
#include "Interface Control.h"
#include "physics.h"
#include "Fade Screen.h"
#include "Dialogue Control.h"
#include "Soldier macros.h"
#include "faces.h"
#include "strategicmap.h"
#include "gamescreen.h"
#include "Cursor Control.h"
#include "Strategic Turns.h"
#include "merc entering.h"
#include "Interface Panels.h"
#include "Map Information.h"
#include "Squads.h"
#include "interface Dialogue.h"
#include "Auto Bandage.h"
#include "PreBattle Interface.h"
#include "Sound Control.h"
#include "MessageBoxScreen.h"
#include "Text.h"
#include "GameSettings.h"
#include "random.h"
#include "editscreen.h"
#include "Scheduling.h"
#include "Animated ProgressBar.h"
#include "connect.h" #include "connect.h"
#ifdef JA2UB #ifdef JA2UB
+39 -52
View File
@@ -1,51 +1,38 @@
#include "builddefines.h" #include "builddefines.h"
#include <stdio.h> #include <cstdio>
#include <time.h> #include "sgp.h"
#include "sgp.h" #include "gameloop.h"
#include "gameloop.h" #include "himage.h"
#include "himage.h" #include "vobject.h"
#include "vobject.h" #include "vobject_blitters.h"
#include "vobject_blitters.h" #include "WCheck.h"
#include "WCheck.h" #include "input.h"
#include "input.h" #include "Font.h"
#include "Font.h" #include "screenids.h"
#include "timer.h" #include "Screens.h"
#include "mousesystem.h" #include "Font Control.h"
#include "screenids.h" #include <Overhead Types.h>
#include "Screens.h" #include <Soldier Control.h>
#include "Font Control.h" #include "Timer Control.h"
#include "sysutil.h" #include "Sys Globals.h"
#include "tiledef.h" #include <Handle UI.h>
#include "worlddef.h" #include "Overhead.h"
#include "editscreen.h" #include "Utilities.h"
#include <wchar.h> #include "Render Dirty.h"
#include <tchar.h> #include "jascreens.h"
#include "Timer Control.h" #include "mainmenuscreen.h"
#include "Sys Globals.h" #include "Game Init.h"
#include "Interface.h" #include "Init.h"
#include "Overhead.h" #include "Cursor Control.h"
#include "Utilities.h" #include "GameVersion.h"
#include "Render Dirty.h" #include "Game Clock.h"
#include "jascreens.h" #include "gamescreen.h"
#include "gameloop.h" #include "english.h"
#include "Event Pump.h" #include "random.h"
#include "Animation Cache.h" #include "WordWrap.h"
#include "lighting.h" #include "Sound Control.h"
#include "mainmenuscreen.h" #include "Text.h"
#include "Game Init.h" #include "INIReader.h"
#include "Init.h"
#include "Cursor Control.h"
#include "Utilities.h"
#include "GameVersion.h"
#include "Game Clock.h"
#include "gamescreen.h"
#include "english.h"
#include "random.h"
#include "WordWrap.h"
#include "Sound Control.h"
#include "WordWrap.h"
#include "Text.h"
#include "INIReader.h"
#include "sgp_logger.h" #include "sgp_logger.h"
#include <language.hpp> #include <language.hpp>
@@ -663,7 +650,7 @@ UINT32 DebugScreenInit(void)
} }
BOOLEAN CheckForAndExitTacticalDebug( ) static BOOLEAN CheckForAndExitTacticalDebug( )
{ {
if ( gfExitDebugScreen ) if ( gfExitDebugScreen )
{ {
@@ -680,7 +667,7 @@ BOOLEAN CheckForAndExitTacticalDebug( )
return( FALSE ); return( FALSE );
} }
void ExitDebugScreen( ) static void ExitDebugScreen( )
{ {
if ( guiCurrentScreen == DEBUG_SCREEN ) if ( guiCurrentScreen == DEBUG_SCREEN )
{ {
@@ -935,7 +922,7 @@ UINT32 DemoExitScreenInit(void)
} }
void DoneFadeOutForDemoExitScreen( void ) static void DoneFadeOutForDemoExitScreen( void )
{ {
gfProgramIsRunning = FALSE; gfProgramIsRunning = FALSE;
} }
@@ -943,7 +930,7 @@ void DoneFadeOutForDemoExitScreen( void )
// unused // unused
//extern INT8 gbFadeSpeed; //extern INT8 gbFadeSpeed;
void DisplayTopwareGermanyAddress() static void DisplayTopwareGermanyAddress()
{ {
VOBJECT_DESC vo_desc; VOBJECT_DESC vo_desc;
UINT32 uiTempID; UINT32 uiTempID;
-277
View File
@@ -1,277 +0,0 @@
//legion 2
#include "types.h"
#include "types.h"
#include "random.h"
#include "Campaign Types.h"
#include "Queen Command.h"
#include "Overhead.h"
#include "Strategic Movement.h"
#include "Strategic Status.h"
#include "GameSettings.h"
#include "Strategic AI.h"
#include "XML.h"
#include "INIReader.h"
#include "Game Event Hook.h"
#include "sgp.h"
#include "jascreens.h"
#include "laptop.h"
#include "worlddef.h"
#include "Soldier Control.h"
#include "Overhead.h"
#include "email.h"
#include "Soldier Profile.h"
#include "strategicmap.h"
#include "Game Init.h"
#include "Animation Data.h"
#include "Soldier Create.h"
#include "Soldier Init List.h"
#include "strategic.h"
#include "Squads.h"
#include "Strategic Town Loyalty.h"
#include "Strategic Mines.h"
#include "gameloop.h"
#include "random.h"
#include "Map Screen Interface.h"
#include "Tactical Save.h"
#include "Campaign Types.h"
#include "message.h"
#include "Game Event Hook.h"
#include "Strategic Movement.h"
#include "Quests.h"
#include "Strategic AI.h"
#include "Dialogue Control.h"
#include "GameSettings.h"
#include "INIReader.h"
#include "Soldier Profile.h"
#include "XML.h"
#include "Item Types.h"
#include "Items.h"
#include "Text.h"
#include "GameSettings.h"
#ifdef JA2UB
#include "Ja25 Strategic Ai.h"
#include "Ja25Update.h"
#endif
#include "legion cfg.h" //legion2
#include "Campaign Types.h"
#include "Interface.h"
#include "Map Screen Interface Map.h"
#include "renderworld.h"
#include "connect.h"
#include "XMLWriter.h"
#include "Debug Control.h"
#include <vfs/Core/vfs.h>
GAME_LEGION_OPTIONS gGameLegionOptions;
#define GAME_LEGION_OPTIONS_FILE "UB_Options.ini"
void LoadGameLegionOptions();
#ifdef JA2UB
void RandomAddEnemy( UINT8 SectorX, UINT8 SectorY, UINT8 Level );
#endif
void RandomStats ();
#ifdef JA2UB
void RandomAddEnemy( UINT8 SectorX, UINT8 SectorY, UINT8 Level )
{
UNDERGROUND_SECTORINFO *pSector;
UINT16 ubNumAdmins = 0;
UINT16 ubNumTroops = 0;
UINT16 ubNumElites = 0;
if ( Level != 0 )
{
pSector = FindUnderGroundSector( SectorX, SectorY, Level );
if ( pSector )
{
if ( pSector->fVisited != TRUE )
{
switch( gGameOptions.ubDifficultyLevel )
{
case DIF_LEVEL_EASY:
ubNumAdmins = Random( 0 );
ubNumTroops = 10 + Random( 5 );
ubNumElites = Random( 4 );
SetNumberJa25EnemiesInSector( SectorX, SectorY, Level, ubNumAdmins, ubNumTroops, ubNumElites );
break;
case DIF_LEVEL_MEDIUM:
ubNumAdmins = Random( 0 );
ubNumTroops = 15 + Random( 8 );
ubNumElites = 1 + Random( 2 );
SetNumberJa25EnemiesInSector( SectorX, SectorY, Level, ubNumAdmins, ubNumTroops, ubNumElites );
break;
case DIF_LEVEL_HARD:
ubNumAdmins = Random( 0 );
ubNumTroops = 20 + Random( 7 );
ubNumElites = 2 + Random( 2 );
SetNumberJa25EnemiesInSector( SectorX, SectorY, Level, ubNumAdmins, ubNumTroops, ubNumElites );
break;
case DIF_LEVEL_INSANE:
ubNumAdmins = Random( 0 );
ubNumTroops = 20 + Random( 3 );
ubNumElites = 6 + Random( 3 );
SetNumberJa25EnemiesInSector( SectorX, SectorY, Level, ubNumAdmins, ubNumTroops, ubNumElites );
break;
}
}
}
}
else
{
if ( !GetSectorFlagStatus( SectorX, SectorY, Level, SF_ALREADY_VISITED ) )
{
switch( gGameOptions.ubDifficultyLevel )
{
case DIF_LEVEL_EASY:
ubNumAdmins = Random( 0 );
ubNumTroops = 10 + Random( 5 );
ubNumElites = Random( 4 );
SetNumberJa25EnemiesInSector( SectorX, SectorY, Level, ubNumAdmins, ubNumTroops, ubNumElites );
break;
case DIF_LEVEL_MEDIUM:
ubNumAdmins = Random( 0 );
ubNumTroops = 15 + Random( 8 );
ubNumElites = 1 + Random( 2 );
SetNumberJa25EnemiesInSector( SectorX, SectorY, Level, ubNumAdmins, ubNumTroops, ubNumElites );
break;
case DIF_LEVEL_HARD:
ubNumAdmins = Random( 0 );
ubNumTroops = 23 + Random( 7);
ubNumElites = 2 + Random( 2 );
SetNumberJa25EnemiesInSector( SectorX, SectorY, Level, ubNumAdmins, ubNumTroops, ubNumElites );
break;
case DIF_LEVEL_INSANE:
ubNumAdmins = Random( 0 );
ubNumTroops = 20 + Random( 3 );
ubNumElites = 6 + Random( 3 );
SetNumberJa25EnemiesInSector( SectorX, SectorY, Level, ubNumAdmins, ubNumTroops, ubNumElites );
break;
}
}
}
}
#endif
void LoadGameLegionOptions()
{
#ifdef JA2UB
JA2_5_START_SECTOR_X = gGameExternalOptions.ubDefaultArrivalSectorX;
JA2_5_START_SECTOR_Y = gGameExternalOptions.ubDefaultArrivalSectorY;
#endif
gGameLegionOptions.MercStartingGear25XML = TRUE;
gGameLegionOptions.LOCATEGRIDNO = gGameExternalOptions.iInitialMercArrivalLocation;
gGameLegionOptions.LOCATEGRIDNO2 = 0;
gGameLegionOptions.OLDUBInventory = FALSE;
CIniReader iniReader(GAME_LEGION_OPTIONS_FILE);
// -----------------------
// Unfinished Business
// -----------------------
gGameLegionOptions.BorderTown = iniReader.ReadBoolean("Unfinished Business Settings","BORDER_TOWN", TRUE);
gGameLegionOptions.BorderMine = iniReader.ReadBoolean("Unfinished Business Settings","BORDER_MINE", TRUE);
gGameLegionOptions.BorderTeams = iniReader.ReadBoolean("Unfinished Business Settings","BORDER_TEAMS", TRUE);
gGameLegionOptions.BorderMilitia = iniReader.ReadBoolean("Unfinished Business Settings","BORDER_MILITIA", FALSE);
gGameLegionOptions.BorderAirspace = iniReader.ReadBoolean("Unfinished Business Settings","BORDER_AIRSPACE", TRUE);
gGameLegionOptions.BorderItem = iniReader.ReadBoolean("Unfinished Business Settings","BORDER_ITEM", TRUE);
gGameLegionOptions.EventAttackInitialSectorIfPlayerStillThere = iniReader.ReadBoolean("Unfinished Business Settings","EVENT_ATTACK_INITIAL_SECTOR_IF_PLAYER_STILL_THERE", TRUE);
gGameLegionOptions.HandleAddingEnemiesToTunnelMaps = iniReader.ReadBoolean("Unfinished Business Settings","HANDLE_ADDING_ENEMIES_TO_TUNNEL_MAPS", TRUE);
gGameLegionOptions.ubEndDefaultSectorX = iniReader.ReadInteger("Unfinished Business Settings","DEFAULT_END_SECTOR_X", 16, 1, 16);
gGameLegionOptions.ubEndDefaultSectorY = iniReader.ReadInteger("Unfinished Business Settings","DEFAULT_END_SECTOR_Y", 11, 1, 16);
gGameLegionOptions.ubEndDefaultSectorZ = iniReader.ReadInteger("Unfinished Business Settings","DEFAULT_END_SECTOR_Z", 0, 0, 16);
gGameLegionOptions.AutoResolove = iniReader.ReadBoolean("Unfinished Business Settings","AUTO_RESOLVE", FALSE);
gGameLegionOptions.InitialHeliGridNo[ 0 ] = iniReader.ReadInteger("Unfinished Business Settings","INITIAL_HELICOPTER_GRIDNO_1", 14947);
gGameLegionOptions.InitialHeliGridNo[ 1 ] = iniReader.ReadInteger("Unfinished Business Settings","INITIAL_HELICOPTER_GRIDNO_2", 15584);
gGameLegionOptions.InitialHeliGridNo[ 2 ] = iniReader.ReadInteger("Unfinished Business Settings","INITIAL_HELICOPTER_GRIDNO_3", 15754);
gGameLegionOptions.InitialHeliGridNo[ 3 ] = iniReader.ReadInteger("Unfinished Business Settings","INITIAL_HELICOPTER_GRIDNO_4", 16232);
gGameLegionOptions.InitialHeliGridNo[ 4 ] = iniReader.ReadInteger("Unfinished Business Settings","INITIAL_HELICOPTER_GRIDNO_5", 16067);
gGameLegionOptions.InitialHeliGridNo[ 5 ] = iniReader.ReadInteger("Unfinished Business Settings","INITIAL_HELICOPTER_GRIDNO_6", 16230);
gGameLegionOptions.InitialHeliGridNo[ 6 ] = iniReader.ReadInteger("Unfinished Business Settings","INITIAL_HELICOPTER_GRIDNO_7", 15272);
gGameLegionOptions.InitalHeliRandomTimes[ 0 ] = iniReader.ReadInteger("Unfinished Business Settings","INITIAL_HELICOPTER_RANDOM_TIME_1", 1300);
gGameLegionOptions.InitalHeliRandomTimes[ 1 ] = iniReader.ReadInteger("Unfinished Business Settings","INITIAL_HELICOPTER_RANDOM_TIME_2", 2000);
gGameLegionOptions.InitalHeliRandomTimes[ 2 ] = iniReader.ReadInteger("Unfinished Business Settings","INITIAL_HELICOPTER_RANDOM_TIME_3", 2750);
gGameLegionOptions.InitalHeliRandomTimes[ 3 ] = iniReader.ReadInteger("Unfinished Business Settings","INITIAL_HELICOPTER_RANDOM_TIME_4", 3400);
gGameLegionOptions.InitalHeliRandomTimes[ 4 ] = iniReader.ReadInteger("Unfinished Business Settings","INITIAL_HELICOPTER_RANDOM_TIME_5", 4160);
gGameLegionOptions.InitalHeliRandomTimes[ 5 ] = iniReader.ReadInteger("Unfinished Business Settings","INITIAL_HELICOPTER_RANDOM_TIME_6", 4700);
gGameLegionOptions.InitalHeliRandomTimes[ 6 ] = iniReader.ReadInteger("Unfinished Business Settings","INITIAL_HELICOPTER_RANDOM_TIME_7", 5630);
gGameLegionOptions.InGameHeliCrash = iniReader.ReadBoolean("Unfinished Business Settings","ENABLE_UB_HELICOPTER_CRASH", TRUE);
gGameLegionOptions.JerryQuotes = iniReader.ReadBoolean("Unfinished Business Settings","JERRY_QUOTES", TRUE);
gGameLegionOptions.InJerry = iniReader.ReadBoolean("Unfinished Business Settings","JERRY", TRUE);
gGameLegionOptions.JerryGridNo = iniReader.ReadInteger("Unfinished Business Settings","JERRY_GRIDNO", 15109);
gGameLegionOptions.InGameHeli = iniReader.ReadBoolean("Unfinished Business Settings","ENABLE_JA2_HELICOPTER_LANDING", FALSE);
gGameLegionOptions.SwitchInMorrisAreaGridNo = iniReader.ReadInteger("Unfinished Business Settings","SWITCH_IN_MORRIS_AREA_GRIDNO", 15231);
gGameLegionOptions.SwitchToLaunchMisslesGridNo1 = iniReader.ReadInteger("Unfinished Business Settings","SWITCH_TO_LAUNCH_MISSLES_GRIDNO_1", 14268);
gGameLegionOptions.SwitchToLaunchMisslesGridNo2 = iniReader.ReadInteger("Unfinished Business Settings","SWITCH_TO_LAUNCH_MISSLES_GRIDNO_2", 15708);
gGameLegionOptions.RadioLocatorsGridNo1 = iniReader.ReadInteger("Unfinished Business Settings","RADIO_LOCATORS_GRIDNO_1", 15070);
gGameLegionOptions.RadioLocatorsGridNo2 = iniReader.ReadInteger("Unfinished Business Settings","RADIO_LOCATORS_GRIDNO_2", 14744);
gGameLegionOptions.PowergenSectorGridNo1 = iniReader.ReadInteger("Unfinished Business Settings","POWERGEN_SECTOR_GRIDNO_1", 15100);
gGameLegionOptions.PowergenSectorGridNo2 = iniReader.ReadInteger("Unfinished Business Settings","POWERGEN_SECTOR_GRIDNO_2", 12220);
gGameLegionOptions.PowergenSectorGridNo3 = iniReader.ReadInteger("Unfinished Business Settings","POWERGEN_SECTOR_GRIDNO_3", 14155);
gGameLegionOptions.PowergenSectorGridNo4 = iniReader.ReadInteger("Unfinished Business Settings","POWERGEN_SECTOR_GRIDNO_4", 13980);
gGameLegionOptions.PowergenSectorExitgridGridNo = iniReader.ReadInteger("Unfinished Business Settings","POWERGEN_SECTOR_EXITGRID_GRIDNO", 19749);
gGameLegionOptions.PowergenFanSoundGridNo1 = iniReader.ReadInteger("Unfinished Business Settings","POWERGEN_FAN_SOUND_GRIDNO_1", 10979);
gGameLegionOptions.PowergenFanSoundGridNo2 = iniReader.ReadInteger("Unfinished Business Settings","POWERGEN_FAN_SOUND_GRIDNO_2", 19749);
gGameLegionOptions.StartFanbackupAgainGridNo = iniReader.ReadInteger("Unfinished Business Settings","START_FANBACKUP_AGAIN_GRIDNO", 10980);
gGameLegionOptions.StopPowergenFanGridNo = iniReader.ReadInteger("Unfinished Business Settings","STOP_POWERGEN_FAN_GRIDNO", 10980);
//sec J13
gGameLegionOptions.FanGridNo[0] = iniReader.ReadInteger("Unfinished Business Settings","FAN_GRIDNO_1", 10978);
gGameLegionOptions.FanGridNo[1] = iniReader.ReadInteger("Unfinished Business Settings","FAN_GRIDNO_2", 10979);
gGameLegionOptions.FanGridNo[2] = iniReader.ReadInteger("Unfinished Business Settings","FAN_GRIDNO_3", 10980);
gGameLegionOptions.FanGridNo[3] = iniReader.ReadInteger("Unfinished Business Settings","FAN_GRIDNO_4", 10818);
gGameLegionOptions.FanGridNo[4] = iniReader.ReadInteger("Unfinished Business Settings","FAN_GRIDNO_5", 10819);
gGameLegionOptions.FanGridNo[5] = iniReader.ReadInteger("Unfinished Business Settings","FAN_GRIDNO_6", 10820);
gGameLegionOptions.FanGridNo[6] = iniReader.ReadInteger("Unfinished Business Settings","FAN_GRIDNO_7", 10658);
gGameLegionOptions.FanGridNo[7] = iniReader.ReadInteger("Unfinished Business Settings","FAN_GRIDNO_8", 10659);
gGameLegionOptions.FanGridNo[8] = iniReader.ReadInteger("Unfinished Business Settings","FAN_GRIDNO_9", 10660);
if ( gGameLegionOptions.InGameHeli == TRUE )
gGameLegionOptions.InGameHeliCrash = FALSE;
if ( gGameLegionOptions.InGameHeliCrash == TRUE )
gGameLegionOptions.InGameHeli = FALSE;
if ( gGameLegionOptions.InGameHeli == TRUE && gGameLegionOptions.InGameHeliCrash == TRUE )
{
gGameLegionOptions.InGameHeliCrash = TRUE;
gGameLegionOptions.InGameHeli = FALSE;
}
// -----------------------
// Campaign
// -----------------------
gGameLegionOptions.EnemyXML = iniReader.ReadBoolean("Campaign Settings","USE_ENEMY_ARMY_XMLS", TRUE);
gGameLegionOptions.AddRandomEnemyToSector = iniReader.ReadBoolean("Campaign Settings","ADD_RANDOM_ENEMY_TO_SECTOR", FALSE);
gGameLegionOptions.StrategicMovementCostsXML = iniReader.ReadBoolean("Campaign Settings","STRATEGIC_MOVEMENT_COSTS_XML", FALSE);
gGameLegionOptions.MakeStrategicMovementCosts = iniReader.ReadBoolean("Campaign Settings","MAKE_STRATEGIC_MOVEMENT_COSTS", FALSE);
gGameLegionOptions.LaptopQuestEnabled = iniReader.ReadBoolean("Campaign Settings","LAPTOP_QUEST", TRUE);
gGameLegionOptions.pJA2UB = iniReader.ReadBoolean("Campaign Settings","JA2UB", TRUE);
gGameLegionOptions.fDeadMerc = iniReader.ReadBoolean("Campaign Settings","NOTIFY_ON_DEAD_AIM_MERCS", FALSE);
// -----------------------
// Laptop
// -----------------------
gGameLegionOptions.LaptopIMPPassJA2 = iniReader.ReadBoolean("Laptop Settings","IMP_PASS_JA2", FALSE);
gGameLegionOptions.LaptopIMPPassUB = iniReader.ReadBoolean("Laptop Settings","IMP_PASS_UB", TRUE);
gGameLegionOptions.LaptopLinkInsurance = iniReader.ReadBoolean("Laptop Settings","LINK_INSURANCE", FALSE);
gGameLegionOptions.LaptopLinkFuneral = iniReader.ReadBoolean("Laptop Settings","LINK_FUNERAL", TRUE);
gGameLegionOptions.LaptopLinkBobby = iniReader.ReadBoolean("Laptop Settings","LINK_BOBBY", FALSE);
gGameLegionOptions.fBobbyRSite = iniReader.ReadBoolean("Laptop Settings","BOBBY_SITE_ACCESSED", FALSE);
}
-105
View File
@@ -1,105 +0,0 @@
#ifndef _LEGION_CFG_H
#define _LEGION_CFG_H
#include "soldier profile type.h"
extern void LoadGameLegionOptions();
typedef struct
{
BOOLEAN BorderTown;
BOOLEAN BorderMine;
BOOLEAN BorderTeams;
BOOLEAN BorderMilitia;
BOOLEAN BorderAirspace;
BOOLEAN BorderItem;
BOOLEAN EnemyXML;
BOOLEAN EventAttackInitialSectorIfPlayerStillThere;
BOOLEAN HandleAddingEnemiesToTunnelMaps;
BOOLEAN BobbyRayInventory_UB;
BOOLEAN InitTownLoyalty_UB;
BOOLEAN AutoResolove;
BOOLEAN AddRandomEnemyToSector;
BOOLEAN StrategicMovementCostsXML;
BOOLEAN MakeStrategicMovementCosts;
BOOLEAN MercStartingGear25XML;
UINT32 InitialHeliGridNo[ 7 ];
INT16 InitalHeliRandomTimes[ 7 ];
UINT32 LOCATEGRIDNO;
BOOLEAN LaptopIMPPassJA2;
BOOLEAN LaptopIMPPassUB;
UINT8 ubDefaultArrivalSectorX;
UINT8 ubDefaultArrivalSectorY;
INT32 iStartingCashNovice;
INT32 iStartingCashExperienced;
INT32 iStartingCashExpert;
INT32 iStartingCashInsane;
BOOLEAN TEX_AND_JOHN;
BOOLEAN Random_Manuel_Text;
BOOLEAN RISRAPORT;
BOOLEAN LaptopQuestEnabled;
BOOLEAN InGameHeliCrash;
BOOLEAN InGameHeli;
UINT32 LOCATEGRIDNO2;
BOOLEAN JerryQuotes;
BOOLEAN InJerry;
UINT32 JerryGridNo;
UINT32 SwitchInMorrisAreaGridNo;
UINT32 SwitchToLaunchMisslesGridNo1;
UINT32 SwitchToLaunchMisslesGridNo2;
UINT32 RadioLocatorsGridNo1;
UINT32 RadioLocatorsGridNo2;
UINT32 PowergenSectorGridNo1;
UINT32 PowergenSectorGridNo2;
UINT32 PowergenSectorGridNo3;
UINT32 PowergenSectorGridNo4;
UINT32 PowergenSectorExitgridGridNo;
UINT32 PowergenFanSoundGridNo1;
UINT32 PowergenFanSoundGridNo2;
UINT32 StartFanbackupAgainGridNo;
UINT32 StopPowergenFanGridNo;
BOOLEAN TestUB;
BOOLEAN LaptopLinkInsurance;
BOOLEAN LaptopLinkFuneral;
BOOLEAN LaptopLinkBobby;
UINT32 FanGridNo[9];
UINT8 ubEndDefaultSectorX;
UINT8 ubEndDefaultSectorY;
UINT8 ubEndDefaultSectorZ;
BOOLEAN pJA2UB;
BOOLEAN fBobbyRSite;
BOOLEAN fDeadMerc;
BOOLEAN OLDUBInventory;
} GAME_LEGION_OPTIONS;
extern GAME_LEGION_OPTIONS gGameLegionOptions;
#ifdef JA2UB
extern void RandomAddEnemy( UINT8 SectorX, UINT8 SectorY, UINT8 Level );
extern void RandomStats ();
#endif
extern void RandomStats ();
#endif
+11 -1
View File
@@ -200,7 +200,17 @@ void LoadGameUBOptions()
gGameUBOptions.BorderItem = iniReader.ReadBoolean("Unfinished Business Settings","BORDER_ITEM", TRUE); gGameUBOptions.BorderItem = iniReader.ReadBoolean("Unfinished Business Settings","BORDER_ITEM", TRUE);
gGameUBOptions.EventAttackInitialSectorIfPlayerStillThere = iniReader.ReadBoolean("Unfinished Business Settings","EVENT_ATTACK_INITIAL_SECTOR_IF_PLAYER_STILL_THERE", TRUE); gGameUBOptions.EventAttackInitialSectorIfPlayerStillThere = iniReader.ReadBoolean("Unfinished Business Settings","EVENT_ATTACK_INITIAL_SECTOR_IF_PLAYER_STILL_THERE", TRUE);
gGameUBOptions.HandleAddingEnemiesToTunnelMaps = iniReader.ReadBoolean("Unfinished Business Settings","HANDLE_ADDING_ENEMIES_TO_TUNNEL_MAPS", TRUE); gGameUBOptions.HandleAddingEnemiesToTunnelMaps = iniReader.ReadBoolean("Unfinished Business Settings","HANDLE_ADDING_ENEMIES_TO_TUNNEL_MAPS", TRUE);
//J14-1
gGameUBOptions.Tunnel1_SectorX = iniReader.ReadInteger("Unfinished Business Settings", "TUNNEL1_SECTOR_X", 14);
gGameUBOptions.Tunnel1_SectorY = iniReader.ReadInteger("Unfinished Business Settings", "TUNNEL1_SECTOR_Y", 10);
gGameUBOptions.Tunnel1_SectorZ = iniReader.ReadInteger("Unfinished Business Settings", "TUNNEL1_SECTOR_Z", 1);
//K14-1
gGameUBOptions.Tunnel2_SectorX = iniReader.ReadInteger("Unfinished Business Settings", "TUNNEL2_SECTOR_X", 14);
gGameUBOptions.Tunnel2_SectorY = iniReader.ReadInteger("Unfinished Business Settings", "TUNNEL2_SECTOR_Y", 11);
gGameUBOptions.Tunnel2_SectorZ = iniReader.ReadInteger("Unfinished Business Settings", "TUNNEL2_SECTOR_Z", 1);
gGameUBOptions.ubEndDefaultSectorX = iniReader.ReadInteger("Unfinished Business Settings","DEFAULT_END_SECTOR_X", 16, 1, 16); gGameUBOptions.ubEndDefaultSectorX = iniReader.ReadInteger("Unfinished Business Settings","DEFAULT_END_SECTOR_X", 16, 1, 16);
gGameUBOptions.ubEndDefaultSectorY = iniReader.ReadInteger("Unfinished Business Settings","DEFAULT_END_SECTOR_Y", 11, 1, 16); gGameUBOptions.ubEndDefaultSectorY = iniReader.ReadInteger("Unfinished Business Settings","DEFAULT_END_SECTOR_Y", 11, 1, 16);
gGameUBOptions.ubEndDefaultSectorZ = iniReader.ReadInteger("Unfinished Business Settings","DEFAULT_END_SECTOR_Z", 0, 0, 16); gGameUBOptions.ubEndDefaultSectorZ = iniReader.ReadInteger("Unfinished Business Settings","DEFAULT_END_SECTOR_Z", 0, 0, 16);
+8
View File
@@ -224,6 +224,14 @@ typedef struct
INT16 BettyBloodCatSectorX; INT16 BettyBloodCatSectorX;
INT16 BettyBloodCatSectorY; INT16 BettyBloodCatSectorY;
INT8 BettyBloodCatSectorZ; INT8 BettyBloodCatSectorZ;
INT16 Tunnel1_SectorX;
INT16 Tunnel1_SectorY;
INT8 Tunnel1_SectorZ;
INT16 Tunnel2_SectorX;
INT16 Tunnel2_SectorY;
INT8 Tunnel2_SectorZ;
} GAME_UB_OPTIONS; } GAME_UB_OPTIONS;
extern GAME_UB_OPTIONS gGameUBOptions; extern GAME_UB_OPTIONS gGameUBOptions;
-50
View File
@@ -1468,31 +1468,6 @@ BOOLEAN LoadMercBioInfo(UINT8 ubIndex, STR16 pInfoString, STR16 pAddInfo)
//{ //{
// if( pInfoString[i] > 33 ) // if( pInfoString[i] > 33 )
// pInfoString[i] -= 1; // pInfoString[i] -= 1;
// #ifdef POLISH
// switch( pInfoString[ i ] )
// {
// case 260: pInfoString[ i ] = 165; break;
// case 262: pInfoString[ i ] = 198; break;
// case 280: pInfoString[ i ] = 202; break;
// case 321: pInfoString[ i ] = 163; break;
// case 323: pInfoString[ i ] = 209; break;
// case 211: pInfoString[ i ] = 211; break;
// case 346: pInfoString[ i ] = 338; break;
// case 379: pInfoString[ i ] = 175; break;
// case 377: pInfoString[ i ] = 143; break;
// case 261: pInfoString[ i ] = 185; break;
// case 263: pInfoString[ i ] = 230; break;
// case 281: pInfoString[ i ] = 234; break;
// case 322: pInfoString[ i ] = 179; break;
// case 324: pInfoString[ i ] = 241; break;
// case 243: pInfoString[ i ] = 243; break;
// case 347: pInfoString[ i ] = 339; break;
// case 380: pInfoString[ i ] = 191; break;
// case 378: pInfoString[ i ] = 376; break;
// }
// #endif
//} //}
DecodeString(pInfoString, SIZE_MERC_BIO_INFO); DecodeString(pInfoString, SIZE_MERC_BIO_INFO);
@@ -1514,31 +1489,6 @@ BOOLEAN LoadMercBioInfo(UINT8 ubIndex, STR16 pInfoString, STR16 pAddInfo)
//{ //{
// if( pAddInfo[i] > 33 ) // if( pAddInfo[i] > 33 )
// pAddInfo[i] -= 1; // pAddInfo[i] -= 1;
// #ifdef POLISH
// switch( pAddInfo[ i ] )
// {
// case 260: pAddInfo[ i ] = 165; break;
// case 262: pAddInfo[ i ] = 198; break;
// case 280: pAddInfo[ i ] = 202; break;
// case 321: pAddInfo[ i ] = 163; break;
// case 323: pAddInfo[ i ] = 209; break;
// case 211: pAddInfo[ i ] = 211; break;
// case 346: pAddInfo[ i ] = 338; break;
// case 379: pAddInfo[ i ] = 175; break;
// case 377: pAddInfo[ i ] = 143; break;
// case 261: pAddInfo[ i ] = 185; break;
// case 263: pAddInfo[ i ] = 230; break;
// case 281: pAddInfo[ i ] = 234; break;
// case 322: pAddInfo[ i ] = 179; break;
// case 324: pAddInfo[ i ] = 241; break;
// case 243: pAddInfo[ i ] = 243; break;
// case 347: pAddInfo[ i ] = 339; break;
// case 380: pAddInfo[ i ] = 191; break;
// case 378: pAddInfo[ i ] = 376; break;
// }
// #endif
//} //}
DecodeString(pAddInfo, SIZE_MERC_BIO_INFO); DecodeString(pAddInfo, SIZE_MERC_BIO_INFO);
+1 -1
View File
@@ -75,7 +75,7 @@ extern INT32 iAddExplosives ;
extern INT32 iAddMechanical ; extern INT32 iAddMechanical ;
// pop up strings // pop up strings
extern STR16 pImpPopUpStrings[]; extern STR16* pImpPopUpStrings;
//extern BOOLEAN fIMPCompletedFlag; //extern BOOLEAN fIMPCompletedFlag;
+2 -2
View File
@@ -7,6 +7,6 @@ void RenderIMPPersonalityEntrance( void );
void ExitIMPPersonalityEntrance( void ); void ExitIMPPersonalityEntrance( void );
void HandleIMPPersonalityEntrance( void ); void HandleIMPPersonalityEntrance( void );
STR16 pSkillTraitBeginIMPStrings[]; extern STR16* pSkillTraitBeginIMPStrings;
#endif #endif
+4 -4
View File
@@ -9,13 +9,13 @@ void PrintImpText( void );
void PrintIMPPersonalityQuizQuestionAndAnsers( void ); void PrintIMPPersonalityQuizQuestionAndAnsers( void );
// buttons text // buttons text
extern STR16 pImpButtonText[]; extern STR16* pImpButtonText;
// extra strings not found in IMP Text Document // extra strings not found in IMP Text Document
extern STR16 pExtraIMPStrings[]; extern STR16* pExtraIMPStrings;
extern STR16 pSkillTraitBeginIMPStrings[]; // added - SANDRO extern STR16* pSkillTraitBeginIMPStrings; // added - SANDRO
enum{ enum{
IMP_HOME_1, IMP_HOME_1,
@@ -145,4 +145,4 @@ enum{
}; };
#endif #endif
+21 -11
View File
@@ -565,25 +565,35 @@ BOOLEAN CPostalService::DeliverShipment(UINT16 usShipmentID)
StopTimeCompression(); StopTimeCompression();
#ifdef JA2UB #ifdef JA2UB
//no UB
if ( gGameUBOptions.fBobbyRSite == TRUE ) if ( gGameUBOptions.fBobbyRSite == TRUE )
{ {
// Shipment from Bobby Ray // Shipment from Bobby Ray
if (shs.sSenderID == BOBBYR_SENDER_ID) if ( shs.sSenderID == BOBBYR_SENDER_ID )
AddBobbyREmailJA2( 198, 4, BOBBY_R, GetWorldTotalMin(), -1, gusCurShipmentDestinationID, TYPE_EMAIL_BOBBY_R_EMAIL_JA2_EDT); {
if ( gEmails.size() > 0 )
{
AddEmailFromXML(XML_BR_SHIPMENTARRIVAL, GetWorldTotalMin(), -1, gusCurShipmentDestinationID, false, -1, -1, 198, -1, -1, -1);
}
else
{
AddBobbyREmailJA2(198, 4, BOBBY_R, GetWorldTotalMin(), -1, gusCurShipmentDestinationID, TYPE_EMAIL_BOBBY_R_EMAIL_JA2_EDT);
// Shipment from John Kulba // Shipment from John Kulba
//else //else
// AddEmail( JOHN_KULBA_GIFT_IN_DRASSEN, JOHN_KULBA_GIFT_IN_DRASSEN_LENGTH, JOHN_KULBA, GetWorldTotalMin(), -1, gusCurShipmentDestinationID, TYPE_EMAIL_EMAIL_EDT); // AddEmail( JOHN_KULBA_GIFT_IN_DRASSEN, JOHN_KULBA_GIFT_IN_DRASSEN_LENGTH, JOHN_KULBA, GetWorldTotalMin(), -1, gusCurShipmentDestinationID, TYPE_EMAIL_EMAIL_EDT);
}
}
} }
#else #else
// Shipment from Bobby Ray
// Shipment from Bobby Ray if ( shs.sSenderID == BOBBYR_SENDER_ID )
if (shs.sSenderID == BOBBYR_SENDER_ID) {
AddEmail( BOBBYR_SHIPMENT_ARRIVED, BOBBYR_SHIPMENT_ARRIVED_LENGTH, BOBBY_R, GetWorldTotalMin(), -1, gusCurShipmentDestinationID, TYPE_EMAIL_EMAIL_EDT); AddEmail(BOBBYR_SHIPMENT_ARRIVED, BOBBYR_SHIPMENT_ARRIVED_LENGTH, BOBBY_R, GetWorldTotalMin(), -1, gusCurShipmentDestinationID, TYPE_EMAIL_EMAIL_EDT, XML_BR_SHIPMENTARRIVAL);
// Shipment from John Kulba }
else // Shipment from John Kulba
AddEmail( JOHN_KULBA_GIFT_IN_DRASSEN, JOHN_KULBA_GIFT_IN_DRASSEN_LENGTH, JOHN_KULBA, GetWorldTotalMin(), -1, gusCurShipmentDestinationID, TYPE_EMAIL_EMAIL_EDT); else
{
AddEmail(JOHN_KULBA_GIFT_IN_DRASSEN, JOHN_KULBA_GIFT_IN_DRASSEN_LENGTH, JOHN_KULBA, GetWorldTotalMin(), -1, gusCurShipmentDestinationID, TYPE_EMAIL_EMAIL_EDT, XML_JOHNKULBA_SENTGUNS);
}
#endif #endif
} }
+155 -246
View File
@@ -1,295 +1,204 @@
#include "sgp.h" #include "sgp.h"
#include "Debug Control.h" #include "Debug Control.h"
#include "expat.h" #include "expat.h"
#include "XML.h" #include "XML.h"
#include "Interface.h" #include "Interface.h"
#include "LuaInitNPCs.h" #include "LuaInitNPCs.h"
#include "email.h" #include "email.h"
struct struct
{ {
PARSE_STAGE curElement; PARSE_STAGE curElement;
CHAR8 szCharData[MAIL_STRING_SIZE+1]; CHAR8 szCharData[MAIL_STRING_SIZE + 1];
EMAIL_OTHER_VALUES curEmailOther; CHAR16 currentMessage[MAIL_STRING_SIZE];
UINT16 currentEmailIndex;
UINT16 currentMessageIndex;
UINT32 maxArraySize; UINT32 maxArraySize;
UINT32 curIndex; UINT32 curIndex;
UINT32 currentDepth; UINT32 currentDepth;
UINT32 maxReadDepth; UINT32 maxReadDepth;
} } typedef EmailXMLParseData;
typedef EmailOtherParseData; BOOLEAN Emails_TextOnly;
BOOLEAN EmailOther_TextOnly;
static void XMLCALL static void XMLCALL
EmailOtherStartElementHandle(void *userData, const XML_Char *name, const XML_Char **atts) EmailOtherStartElementHandle(void* userData, const XML_Char* name, const XML_Char** atts)
{ {
EmailOtherParseData * pData = (EmailOtherParseData *)userData; EmailXMLParseData* pData = (EmailXMLParseData*)userData;
if(pData->currentDepth <= pData->maxReadDepth) //are we reading this element? if (pData->currentDepth <= pData->maxReadDepth) //are we reading this element?
{ {
if(strcmp(name, "NEW_EMAIL") == 0 && pData->curElement == ELEMENT_NONE) if (strcmp(name, "EMAILS") == 0 && pData->curElement == ELEMENT_NONE)
{ {
pData->curElement = ELEMENT_LIST; pData->curElement = ELEMENT_LIST;
pData->maxReadDepth++; //we are not skipping this element pData->maxReadDepth++; //we are not skipping this element
} }
else if(strcmp(name, "EMAIL") == 0 && pData->curElement == ELEMENT_LIST) else if (strcmp(name, "EMAIL") == 0 && pData->curElement == ELEMENT_LIST)
{ {
pData->curElement = ELEMENT; pData->curElement = ELEMENT;
pData->maxReadDepth++; //we are not skipping this element pData->maxReadDepth++; //we are not skipping this element
} }
else if(pData->curElement == ELEMENT && else if (pData->curElement == ELEMENT &&
(strcmp(name, "uiIndex") == 0 || (strcmp(name, "Index") == 0 ||
strcmp(name, "Subject") == 0 || strcmp(name, "Sender") == 0 ||
strcmp(name, "Message0") == 0 || strcmp(name, "Subject") == 0 ||
strcmp(name, "Message1") == 0 || strcmp(name, "Message") == 0))
strcmp(name, "Message2") == 0 || {
strcmp(name, "Message3") == 0 || pData->curElement = ELEMENT_PROPERTY;
strcmp(name, "Message4") == 0 ||
strcmp(name, "Message5") == 0 ||
strcmp(name, "Message6") == 0 ||
strcmp(name, "Message7") == 0 ||
strcmp(name, "Message8") == 0 ||
strcmp(name, "Message9") == 0 ||
strcmp(name, "Message10") == 0 ||
strcmp(name, "Message11") == 0 ||
strcmp(name, "Message12") == 0 ||
strcmp(name, "Message13") == 0 ||
strcmp(name, "Message14") == 0 ||
strcmp(name, "Message15") == 0 ||
strcmp(name, "Message16") == 0 ||
strcmp(name, "Message17") == 0 ||
strcmp(name, "Message18") == 0 ||
strcmp(name, "Message19") == 0 ||
strcmp(name, "Message20") == 0 ||
strcmp(name, "Message21") == 0 ||
strcmp(name, "Message22") == 0 ||
strcmp(name, "Message23") == 0 ||
strcmp(name, "Message24") == 0 ||
strcmp(name, "Message25") == 0 ||
strcmp(name, "Message26") == 0 ||
strcmp(name, "Message27") == 0 ||
strcmp(name, "Message28") == 0 ||
strcmp(name, "Message29") == 0 ))
{
pData->curElement = ELEMENT_PROPERTY;
pData->maxReadDepth++; //we are not skipping this element pData->maxReadDepth++; //we are not skipping this element
} }
pData->szCharData[0] = '\0'; pData->szCharData[0] = '\0';
} }
pData->currentDepth++; pData->currentDepth++;
} }
static void XMLCALL static void XMLCALL
EmailOtherCharacterDataHandle(void *userData, const XML_Char *str, int len) EmailOtherCharacterDataHandle(void* userData, const XML_Char* str, int len)
{ {
EmailOtherParseData * pData = (EmailOtherParseData *)userData; EmailXMLParseData* pData = (EmailXMLParseData*)userData;
if( (pData->currentDepth <= pData->maxReadDepth) && if ((pData->currentDepth <= pData->maxReadDepth) &&
(strlen(pData->szCharData) < MAX_CHAR_DATA_LENGTH) (strlen(pData->szCharData) < MAX_CHAR_DATA_LENGTH)
){ ) {
strncat(pData->szCharData,str,__min((unsigned int)len,MAX_CHAR_DATA_LENGTH-strlen(pData->szCharData))); strncat(pData->szCharData, str, __min((unsigned int)len, MAX_CHAR_DATA_LENGTH - strlen(pData->szCharData)));
} }
} }
static void XMLCALL static void XMLCALL
EmailOtherEndElementHandle(void *userData, const XML_Char *name) EmailOtherEndElementHandle(void* userData, const XML_Char* name)
{ {
EmailOtherParseData * pData = (EmailOtherParseData *)userData; EmailXMLParseData* pData = (EmailXMLParseData*)userData;
if(pData->currentDepth <= pData->maxReadDepth) if (pData->currentDepth <= pData->maxReadDepth)
{ {
if(strcmp(name, "NEW_EMAIL") == 0) if (strcmp(name, "EMAILS") == 0)
{ {
pData->curElement = ELEMENT_NONE; pData->curElement = ELEMENT_NONE;
} }
else if(strcmp(name, "EMAIL") == 0) else if (strcmp(name, "EMAIL") == 0)
{ {
pData->curElement = ELEMENT_LIST; pData->curElement = ELEMENT_LIST;
if ( Emails_TextOnly )
if (!EmailOther_TextOnly) {
{ pData->currentEmailIndex += 1;
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szSubject, pData->curEmailOther.szSubject); pData->currentMessageIndex = 0;
// L"12345678901234567890123456789" <- max lenght (szMessage[30]) }
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[0], L"1. sdssdsfs dfg fdgd fg test" ); //pData-curEmailOther.szMessage[0]); }
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[1], L"2. sdssdsfs dfg fgfgffds test" ); else if (strcmp(name, "Sender") == 0)
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[2], L"3. sdssdsfsd gdfg fdfgsf test" ); {
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[3], L"4. sdssdsf dgdfg dgsfdsf test" ); pData->curElement = ELEMENT;
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[4], L"5. sdssdsfdgdfg dgfddsf test" ); if ( !Emails_TextOnly )
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[5], L"6. sdssdsfsffdsf test" ); {
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[6], L"7. sdssdsfsffdsf test" ); gEmails.push_back(EMAIL_XML {});
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[7], L"8. sdssdsfsfdgdgfgfdsf test" ); gEmails.back().Sender = atol(pData->szCharData);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[8], L"9. sdssdsfsff dg gdg dsf test" ); }
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[9], L"10. sdssdsfsfgdsgdfgfdsf test" ); }
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[10], L"11. sdssdsfsff dgfgd dsf test" ); else if (strcmp(name, "Subject") == 0)
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[11], L"12. sdssdsfsf dfgdfg dsf test" ); {
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[12], L"13. sdssdsfsf dfgg gfdsf test" ); pData->curElement = ELEMENT;
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[13], L"14. sdssdsf dgdf gsffdsf test" ); if ( !Emails_TextOnly )
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[14], L"15. sdssdsf dgdf f ffdsf test" ); {
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[15], L"16. sdssdsfs dgdf gffdsf test" ); MultiByteToWideChar(CP_UTF8, 0, pData->szCharData, -1, gEmails.back().Subject, sizeof(gEmails.back().Subject) / sizeof(gEmails.back().Subject[0]));
}
else
{
// Replace existing text with localized version
const auto i = pData->currentEmailIndex;
MultiByteToWideChar(CP_UTF8, 0, pData->szCharData, -1, gEmails[i].Subject, sizeof(gEmails[i].Subject) / sizeof(gEmails[i].Subject[0]));
}
}
else if (strcmp(name, "Message") == 0)
{
pData->curElement = ELEMENT;
MultiByteToWideChar(CP_UTF8, 0, pData->szCharData, -1, pData->currentMessage, sizeof(pData->currentMessage) / sizeof(pData->currentMessage[0]));
/* if ( !Emails_TextOnly )
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[1], pData->curEmailOther.szMessage[1]); {
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[2], pData->curEmailOther.szMessage[2]); gEmails.back().Messages.emplace_back(pData->currentMessage);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[3], pData->curEmailOther.szMessage[3]); }
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[4], pData->curEmailOther.szMessage[4]); else
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[5], pData->curEmailOther.szMessage[5]); {
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[6], pData->curEmailOther.szMessage[6]); // Replace existing text with localized version
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[7], pData->curEmailOther.szMessage[7]); const auto i = pData->currentEmailIndex;
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[8], pData->curEmailOther.szMessage[8]); const auto j = pData->currentMessageIndex;
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[9], pData->curEmailOther.szMessage[9]); gEmails[i].Messages[j] = pData->currentMessage;
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[10], pData->curEmailOther.szMessage[10]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[11], pData->curEmailOther.szMessage[11]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[12], pData->curEmailOther.szMessage[12]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[13], pData->curEmailOther.szMessage[13]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[14], pData->curEmailOther.szMessage[14]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[15], pData->curEmailOther.szMessage[15]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[16], pData->curEmailOther.szMessage[16]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[17], pData->curEmailOther.szMessage[17]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[18], pData->curEmailOther.szMessage[18]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[19], pData->curEmailOther.szMessage[19]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[20], pData->curEmailOther.szMessage[20]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[21], pData->curEmailOther.szMessage[21]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[22], pData->curEmailOther.szMessage[22]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[23], pData->curEmailOther.szMessage[23]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[24], pData->curEmailOther.szMessage[24]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[25], pData->curEmailOther.szMessage[25]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[26], pData->curEmailOther.szMessage[26]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[27], pData->curEmailOther.szMessage[27]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[28], pData->curEmailOther.szMessage[28]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[29], pData->curEmailOther.szMessage[29]);
*/
}
else
{
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szSubject, pData->curEmailOther.szSubject);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[0], L"sdssdsfsffdsf test" ); //pData->curEmailOther.szMessage[0]);
/*
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[1], pData->curEmailOther.szMessage[1]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[2], pData->curEmailOther.szMessage[2]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[3], pData->curEmailOther.szMessage[3]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[4], pData->curEmailOther.szMessage[4]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[5], pData->curEmailOther.szMessage[5]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[6], pData->curEmailOther.szMessage[6]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[7], pData->curEmailOther.szMessage[7]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[8], pData->curEmailOther.szMessage[8]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[9], pData->curEmailOther.szMessage[9]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[10], pData->curEmailOther.szMessage[10]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[11], pData->curEmailOther.szMessage[11]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[12], pData->curEmailOther.szMessage[12]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[13], pData->curEmailOther.szMessage[13]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[14], pData->curEmailOther.szMessage[14]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[15], pData->curEmailOther.szMessage[15]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[16], pData->curEmailOther.szMessage[16]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[17], pData->curEmailOther.szMessage[17]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[18], pData->curEmailOther.szMessage[18]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[19], pData->curEmailOther.szMessage[19]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[20], pData->curEmailOther.szMessage[20]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[21], pData->curEmailOther.szMessage[21]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[22], pData->curEmailOther.szMessage[22]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[23], pData->curEmailOther.szMessage[23]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[24], pData->curEmailOther.szMessage[24]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[25], pData->curEmailOther.szMessage[25]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[26], pData->curEmailOther.szMessage[26]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[27], pData->curEmailOther.szMessage[27]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[28], pData->curEmailOther.szMessage[28]);
wcscpy(EmailOtherText[pData->curEmailOther.uiIndex].szMessage[29], pData->curEmailOther.szMessage[29]);
*/
}
}
else if(strcmp(name, "uiIndex") == 0)
{
pData->curElement = ELEMENT;
pData->curEmailOther.uiIndex = (UINT8) atol(pData->szCharData);
}
else if(strcmp(name, "Subject") == 0 )
{
pData->curElement = ELEMENT;
MultiByteToWideChar( CP_UTF8, 0, pData->szCharData, -1, pData->curEmailOther.szSubject, sizeof(pData->curEmailOther.szSubject)/sizeof(pData->curEmailOther.szSubject[0]) ); pData->currentMessageIndex++;
pData->curEmailOther.szSubject[sizeof(pData->curEmailOther.szSubject)/sizeof(pData->curEmailOther.szSubject[0]) - 1] = '\0'; }
} }
/*
else if(strcmp(name, "Message0") == 0 )
{
pData->curElement = ELEMENT;
MultiByteToWideChar( CP_UTF8, 0, pData->szCharData, -1, pData->curEmailOther.szMessage[0], sizeof(pData->curEmailOther.szMessage[0])/sizeof(pData->curEmailOther.szMessage[0]) ); pData->maxReadDepth--;
pData->curEmailOther.szMessage[sizeof(pData->curEmailOther.szMessage[0])/sizeof(pData->curEmailOther.szMessage[0]) - 1][0] = '\0'; }
} pData->currentDepth--;
*/
pData->maxReadDepth--;
}
pData->currentDepth--;
} }
BOOLEAN ReadInEmailOther(STR fileName, BOOLEAN localizedVersion) BOOLEAN ReadInExternalizedEmails(STR fileName, BOOLEAN localizedVersion)
{ {
HWFILE hFile; HWFILE hFile;
UINT32 uiBytesRead; UINT32 uiBytesRead;
UINT32 uiFSize; UINT32 uiFSize;
CHAR8 * lpcBuffer; CHAR8* lpcBuffer;
XML_Parser parser = XML_ParserCreate(NULL); XML_Parser parser = XML_ParserCreate(NULL);
EmailOtherParseData pData; EmailXMLParseData pData;
DebugMsg(TOPIC_JA2, DBG_LEVEL_3, "Loading EmailOther.xml" ); DebugMsg(TOPIC_JA2, DBG_LEVEL_3, "Loading Emails.xml");
EmailOther_TextOnly = localizedVersion; Emails_TextOnly = localizedVersion;
// Open file
hFile = FileOpen( fileName, FILE_ACCESS_READ, FALSE );
if ( !hFile )
return( localizedVersion );
uiFSize = FileGetSize(hFile); // Open file
lpcBuffer = (CHAR8 *) MemAlloc(uiFSize+1); hFile = FileOpen(fileName, FILE_ACCESS_READ, FALSE);
if (!hFile)
return(localizedVersion);
//Read in block uiFSize = FileGetSize(hFile);
if ( !FileRead( hFile, lpcBuffer, uiFSize, &uiBytesRead ) ) lpcBuffer = (CHAR8*)MemAlloc(uiFSize + 1);
{
MemFree(lpcBuffer);
return( FALSE );
}
lpcBuffer[uiFSize] = 0; //add a null terminator //Read in block
if (!FileRead(hFile, lpcBuffer, uiFSize, &uiBytesRead))
{
MemFree(lpcBuffer);
return(FALSE);
}
FileClose( hFile ); lpcBuffer[uiFSize] = 0; //add a null terminator
FileClose(hFile);
XML_SetElementHandler(parser, EmailOtherStartElementHandle, EmailOtherEndElementHandle); XML_SetElementHandler(parser, EmailOtherStartElementHandle, EmailOtherEndElementHandle);
XML_SetCharacterDataHandler(parser, EmailOtherCharacterDataHandle); XML_SetCharacterDataHandler(parser, EmailOtherCharacterDataHandle);
memset(&pData,0,sizeof(pData)); memset(&pData, 0, sizeof(pData));
XML_SetUserData(parser, &pData); XML_SetUserData(parser, &pData);
gEmails.reserve(XML_JA2UB_SPECK_DISMISSALREFUND);
if (!XML_Parse(parser, lpcBuffer, uiFSize, TRUE))
{
CHAR8 errorBuf[511];
sprintf(errorBuf, "XML Parser Error in Emails.xml: %s at line %d", XML_ErrorString(XML_GetErrorCode(parser)), XML_GetCurrentLineNumber(parser));
LiveMessage(errorBuf);
MemFree(lpcBuffer);
return FALSE;
}
MemFree(lpcBuffer);
if(!XML_Parse(parser, lpcBuffer, uiFSize, TRUE)) XML_ParserFree(parser);
{
CHAR8 errorBuf[511];
sprintf(errorBuf, "XML Parser Error in EmailOther.xml: %s at line %d", XML_ErrorString(XML_GetErrorCode(parser)), XML_GetCurrentLineNumber(parser));
LiveMessage(errorBuf);
MemFree(lpcBuffer);
return FALSE;
}
MemFree(lpcBuffer);
XML_ParserFree(parser); return(TRUE);
return( TRUE );
} }
+1 -2
View File
@@ -3,7 +3,6 @@
#include "Utilities.h" #include "Utilities.h"
#include "WCheck.h" #include "WCheck.h"
#include "Timer Control.h" #include "Timer Control.h"
#include "DEBUG.H"
#include "WordWrap.h" #include "WordWrap.h"
#include "Encrypted File.h" #include "Encrypted File.h"
#include "email.h" #include "email.h"
@@ -16,7 +15,7 @@
#include "sysutil.h" #include "sysutil.h"
#include "LocalizedStrings.h" #include "LocalizedStrings.h"
#include "Soldier Profile.h" #include <soldier profile type.h>
UINT8 MAX_NUMBER_MERCS = 0; UINT8 MAX_NUMBER_MERCS = 0;
+518 -511
View File
File diff suppressed because it is too large Load Diff
+97 -19
View File
@@ -5,8 +5,7 @@
#include "soldier profile type.h" #include "soldier profile type.h"
// defines // defines
#define MAX_EMAIL_LINES 10 //max number of lines can be shown in a message #define MAX_MESSAGES_PAGE 18 // max number of emails per page in inbox
#define MAX_MESSAGES_PAGE 18 // max number of messages per page
//---ja25 ub //---ja25 ub
#ifdef JA2UB #ifdef JA2UB
@@ -567,11 +566,10 @@ void RenderEmail();
// message manipulation // message manipulation
void AddEmailMessage(INT32 iMessageOffset, INT32 iMessageLength,STR16 pSubject, INT32 iDate, UINT8 ubSender, BOOLEAN fAlreadyRead, INT32 uiFirstData, UINT32 uiSecondData, INT32 iCurrentIMPPosition, INT16 iCurrentShipmentDestinationID, UINT8 EmailType, UINT32 EmailAIM ); void AddEmailMessage(INT32 iMessageOffset, INT32 iMessageLength,STR16 pSubject, INT32 iDate, UINT8 ubSender, BOOLEAN fAlreadyRead, INT32 iFirstData, UINT32 uiSecondData, INT32 iThirdData, INT32 iFourthData, UINT32 uiFifthData, UINT32 uiSixData, INT32 iCurrentIMPPosition, INT16 iCurrentShipmentDestinationID, UINT8 EmailType, UINT32 EmailAIM );
void RemoveEmailMessage(INT32 iId); void RemoveEmailMessage(INT32 iId);
EmailPtr GetEmailMessage(INT32 iId); EmailPtr GetEmailMessage(INT32 iId);
void LookForUnread(); void LookForUnread();
void AddEmail(INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, INT32 iCurrentIMPPosition, INT16 iCurrentShipmentDestinationID, UINT8 EmailType);
// WANNE: For the new WF merc, when they available again // WANNE: For the new WF merc, when they available again
void AddEmailWFMercAvailable(INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, INT32 iCurrentIMPPosition, UINT8 EmailType); void AddEmailWFMercAvailable(INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, INT32 iCurrentIMPPosition, UINT8 EmailType);
@@ -586,14 +584,19 @@ void ReDrawNewMailBox( void );
void ReDisplayBoxes( void ); void ReDisplayBoxes( void );
void ShutDownEmailList(); void ShutDownEmailList();
void AddMessageToPages(INT32 iMessageId); void AddMessageToPages(INT32 iMessageId);
void AddEmailWithSpecialData(INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, INT32 iFirstData, UINT32 uiSecondData, UINT8 EmailType, UINT32 EmailAIM );
void AddCustomEmail(INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, INT32 iCurrentIMPPosition, INT16 iCurrentShipmentDestinationID, UINT8 EmailType);
#ifdef JA2BETAVERSION #ifdef JA2BETAVERSION
void AddAllEmails(); void AddAllEmails();
#endif #endif
typedef struct
{
UINT8 Sender;
CHAR16 Subject[EMAIL_SUBJECT_LENGTH];
std::vector<std::wstring> Messages;
} EMAIL_XML;
extern std::vector<EMAIL_XML> gEmails;
typedef struct typedef struct
{ {
UINT8 uiIndex; UINT8 uiIndex;
@@ -674,8 +677,8 @@ enum {
TYPE_EMAIL_KING_PIN, TYPE_EMAIL_KING_PIN,
TYPE_EMAIL_JOHN_KULBA, TYPE_EMAIL_JOHN_KULBA,
TYPE_EMAIL_AIM_SITE, TYPE_EMAIL_AIM_SITE,
//Read message from Email\Emails.xml and sender read from Email\EmailSenderNameList.xml
TYPE_EMAIL_OTHER, TYPE_EMAIL_XML,
}; };
enum { enum {
@@ -697,15 +700,96 @@ enum {
TYPE_EMAIL_BOBBY_R_L1 = 11, TYPE_EMAIL_BOBBY_R_L1 = 11,
}; };
enum {
XML_NOEMAIL = -1,
XML_ENRICO_INQUIRY = 0,
XML_ENRICO_FOLLOWUP,
XML_ENRICO_CONFIRMED,
XML_ENRICO_GOODLUCK,
XML_ENRICO_GREATNEWS,
XML_ENRICO_PROGRESS,
XML_ENRICO_GOODWORK,
XML_ENRICO_FINALPUSH,
XML_ENRICO_SETBACK,
XML_ENRICO_BADNEWS,
XML_ENRICO_CREPITUS,
XML_ENRICO_CONCERNED,
XML_ENRICO_WORRIED,
XML_ENRICO_DISAPPOINTED,
XML_ENRICO_MILITIA_WEBSITE,
XML_ENRICO_INTEL,
XML_IMP_INTRO,
XML_IMP_INTROAGAIN,
XML_SPECK_INTRO,
XML_SPECK_NEWSITE,
XML_SPECK_NOTICE,
XML_SPECK_NEWPERSONNEL,
XML_SPECK_PLEASEPAY,
XML_SPECK_DELINQUENT,
XML_RISREPORT,
XML_INSURANCE_APPROVED,
XML_INSURANCE_SUSPICIOUS,
XML_INSURANCE_COMPLETED,
XML_INSURANCE_INVESTIGATION,
XML_INSURANCE_REFUSED,
XML_INSURANCE_POLICYVIOLATION,
XML_BR_VISITEDSITE,
XML_BR_SHIPMENTARRIVAL,
XML_BR_MEDUNA,
XML_KINGPIN_STOLEMONEY,
XML_KINGPIN_JOBOPPORTUNITY,
XML_KINGPIN_WELLDONE,
XML_KINGPIN_FAILURE,
XML_KINGPIN_FAILUREOBSTACLES,
XML_JOHNKULBA_SENTGUNS,
XML_JOHNKULBA_MISSEDTRANSFERFLIGHT,
XML_JOHNKULBA_CRASHLANDEDHELI,
XML_JOHNKULBA_AMBUSHEDBYCATS,
XML_AIM_NOTICE_OF_DEATH,
XML_AIM_REFUND,
XML_AIM_PARTIALREFUND,
XML_AIM_NOREFUND,
XML_KERBERUS_OFFER,
XML_DASILVA_THANKYOU,
XML_JA2UB_ENRICO_HELP,
XML_JA2UB_ENRICO_INQUIRY,
XML_JA2UB_ENRICO_STILLNOWORD,
XML_JA2UB_ENRICO_GOODNEWS,
XML_JA2UB_ENRICO_CONCERNED,
XML_JA2UB_ENRICO_URGENT,
XML_JA2UB_ENRICO_RECEIVEDEMAIL,
XML_JA2UB_ENRICO_RECEIVEDEMAILMONEY,
XML_JA2UB_ENRICO_PILOTFOUND,
XML_JA2UB_ENRICO_CONGRATS,
XML_JA2UB_ENRICO_CONGRATS_MIGUELSICK,
XML_JA2UB_ENRICO_CONGRATS_MIGUELSICK_MANUELDEAD,
XML_JA2UB_ENRICO_CONGRATS_MIGUELSICK_MANUELALIVE,
XML_JA2UB_ENRICO_CONGRATS_MANUELDEAD,
XML_JA2UB_ENRICO_CONGRATS_MANUELALIVE,
XML_JA2UB_IMP_INTRO,
XML_JA2UB_IMP_INTROAGAIN,
XML_JA2UB_MIGUEL_HELLO,
XML_JA2UB_MIGUEL_SORRY,
XML_JA2UB_MIGUEL_SORRY_HIREDMANUEL,
XML_JA2UB_MIGUEL_SICK,
XML_JA2UB_MIGUEL_CIGARETTES,
XML_JA2UB_AIM_SPECIALOFFER,
XML_JA2UB_AIM_BONUSOFFER,
XML_JA2UB_AIM_SPECIALBONUSOFFER,
XML_JA2UB_AIM_DISMISSALREFUND,
XML_JA2UB_SPECK_EVENBETTEROFFER,
XML_JA2UB_SPECK_DISMISSALREFUND
};
void AddEmail(INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, INT32 iCurrentIMPPosition, INT16 iCurrentShipmentDestinationID, UINT8 EmailType, UINT16 EnumEmailXML = XML_NOEMAIL);
void AddEmailWithSpecialData(INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, INT32 iFirstData, UINT32 uiSecondData, UINT8 EmailType, UINT32 EmailAIM, UINT16 EnumEmailXML = XML_NOEMAIL);
extern EMAIL_MERC_AVAILABLE_VALUES EmailMercAvailableText[NUM_PROFILES]; extern EMAIL_MERC_AVAILABLE_VALUES EmailMercAvailableText[NUM_PROFILES];
extern EMAIL_MERC_LEVEL_UP_VALUES EmailMercLevelUpText[NUM_PROFILES]; extern EMAIL_MERC_LEVEL_UP_VALUES EmailMercLevelUpText[NUM_PROFILES];
extern EMAIL_MERC_INSURANCE_VALUES EmailInsuranceText[NUM_PROFILES];
extern EMAIL_OTHER_VALUES EmailOtherText[EMAIL_INDEX];
extern BOOLEAN ReadXMLEmail; extern BOOLEAN ReadXMLEmail;
extern void AddEmailTypeXML( INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, INT32 iCurrentIMPPosition, UINT8 EmailType ); extern void AddEmailTypeXML( INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, INT32 iCurrentIMPPosition, UINT8 EmailType );
extern void AddPreReadEmailTypeXML( INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, UINT8 EmailType ); extern void AddPreReadEmailTypeXML( INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, UINT8 EmailType );
extern void AddEmailWithSpecialDataXML(INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, INT32 iFirstData, UINT32 uiSecondData, UINT8 EmailTyp, UINT32 EmailAIMe ); extern void AddEmailFromXML(INT32 iMessageOffset, INT32 iDate, INT32 iCurrentIMPPosition, INT16 iCurrentShipmentDestinationID, BOOLEAN alreadyRead, INT32 iFirstData, UINT32 uiSecondData, INT32 iThirdData, INT32 iFourthData, UINT32 uiFifthData, UINT32 uiSixData);
extern void AddEmailWithSpecialDataXML(INT32 iMessageOffset, INT32 iDate, INT32 iCurrentIMPPosition, INT16 iCurrentShipmentDestinationID, BOOLEAN alreadyRead, INT32 iFirstData, UINT32 uiSecondData, INT32 iThirdData, INT32 iFourthData, UINT32 uiFifthData, UINT32 uiSixData);
extern BOOLEAN SaveNewEmailDataToSaveGameFile( HWFILE hFile ); extern BOOLEAN SaveNewEmailDataToSaveGameFile( HWFILE hFile );
extern BOOLEAN LoadNewEmailDataFromLoadGameFile( HWFILE hFile ); extern BOOLEAN LoadNewEmailDataFromLoadGameFile( HWFILE hFile );
@@ -714,9 +798,3 @@ extern void AddBobbyREmailJA2(INT32 iMessageOffset, INT32 iMessageLength, UINT8
#endif #endif
#endif #endif
+40 -25
View File
@@ -1350,7 +1350,8 @@ BOOLEAN AddLifeInsurancePayout( SOLDIERTYPE *pSoldier )
void StartInsuranceInvestigation( UINT16 ubPayoutID ) void StartInsuranceInvestigation( UINT16 ubPayoutID )
{ {
UINT8 ubDays; const auto mercID = LaptopSaveInfo.pLifeInsurancePayouts[ubPayoutID].ubMercID;
const auto payoutPrice = LaptopSaveInfo.pLifeInsurancePayouts[ubPayoutID].iPayOutPrice;
// send an email telling player an investigation is taking place // send an email telling player an investigation is taking place
if (gStrategicStatus.ubInsuranceInvestigationsCnt == 0) if (gStrategicStatus.ubInsuranceInvestigationsCnt == 0)
@@ -1361,10 +1362,12 @@ void StartInsuranceInvestigation( UINT16 ubPayoutID )
if( gubQuest[ QUEST_FIX_LAPTOP ] == QUESTDONE || gGameUBOptions.LaptopQuestEnabled == FALSE ) if( gubQuest[ QUEST_FIX_LAPTOP ] == QUESTDONE || gGameUBOptions.LaptopQuestEnabled == FALSE )
{ {
if ( gGameUBOptions.LaptopLinkInsurance == TRUE ) if ( gGameUBOptions.LaptopLinkInsurance == TRUE )
AddEmailWithSpecialData( 173, INSUR_SUSPIC_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].iPayOutPrice, LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubMercID, TYPE_EMAIL_INSURANCE_COMPANY_EMAIL_JA2_EDT, TYPE_E_INSURANCE_L4 ); {
AddEmailWithSpecialData(173, INSUR_SUSPIC_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), payoutPrice, mercID, TYPE_EMAIL_INSURANCE_COMPANY_EMAIL_JA2_EDT, TYPE_E_INSURANCE_L4, XML_INSURANCE_SUSPICIOUS);
}
} }
#else #else
AddEmailWithSpecialData( INSUR_SUSPIC, INSUR_SUSPIC_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].iPayOutPrice, LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubMercID, TYPE_EMAIL_EMAIL_EDT, TYPE_E_NONE ); AddEmailWithSpecialData(INSUR_SUSPIC, INSUR_SUSPIC_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), payoutPrice, mercID, TYPE_EMAIL_EMAIL_EDT, TYPE_E_NONE, XML_INSURANCE_SUSPICIOUS);
#endif #endif
} }
else else
@@ -1375,14 +1378,17 @@ void StartInsuranceInvestigation( UINT16 ubPayoutID )
if( gubQuest[ QUEST_FIX_LAPTOP ] == QUESTDONE || gGameUBOptions.LaptopQuestEnabled == FALSE ) if( gubQuest[ QUEST_FIX_LAPTOP ] == QUESTDONE || gGameUBOptions.LaptopQuestEnabled == FALSE )
{ {
if ( gGameUBOptions.LaptopLinkInsurance == TRUE ) if ( gGameUBOptions.LaptopLinkInsurance == TRUE )
AddEmailWithSpecialData( 179, INSUR_SUSPIC_2_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].iPayOutPrice, LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubMercID, TYPE_EMAIL_INSURANCE_COMPANY_EMAIL_JA2_EDT, TYPE_E_INSURANCE_L5 ); {
AddEmailWithSpecialData(179, INSUR_SUSPIC_2_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), payoutPrice, mercID, TYPE_EMAIL_INSURANCE_COMPANY_EMAIL_JA2_EDT, TYPE_E_INSURANCE_L5, XML_INSURANCE_INVESTIGATION);
}
} }
#else #else
AddEmailWithSpecialData( INSUR_SUSPIC_2, INSUR_SUSPIC_2_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].iPayOutPrice, LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubMercID, TYPE_EMAIL_EMAIL_EDT, TYPE_E_NONE ); AddEmailWithSpecialData(INSUR_SUSPIC_2, INSUR_SUSPIC_2_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), payoutPrice, mercID, TYPE_EMAIL_EMAIL_EDT, TYPE_E_NONE, XML_INSURANCE_INVESTIGATION);
#endif #endif
} }
if ( gMercProfiles[ LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubMercID ].ubSuspiciousDeath == VERY_SUSPICIOUS_DEATH ) UINT8 ubDays;
if ( gMercProfiles[ mercID ].ubSuspiciousDeath == VERY_SUSPICIOUS_DEATH )
{ {
// the fact that you tried to cheat them gets realized very quickly. :-) // the fact that you tried to cheat them gets realized very quickly. :-)
ubDays = 1; ubDays = 1;
@@ -1403,42 +1409,47 @@ void StartInsuranceInvestigation( UINT16 ubPayoutID )
void EndInsuranceInvestigation( UINT16 ubPayoutID ) void EndInsuranceInvestigation( UINT16 ubPayoutID )
{ {
const auto mercID = LaptopSaveInfo.pLifeInsurancePayouts[ubPayoutID].ubMercID;
const auto payoutPrice = LaptopSaveInfo.pLifeInsurancePayouts[ubPayoutID].iPayOutPrice;
// send an email telling player the investigation is over // send an email telling player the investigation is over
if ( gMercProfiles[ LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubMercID ].ubSuspiciousDeath == VERY_SUSPICIOUS_DEATH ) if ( gMercProfiles[ mercID ].ubSuspiciousDeath == VERY_SUSPICIOUS_DEATH )
{ {
// fraud, no payout! // fraud, no payout!
#ifdef JA2UB #ifdef JA2UB
// no UB if ( gubQuest[QUEST_FIX_LAPTOP] == QUESTDONE || gGameUBOptions.LaptopQuestEnabled == FALSE )
if( gubQuest[ QUEST_FIX_LAPTOP ] == QUESTDONE || gGameUBOptions.LaptopQuestEnabled == FALSE ) {
{ if ( gGameUBOptions.LaptopLinkInsurance == TRUE )
if ( gGameUBOptions.LaptopLinkInsurance == TRUE ) {
AddEmailWithSpecialData( INSUR_1HOUR_FRAUD, INSUR_1HOUR_FRAUD_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].iPayOutPrice, LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubMercID, TYPE_EMAIL_INSURANCE_COMPANY_EMAIL_JA2_EDT, TYPE_E_INSURANCE_L2 ); AddEmailWithSpecialData(INSUR_1HOUR_FRAUD, INSUR_1HOUR_FRAUD_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), payoutPrice, mercID, TYPE_EMAIL_INSURANCE_COMPANY_EMAIL_JA2_EDT, TYPE_E_INSURANCE_L2, XML_INSURANCE_REFUSED);
} }
}
#else #else
AddEmailWithSpecialData( INSUR_1HOUR_FRAUD, INSUR_1HOUR_FRAUD_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].iPayOutPrice, LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubMercID, TYPE_EMAIL_EMAIL_EDT, TYPE_E_NONE ); AddEmailWithSpecialData(INSUR_1HOUR_FRAUD, INSUR_1HOUR_FRAUD_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), payoutPrice, mercID, TYPE_EMAIL_EMAIL_EDT, TYPE_E_NONE, XML_INSURANCE_REFUSED);
#endif #endif
} }
// Flugente: also don't pay out if the death was suspicious. I mean, we get this if there were no enemies of the player straight up shot the guy... // Flugente: also don't pay out if the death was suspicious. I mean, we get this if there were no enemies of the player straight up shot the guy...
else if ( gMercProfiles[LaptopSaveInfo.pLifeInsurancePayouts[ubPayoutID].ubMercID].ubSuspiciousDeath == SUSPICIOUS_DEATH ) else if ( gMercProfiles[mercID].ubSuspiciousDeath == SUSPICIOUS_DEATH )
{ {
#ifdef JA2UB #ifdef JA2UB
// WANNE: I really don't know if we should call something here. At least it fixed the compilation error when compiling UB version. // WANNE: I really don't know if we should call something here. At least it fixed the compilation error when compiling UB version.
#else #else
// fraud, no payout! // fraud, no payout!
AddEmailWithSpecialData( INSUR_CHEAT_FRAUD, INSUR_CHEAT_FRAUD_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), LaptopSaveInfo.pLifeInsurancePayouts[ubPayoutID].iPayOutPrice, LaptopSaveInfo.pLifeInsurancePayouts[ubPayoutID].ubMercID, TYPE_EMAIL_EMAIL_EDT, TYPE_E_NONE ); AddEmailWithSpecialData(INSUR_CHEAT_FRAUD, INSUR_CHEAT_FRAUD_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), payoutPrice, mercID, TYPE_EMAIL_EMAIL_EDT, TYPE_E_NONE, XML_INSURANCE_POLICYVIOLATION);
#endif #endif
} }
else else
{ {
#ifdef JA2UB #ifdef JA2UB
// No UB
if( gubQuest[ QUEST_FIX_LAPTOP ] == QUESTDONE || gGameUBOptions.LaptopQuestEnabled == FALSE ) if( gubQuest[ QUEST_FIX_LAPTOP ] == QUESTDONE || gGameUBOptions.LaptopQuestEnabled == FALSE )
{ {
if ( gGameUBOptions.LaptopLinkInsurance == TRUE ) if ( gGameUBOptions.LaptopLinkInsurance == TRUE )
AddEmailWithSpecialData( 176, INSUR_INVEST_OVER_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].iPayOutPrice, LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubMercID, TYPE_EMAIL_INSURANCE_COMPANY_EMAIL_JA2_EDT, TYPE_E_INSURANCE_L6 ); {
AddEmailWithSpecialData(176, INSUR_INVEST_OVER_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), payoutPrice, mercID, TYPE_EMAIL_INSURANCE_COMPANY_EMAIL_JA2_EDT, TYPE_E_INSURANCE_L6, XML_INSURANCE_COMPLETED);
}
} }
#else #else
AddEmailWithSpecialData( INSUR_INVEST_OVER, INSUR_INVEST_OVER_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].iPayOutPrice, LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubMercID, TYPE_EMAIL_EMAIL_EDT, TYPE_E_NONE ); AddEmailWithSpecialData(INSUR_INVEST_OVER, INSUR_INVEST_OVER_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), payoutPrice, mercID, TYPE_EMAIL_EMAIL_EDT, TYPE_E_NONE, XML_INSURANCE_COMPLETED);
#endif #endif
// only now make a payment (immediately) // only now make a payment (immediately)
@@ -1450,6 +1461,9 @@ void EndInsuranceInvestigation( UINT16 ubPayoutID )
//void InsuranceContractPayLifeInsuranceForDeadMerc( LIFE_INSURANCE_PAYOUT *pPayoutStruct ) //void InsuranceContractPayLifeInsuranceForDeadMerc( LIFE_INSURANCE_PAYOUT *pPayoutStruct )
void InsuranceContractPayLifeInsuranceForDeadMerc( UINT16 ubPayoutID ) void InsuranceContractPayLifeInsuranceForDeadMerc( UINT16 ubPayoutID )
{ {
const auto mercID = LaptopSaveInfo.pLifeInsurancePayouts[ubPayoutID].ubMercID;
const auto payoutPrice = LaptopSaveInfo.pLifeInsurancePayouts[ubPayoutID].iPayOutPrice;
//if the mercs id number is the same what is in the soldier array //if the mercs id number is the same what is in the soldier array
if( LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubSoldierID == LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubSoldierID->ubID ) if( LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubSoldierID == LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubSoldierID->ubID )
{ {
@@ -1459,24 +1473,25 @@ void InsuranceContractPayLifeInsuranceForDeadMerc( UINT16 ubPayoutID )
} }
//add transaction to players account //add transaction to players account
AddTransactionToPlayersBook( INSURANCE_PAYOUT, LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubMercID, GetWorldTotalMin(), LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].iPayOutPrice ); AddTransactionToPlayersBook( INSURANCE_PAYOUT, mercID, GetWorldTotalMin(), payoutPrice );
//add to the history log the fact that the we paid the insurance claim //add to the history log the fact that the we paid the insurance claim
AddHistoryToPlayersLog( HISTORY_INSURANCE_CLAIM_PAYOUT, LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubMercID, GetWorldTotalMin(), -1, -1 ); AddHistoryToPlayersLog( HISTORY_INSURANCE_CLAIM_PAYOUT, mercID, GetWorldTotalMin(), -1, -1 );
//if there WASNT an investigation //if there WASNT an investigation
if( gMercProfiles[ LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubMercID ].ubSuspiciousDeath == 0 ) if( gMercProfiles[ mercID ].ubSuspiciousDeath == 0 )
{ {
//Add an email telling the user that he received an insurance payment //Add an email telling the user that he received an insurance payment
#ifdef JA2UB #ifdef JA2UB
// no UB
if( gubQuest[ QUEST_FIX_LAPTOP ] == QUESTDONE || gGameUBOptions.LaptopQuestEnabled == FALSE ) if( gubQuest[ QUEST_FIX_LAPTOP ] == QUESTDONE || gGameUBOptions.LaptopQuestEnabled == FALSE )
{ {
if ( gGameUBOptions.LaptopLinkInsurance == TRUE ) if ( gGameUBOptions.LaptopLinkInsurance == TRUE )
AddEmailWithSpecialData( 170, INSUR_PAYMENT_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].iPayOutPrice, LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubMercID, TYPE_EMAIL_INSURANCE_COMPANY_EMAIL_JA2_EDT, TYPE_E_INSURANCE_L3 ); {
AddEmailWithSpecialData(170, INSUR_PAYMENT_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), payoutPrice, mercID, TYPE_EMAIL_INSURANCE_COMPANY_EMAIL_JA2_EDT, TYPE_E_INSURANCE_L3, XML_INSURANCE_APPROVED);
}
} }
#else #else
AddEmailWithSpecialData( INSUR_PAYMENT, INSUR_PAYMENT_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].iPayOutPrice, LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubMercID, TYPE_EMAIL_EMAIL_EDT, TYPE_E_NONE ); AddEmailWithSpecialData(INSUR_PAYMENT, INSUR_PAYMENT_LENGTH, INSURANCE_COMPANY, GetWorldTotalMin(), payoutPrice, mercID, TYPE_EMAIL_EMAIL_EDT, TYPE_E_NONE, XML_INSURANCE_APPROVED);
#endif #endif
} }
+1 -1
View File
@@ -3294,7 +3294,7 @@ void HaventMadeImpMercEmailCallBack()
if( ( LaptopSaveInfo.fIMPCompletedFlag == FALSE ) && ( LaptopSaveInfo.fSentImpWarningAlready == FALSE ) ) if( ( LaptopSaveInfo.fIMPCompletedFlag == FALSE ) && ( LaptopSaveInfo.fSentImpWarningAlready == FALSE ) )
{ {
LaptopSaveInfo.fSentImpWarningAlready = TRUE; LaptopSaveInfo.fSentImpWarningAlready = TRUE;
AddEmail(IMP_EMAIL_AGAIN,IMP_EMAIL_AGAIN_LENGTH,1, GetWorldTotalMin( ), -1, -1, TYPE_EMAIL_EMAIL_EDT ); AddEmail(IMP_EMAIL_AGAIN,IMP_EMAIL_AGAIN_LENGTH,1, GetWorldTotalMin( ), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_IMP_INTROAGAIN);
} }
#endif #endif
} }
+5 -6
View File
@@ -1039,7 +1039,7 @@ void DailyUpdateOfMercSite( UINT16 usDate)
LaptopSaveInfo.gubPlayersMercAccountStatus = MERC_ACCOUNT_INVALID; LaptopSaveInfo.gubPlayersMercAccountStatus = MERC_ACCOUNT_INVALID;
if( IsSpeckComAvailable() ) if( IsSpeckComAvailable() )
{ {
AddEmail( MERC_INVALID, MERC_INVALID_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT); AddEmail(MERC_INVALID, MERC_INVALID_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_SPECK_NOTICE);
} }
else else
{ {
@@ -1055,7 +1055,7 @@ void DailyUpdateOfMercSite( UINT16 usDate)
LaptopSaveInfo.gubPlayersMercAccountStatus = MERC_ACCOUNT_SUSPENDED; LaptopSaveInfo.gubPlayersMercAccountStatus = MERC_ACCOUNT_SUSPENDED;
if( IsSpeckComAvailable() ) if( IsSpeckComAvailable() )
{ {
AddEmail( MERC_WARNING, MERC_WARNING_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT); AddEmail(MERC_WARNING, MERC_WARNING_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_SPECK_DELINQUENT);
// Have speck complain next time player come to site // Have speck complain next time player come to site
LaptopSaveInfo.uiSpeckQuoteFlags |= SPECK_QUOTE__SENT_EMAIL_ABOUT_LACK_OF_PAYMENT; LaptopSaveInfo.uiSpeckQuoteFlags |= SPECK_QUOTE__SENT_EMAIL_ABOUT_LACK_OF_PAYMENT;
@@ -1074,7 +1074,7 @@ void DailyUpdateOfMercSite( UINT16 usDate)
LaptopSaveInfo.gubPlayersMercAccountStatus = MERC_ACCOUNT_VALID_FIRST_WARNING; LaptopSaveInfo.gubPlayersMercAccountStatus = MERC_ACCOUNT_VALID_FIRST_WARNING;
if( IsSpeckComAvailable() ) if( IsSpeckComAvailable() )
{ {
AddEmail( MERC_FIRST_WARNING, MERC_FIRST_WARNING_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT); AddEmail(MERC_FIRST_WARNING, MERC_FIRST_WARNING_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_SPECK_PLEASEPAY);
// Have speck complain next time player come to site // Have speck complain next time player come to site
LaptopSaveInfo.uiSpeckQuoteFlags |= SPECK_QUOTE__SENT_EMAIL_ABOUT_LACK_OF_PAYMENT; LaptopSaveInfo.uiSpeckQuoteFlags |= SPECK_QUOTE__SENT_EMAIL_ABOUT_LACK_OF_PAYMENT;
@@ -2899,8 +2899,7 @@ void GetMercSiteBackOnline()
if( IsSpeckComAvailable() ) if( IsSpeckComAvailable() )
{ {
//Add an email telling the user the site is back up //Add an email telling the user the site is back up
AddEmail( MERC_NEW_SITE_ADDRESS, MERC_NEW_SITE_ADDRESS_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1 , TYPE_EMAIL_EMAIL_EDT); AddEmail(MERC_NEW_SITE_ADDRESS, MERC_NEW_SITE_ADDRESS_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_SPECK_NEWSITE);
//Set a flag indicating that the server just went up ( so speck can make a comment when the player next visits the site ) //Set a flag indicating that the server just went up ( so speck can make a comment when the player next visits the site )
LaptopSaveInfo.fFirstVisitSinceServerWentDown = TRUE; LaptopSaveInfo.fFirstVisitSinceServerWentDown = TRUE;
} }
@@ -3213,7 +3212,7 @@ void NewMercsAvailableAtMercSiteCallBack()
if (!sentNewMercsEmail) if (!sentNewMercsEmail)
{ {
sentNewMercsEmail = true; sentNewMercsEmail = true;
AddEmail(NEW_MERCS_AT_MERC, NEW_MERCS_AT_MERC_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT); AddEmail(NEW_MERCS_AT_MERC, NEW_MERCS_AT_MERC_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_SPECK_NEWPERSONNEL);
} }
//new mercs are available //new mercs are available
+1 -1
View File
@@ -1,5 +1,5 @@
#pragma once #pragma once
#include "Event Pump.h"
//time for a new header :) //time for a new header :)
extern int readyteamreg[10]; extern int readyteamreg[10];
-2
View File
@@ -8,7 +8,6 @@
#include "vsurface.h" #include "vsurface.h"
#include "Button System.h" #include "Button System.h"
#include "Font Control.h" #include "Font Control.h"
#include "Editor Taskbar Utils.h"
#include "line.h" #include "line.h"
#include "input.h" #include "input.h"
#include "vobject_blitters.h" #include "vobject_blitters.h"
@@ -16,7 +15,6 @@
#include "mousesystem.h" #include "mousesystem.h"
#include "strategicmap.h" #include "strategicmap.h"
#include "FileMan.h" #include "FileMan.h"
#include "Map Information.h"
#include "Render Dirty.h" #include "Render Dirty.h"
#include "Game Clock.h" #include "Game Clock.h"
#include "Campaign Types.h" #include "Campaign Types.h"
+1 -21
View File
@@ -6,35 +6,18 @@
#include <math.h> #include <math.h>
#include "ASD.h" #include "ASD.h"
#include "strategic.h" #include "strategic.h"
#include "WCheck.h"
#include "Utilities.h"
#include "WordWrap.h"
#include "Cursors.h"
#include "line.h"
#include "Insurance Text.h"
#include "Encrypted File.h"
#include "Text.h" #include "Text.h"
#include "Multi Language Graphic Utils.h"
#include "random.h" #include "random.h"
#include "Interface.h" #include "Interface.h"
#include "Soldier Add.h"
#include "Soldier Profile.h"
#include "Overhead.h" #include "Overhead.h"
#include "Map Screen Interface.h" #include <Font Control.h>
#include "finances.h"
#include "Game Clock.h" #include "Game Clock.h"
#include "SaveLoadGame.h" #include "SaveLoadGame.h"
#include "GameVersion.h"
#include "message.h" #include "message.h"
#include "Game Event Hook.h" #include "Game Event Hook.h"
#include "Militia Control.h"
#include "Town Militia.h" #include "Town Militia.h"
#include "Strategic Town Loyalty.h"
#include "Map Information.h"
#include "Campaign.h" #include "Campaign.h"
#include "random.h"
#include "Explosion Control.h"
#include "Strategic AI.h" #include "Strategic AI.h"
#include "Strategic Mines.h" #include "Strategic Mines.h"
#include "Reinforcement.h" #include "Reinforcement.h"
@@ -42,9 +25,6 @@
#include "Queen Command.h" #include "Queen Command.h"
#include "Map Screen Helicopter.h" #include "Map Screen Helicopter.h"
#include "Points.h" #include "Points.h"
#include "worldman.h"
#include "Map Information.h"
#include "opplist.h"
#include "Dialogue Control.h" #include "Dialogue Control.h"
#include "Sound Control.h" #include "Sound Control.h"
#include "renderworld.h" #include "renderworld.h"
+99 -109
View File
@@ -1,96 +1,81 @@
#include "Assignments.h" #include "Assignments.h"
#include "strategic.h" #include "strategic.h"
#include "Items.h" #include "Items.h"
#include "Overhead.h" #include "Overhead.h"
#include "Game Clock.h" #include "Game Clock.h"
#include "stdlib.h" #include "stdlib.h"
#include "message.h" #include "message.h"
#include "Font Control.h" #include "Font Control.h"
#include "Map Screen Interface.h" #include "Map Screen Interface.h"
#include "soldier profile type.h" #include "soldier profile type.h"
#include "Soldier Profile.h" #include "Soldier Profile.h"
#include "Campaign.h" #include "Campaign.h"
#include "Queen Command.h" #include "Queen Command.h"
#include "strategicmap.h" #include "strategicmap.h"
#include "Text.h" #include "Text.h"
#include "Dialogue Control.h" #include "Dialogue Control.h"
#include "NPC.h" #include "NPC.h"
#include "Strategic Town Loyalty.h" #include "Strategic Town Loyalty.h"
#include "Animation Control.h" #include "Animation Control.h"
#include "mapscreen.h" #include "mapscreen.h"
#include "Squads.h" #include "Squads.h"
#include "Map Screen Helicopter.h" #include "Map Screen Helicopter.h"
#include "PopUpBox.h" #include "PopUpBox.h"
#include "Vehicles.h" #include "Vehicles.h"
#include "Merc Contract.h" #include "Merc Contract.h"
#include "Map Screen Interface Map.h" #include "Map Screen Interface Map.h"
#include "Strategic Movement.h" #include "Strategic Movement.h"
#include "laptop.h" #include "laptop.h"
#include "finances.h" #include "finances.h"
#include "LaptopSave.h" #include "LaptopSave.h"
#include "renderworld.h" #include "renderworld.h"
#include "Interface Control.h" #include "Interface Control.h"
#include "Interface.h" #include "Interface.h"
#include "Soldier Find.h" #include "Soldier Find.h"
#include "ai.h" #include <Rotting Corpses.h>
#include "Utilities.h" #include "Utilities.h"
#include "random.h" #include "random.h"
#include "line.h" #include "Soldier Add.h"
#include "Soldier Add.h" #include "GameSettings.h"
#include "GameSettings.h" #include "Isometric Utils.h"
#include "Isometric Utils.h" #include "Soldier macros.h"
#include "Soldier macros.h" #include "Explosion Control.h"
#include "Explosion Control.h" #include "SkillCheck.h"
#include "SkillCheck.h" #include "Quests.h"
#include "Quests.h" #include "Town Militia.h"
#include "Town Militia.h" #include "Map Screen Interface Border.h"
#include "Map Screen Interface Border.h" #include "math.h"
#include "math.h" #include "Game Event Hook.h"
#include "SkillCheck.h" #include "Map Information.h"
#include "Strategic Pathing.h" #include "Strategic Status.h"
#include "Game Event Hook.h" #include "history.h"
#include "Strategic Event Handler.h" #include "Map Screen Interface Map Inventory.h"
#include "Map Information.h" #include "interface Dialogue.h"
#include "Strategic Status.h" // added by SANDRO
#include "history.h" #include "AIInternals.h"
#include "Map Screen Interface Map Inventory.h" #include "Morale.h"
#include "interface Dialogue.h" #include "Food.h"
// added by SANDRO #include "Tactical Save.h" // added by Flugente
#include "AIInternals.h" #include "Campaign Types.h" // added by Flugente
#include "Morale.h" #include "DynamicDialogue.h" // added by Flugente
#include "Food.h" #include "Disease.h" // added by Flugente
#include "Tactical Save.h" // added by Flugente #include "PMC.h" // added by Flugente
#include "Campaign Types.h" // added by Flugente #include "Drugs And Alcohol.h" // added by Flugente for DoesMercHaveDisability( ... )
#include "Strategic Town Loyalty.h" #include "MilitiaIndividual.h" // added by Flugente
#include "DynamicDialogue.h" // added by Flugente #include "Militia Control.h" // added by Flugente
#include "Disease.h" // added by Flugente #include "ASD.h" // added by Flugente
#include "Queen Command.h" // added by Flugente #include "Strategic AI.h"
#include "PMC.h" // added by Flugente #include "MiniEvents.h"
#include "Drugs And Alcohol.h" // added by Flugente for DoesMercHaveDisability( ... ) #include "Rebel Command.h"
#include "MilitiaIndividual.h" // added by Flugente
#include "Militia Control.h" // added by Flugente
#include "ASD.h" // added by Flugente
#include "Strategic AI.h"
#include "MiniEvents.h"
#include "Rebel Command.h"
#include <vector> #include <vector>
#include <queue> #include <queue>
#include "Vehicles.h"
#include "GameInitOptionsScreen.h" #include "GameInitOptionsScreen.h"
#include "Facilities.h"
//forward declarations of common classes to eliminate includes //forward declarations of common classes to eliminate includes
class OBJECTTYPE;
class SOLDIERTYPE;
extern int POP_UP_BOX_X; extern int POP_UP_BOX_X;
extern WorldItems gAllWorldItems; extern WorldItems gAllWorldItems;
#include "MilitiaSquads.h"
// HEADROCK HAM 3.5: Include Facility data
#include "Facilities.h"
#include "Vehicles.h"
#ifdef JA2UB #ifdef JA2UB
#include "Explosion Control.h" #include "Explosion Control.h"
@@ -201,7 +186,7 @@ REPAIR_PASS_SLOTS_TYPE gRepairPassSlotList[ NUM_REPAIR_PASS_TYPES ] =
{ /* HEADROCK HAM B2.8: LBE Slot pass */ 0, 5, VESTPOCKPOS, LTHIGHPOCKPOS, RTHIGHPOCKPOS, CPACKPOCKPOS, BPACKPOCKPOS, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { /* HEADROCK HAM B2.8: LBE Slot pass */ 0, 5, VESTPOCKPOS, LTHIGHPOCKPOS, RTHIGHPOCKPOS, CPACKPOCKPOS, BPACKPOCKPOS, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
}; };
extern STR16 sRepairsDoneString[]; extern STR16* sRepairsDoneString;
// PopUp Box Handles // PopUp Box Handles
INT32 ghAssignmentBox = -1; INT32 ghAssignmentBox = -1;
@@ -782,7 +767,7 @@ void ChangeSoldiersAssignment( SOLDIERTYPE *pSoldier, INT8 bAssignment )
fMapPanelDirty = TRUE; fMapPanelDirty = TRUE;
} }
BOOLEAN BasicCanCharacterAssignment( SOLDIERTYPE * pSoldier, BOOLEAN fNotInCombat ) static BOOLEAN BasicCanCharacterAssignment( SOLDIERTYPE * pSoldier, BOOLEAN fNotInCombat )
{ {
AssertNotNIL(pSoldier); AssertNotNIL(pSoldier);
// global conditions restricting all assignment changes // global conditions restricting all assignment changes
@@ -1365,7 +1350,7 @@ BOOLEAN DoesCharacterHaveAnyItemsToRepair( SOLDIERTYPE *pSoldier, INT8 bHighestP
return( FALSE ); return( FALSE );
} }
BOOLEAN BasicCanCharacterRepair( SOLDIERTYPE * pSoldier ) static BOOLEAN BasicCanCharacterRepair( SOLDIERTYPE * pSoldier )
{ {
AssertNotNIL(pSoldier); AssertNotNIL(pSoldier);
@@ -2448,7 +2433,7 @@ BOOLEAN CanCharacterTrainTeammates( SOLDIERTYPE *pSoldier )
return( TRUE ); return( TRUE );
} }
BOOLEAN CanCharacterBeTrainedByOther( SOLDIERTYPE *pSoldier ) static BOOLEAN CanCharacterBeTrainedByOther( SOLDIERTYPE *pSoldier )
{ {
AssertNotNIL(pSoldier); AssertNotNIL(pSoldier);
@@ -2833,7 +2818,7 @@ BOOLEAN CanCharacterSnitch( SOLDIERTYPE *pSoldier )
return( FALSE ); return( FALSE );
} }
BOOLEAN CanCharacterSpreadPropaganda( SOLDIERTYPE *pSoldier ) static BOOLEAN CanCharacterSpreadPropaganda( SOLDIERTYPE *pSoldier )
{ {
AssertNotNIL(pSoldier); AssertNotNIL(pSoldier);
@@ -2864,7 +2849,7 @@ BOOLEAN CanCharacterSpreadPropaganda( SOLDIERTYPE *pSoldier )
return( TRUE ); return( TRUE );
} }
BOOLEAN CanCharacterGatherInformation( SOLDIERTYPE *pSoldier ) static BOOLEAN CanCharacterGatherInformation( SOLDIERTYPE *pSoldier )
{ {
AssertNotNIL(pSoldier); AssertNotNIL(pSoldier);
@@ -2895,7 +2880,7 @@ BOOLEAN CanCharacterGatherInformation( SOLDIERTYPE *pSoldier )
return( TRUE ); return( TRUE );
} }
BOOLEAN CanCharacterSnitchInPrison( SOLDIERTYPE *pSoldier ) static BOOLEAN CanCharacterSnitchInPrison( SOLDIERTYPE *pSoldier )
{ {
AssertNotNIL(pSoldier); AssertNotNIL(pSoldier);
@@ -3173,7 +3158,7 @@ UINT8 GetNumberThatCanBeDoctored( SOLDIERTYPE *pDoctor, BOOLEAN fThisHour, BOOLE
return( ubNumberOfPeople ); return( ubNumberOfPeople );
} }
SOLDIERTYPE* GetPatientThatCanBeDoctored( SOLDIERTYPE *pDoctor, BOOLEAN fThisHour, BOOLEAN fSkipKitCheck, BOOLEAN fSkipSkillCheck, BOOLEAN fCheckForSurgery ) static SOLDIERTYPE* GetPatientThatCanBeDoctored( SOLDIERTYPE *pDoctor, BOOLEAN fThisHour, BOOLEAN fSkipKitCheck, BOOLEAN fSkipSkillCheck, BOOLEAN fCheckForSurgery )
{ {
int cnt; int cnt;
SOLDIERTYPE *pSoldier = MercPtrs[0], *pTeamSoldier = NULL; SOLDIERTYPE *pSoldier = MercPtrs[0], *pTeamSoldier = NULL;
@@ -3594,7 +3579,7 @@ UINT32 CalculatePrisonGuardValue(SOLDIERTYPE *pSoldier )
return( usValue ); return( usValue );
} }
UINT32 CalculateSnitchGuardValue(SOLDIERTYPE *pSoldier ) static UINT32 CalculateSnitchGuardValue(SOLDIERTYPE *pSoldier )
{ {
// this is an assignment // this is an assignment
UINT32 usValue = 0; UINT32 usValue = 0;
@@ -3630,7 +3615,7 @@ UINT32 CalculateSnitchGuardValue(SOLDIERTYPE *pSoldier )
return( usValue ); return( usValue );
} }
UINT32 CalculateAllGuardsValueInPrison( INT16 sMapX, INT16 sMapY, INT8 bZ ) static UINT32 CalculateAllGuardsValueInPrison( INT16 sMapX, INT16 sMapY, INT8 bZ )
{ {
UINT32 prisonguardvalue = 0; UINT32 prisonguardvalue = 0;
@@ -3651,7 +3636,7 @@ UINT32 CalculateAllGuardsValueInPrison( INT16 sMapX, INT16 sMapY, INT8 bZ )
return( prisonguardvalue ); return( prisonguardvalue );
} }
UINT32 CalculateAllSnitchesGuardValueInPrison( INT16 sMapX, INT16 sMapY, INT8 bZ ) static UINT32 CalculateAllSnitchesGuardValueInPrison( INT16 sMapX, INT16 sMapY, INT8 bZ )
{ {
UINT32 prisonguardvalue = 0; UINT32 prisonguardvalue = 0;
@@ -3672,7 +3657,7 @@ UINT32 CalculateAllSnitchesGuardValueInPrison( INT16 sMapX, INT16 sMapY, INT8 bZ
return( prisonguardvalue ); return( prisonguardvalue );
} }
UINT32 CalculateAllGuardsNumberInPrison( INT16 sMapX, INT16 sMapY, INT8 bZ ) static UINT32 CalculateAllGuardsNumberInPrison( INT16 sMapX, INT16 sMapY, INT8 bZ )
{ {
UINT8 numprisonguards = 0; UINT8 numprisonguards = 0;
@@ -3847,7 +3832,7 @@ INT16 GetTrainWorkerPts(SOLDIERTYPE *pSoldier)
} }
// anv: handle prisoners exposing snitch as a snitch // anv: handle prisoners exposing snitch as a snitch
BOOL HandleSnitchExposition(SOLDIERTYPE *pSoldier) static BOOL HandleSnitchExposition(SOLDIERTYPE *pSoldier)
{ {
UINT32 uiSuspicion = 0; UINT32 uiSuspicion = 0;
UINT32 uiCoverQuality = 0; UINT32 uiCoverQuality = 0;
@@ -4963,7 +4948,7 @@ static void CollectRepairableItems(SOLDIERTYPE* pRepairSoldier, SOLDIERTYPE* pSo
// Check for attachments (are there stackable items that can take attachments though?) // Check for attachments (are there stackable items that can take attachments though?)
UINT8 attachmentIndex = 0; UINT8 attachmentIndex = 0;
for (attachmentList::const_iterator iter = (*pObj)[stackIndex]->attachments.begin(); iter != (*pObj)[stackIndex]->attachments.end(); ++iter, ++attachmentIndex) { for (attachmentList::const_iterator iter = (*pObj)[stackIndex]->attachments.begin(); iter != (*pObj)[stackIndex]->attachments.end(); ++iter, ++attachmentIndex) {
if (IsItemRepairable(pRepairSoldier, iter->usItem, (*iter)[attachmentIndex]->data.objectStatus, (*iter)[attachmentIndex]->data.sRepairThreshold )) { if ( iter->exists() && IsItemRepairable(pRepairSoldier, iter->usItem, (*iter)[attachmentIndex]->data.objectStatus, (*iter)[attachmentIndex]->data.sRepairThreshold )) {
// Send the main item, not the attachment // Send the main item, not the attachment
RepairItem item(pObj, pSoldier, (INVENTORY_SLOT) pocketIndex); RepairItem item(pObj, pSoldier, (INVENTORY_SLOT) pocketIndex);
itemsToFix.push(item); itemsToFix.push(item);
@@ -5096,7 +5081,7 @@ OBJECTTYPE* FindRepairableItemInSpecificPocket(SOLDIERTYPE * pSoldier, OBJECTTYP
// have to check for attachments after... // have to check for attachments after...
for (attachmentList::iterator iter = (*pObj)[subObject]->attachments.begin(); iter != (*pObj)[subObject]->attachments.end(); ++iter) { for (attachmentList::iterator iter = (*pObj)[subObject]->attachments.begin(); iter != (*pObj)[subObject]->attachments.end(); ++iter) {
// if it's repairable and NEEDS repairing // if it's repairable and NEEDS repairing
if ( IsItemRepairable( pSoldier, iter->usItem, (*iter)[subObject]->data.objectStatus, (*iter)[subObject]->data.sRepairThreshold ) && iter->exists() ) { if ( iter->exists() && IsItemRepairable( pSoldier, iter->usItem, (*iter)[subObject]->data.objectStatus, (*iter)[subObject]->data.sRepairThreshold ) ) {
return( &(*iter) ); return( &(*iter) );
} }
} }
@@ -5105,7 +5090,7 @@ OBJECTTYPE* FindRepairableItemInSpecificPocket(SOLDIERTYPE * pSoldier, OBJECTTYP
} }
// Flugente: changed this function so that it repairs items up to a variable threshold instead of always 100%. This will only happen if the option gGameExternalOptions.fAdvRepairSystem is used // Flugente: changed this function so that it repairs items up to a variable threshold instead of always 100%. This will only happen if the option gGameExternalOptions.fAdvRepairSystem is used
void DoActualRepair( SOLDIERTYPE * pSoldier, UINT16 usItem, INT16 * pbStatus, INT16 sThreshold, UINT8 * pubRepairPtsLeft ) static void DoActualRepair( SOLDIERTYPE * pSoldier, UINT16 usItem, INT16 * pbStatus, INT16 sThreshold, UINT8 * pubRepairPtsLeft )
{ {
INT16 sRepairCostAdj; INT16 sRepairCostAdj;
UINT16 usDamagePts, usPtsFixed; UINT16 usDamagePts, usPtsFixed;
@@ -5186,8 +5171,12 @@ BOOLEAN RepairObject( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pOwner, OBJECTTYPE *
INT16 threshold = 100; INT16 threshold = 100;
if ( gGameExternalOptions.fAdvRepairSystem && (Item[pObj->usItem].usItemClass & (IC_WEAPON|IC_ARMOUR)) ) if ( gGameExternalOptions.fAdvRepairSystem && (Item[pObj->usItem].usItemClass & (IC_WEAPON|IC_ARMOUR)) )
{ {
if ( !gSkillTraitValues.fTETraitsCanRestoreItemThreshold || !HAS_SKILL_TRAIT( pSoldier, TECHNICIAN_NT ) ) if (gSkillTraitValues.fTETraitsCanRestoreItemThreshold && NUM_SKILL_TRAITS(pSoldier, TECHNICIAN_NT) >= gSkillTraitValues.ubTechLevelNeededForAdvancedRepair) // Greysa: added skill check for advanced repair. If we have a high enough technician level, we can repair items above the normal threshold (1 for technician, 2 for engineer)
{ {
threshold = 100;
}
else
{
threshold = (*pObj)[ubLoop]->data.sRepairThreshold; threshold = (*pObj)[ubLoop]->data.sRepairThreshold;
} }
} }
@@ -6829,7 +6818,7 @@ struct admintmpstruct
FLOAT percentage; FLOAT percentage;
}; };
UINT16 GetNumberofAdministratableMercs( INT16 sX, INT16 sY ) static UINT16 GetNumberofAdministratableMercs( INT16 sX, INT16 sY )
{ {
UINT16 num = 0; UINT16 num = 0;
UINT8 townid_origin = GetTownIdForSector( sX, sY ); UINT8 townid_origin = GetTownIdForSector( sX, sY );
@@ -7942,7 +7931,7 @@ BOOLEAN TrainTownInSector( SOLDIERTYPE *pTrainer, INT16 sMapX, INT16 sMapY, INT1
return ( FALSE ); return ( FALSE );
} }
void Interrogateprisoner(UINT8 aPrisonerType, FLOAT aChanceModifier, INT8& arMilitiaType, UINT32& arRansom, FLOAT& arIntel ) static void Interrogateprisoner(UINT8 aPrisonerType, FLOAT aChanceModifier, INT8& arMilitiaType, UINT32& arRansom, FLOAT& arIntel )
{ {
arMilitiaType = -1; arMilitiaType = -1;
@@ -11100,7 +11089,8 @@ void DetermineWhichAssignmentMenusCanBeShown( void )
CreateDestroyMouseRegionForFacilityMenu(); CreateDestroyMouseRegionForFacilityMenu();
CreateDestroyMouseRegionsForFacilityAssignmentMenu(); CreateDestroyMouseRegionsForFacilityAssignmentMenu();
if( ( ( gCharactersList[ bSelectedInfoChar ].usSolID->stats.bLife == 0 )||( gCharactersList[bSelectedInfoChar].usSolID->bAssignment == ASSIGNMENT_POW ) ) && ( (guiTacticalInterfaceFlags & INTERFACE_MAPSCREEN ) ) ) const auto selectedCharacter = gCharactersList[bSelectedInfoChar].usSolID;
if( selectedCharacter < NOBODY && ( (selectedCharacter->stats.bLife == 0 )||(selectedCharacter->bAssignment == ASSIGNMENT_POW ) ) && ( (guiTacticalInterfaceFlags & INTERFACE_MAPSCREEN ) ) )
{ {
// show basic assignment menu // show basic assignment menu
ShowBox( ghRemoveMercAssignBox ); ShowBox( ghRemoveMercAssignBox );
@@ -11469,7 +11459,7 @@ void ClearScreenMaskForMapScreenExit( void )
CreateDestroyMouseRegionsForPrisonerMenu( ); CreateDestroyMouseRegionsForPrisonerMenu( );
} }
void CreateDestroyMouseRegions( void ) static void CreateDestroyMouseRegions( void )
{ {
static BOOLEAN fCreated = FALSE; static BOOLEAN fCreated = FALSE;
UINT32 iCounter = 0; UINT32 iCounter = 0;
@@ -12686,7 +12676,7 @@ void RemoveMercMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason )
} }
} }
void BeginRemoveMercFromContract( SOLDIERTYPE *pSoldier ) static void BeginRemoveMercFromContract( SOLDIERTYPE *pSoldier )
{ {
// This function will setup the quote, then start dialogue beginning the actual leave sequence // This function will setup the quote, then start dialogue beginning the actual leave sequence
if( ( pSoldier->stats.bLife > 0 ) && ( pSoldier->bAssignment != ASSIGNMENT_POW ) ) if( ( pSoldier->stats.bLife > 0 ) && ( pSoldier->bAssignment != ASSIGNMENT_POW ) )
@@ -12789,7 +12779,7 @@ void BeginRemoveMercFromContract( SOLDIERTYPE *pSoldier )
} }
void MercDismissConfirmCallBack( UINT8 bExitValue ) static void MercDismissConfirmCallBack( UINT8 bExitValue )
{ {
if ( bExitValue == MSG_BOX_RETURN_YES ) if ( bExitValue == MSG_BOX_RETURN_YES )
{ {
@@ -21386,7 +21376,7 @@ void PayFacilityCostsYesNoBoxCallback( UINT8 bExitValue )
} }
// HEADROCK HAM 3.6: Callback on agreeing to pay off facility debts before you can assign another character to facility work. // HEADROCK HAM 3.6: Callback on agreeing to pay off facility debts before you can assign another character to facility work.
void PayFacilityDebtManuallyYesNoBoxCallback( UINT8 bExitValue ) static void PayFacilityDebtManuallyYesNoBoxCallback( UINT8 bExitValue )
{ {
// This callback should only be called if the player can pay off the ENTIRE debt!! // This callback should only be called if the player can pay off the ENTIRE debt!!
Assert( LaptopSaveInfo.iCurrentBalance >= giTotalOwedForFacilityOperationsToday ); Assert( LaptopSaveInfo.iCurrentBalance >= giTotalOwedForFacilityOperationsToday );
+103 -102
View File
@@ -1,75 +1,68 @@
#include "builddefines.h" #include "builddefines.h"
#include <stdio.h> #include <stdio.h>
#include "types.h" #include "types.h"
#include "Auto Resolve.h" #include "Auto Resolve.h"
#include "Strategic Movement.h" #include "Strategic Movement.h"
#include "Queen Command.h" #include "Queen Command.h"
#include "Music Control.h" #include "Music Control.h"
#include "PreBattle Interface.h" #include "PreBattle Interface.h"
#include "Player Command.h" #include "Player Command.h"
#include "mousesystem.h" #include "mousesystem.h"
#include "Button System.h" #include "Button System.h"
#include "gameloop.h" #include "gameloop.h"
#include "screenids.h" #include "screenids.h"
#include "mapscreen.h" #include "mapscreen.h"
#include "vobject.h" #include "vobject.h"
#include "video.h" #include "video.h"
#include "input.h" #include "input.h"
#include "gamescreen.h" #include "gamescreen.h"
#include "Render Dirty.h" #include "Render Dirty.h"
#include "vobject_blitters.h" #include "vobject_blitters.h"
#include "sysutil.h" #include "sysutil.h"
#include "Font Control.h" #include "Font Control.h"
#include "Soldier Create.h" #include "Soldier Create.h"
#include "Overhead.h" #include "Overhead.h"
#include "Interface.h" #include "Items.h"
#include "Items.h" #include "Weapons.h"
#include "Weapons.h" #include "Sound Control.h"
#include "Sound Control.h" #include "Game Clock.h"
#include "Game Clock.h" #include "Soldier Profile.h"
#include "Soldier Profile.h" #include "Campaign.h"
#include "Campaign.h" #include "Tactical Save.h"
#include "Tactical Save.h" #include "Strategic Status.h"
#include "Strategic Status.h" #include "Text.h"
#include "Map Screen Interface.h" #include "WordWrap.h"
#include "Text.h" #include "Squads.h"
#include "WordWrap.h" #include "random.h"
#include "Squads.h" #include "line.h"
#include "random.h" #include "english.h"
#include "line.h" #include "Strategic Merc Handler.h"
#include "english.h" #include "strategic.h"
#include "Strategic Pathing.h" #include "message.h"
#include "Strategic Merc Handler.h" #include "Town Militia.h"
#include "strategic.h" #include "Animation Data.h"
#include "message.h" #include "Creature Spreading.h"
#include "Town Militia.h" #include "Strategic AI.h"
#include "Animation Data.h" #include "Morale.h"
#include "Creature Spreading.h" #include "Strategic Town Loyalty.h"
#include "Strategic AI.h" #include "GameSettings.h"
#include "SkillCheck.h" #include "Soldier macros.h"
#include "rt time defines.h" #include "strategicmap.h"
#include "Morale.h" #include "Quests.h"
#include "Strategic Town Loyalty.h" #include "Meanwhile.h"
#include "GameSettings.h" #include "Inventory Choosing.h"
#include "Soldier macros.h" #include "Game Event Hook.h"
#include "strategicmap.h" #include "Assignments.h"
#include "Quests.h" #include "Cheats.h"
#include "Meanwhile.h" #include "Map Information.h"
#include "Inventory Choosing.h" #include "MilitiaSquads.h"
#include "Game Event Hook.h" #include "interface Dialogue.h"
#include "Assignments.h" #include "AIInternals.h" // added by SANDRO
#include "Cheats.h" #include "Bullets.h" // HEADROCK HAM 5, for use with Bullet Impact.
#include "Map Information.h" #include "CampaignStats.h" // added by Flugente
#include "MilitiaSquads.h" #include "DynamicDialogue.h" // added by Flugente
// #include "Strategic AI.h" #include "MilitiaIndividual.h" // added by Flugente
#include "interface Dialogue.h" #include "Rebel Command.h"
#include "AIInternals.h" // added by SANDRO
#include "Bullets.h" // HEADROCK HAM 5, for use with Bullet Impact.
#include "CampaignStats.h" // added by Flugente
#include "DynamicDialogue.h" // added by Flugente
#include "MilitiaIndividual.h" // added by Flugente
#include "Rebel Command.h"
#include "Reinforcement.h" #include "Reinforcement.h"
//#define INVULNERABILITY //#define INVULNERABILITY
@@ -337,7 +330,7 @@ SOLDIERCELL *gpCivs = NULL;
SOLDIERCELL *gpEnemies = NULL; SOLDIERCELL *gpEnemies = NULL;
//Simple wrappers for autoresolve sounds that are played. //Simple wrappers for autoresolve sounds that are played.
void PlayAutoResolveSample( UINT32 usNum, UINT32 usRate, UINT32 ubVolume, UINT32 ubLoops, UINT32 uiPan ) static void PlayAutoResolveSample( UINT32 usNum, UINT32 usRate, UINT32 ubVolume, UINT32 ubLoops, UINT32 uiPan )
{ {
if( gpAR->fSound ) if( gpAR->fSound )
{ {
@@ -345,7 +338,7 @@ void PlayAutoResolveSample( UINT32 usNum, UINT32 usRate, UINT32 ubVolume, UINT32
} }
} }
void PlayAutoResolveSampleFromFile( STR8 szFileName, UINT32 usRate, UINT32 ubVolume, UINT32 ubLoops, UINT32 uiPan ) static void PlayAutoResolveSampleFromFile( STR8 szFileName, UINT32 usRate, UINT32 ubVolume, UINT32 ubLoops, UINT32 uiPan )
{ {
if( gpAR->fSound ) if( gpAR->fSound )
{ {
@@ -356,7 +349,7 @@ void PlayAutoResolveSampleFromFile( STR8 szFileName, UINT32 usRate, UINT32 ubVol
extern void ClearPreviousAIGroupAssignment( GROUP *pGroup ); extern void ClearPreviousAIGroupAssignment( GROUP *pGroup );
void EliminateAllMercs() static void EliminateAllMercs()
{ {
SOLDIERCELL *pAttacker = NULL; SOLDIERCELL *pAttacker = NULL;
INT32 i, iNum = 0; INT32 i, iNum = 0;
@@ -387,7 +380,7 @@ void EliminateAllMercs()
} }
} }
void EliminateAllFriendlies() static void EliminateAllFriendlies()
{ {
INT32 i; INT32 i;
if( gpAR ) if( gpAR )
@@ -503,7 +496,7 @@ void EliminateAllEnemies( UINT8 ubSectorX, UINT8 ubSectorY )
#define ORIG_RIGHT 92 #define ORIG_RIGHT 92
#define ORIG_BOTTOM 84 #define ORIG_BOTTOM 84
void DoTransitionFromPreBattleInterfaceToAutoResolve() static void DoTransitionFromPreBattleInterfaceToAutoResolve()
{ {
SGPRect SrcRect, DstRect; SGPRect SrcRect, DstRect;
UINT32 uiStartTime, uiCurrTime; UINT32 uiStartTime, uiCurrTime;
@@ -734,7 +727,7 @@ UINT32 AutoResolveScreenHandle()
return AUTORESOLVE_SCREEN; return AUTORESOLVE_SCREEN;
} }
void RefreshMerc( SOLDIERTYPE *pSoldier ) static void RefreshMerc( SOLDIERTYPE *pSoldier )
{ {
pSoldier->stats.bLife = pSoldier->stats.bLifeMax; pSoldier->stats.bLife = pSoldier->stats.bLifeMax;
pSoldier->bBleeding = 0; pSoldier->bBleeding = 0;
@@ -750,7 +743,7 @@ void RefreshMerc( SOLDIERTYPE *pSoldier )
//Now assign the pSoldier->ubGroupIDs for the enemies, so we know where to remove them. Start with //Now assign the pSoldier->ubGroupIDs for the enemies, so we know where to remove them. Start with
//stationary groups first. //stationary groups first.
void AssociateEnemiesWithStrategicGroups() static void AssociateEnemiesWithStrategicGroups()
{ {
SECTORINFO *pSector; SECTORINFO *pSector;
GROUP *pGroup; GROUP *pGroup;
@@ -1193,7 +1186,7 @@ void CalculateSoldierCells( BOOLEAN fReset )
} }
INT32 DetermineCellID( SOLDIERCELL *pCell ) static INT32 DetermineCellID( SOLDIERCELL *pCell )
{ {
INT32 iIndex; INT32 iIndex;
@@ -1212,7 +1205,7 @@ INT32 DetermineCellID( SOLDIERCELL *pCell )
return 0; return 0;
} }
BOOLEAN IsItAllowedToRender( SOLDIERCELL *pCell ) static BOOLEAN IsItAllowedToRender( SOLDIERCELL *pCell )
{ {
INT32 iID = DetermineCellID( pCell ); INT32 iID = DetermineCellID( pCell );
@@ -1355,7 +1348,7 @@ void RenderSoldierCellBars( SOLDIERCELL *pCell )
ColorFillVideoSurfaceArea( FRAME_BUFFER, pCell->xp+46, iStartY, pCell->xp+47, pCell->yp+29, Get16BPPColor( FROMRGB( 8, 107, 8 ) ) ); ColorFillVideoSurfaceArea( FRAME_BUFFER, pCell->xp+46, iStartY, pCell->xp+47, pCell->yp+29, Get16BPPColor( FROMRGB( 8, 107, 8 ) ) );
} }
void BuildInterfaceBuffer() static void BuildInterfaceBuffer()
{ {
VSURFACE_DESC vs_desc; VSURFACE_DESC vs_desc;
UINT16 usUselessWidth, usUselessHeight; UINT16 usUselessWidth, usUselessHeight;
@@ -1437,7 +1430,7 @@ void BuildInterfaceBuffer()
SetClippingRect( &ClipRect ); SetClippingRect( &ClipRect );
} }
void ExpandWindow() static void ExpandWindow()
{ {
SGPRect OldRect; SGPRect OldRect;
UINT32 uiDestPitchBYTES; UINT32 uiDestPitchBYTES;
@@ -1532,7 +1525,7 @@ void ExpandWindow()
} }
OBJECTTYPE* FindMedicalKit() static OBJECTTYPE* FindMedicalKit()
{ {
INT32 i; INT32 i;
INT32 iSlot; INT32 iSlot;
@@ -1547,7 +1540,7 @@ OBJECTTYPE* FindMedicalKit()
return NULL; return NULL;
} }
UINT32 AutoBandageMercs() static UINT32 AutoBandageMercs()
{ {
INT32 i, iBest; INT32 i, iBest;
UINT32 uiPointsUsed, uiCurrPointsUsed, uiMaxPointsUsed, uiParallelPointsUsed; UINT32 uiPointsUsed, uiCurrPointsUsed, uiMaxPointsUsed, uiParallelPointsUsed;
@@ -2488,6 +2481,12 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Autoresolve2");
DeleteVideoObjectFromIndex( gpAR->iIndent ); DeleteVideoObjectFromIndex( gpAR->iIndent );
DeleteVideoSurfaceFromIndex( gpAR->iInterfaceBuffer ); DeleteVideoSurfaceFromIndex( gpAR->iInterfaceBuffer );
// Load necessary mapinfo to place corpses
CHAR8 bFilename[50];
INT32 worldRows, worldCols;
GetMapFileName(gpAR->ubSectorX, gpAR->ubSectorY, 0, bFilename, TRUE, TRUE);
LoadWorldInfoForAutoResolve(bFilename, worldRows, worldCols);
if( fDeleteForGood ) if( fDeleteForGood )
{ //Delete the soldier instances -- done when we are completely finished. { //Delete the soldier instances -- done when we are completely finished.
@@ -2526,7 +2525,7 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Autoresolve2");
RemoveCharacterFromSquads( gpMercs[ i ].pSoldier ); RemoveCharacterFromSquads( gpMercs[ i ].pSoldier );
ChangeSoldiersAssignment( gpMercs[ i ].pSoldier, ASSIGNMENT_DEAD ); ChangeSoldiersAssignment( gpMercs[ i ].pSoldier, ASSIGNMENT_DEAD );
AddDeadSoldierToUnLoadedSector( gpAR->ubSectorX, gpAR->ubSectorY, 0, gpMercs[ i ].pSoldier, RandomGridNo(), ADD_DEAD_SOLDIER_TO_SWEETSPOT ); AddDeadSoldierToUnLoadedSector( gpAR->ubSectorX, gpAR->ubSectorY, 0, gpMercs[ i ].pSoldier, RandomGridNoUnloadedSector(worldRows, worldCols), ADD_DEAD_SOLDIER_TO_SWEETSPOT );
} }
else if( gpAR->ubBattleStatus == BATTLE_SURRENDERED || gpAR->ubBattleStatus == BATTLE_CAPTURED ) else if( gpAR->ubBattleStatus == BATTLE_SURRENDERED || gpAR->ubBattleStatus == BATTLE_CAPTURED )
{ {
@@ -2631,7 +2630,8 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Autoresolve2");
} }
// Flugente: drop sector equipment // Flugente: drop sector equipment
gpCivs[ i ].pSoldier->DropSectorEquipment(); const auto gridno = RandomGridNoUnloadedSector(worldRows, worldCols);
gpCivs[ i ].pSoldier->DropSectorEquipment(gridno);
if( fDeleteForGood && gpCivs[ i ].pSoldier->stats.bLife < OKLIFE/2 ) if( fDeleteForGood && gpCivs[ i ].pSoldier->stats.bLife < OKLIFE/2 )
{ {
@@ -2656,7 +2656,7 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Autoresolve2");
UpdateMilitia( militia ); UpdateMilitia( militia );
} }
AddDeadSoldierToUnLoadedSector( gpAR->ubSectorX, gpAR->ubSectorY, 0, gpCivs[ i ].pSoldier, RandomGridNo(), ADD_DEAD_SOLDIER_TO_SWEETSPOT ); AddDeadSoldierToUnLoadedSector( gpAR->ubSectorX, gpAR->ubSectorY, 0, gpCivs[ i ].pSoldier, gridno, ADD_DEAD_SOLDIER_TO_SWEETSPOT );
StrategicRemoveMilitiaFromSector( gpCivs[ i ].pSoldier->sSectorX, gpCivs[ i ].pSoldier->sSectorY, ubCurrentRank, 1 ); StrategicRemoveMilitiaFromSector( gpCivs[ i ].pSoldier->sSectorX, gpCivs[ i ].pSoldier->sSectorY, ubCurrentRank, 1 );
if( ProcessLoyalty() ) if( ProcessLoyalty() )
@@ -2688,7 +2688,8 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Autoresolve2");
TrackEnemiesKilled( ENEMY_KILLED_IN_AUTO_RESOLVE, gpEnemies[ i ].pSoldier->ubSoldierClass ); //add casualty to some statistic TrackEnemiesKilled( ENEMY_KILLED_IN_AUTO_RESOLVE, gpEnemies[ i ].pSoldier->ubSoldierClass ); //add casualty to some statistic
if( ProcessLoyalty() )HandleGlobalLoyaltyEvent( GLOBAL_LOYALTY_ENEMY_KILLED, gpAR->ubSectorX, gpAR->ubSectorY, 0 ); if( ProcessLoyalty() )HandleGlobalLoyaltyEvent( GLOBAL_LOYALTY_ENEMY_KILLED, gpAR->ubSectorX, gpAR->ubSectorY, 0 );
ProcessQueenCmdImplicationsOfDeath( gpEnemies[ i ].pSoldier ); ProcessQueenCmdImplicationsOfDeath( gpEnemies[ i ].pSoldier );
AddDeadSoldierToUnLoadedSector( gpAR->ubSectorX, gpAR->ubSectorY, 0, gpEnemies[ i ].pSoldier, RandomGridNo(), ADD_DEAD_SOLDIER_TO_SWEETSPOT ); const auto gridno = RandomGridNoUnloadedSector(worldRows, worldCols);
AddDeadSoldierToUnLoadedSector( gpAR->ubSectorX, gpAR->ubSectorY, 0, gpEnemies[ i ].pSoldier, gridno, ADD_DEAD_SOLDIER_TO_SWEETSPOT);
} }
} }
} }
@@ -3730,7 +3731,7 @@ void RenderSoldierCellHealth( SOLDIERCELL *pCell )
mprintf( xp, yp, pStr ); mprintf( xp, yp, pStr );
} }
UINT8 GetUnusedMercProfileID() static UINT8 GetUnusedMercProfileID()
{ {
UINT8 ubRandom=0; UINT8 ubRandom=0;
INT32 i; INT32 i;
@@ -3825,7 +3826,7 @@ void DetermineTeamLeader( BOOLEAN fFriendlyTeam )
} }
} }
void ResetNextAttackCounter( SOLDIERCELL *pCell ) static void ResetNextAttackCounter( SOLDIERCELL *pCell )
{ {
pCell->usNextAttack = min( 1000 - pCell->usAttack, 800 ); pCell->usNextAttack = min( 1000 - pCell->usAttack, 800 );
pCell->usNextAttack = (UINT16)(1000 + pCell->usNextAttack * 5 + PreRandom( 2000 - pCell->usAttack ) ); pCell->usNextAttack = (UINT16)(1000 + pCell->usNextAttack * 5 + PreRandom( 2000 - pCell->usAttack ) );
@@ -3835,7 +3836,7 @@ void ResetNextAttackCounter( SOLDIERCELL *pCell )
} }
} }
FLOAT CalcClassBonusOrPenalty( SOLDIERTYPE *pSoldier ) static FLOAT CalcClassBonusOrPenalty( SOLDIERTYPE *pSoldier )
{ {
switch( pSoldier->ubSoldierClass ) switch( pSoldier->ubSoldierClass )
{ {
@@ -4115,7 +4116,7 @@ void DrawDebugText( SOLDIERCELL *pCell )
} }
} }
SOLDIERCELL* ChooseTarget( SOLDIERCELL *pAttacker ) static SOLDIERCELL* ChooseTarget( SOLDIERCELL *pAttacker )
{ {
INT32 iAvailableTargets; INT32 iAvailableTargets;
INT32 index; INT32 index;
@@ -4185,7 +4186,7 @@ SOLDIERCELL* ChooseTarget( SOLDIERCELL *pAttacker )
return NULL; return NULL;
} }
BOOLEAN FireAShot( SOLDIERCELL *pAttacker ) static BOOLEAN FireAShot( SOLDIERCELL *pAttacker )
{ {
OBJECTTYPE *pItem; OBJECTTYPE *pItem;
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
@@ -4239,7 +4240,7 @@ BOOLEAN FireAShot( SOLDIERCELL *pAttacker )
return FALSE; return FALSE;
} }
BOOLEAN FireTankCannon( SOLDIERCELL *pAttacker ) static BOOLEAN FireTankCannon( SOLDIERCELL *pAttacker )
{ {
OBJECTTYPE *pItem; OBJECTTYPE *pItem;
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
@@ -4281,7 +4282,7 @@ BOOLEAN FireTankCannon( SOLDIERCELL *pAttacker )
return FALSE; return FALSE;
} }
BOOLEAN FireAntiTankWeapon( SOLDIERCELL *pAttacker ) static BOOLEAN FireAntiTankWeapon( SOLDIERCELL *pAttacker )
{ {
OBJECTTYPE *pItem; OBJECTTYPE *pItem;
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
@@ -4336,7 +4337,7 @@ BOOLEAN FireAntiTankWeapon( SOLDIERCELL *pAttacker )
return FALSE; return FALSE;
} }
BOOLEAN AttackerHasKnife( SOLDIERCELL *pAttacker ) static BOOLEAN AttackerHasKnife( SOLDIERCELL *pAttacker )
{ {
UINT8 invsize = pAttacker->pSoldier->inv.size(); UINT8 invsize = pAttacker->pSoldier->inv.size();
for( UINT8 i = 0; i < invsize; ++i ) for( UINT8 i = 0; i < invsize; ++i )
@@ -4351,7 +4352,7 @@ BOOLEAN AttackerHasKnife( SOLDIERCELL *pAttacker )
return FALSE; return FALSE;
} }
BOOLEAN TargetHasLoadedGun( SOLDIERTYPE *pSoldier ) static BOOLEAN TargetHasLoadedGun( SOLDIERTYPE *pSoldier )
{ {
OBJECTTYPE *pItem; OBJECTTYPE *pItem;
UINT8 invsize = pSoldier->inv.size(); UINT8 invsize = pSoldier->inv.size();
@@ -4373,7 +4374,7 @@ BOOLEAN TargetHasLoadedGun( SOLDIERTYPE *pSoldier )
return FALSE; return FALSE;
} }
void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget ) static void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget )
{ {
INT16 sAttack; INT16 sAttack;
INT16 sDefence; INT16 sDefence;
@@ -4993,7 +4994,7 @@ void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget )
} }
} }
void TargetHitCallback( SOLDIERCELL *pTarget, INT32 index ) static void TargetHitCallback( SOLDIERCELL *pTarget, INT32 index )
{ {
INT32 iNewLife; INT32 iNewLife;
SOLDIERCELL *pAttacker; SOLDIERCELL *pAttacker;
@@ -5307,7 +5308,7 @@ void TargetHitCallback( SOLDIERCELL *pTarget, INT32 index )
pTarget->uiFlags |= CELL_HITBYATTACKER | CELL_DIRTY; pTarget->uiFlags |= CELL_HITBYATTACKER | CELL_DIRTY;
} }
void Delay( UINT32 uiMilliseconds ) static void Delay( UINT32 uiMilliseconds )
{ {
INT32 iTime; INT32 iTime;
iTime = GetJA2Clock(); iTime = GetJA2Clock();
@@ -6014,7 +6015,7 @@ void AutoResolveMilitiaDropAndPromote()
} }
// Flugente: drop sector equipment // Flugente: drop sector equipment
gpCivs[i].pSoldier->DropSectorEquipment( ); gpCivs[i].pSoldier->DropSectorEquipment( NOWHERE );
if ( gpCivs[i].pSoldier->stats.bLife < OKLIFE / 2 ) if ( gpCivs[i].pSoldier->stats.bLife < OKLIFE / 2 )
{ {
+2 -5
View File
@@ -3,8 +3,6 @@
#include "Campaign Init.h" #include "Campaign Init.h"
#include "random.h" #include "random.h"
#include "Campaign Types.h" #include "Campaign Types.h"
#include "Queen Command.h"
#include "Overhead.h"
#include "Strategic Movement.h" #include "Strategic Movement.h"
#include "Strategic Status.h" #include "Strategic Status.h"
#include "GameSettings.h" #include "GameSettings.h"
@@ -15,7 +13,6 @@
#include "Tactical Save.h" #include "Tactical Save.h"
#include "connect.h" #include "connect.h"
#include <vfs/Core/vfs.h>
#include "XMLWriter.h" #include "XMLWriter.h"
#include "UndergroundInit.h" #include "UndergroundInit.h"
@@ -309,7 +306,7 @@ void InitKnowFacilitiesFlags( )
//Mobile groups are handled separately from sectors, because they are on the move. //Mobile groups are handled separately from sectors, because they are on the move.
void GeneratePatrolGroups() static void GeneratePatrolGroups()
{ {
GROUP *pGroup; GROUP *pGroup;
UINT8 ubNumTroops; UINT8 ubNumTroops;
@@ -527,7 +524,7 @@ void BuildUndergroundSectorInfoList()
// Lesh: this function creates randomized world // Lesh: this function creates randomized world
// every sector can be randomized between common and alternative, chances 50/50 // every sector can be randomized between common and alternative, chances 50/50
// randomization of individual sectors can be switched off via array RandomSector[] // randomization of individual sectors can be switched off via array RandomSector[]
void InitWorld() static void InitWorld()
{ {
INT16 sSectorCounter; INT16 sSectorCounter;
+9 -14
View File
@@ -24,16 +24,11 @@
#include "Animation Data.h" #include "Animation Data.h"
#include "opplist.h" #include "opplist.h"
#include "Meanwhile.h" #include "Meanwhile.h"
#include "Strategic AI.h"
#include "MessageBoxScreen.h"
#include "Map Information.h" #include "Map Information.h"
#include "Queen Command.h" #include "Queen Command.h"
#include "ai.h" // added by Flugente #include "ai.h" // added by Flugente
#include "Isometric Utils.h" // added by Flugente
#include "Soldier Create.h" // added by Flugente #include "Soldier Create.h" // added by Flugente
#include "Player Command.h" // added by Flugente
#include "Strategic Mines.h"
#include "connect.h" #include "connect.h"
#include "GameInitOptionsScreen.h" #include "GameInitOptionsScreen.h"
@@ -160,7 +155,7 @@ extern SECTOR_EXT_DATA SectorExternalData[256][4];
//extern MINE_STATUS_TYPE gMineStatus[ MAX_NUMBER_OF_MINES ]; //extern MINE_STATUS_TYPE gMineStatus[ MAX_NUMBER_OF_MINES ];
CREATURE_DIRECTIVE* NewDirective( UINT8 ubSectorID, UINT8 ubSectorZ, UINT8 ubCreatureHabitat ) static CREATURE_DIRECTIVE* NewDirective( UINT8 ubSectorID, UINT8 ubSectorZ, UINT8 ubCreatureHabitat )
{ {
CREATURE_DIRECTIVE *curr; CREATURE_DIRECTIVE *curr;
UINT8 ubSectorX, ubSectorY; UINT8 ubSectorX, ubSectorY;
@@ -278,7 +273,7 @@ void InitLairGrumm()
} }
*/ */
void InitLair(INT32 iChosenMine) static void InitLair(INT32 iChosenMine)
{ {
CREATURE_DIRECTIVE *curr; CREATURE_DIRECTIVE *curr;
giLairID = iChosenMine; giLairID = iChosenMine;
@@ -517,7 +512,7 @@ void InitCreatureQuest()
} }
} }
void AddCreatureToNode( CREATURE_DIRECTIVE *node ) static void AddCreatureToNode( CREATURE_DIRECTIVE *node )
{ {
node->pLevel->ubNumCreatures++; node->pLevel->ubNumCreatures++;
@@ -529,7 +524,7 @@ void AddCreatureToNode( CREATURE_DIRECTIVE *node )
} }
} }
BOOLEAN PlaceNewCreature( CREATURE_DIRECTIVE *node, INT32 iDistance ) static BOOLEAN PlaceNewCreature( CREATURE_DIRECTIVE *node, INT32 iDistance )
{ {
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"CreatureSpreading1"); DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"CreatureSpreading1");
if( !node ) if( !node )
@@ -677,7 +672,7 @@ void DecayCreatures()
} }
void AddCreaturesToBattle( UINT8 ubNumYoungMales, UINT8 ubNumYoungFemales, UINT8 ubNumAdultMales, UINT8 ubNumAdultFemales ) static void AddCreaturesToBattle( UINT8 ubNumYoungMales, UINT8 ubNumYoungFemales, UINT8 ubNumAdultMales, UINT8 ubNumAdultFemales )
{ {
INT32 iRandom; INT32 iRandom;
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
@@ -764,7 +759,7 @@ void AddCreaturesToBattle( UINT8 ubNumYoungMales, UINT8 ubNumYoungFemales, UINT8
AllTeamsLookForAll( FALSE ); AllTeamsLookForAll( FALSE );
} }
void AddCreaturesToBattle_Other( UINT8 ubNum ) static void AddCreaturesToBattle_Other( UINT8 ubNum )
{ {
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
MAPEDGEPOINTINFO MapEdgepointInfo = {}; MAPEDGEPOINTINFO MapEdgepointInfo = {};
@@ -851,7 +846,7 @@ void AddCreaturesToBattle_Other( UINT8 ubNum )
AllTeamsLookForAll( FALSE ); AllTeamsLookForAll( FALSE );
} }
void ChooseTownSectorToAttack( UINT8 ubSectorID, BOOLEAN fOverrideTest ) static void ChooseTownSectorToAttack( UINT8 ubSectorID, BOOLEAN fOverrideTest )
{ {
INT32 iRandom, i; INT32 iRandom, i;
UINT8 ubSectorX, ubSectorY; UINT8 ubSectorX, ubSectorY;
@@ -1482,7 +1477,7 @@ void ChooseCreatureQuestStartDay()
} }
} }
void DeleteDirectiveNode( CREATURE_DIRECTIVE **node ) static void DeleteDirectiveNode( CREATURE_DIRECTIVE **node )
{ {
if( (*node)->next ) if( (*node)->next )
DeleteDirectiveNode( &((*node)->next) ); DeleteDirectiveNode( &((*node)->next) );
+2 -6
View File
@@ -12,7 +12,6 @@
#include "Facilities.h" #include "Facilities.h"
#include "Soldier Control.h" #include "Soldier Control.h"
#include "Map Screen Interface.h" #include "Map Screen Interface.h"
#include "Overhead.h"
#include "Assignments.h" #include "Assignments.h"
#include "GameSettings.h" #include "GameSettings.h"
#include "LaptopSave.h" #include "LaptopSave.h"
@@ -29,10 +28,7 @@
#include "Interface.h" #include "Interface.h"
#include "message.h" #include "message.h"
#include "Morale.h" #include "Morale.h"
#include "Points.h"
#include "Soldier Control.h"
#include "Isometric Utils.h" #include "Isometric Utils.h"
#include "MilitiaSquads.h"
#include "Tactical Save.h" #include "Tactical Save.h"
#include <random> #include <random>
@@ -1997,8 +1993,8 @@ INT32 GetTotalFacilityHourlyCosts( BOOLEAN fPositive )
pSoldier = gCharactersList[ ubCounter ].usSolID; pSoldier = gCharactersList[ ubCounter ].usSolID;
// Is character truly valid? // Is character truly valid?
if( !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && if( pSoldier != NULL && !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) &&
pSoldier->bSectorZ == 0 && pSoldier != NULL && pSoldier->bSectorZ == 0 &&
pSoldier->stats.bLife >= OKLIFE && pSoldier->stats.bLife >= OKLIFE &&
!(pSoldier->flags.fMercAsleep) ) !(pSoldier->flags.fMercAsleep) )
{ {
+21 -29
View File
@@ -1,28 +1,24 @@
#include "sgp.h" #include "sgp.h"
#include "Game Clock.h" #include "Game Clock.h"
#include "Font.h" #include "Font.h"
#include "Render Dirty.h" #include "Render Dirty.h"
#include "Timer Control.h" #include "Timer Control.h"
#include "Overhead.h" #include "Overhead.h"
#include "environment.h" #include "environment.h"
#include "Game Clock.h" #include "message.h"
#include "message.h" #include <mousesystem.h>
#include "Game Events.h" #include "MercTextBox.h"
#include "Assignments.h" #include "renderworld.h"
#include "MercTextBox.h" #include "lighting.h"
#include "renderworld.h" #include "Map Screen Interface.h"
#include "lighting.h" #include "Event Pump.h"
#include "Map Screen Interface.h" #include "Text.h"
#include "PreBattle Interface.h" #include "Interface Control.h"
#include "Event Pump.h" #include "Map Screen Interface Map.h"
#include "Text.h" #include "Map Screen Interface Bottom.h"
#include "Interface Control.h" #include "gamescreen.h"
#include "Map Screen Interface Map.h" #include "Map Information.h"
#include "Map Screen Interface Bottom.h" #include "GameSettings.h"
#include "gamescreen.h"
#include "Map Information.h"
#include "GameSettings.h"
#include "LuaInitNPCs.h" #include "LuaInitNPCs.h"
//#define DEBUG_GAME_CLOCK //#define DEBUG_GAME_CLOCK
@@ -253,10 +249,6 @@ void AdvanceClock( UINT8 ubWarpCode )
guiDay = ( guiGameClock / NUM_SEC_IN_DAY ); guiDay = ( guiGameClock / NUM_SEC_IN_DAY );
guiHour = ( guiGameClock - ( guiDay * NUM_SEC_IN_DAY ) ) / NUM_SEC_IN_HOUR; guiHour = ( guiGameClock - ( guiDay * NUM_SEC_IN_DAY ) ) / NUM_SEC_IN_HOUR;
guiMin = ( guiGameClock - ( ( guiDay * NUM_SEC_IN_DAY ) + ( guiHour * NUM_SEC_IN_HOUR ) ) ) / NUM_SEC_IN_MIN; guiMin = ( guiGameClock - ( ( guiDay * NUM_SEC_IN_DAY ) + ( guiHour * NUM_SEC_IN_HOUR ) ) ) / NUM_SEC_IN_MIN;
uiHourLua = guiHour;
uiDayLua = guiDay;
uiMinLua = guiMin;
swprintf( WORLDTIMESTR, L"%s %d, %02d:%02d", gpGameClockString[ STR_GAMECLOCK_DAY_NAME ], guiDay, guiHour, guiMin ); swprintf( WORLDTIMESTR, L"%s %d, %02d:%02d", gpGameClockString[ STR_GAMECLOCK_DAY_NAME ], guiDay, guiHour, guiMin );
+10 -18
View File
@@ -4,7 +4,6 @@
#include "environment.h" #include "environment.h"
#include "Ambient Control.h" #include "Ambient Control.h"
#include "Quests.h" #include "Quests.h"
// #include "Sound Control.h"
#include "AimMembers.h" #include "AimMembers.h"
#include "Strategic Event Handler.h" #include "Strategic Event Handler.h"
#include "BobbyR.h" #include "BobbyR.h"
@@ -17,14 +16,12 @@
#include "Strategic Movement.h" #include "Strategic Movement.h"
#include "Assignments.h" #include "Assignments.h"
#include "Strategic Mines.h" #include "Strategic Mines.h"
#include "Strategic Town Loyalty.h"
#include "message.h" #include "message.h"
#include "Map Screen Interface.h" #include "Map Screen Interface.h"
#include "Map Screen Helicopter.h" #include "Map Screen Helicopter.h"
#include "Scheduling.h" #include "Scheduling.h"
#include "Arms Dealer Init.h" #include "Arms Dealer Init.h"
#include "strategic town reputation.h" #include "strategic town reputation.h"
#include "Air Raid.h"
#include "Meanwhile.h" #include "Meanwhile.h"
#include "Overhead.h" #include "Overhead.h"
#include "random.h" #include "random.h"
@@ -32,7 +29,6 @@
#include "Strategic AI.h" #include "Strategic AI.h"
#include "Merc Contract.h" #include "Merc Contract.h"
#include "Strategic Status.h" #include "Strategic Status.h"
#include "INIReader.h"
#include "GameSettings.h" #include "GameSettings.h"
#include "english.h" #include "english.h"
#include "input.h" #include "input.h"
@@ -50,7 +46,6 @@
#include "Rebel Command.h" #include "Rebel Command.h"
#include "interface Dialogue.h" #include "interface Dialogue.h"
#include "connect.h"
#ifdef JA2UB #ifdef JA2UB
#include "Explosion Control.h" #include "Explosion Control.h"
@@ -85,7 +80,7 @@ void CrippledVersionEndGameCheck();
BOOLEAN DelayEventIfBattleInProgress( STRATEGICEVENT *pEvent ) static BOOLEAN DelayEventIfBattleInProgress( STRATEGICEVENT *pEvent )
{ {
STRATEGICEVENT *pNewEvent; STRATEGICEVENT *pNewEvent;
if( gTacticalStatus.fEnemyInSector ) if( gTacticalStatus.fEnemyInSector )
@@ -215,7 +210,7 @@ BOOLEAN ExecuteStrategicEvent( STRATEGICEVENT *pEvent )
#ifdef JA2UB #ifdef JA2UB
//No JA25 UB //No JA25 UB
#else #else
AddEmail(MERC_INTRO, MERC_INTRO_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin( ), -1, -1 ,TYPE_EMAIL_EMAIL_EDT ); AddEmail(MERC_INTRO, MERC_INTRO_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_SPECK_INTRO);
#endif #endif
} }
break; break;
@@ -492,7 +487,7 @@ BOOLEAN ExecuteStrategicEvent( STRATEGICEVENT *pEvent )
// No PCM in UB // No PCM in UB
#else #else
case EVENT_PMC_EMAIL: case EVENT_PMC_EMAIL:
AddEmail( PMC_INTRO, PMC_INTRO_LENGTH, PMC, GetWorldTotalMin( ), -1, -1, TYPE_EMAIL_EMAIL_EDT ); AddEmail(PMC_INTRO, PMC_INTRO_LENGTH, PMC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_KERBERUS_OFFER);
break; break;
#endif #endif
@@ -508,16 +503,14 @@ BOOLEAN ExecuteStrategicEvent( STRATEGICEVENT *pEvent )
gMercProfiles[MARIA].bMercStatus != MERC_IS_DEAD && gMercProfiles[ANGEL].bMercStatus != MERC_IS_DEAD ) gMercProfiles[MARIA].bMercStatus != MERC_IS_DEAD && gMercProfiles[ANGEL].bMercStatus != MERC_IS_DEAD )
{ {
StartQuest( QUEST_KINGPIN_ANGEL_MARIA, gWorldSectorX, gWorldSectorY ); StartQuest( QUEST_KINGPIN_ANGEL_MARIA, gWorldSectorX, gWorldSectorY );
AddEmail(KINGPIN_BOUNTY_INITIAL, KINGPIN_BOUNTY_INITIAL_LENGTH, KING_PIN, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_KINGPIN_JOBOPPORTUNITY);
AddEmail( KINGPIN_BOUNTY_INITIAL, KINGPIN_BOUNTY_INITIAL_LENGTH, KING_PIN, GetWorldTotalMin( ), -1, -1, TYPE_EMAIL_EMAIL_EDT );
} }
break; break;
case EVENT_KINGPIN_BOUNTY_END_KILLEDTHEM: case EVENT_KINGPIN_BOUNTY_END_KILLEDTHEM:
if ( gMercProfiles[KINGPIN].bMercStatus != MERC_IS_DEAD && !CheckFact( FACT_KINGPIN_DEAD, NO_PROFILE ) && !CheckFact( FACT_KINGPIN_IS_ENEMY, NO_PROFILE ) ) if ( gMercProfiles[KINGPIN].bMercStatus != MERC_IS_DEAD && !CheckFact( FACT_KINGPIN_DEAD, NO_PROFILE ) && !CheckFact( FACT_KINGPIN_IS_ENEMY, NO_PROFILE ) )
{ {
AddEmail( KINGPIN_BOUNTY_KINGPIN_REWARD, KINGPIN_BOUNTY_KINGPIN_REWARD_LENGTH, KING_PIN, GetWorldTotalMin( ), -1, -1, TYPE_EMAIL_EMAIL_EDT ); AddEmail(KINGPIN_BOUNTY_KINGPIN_REWARD, KINGPIN_BOUNTY_KINGPIN_REWARD_LENGTH, KING_PIN, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_KINGPIN_WELLDONE);
// also authorise payment from kingpin to the player // also authorise payment from kingpin to the player
AddTransactionToPlayersBook( ANONYMOUS_DEPOSIT, 0, GetWorldTotalMin( ), 10000 ); AddTransactionToPlayersBook( ANONYMOUS_DEPOSIT, 0, GetWorldTotalMin( ), 10000 );
} }
@@ -533,14 +526,13 @@ BOOLEAN ExecuteStrategicEvent( STRATEGICEVENT *pEvent )
if ( gMercProfiles[MARIA].bMercStatus != MERC_IS_DEAD && gMercProfiles[ANGEL].bMercStatus != MERC_IS_DEAD if ( gMercProfiles[MARIA].bMercStatus != MERC_IS_DEAD && gMercProfiles[ANGEL].bMercStatus != MERC_IS_DEAD
&& CheckFact( FACT_BOUNTYHUNTER_KILLED_1, NO_PROFILE ) && CheckFact( FACT_BOUNTYHUNTER_KILLED_2, NO_PROFILE ) ) && CheckFact( FACT_BOUNTYHUNTER_KILLED_1, NO_PROFILE ) && CheckFact( FACT_BOUNTYHUNTER_KILLED_2, NO_PROFILE ) )
{ {
AddEmail( KINGPIN_BOUNTY_ANGEL_THANKS, KINGPIN_BOUNTY_ANGEL_THANKS_LENGTH, ANGEL_DASILVA, GetWorldTotalMin( ), -1, -1, TYPE_EMAIL_EMAIL_EDT ); AddEmail(KINGPIN_BOUNTY_ANGEL_THANKS, KINGPIN_BOUNTY_ANGEL_THANKS_LENGTH, ANGEL_DASILVA, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_DASILVA_THANKYOU);
AddEmail(KINGPIN_BOUNTY_TARGET_GOTAWAY, KINGPIN_BOUNTY_TARGET_GOTAWAY_LENGTH, KING_PIN, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_KINGPIN_FAILUREOBSTACLES);
AddEmail( KINGPIN_BOUNTY_TARGET_GOTAWAY, KINGPIN_BOUNTY_TARGET_GOTAWAY_LENGTH, KING_PIN, GetWorldTotalMin( ), -1, -1, TYPE_EMAIL_EMAIL_EDT );
} }
// we can assume that the bounty hunters for to them first - Kingpin sends an email and states that someone else finished the job // we can assume that the bounty hunters for to them first - Kingpin sends an email and states that someone else finished the job
else if ( gMercProfiles[KINGPIN].bMercStatus != MERC_IS_DEAD && !CheckFact( FACT_KINGPIN_DEAD, NO_PROFILE ) && !CheckFact( FACT_KINGPIN_IS_ENEMY, NO_PROFILE ) ) else if ( gMercProfiles[KINGPIN].bMercStatus != MERC_IS_DEAD && !CheckFact( FACT_KINGPIN_DEAD, NO_PROFILE ) && !CheckFact( FACT_KINGPIN_IS_ENEMY, NO_PROFILE ) )
{ {
AddEmail( KINGPIN_BOUNTY_BH_GOTTARGET, KINGPIN_BOUNTY_BH_GOTTARGET_LENGTH, KING_PIN, GetWorldTotalMin( ), -1, -1, TYPE_EMAIL_EMAIL_EDT ); AddEmail(KINGPIN_BOUNTY_BH_GOTTARGET, KINGPIN_BOUNTY_BH_GOTTARGET_LENGTH, KING_PIN, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_KINGPIN_FAILURE);
} }
// in any case, this quest is now over // in any case, this quest is now over
@@ -606,7 +598,7 @@ BOOLEAN ExecuteStrategicEvent( STRATEGICEVENT *pEvent )
#ifndef JA2UB #ifndef JA2UB
case EVENT_MILITIAROSTER_EMAIL: case EVENT_MILITIAROSTER_EMAIL:
AddEmail( MILITIAROSTER_INTRO, MILITIAROSTER_INTRO_LENGTH, MAIL_ENRICO, GetWorldTotalMin( ), -1, -1, TYPE_EMAIL_EMAIL_EDT ); AddEmail(MILITIAROSTER_INTRO, MILITIAROSTER_INTRO_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_ENRICO_MILITIA_WEBSITE);
break; break;
#endif #endif
@@ -633,7 +625,7 @@ BOOLEAN ExecuteStrategicEvent( STRATEGICEVENT *pEvent )
#ifndef JA2UB #ifndef JA2UB
case EVENT_INTEL_ENRICO_EMAIL: case EVENT_INTEL_ENRICO_EMAIL:
AddEmail( INTEL_ENRICO_INTRO, INTEL_ENRICO_INTRO_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT ); AddEmail(INTEL_ENRICO_INTRO, INTEL_ENRICO_INTRO_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_ENRICO_INTEL);
break; break;
#endif #endif
+1 -1
View File
@@ -214,7 +214,7 @@ BOOLEAN DeleteEventsWithDeletionPending()
} }
void AdjustClockToEventStamp( STRATEGICEVENT *pEvent, UINT32 *puiAdjustment ) static void AdjustClockToEventStamp( STRATEGICEVENT *pEvent, UINT32 *puiAdjustment )
{ {
UINT32 uiDiff; UINT32 uiDiff;
+2 -11
View File
@@ -9,10 +9,8 @@
#include "Soldier Profile.h" #include "Soldier Profile.h"
#include "strategicmap.h" #include "strategicmap.h"
#include "Game Init.h" #include "Game Init.h"
#include "Animation Data.h"
#include "finances.h" #include "finances.h"
#include "Soldier Create.h" #include "Soldier Create.h"
#include "Soldier Init List.h"
#include "strategic.h" #include "strategic.h"
#include "history.h" #include "history.h"
#include "merc entering.h" #include "merc entering.h"
@@ -31,12 +29,10 @@
#include "Creature Spreading.h" #include "Creature Spreading.h"
#include "Quests.h" #include "Quests.h"
#include "Strategic AI.h" #include "Strategic AI.h"
#include "LaptopSave.h"
#include "AimMembers.h" #include "AimMembers.h"
#include "Dialogue Control.h" #include "Dialogue Control.h"
#include "NPC.h" #include "NPC.h"
#include "GameSettings.h" #include "GameSettings.h"
#include "interface Dialogue.h"
#include "Map Screen Interface Border.h" #include "Map Screen Interface Border.h"
#include "Map Screen Helicopter.h" #include "Map Screen Helicopter.h"
#include "Vehicles.h" #include "Vehicles.h"
@@ -51,22 +47,17 @@
// HEADROCK HAM 3.6: Include for adding facility debt reset // HEADROCK HAM 3.6: Include for adding facility debt reset
#include "Facilities.h" #include "Facilities.h"
// HEADROCK HAM 4: Include for initializing Manual Restrictions // HEADROCK HAM 4: Include for initializing Manual Restrictions
#include "MilitiaSquads.h"
#include "Map Screen Interface Map Inventory.h"//dnl ch51 081009 #include "Map Screen Interface Map Inventory.h"//dnl ch51 081009
#include "CampaignStats.h" // added by Flugente #include "CampaignStats.h" // added by Flugente
#include "PMC.h" // added by Flugente #include "PMC.h" // added by Flugente
#include "ASD.h" // added by Flugente
#include "MiniEvents.h" #include "MiniEvents.h"
#include "Rebel Command.h" #include "Rebel Command.h"
#include "World Items.h" #include "World Items.h"
#include "Vehicles.h"
#include "Text.h"
#include "connect.h" #include "connect.h"
#include "XML.h" #include "XML.h"
#include "mercs.h" #include "mercs.h"
#include "aim.h" #include "aim.h"
#include "Map Screen Interface.h"
#ifdef JA2UB #ifdef JA2UB
#include "Ja25 Strategic Ai.h" #include "Ja25 Strategic Ai.h"
#include "Ja25_Tactical.h" #include "Ja25_Tactical.h"
@@ -105,14 +96,14 @@ UINT8 gubCheatLevel = STARTING_CHEAT_LEVEL;
UINT8 gubScreenCount=0; UINT8 gubScreenCount=0;
#ifdef JA2UB #ifdef JA2UB
void InitCustomStrategicLayer ( void ) static void InitCustomStrategicLayer ( void )
{ {
LetLuaGameInit(2); //load custom InitStrategicLayer LetLuaGameInit(2); //load custom InitStrategicLayer
} }
#endif #endif
void InitNPCs( void ) static void InitNPCs( void )
{ {
#ifdef LUA_GAME_INIT_NPCS #ifdef LUA_GAME_INIT_NPCS
+6 -4
View File
@@ -4,7 +4,6 @@
#include "Strategic Mines.h" #include "Strategic Mines.h"
#include "Campaign.h" #include "Campaign.h"
#include "Morale.h" #include "Morale.h"
#include "Quests.h"
#include "Game Clock.h" #include "Game Clock.h"
#include "Overhead.h" #include "Overhead.h"
#include "jascreens.h" #include "jascreens.h"
@@ -159,7 +158,6 @@ CHAR16 zString[128];
HourlyDrugUpdate(); HourlyDrugUpdate();
RebelCommand::HourlyUpdate();
// WANNE: This check should avoid the resaving of a loaded auto-save game, when entering tactical // WANNE: This check should avoid the resaving of a loaded auto-save game, when entering tactical
BOOLEAN doAutoSave = TRUE; BOOLEAN doAutoSave = TRUE;
@@ -170,6 +168,10 @@ CHAR16 zString[128];
if (doAutoSave) if (doAutoSave)
{ {
// We're also using the doAutoSave check to prevent RebelCommand::DailyUpdate() from running a second time when loading an autosave at 00:00
RebelCommand::HourlyUpdate();
if ( AutoSaveToSlot[1] == FALSE && AutoSaveToSlot[2] == FALSE && AutoSaveToSlot[3] == FALSE && AutoSaveToSlot[4] == FALSE ) if ( AutoSaveToSlot[1] == FALSE && AutoSaveToSlot[2] == FALSE && AutoSaveToSlot[3] == FALSE && AutoSaveToSlot[4] == FALSE )
AutoSaveToSlot[0] = TRUE; AutoSaveToSlot[0] = TRUE;
@@ -909,7 +911,7 @@ void HourlyStealUpdate()
} }
} }
BOOLEAN RemoveItemInSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, UINT16 usItem, UINT32 usNumToRemove ) static BOOLEAN RemoveItemInSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, UINT16 usItem, UINT32 usNumToRemove )
{ {
UINT32 uiTotalNumberOfRealItems = 0; UINT32 uiTotalNumberOfRealItems = 0;
std::vector<WORLDITEM> pWorldItem;//dnl ch75 271013 std::vector<WORLDITEM> pWorldItem;//dnl ch75 271013
@@ -985,7 +987,7 @@ BOOLEAN RemoveItemInSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, UINT1
return FALSE; return FALSE;
} }
UINT32 CountAccessibleItemsInSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, UINT16 usItem ) static UINT32 CountAccessibleItemsInSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, UINT16 usItem )
{ {
UINT32 numfound = 0; UINT32 numfound = 0;
UINT32 uiTotalNumberOfRealItems = 0; UINT32 uiTotalNumberOfRealItems = 0;
+97 -57
View File
@@ -1,3 +1,4 @@
#ifdef JA2UB
#include "builddefines.h" #include "builddefines.h"
#include "strategicmap.h" #include "strategicmap.h"
@@ -68,7 +69,6 @@
#include "Auto Resolve.h" #include "Auto Resolve.h"
#include "Cursors.h" #include "Cursors.h"
#ifdef JA2UB
#include "Soldier Init List.h" #include "Soldier Init List.h"
#include "Dialogue Control.h" #include "Dialogue Control.h"
#include "Game Clock.h" #include "Game Clock.h"
@@ -145,8 +145,6 @@ void InitJohnKulbaInitialSector();
void FixEnemyCounterInSectorBug(); void FixEnemyCounterInSectorBug();
void AddEnemiesToFirstTunnelSector();
void AddEnemiesToSecondTunnelSector();
UINT8 NumEnemiesToAttackFirstTunnelSector( UINT8 *pAdmins, UINT8 *pTroops, UINT8 *pElites, UINT8 *pTanks, UINT8 *pJeeps, UINT8 *pRobots ); UINT8 NumEnemiesToAttackFirstTunnelSector( UINT8 *pAdmins, UINT8 *pTroops, UINT8 *pElites, UINT8 *pTanks, UINT8 *pJeeps, UINT8 *pRobots );
UINT8 NumEnemiesToAttackSecondTunnelSector( UINT8 *pAdmins, UINT8 *pTroops, UINT8 *pElites, UINT8 *pTanks, UINT8 *pJeeps, UINT8 *pRobots ); UINT8 NumEnemiesToAttackSecondTunnelSector( UINT8 *pAdmins, UINT8 *pTroops, UINT8 *pElites, UINT8 *pTanks, UINT8 *pJeeps, UINT8 *pRobots );
void RemoveAllEnemySoldierInitListLinks(); void RemoveAllEnemySoldierInitListLinks();
@@ -1272,10 +1270,69 @@ void InitJa25StrategicAiBloodcats( )
} }
static BOOLEAN AddEnemiesToSectorPlayerIsIn(INT16 sectorX, INT16 sectorY, INT8 sectorZ, UINT8 admins, UINT8 troops, UINT8 elites)
{
if ( gGameUBOptions.pJA2UB == TRUE )
{
if ( !(gTacticalStatus.uiFlags & INCOMBAT) )
{
SetEnemyEncounterCode(ENEMY_INVASION_CODE);
}
SetNumberJa25EnemiesInSector(sectorX, sectorY, sectorZ, admins, troops, elites, 0, 0, 0);
SetThisSectorAsEnemyControlled(sectorX, sectorY, sectorZ, FALSE);
//Set up flag so enemies will go and find the player in that sector
gJa25SaveStruct.fEnemyShouldImmediatelySeekThePlayer = TRUE;
gJa25SaveStruct.bSectorTheEnemyWillSeekEnemy = SECTOR(sectorX, sectorY);
}
return(TRUE);
}
static void AddEnemiesToFirstTunnelSector()
{
const auto x1 = gGameUBOptions.Tunnel1_SectorX;
const auto y1 = gGameUBOptions.Tunnel1_SectorY;
const auto z1 = gGameUBOptions.Tunnel1_SectorZ;
UINT8 ubNumAdmins = 0;
UINT8 ubNumTroops = 0;
UINT8 ubNumElites = 0;
UINT8 ubNumTanks = 0;
UINT8 ubNumJeeps = 0;
UINT8 ubNumRobots = 0;
NumEnemiesToAttackFirstTunnelSector(&ubNumAdmins, &ubNumTroops, &ubNumElites, &ubNumTanks, &ubNumJeeps, &ubNumRobots);
SetNumberJa25EnemiesInSector(x1, y1, z1, ubNumAdmins, ubNumTroops, ubNumElites, ubNumTanks, ubNumJeeps, ubNumRobots);
}
static void AddEnemiesToSecondTunnelSector()
{
const auto x2 = gGameUBOptions.Tunnel2_SectorX;
const auto y2 = gGameUBOptions.Tunnel2_SectorY;
const auto z2 = gGameUBOptions.Tunnel2_SectorZ;
UINT8 ubNumAdmins = 0;
UINT8 ubNumTroops = 0;
UINT8 ubNumElites = 0;
UINT8 ubNumTanks = 0;
UINT8 ubNumJeeps = 0;
UINT8 ubNumRobots = 0;
NumEnemiesToAttackSecondTunnelSector(&ubNumAdmins, &ubNumTroops, &ubNumElites, &ubNumTanks, &ubNumJeeps, &ubNumRobots);
SetNumberJa25EnemiesInSector(x2, y2, z2, ubNumAdmins, ubNumTroops, ubNumElites, ubNumTanks, ubNumJeeps, ubNumRobots);
}
void HandleAddingEnemiesToTunnelMaps() void HandleAddingEnemiesToTunnelMaps()
{ {
BOOLEAN fInCombat = ( gTacticalStatus.uiFlags & INCOMBAT ); UINT8 ubNumEnemies = 0;
UINT8 ubNumEnemies=0; UINT8 ubNumAdmins = 0;
UINT8 ubNumTroops = 0;
UINT8 ubNumElites = 0;
//if the player has been in the complex //if the player has been in the complex
if( HaveMercsEverBeenInComplex() ) if( HaveMercsEverBeenInComplex() )
@@ -1284,21 +1341,35 @@ void HandleAddingEnemiesToTunnelMaps()
return; return;
} }
const auto x1 = gGameUBOptions.Tunnel1_SectorX;
const auto y1 = gGameUBOptions.Tunnel1_SectorY;
const auto z1 = gGameUBOptions.Tunnel1_SectorZ;
const auto x2 = gGameUBOptions.Tunnel2_SectorX;
const auto y2 = gGameUBOptions.Tunnel2_SectorY;
const auto z2 = gGameUBOptions.Tunnel2_SectorZ;
const bool isPlayerInFirstTunnel = AreAnyPlayerMercsStillInSector(x1, y1, z1);
const bool isPlayerInSecondTunnel = AreAnyPlayerMercsStillInSector(x2, y2, z2);
//if the player IS NOT in either of the tunnel sectors //if the player IS NOT in either of the tunnel sectors
if( !AreAnyPlayerMercsStillInSector( 14, 10, 1 ) && if( !isPlayerInFirstTunnel && !isPlayerInSecondTunnel )
!AreAnyPlayerMercsStillInSector( 14, 11, 1 ) )
{ {
AddEnemiesToJa25TunnelMaps(); // Add enemies to both sectors if fan was blown up
if ( gJa25SaveStruct.ubHowPlayerGotThroughFan == PG__PLAYER_BLEW_UP_FAN_TO_GET_THROUGH )
{
AddEnemiesToFirstTunnelSector();
AddEnemiesToSecondTunnelSector();
}
} }
//else if the player IS NOT in the 2nd sector but in the first sector //else if the player IS NOT in the 2nd sector but is in the first sector
else if( AreAnyPlayerMercsStillInSector( 14, 10, 1 ) && else if( isPlayerInFirstTunnel && !isPlayerInSecondTunnel )
!AreAnyPlayerMercsStillInSector( 14, 11, 1 ) )
{ {
ubNumEnemies = NumEnemiesToAttackFirstTunnelSector( NULL, NULL, NULL, NULL, NULL, NULL ); ubNumEnemies = NumEnemiesToAttackFirstTunnelSector(&ubNumAdmins, &ubNumTroops, &ubNumElites, NULL, NULL, NULL );
//Add enemies to the first sector //Add enemies to the first sector
HandleAddEnemiesToSectorPlayerIsntIn( JA25_J14_1, ubNumEnemies ); AddEnemiesToSectorPlayerIsIn( x1, y1, z1, ubNumAdmins, ubNumTroops, ubNumElites);
//Remember to move the enemies to be in the entrance to the tunnel //Remember to move the enemies to be in the entrance to the tunnel
SetJa25GeneralFlag( JA_GF__MOVE_ENEMIES_TO_EDGE_IN_TUNNEL_1 ); SetJa25GeneralFlag( JA_GF__MOVE_ENEMIES_TO_EDGE_IN_TUNNEL_1 );
@@ -1307,58 +1378,17 @@ void HandleAddingEnemiesToTunnelMaps()
} }
//else if the player is in the second sector //else if the player is in the second sector
else if( AreAnyPlayerMercsStillInSector( 14, 11, 1 ) ) else if( isPlayerInSecondTunnel )
{ {
ubNumEnemies = NumEnemiesToAttackSecondTunnelSector( NULL, NULL, NULL, NULL, NULL, NULL ); ubNumEnemies = NumEnemiesToAttackSecondTunnelSector(&ubNumAdmins, &ubNumTroops, &ubNumElites, NULL, NULL, NULL );
//Add enemies to the first sector AddEnemiesToSectorPlayerIsIn(x2, y2, z2, ubNumAdmins, ubNumTroops, ubNumElites);
HandleAddEnemiesToSectorPlayerIsntIn( JA25_K14_1, ubNumEnemies );
//Remember to move the enemies to be in the entrance to the tunnel //Remember to move the enemies to be in the entrance to the tunnel
SetJa25GeneralFlag( JA_GF__MOVE_ENEMIES_TO_EDGE_IN_TUNNEL_2 ); SetJa25GeneralFlag( JA_GF__MOVE_ENEMIES_TO_EDGE_IN_TUNNEL_2 );
} }
} }
void AddEnemiesToJa25TunnelMaps()
{
if( gJa25SaveStruct.ubHowPlayerGotThroughFan == PG__PLAYER_BLEW_UP_FAN_TO_GET_THROUGH )
{
//if the player blew up the fan, add a ton of enemies to the sector
AddEnemiesToFirstTunnelSector();
AddEnemiesToSecondTunnelSector();
}
else if( gJa25SaveStruct.ubHowPlayerGotThroughFan == PG__PLAYER_STOPPED_FAN_TO_GET_THROUGH )
{
}
}
void AddEnemiesToFirstTunnelSector()
{
UINT8 ubNumAdmins=0;
UINT8 ubNumTroops=0;
UINT8 ubNumElites=0;
UINT8 ubNumTanks=0;
UINT8 ubNumJeeps=0;
UINT8 ubNumRobots=0;
NumEnemiesToAttackFirstTunnelSector( &ubNumAdmins, &ubNumTroops, &ubNumElites, &ubNumTanks, &ubNumJeeps, &ubNumRobots );
SetNumberJa25EnemiesInSector( 14, 10, 1, ubNumAdmins, ubNumTroops, ubNumElites, ubNumTanks, ubNumJeeps, ubNumRobots );
}
void AddEnemiesToSecondTunnelSector()
{
UINT8 ubNumAdmins=0;
UINT8 ubNumTroops=0;
UINT8 ubNumElites=0;
UINT8 ubNumTanks=0;
UINT8 ubNumJeeps=0;
UINT8 ubNumRobots=0;
NumEnemiesToAttackSecondTunnelSector( &ubNumAdmins, &ubNumTroops, &ubNumElites, &ubNumTanks, &ubNumJeeps, &ubNumRobots );
SetNumberJa25EnemiesInSector( 14, 11, 1, ubNumAdmins, ubNumTroops, ubNumElites, ubNumTanks, ubNumJeeps, ubNumRobots );
}
UINT8 NumEnemiesToAttackFirstTunnelSector( UINT8 *pAdmins, UINT8 *pTroops, UINT8 *pElites, UINT8 *pTanks, UINT8 *pJeeps, UINT8 *pRobots ) UINT8 NumEnemiesToAttackFirstTunnelSector( UINT8 *pAdmins, UINT8 *pTroops, UINT8 *pElites, UINT8 *pTanks, UINT8 *pJeeps, UINT8 *pRobots )
{ {
@@ -1388,6 +1418,11 @@ UINT8 NumEnemiesToAttackFirstTunnelSector( UINT8 *pAdmins, UINT8 *pTroops, UINT8
ubNumTroops = 4 + Random( 0 ); ubNumTroops = 4 + Random( 0 );
ubNumElites = 4 + Random( 0 ); ubNumElites = 4 + Random( 0 );
break; break;
case DIF_LEVEL_INSANE:
ubNumAdmins = 0 + Random(0);
ubNumTroops = 0 + Random(0);
ubNumElites = 8 + Random(0);
break;
} }
if( pAdmins ) if( pAdmins )
@@ -1440,6 +1475,11 @@ UINT8 NumEnemiesToAttackSecondTunnelSector( UINT8 *pAdmins, UINT8 *pTroops, UINT
ubNumTroops = 6 + Random( 0 ); ubNumTroops = 6 + Random( 0 );
ubNumElites = 4 + Random( 3 ); ubNumElites = 4 + Random( 3 );
break; break;
case DIF_LEVEL_INSANE:
ubNumAdmins = 0 + Random(0);
ubNumTroops = 0 + Random(0);
ubNumElites = 10 + Random(0);
break;
} }
if( pAdmins ) if( pAdmins )
-1
View File
@@ -199,7 +199,6 @@ BOOLEAN SaveJa25SaveInfoToSaveGame( HWFILE hFile );
BOOLEAN LoadJa25SaveInfoFromSavedGame( HWFILE hFile ); BOOLEAN LoadJa25SaveInfoFromSavedGame( HWFILE hFile );
void AddEnemiesToJa25TunnelMaps();
void HandleAddingEnemiesToTunnelMaps(); void HandleAddingEnemiesToTunnelMaps();
void SetJa25GeneralFlag( UINT32 uiFlagToSet ); void SetJa25GeneralFlag( UINT32 uiFlagToSet );
+101 -52
View File
@@ -5,7 +5,8 @@
#include "Strategic Mines.h" #include "Strategic Mines.h"
#include "BobbyRMailOrder.h" #include "BobbyRMailOrder.h"
#include "Tactical Save.h" #include "Tactical Save.h"
#include "connect.h" #include "Strategic Movement.h"
#include <Soldier Create.h>
#include "FileMan.h" #include "FileMan.h"
#include "GameSettings.h" #include "GameSettings.h"
#include "Game Init.h" #include "Game Init.h"
@@ -29,7 +30,6 @@
#include "Explosion Control.h" #include "Explosion Control.h"
#include "soldier tile.h" #include "soldier tile.h"
#include "Soldier Profile.h" #include "Soldier Profile.h"
#include "Soldier Functions.h"
#include "Action Items.h" #include "Action Items.h"
#include "AIInternals.h" #include "AIInternals.h"
#include "Handle Doors.h" #include "Handle Doors.h"
@@ -72,7 +72,6 @@ extern "C" {
#include "lua_state.h" #include "lua_state.h"
#include "lua_function.h" #include "lua_function.h"
#include "Encrypted File.h"
#include "BriefingRoom_Data.h" #include "BriefingRoom_Data.h"
#include "MiniGame.h" // added by Flugente #include "MiniGame.h" // added by Flugente
@@ -113,8 +112,6 @@ static int l_CheckMission(lua_State* L);
void FatigueCharacter(SOLDIERTYPE* pSoldier); void FatigueCharacter(SOLDIERTYPE* pSoldier);
static int l_AddCustomEmail(lua_State* L);
static int l_SetDefaultArrivalSector(lua_State* L); static int l_SetDefaultArrivalSector(lua_State* L);
static int l_GetDefaultArrivalSector(lua_State* L); static int l_GetDefaultArrivalSector(lua_State* L);
static int l_SetMercArrivalLocation(lua_State* L); static int l_SetMercArrivalLocation(lua_State* L);
@@ -406,9 +403,9 @@ static int l_AddToShouldBecomeHostileOrSayQuoteList(lua_State* L);
static int l_AddPreReadEmail(lua_State* L); static int l_AddPreReadEmail(lua_State* L);
static int l_AddEmail(lua_State* L); static int l_AddEmail(lua_State* L);
static int l_AddEmailXML(lua_State* L); static int l_AddEmailMercAvailableXML(lua_State* L);
static int l_AddEmailXML2(lua_State* L);
static int l_AddEmailLevelUpXML(lua_State* L); static int l_AddEmailLevelUpXML(lua_State* L);
static int l_AddEmailFromXML(lua_State* L);
static int l_EVENT_SoldierGotHit(lua_State* L); static int l_EVENT_SoldierGotHit(lua_State* L);
static int l_EVENT_InitNewSoldierAnim(lua_State* L); static int l_EVENT_InitNewSoldierAnim(lua_State* L);
@@ -862,6 +859,7 @@ static int l_PlayerTeamFull(lua_State* L);
static int l_ProfilesStrategicInsertionData(lua_State* L); static int l_ProfilesStrategicInsertionData(lua_State* L);
static int l_HealBoxers(lua_State* L);
static int l_ResetBoxers(lua_State* L); static int l_ResetBoxers(lua_State* L);
static int l_AddVolunteers(lua_State* L); static int l_AddVolunteers(lua_State* L);
@@ -915,9 +913,6 @@ static int l_SetIntelAndQuestMapDataForSector(lua_State* L);
using namespace std; using namespace std;
UINT16 idProfil; UINT16 idProfil;
UINT32 uiHourLua;
UINT32 uiDayLua;
UINT32 uiMinLua;
UINT16 PROFILLUA_sSectorX; UINT16 PROFILLUA_sSectorX;
UINT16 PROFILLUA_sSectorY; UINT16 PROFILLUA_sSectorY;
@@ -950,7 +945,7 @@ void IniLuaGlobal()
} }
} }
void IniGlobal_0(lua_State* L) static void IniGlobal_0(lua_State* L)
{ {
lua_pushinteger(L, PROFILLUA_sSectorX); lua_pushinteger(L, PROFILLUA_sSectorX);
@@ -979,7 +974,7 @@ void IniGlobal_0(lua_State* L)
} }
void IniGlobal_1(lua_State* L) static void IniGlobal_1(lua_State* L)
{ {
lua_pushinteger(L, PROFILLUA2_ubProfile); lua_pushinteger(L, PROFILLUA2_ubProfile);
lua_setglobal(L, "ProfileId"); lua_setglobal(L, "ProfileId");
@@ -1000,7 +995,7 @@ void IniGlobal_1(lua_State* L)
lua_setglobal(L, "ProfileIdsGridNo"); lua_setglobal(L, "ProfileIdsGridNo");
} }
void IniFunction(lua_State* L, BOOLEAN bQuests) static void IniFunction(lua_State* L, BOOLEAN bQuests)
{ {
lua_register(L, "HireMerc", l_HireMerc); lua_register(L, "HireMerc", l_HireMerc);
@@ -1028,9 +1023,9 @@ void IniFunction(lua_State* L, BOOLEAN bQuests)
lua_register(L, "AddPreReadEmail", l_AddPreReadEmail); lua_register(L, "AddPreReadEmail", l_AddPreReadEmail);
lua_register(L, "AddEmail", l_AddEmail); lua_register(L, "AddEmail", l_AddEmail);
lua_register(L, "AddEmailMercAvailableXML", l_AddEmailXML); lua_register(L, "AddEmailMercAvailableXML", l_AddEmailMercAvailableXML);
lua_register(L, "AddEmailMercLevelUpXML", l_AddEmailLevelUpXML); lua_register(L, "AddEmailMercLevelUpXML", l_AddEmailLevelUpXML);
lua_register(L, "AddEmailXML", l_AddEmailXML2); lua_register(L, "AddEmailFromXML", l_AddEmailFromXML);
//------Time------ //------Time------
@@ -1192,6 +1187,7 @@ void IniFunction(lua_State* L, BOOLEAN bQuests)
lua_register(L, "TacticalCharacterDialogueWithSpecialEvent", l_TacticalCharacterDialogueWithSpecialEvent); lua_register(L, "TacticalCharacterDialogueWithSpecialEvent", l_TacticalCharacterDialogueWithSpecialEvent);
lua_register(L, "SetSalary", l_MercSalary); lua_register(L, "SetSalary", l_MercSalary);
lua_register(L, "SetProfileStrategicInsertionData", l_ProfilesStrategicInsertionData); lua_register(L, "SetProfileStrategicInsertionData", l_ProfilesStrategicInsertionData);
lua_register(L, "HealBoxers", l_HealBoxers);
//Get merc //Get merc
lua_register(L, "GetDirection", l_GetDirection); //new lua_register(L, "GetDirection", l_GetDirection); //new
@@ -1643,8 +1639,6 @@ void IniFunction(lua_State* L, BOOLEAN bQuests)
lua_register(L, "ReStartingGame", l_ReStartingGame); lua_register(L, "ReStartingGame", l_ReStartingGame);
lua_register(L, "AddCustomEmail", l_AddCustomEmail);
lua_register(L, "SetDefaultArrivalSector", l_SetDefaultArrivalSector); lua_register(L, "SetDefaultArrivalSector", l_SetDefaultArrivalSector);
lua_register(L, "GetDefaultArrivalSector", l_GetDefaultArrivalSector); lua_register(L, "GetDefaultArrivalSector", l_GetDefaultArrivalSector);
lua_register(L, "SetDefaultArrivalGridNo", l_SetMercArrivalLocation); lua_register(L, "SetDefaultArrivalGridNo", l_SetMercArrivalLocation);
@@ -2003,20 +1997,6 @@ static int l_SetHandleGlobalLoyaltyEvent(lua_State* L)
return 0; return 0;
} }
static int l_AddCustomEmail(lua_State* L)
{
if (lua_gettop(L) >= 3)
{
INT32 iMessageOffset = lua_tointeger(L, 1);
INT32 iMessageLength = lua_tointeger(L, 2);
UINT8 ubSender = lua_tointeger(L, 3);
AddCustomEmail(iMessageOffset, iMessageLength, ubSender, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_OTHER);
}
return 0;
}
static int l_gMercProfileGearset(lua_State* L) static int l_gMercProfileGearset(lua_State* L)
{ {
if (lua_gettop(L) >= 8) if (lua_gettop(L) >= 8)
@@ -2243,18 +2223,38 @@ static int l_SetNumberOfJa25BloodCatsInSector(lua_State* L)
static int l_SetNumberJa25EnemiesInSurfaceSector(lua_State* L) static int l_SetNumberJa25EnemiesInSurfaceSector(lua_State* L)
{ {
if (lua_gettop(L) >= 6) if ( lua_gettop(L) >= 3 )
{ {
INT16 sSectorX = lua_tointeger(L, 1); INT16 sSectorX = lua_tointeger(L, 1);
INT16 sSectorY = lua_tointeger(L, 2); INT16 sSectorY = lua_tointeger(L, 2);
UINT8 ubNumAdmins = lua_tointeger(L, 3); UINT8 ubNumAdmins = lua_tointeger(L, 3);
UINT8 ubNumTroops = lua_tointeger(L, 4); UINT8 ubNumTroops = 0;
UINT8 ubNumElites = lua_tointeger(L, 5); UINT8 ubNumElites = 0;
UINT8 ubNumTanks = lua_tointeger(L, 6); UINT8 ubNumTanks = 0;
//TODO: expand lua call to include these two
UINT8 ubNumJeeps = 0; UINT8 ubNumJeeps = 0;
UINT8 ubNumRobots = 0; UINT8 ubNumRobots = 0;
if ( lua_gettop(L) >= 4 )
{
ubNumTroops = lua_tointeger(L, 4);
}
if ( lua_gettop(L) >= 5 )
{
ubNumElites = lua_tointeger(L, 5);
}
if ( lua_gettop(L) >= 6 )
{
ubNumTanks = lua_tointeger(L, 6);
}
if ( lua_gettop(L) >= 7 )
{
ubNumJeeps = lua_tointeger(L, 7);
}
if ( lua_gettop(L) >= 8 )
{
ubNumRobots = lua_tointeger(L, 8);
}
SetNumberJa25EnemiesInSurfaceSector(SECTOR(sSectorX, sSectorY), ubNumAdmins, ubNumTroops, ubNumElites, ubNumTanks, ubNumJeeps, ubNumRobots); SetNumberJa25EnemiesInSurfaceSector(SECTOR(sSectorX, sSectorY), ubNumAdmins, ubNumTroops, ubNumElites, ubNumTanks, ubNumJeeps, ubNumRobots);
} }
@@ -2881,7 +2881,7 @@ BOOLEAN LuaIDScripts(UINT8 Init, UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 u
// Neither one of the function arguments are used inside the function and the only place where this is called // Neither one of the function arguments are used inside the function and the only place where this is called
// makes it look like it *is* supposed to match against specific profile *and* restrict the search to player mercs. // makes it look like it *is* supposed to match against specific profile *and* restrict the search to player mercs.
// That last part makes no sense since player mercs are part of OUR_TEAM // That last part makes no sense since player mercs are part of OUR_TEAM
SOLDIERTYPE* FindSoldierByProfileID2(UINT8 ubProfileID, BOOLEAN fPlayerMercsOnly) static SOLDIERTYPE* FindSoldierByProfileID2(UINT8 ubProfileID, BOOLEAN fPlayerMercsOnly)
{ {
SoldierID soldier = gTacticalStatus.Team[CIV_TEAM].bFirstID; SoldierID soldier = gTacticalStatus.Team[CIV_TEAM].bFirstID;
SoldierID lastid = gTacticalStatus.Team[CIV_TEAM].bLastID; SoldierID lastid = gTacticalStatus.Team[CIV_TEAM].bLastID;
@@ -7429,23 +7429,9 @@ static int l_ExecuteStrategicAIAction(lua_State* L)
return 0; return 0;
} }
//AddEmailXML
static int l_AddEmailXML2(lua_State* L)
{
if (lua_gettop(L) >= 3)
{
INT32 offset = lua_tointeger(L, 1);
INT32 messagelength = lua_tointeger(L, 2);
UINT8 sender = lua_tointeger(L, 3);
AddEmailTypeXML(offset, messagelength, sender, GetWorldTotalMin(), -1, TYPE_EMAIL_OTHER);
}
return 0;
}
//AddEmailXML //AddEmailXML
static int l_AddEmailXML(lua_State* L) static int l_AddEmailMercAvailableXML(lua_State* L)
{ {
if (lua_gettop(L)) if (lua_gettop(L))
{ {
@@ -7512,6 +7498,48 @@ static int l_AddPreReadEmail(lua_State* L)
return 0; return 0;
} }
// New externalized emails
//AddEmail
static int l_AddEmailFromXML(lua_State* L)
{
if (lua_gettop(L))
{
UINT8 index = lua_tointeger(L, 1);
bool preReadMail = false;
INT32 iCurrentIMPPosition = -1;
INT16 iCurrentShipmentDestinationID = -1;
INT32 specialData1 = -1;
UINT32 specialData2 = -1;
INT32 specialData3 = -1;
INT32 specialData4 = -1;
UINT32 specialData5 = -1;
UINT32 specialData6 = -1;
if ( lua_gettop(L) >= 2 )
{
preReadMail = lua_toboolean(L, 2);
}
if ( lua_gettop(L) >= 7 )
{
iCurrentIMPPosition = lua_tointeger(L, 3);
iCurrentShipmentDestinationID = lua_tointeger(L, 4);
specialData1 = lua_tointeger(L, 5);
specialData2 = lua_tointeger(L, 6);
specialData3 = lua_tointeger(L, 7);
}
if ( specialData1 != -1 || specialData2 != -1 )
{
AddEmailWithSpecialDataXML(index, GetWorldTotalMin(), iCurrentIMPPosition, iCurrentShipmentDestinationID, preReadMail, specialData1, specialData2, specialData3, specialData4, specialData5, specialData6);
}
else
{
AddEmailFromXML(index, GetWorldTotalMin(), iCurrentIMPPosition, iCurrentShipmentDestinationID, preReadMail, specialData1, specialData2, specialData3, specialData4, specialData5, specialData6);
}
}
return 0;
}
//gfBoxerFought //gfBoxerFought
static int l_SetgfBoxerFought(lua_State* L) static int l_SetgfBoxerFought(lua_State* L)
{ {
@@ -9286,6 +9314,27 @@ static int l_ResetBoxers(lua_State* L)
return 0; return 0;
} }
// heal boxers back to max health in case the player stays in sector while the boxers are resting
static int l_HealBoxers(lua_State* L)
{
for (UINT8 i = 0; i < NUM_BOXERS; ++i)
{
// Get breath back
gubBoxerID[i]->bBreath = gubBoxerID[i]->bBreathMax;
gubBoxerID[i]->sBreathRed = 0;
// Get life back
gubBoxerID[i]->stats.bLife = gubBoxerID[i]->stats.bLifeMax;
gubBoxerID[i]->bBleeding = 0;
// erase insta-healable injury
gubBoxerID[i]->iHealableInjury = 0;
DebugQuestInfo(String("Lua: healed gubBoxerID[%d] %d back to full health", i, gubBoxerID[i]));
}
return 0;
}
//Set character to sector Y //Set character to sector Y
static int l_SetCharacterSectorY(lua_State* L) static int l_SetCharacterSectorY(lua_State* L)
{ {
-3
View File
@@ -26,9 +26,6 @@ typedef struct
extern ACTION_ITEM_VALUES ActionItemsValues[500]; extern ACTION_ITEM_VALUES ActionItemsValues[500];
extern UINT32 uiHourLua;
extern UINT32 uiDayLua;
extern UINT32 uiMinLua;
extern UINT16 PROFILLUA_sSectorX; extern UINT16 PROFILLUA_sSectorX;
extern UINT16 PROFILLUA_sSectorY; extern UINT16 PROFILLUA_sSectorY;
extern UINT8 PROFILLUA_bSectorZ; extern UINT8 PROFILLUA_bSectorZ;
+10 -9
View File
@@ -510,15 +510,6 @@ void IniGlobalGameSetting(lua_State *L)
lua_pushinteger(L, gubBoxingMatchesWon); lua_pushinteger(L, gubBoxingMatchesWon);
lua_setglobal(L, "gubBoxingMatchesWon"); lua_setglobal(L, "gubBoxingMatchesWon");
lua_pushinteger(L, uiHourLua);
lua_setglobal(L, "cHour");
lua_pushinteger(L, uiDayLua);
lua_setglobal(L, "cDay");
lua_pushinteger(L, uiMinLua);
lua_setglobal(L, "cMin");
lua_pushinteger(L, gbPlayerNum); lua_pushinteger(L, gbPlayerNum);
lua_setglobal(L, "gbPlayerNum"); lua_setglobal(L, "gbPlayerNum");
@@ -590,6 +581,16 @@ void IniGlobalGameSetting(lua_State *L)
lua_pushinteger(L, guiMin); lua_pushinteger(L, guiMin);
lua_setglobal(L, "guiMin"); lua_setglobal(L, "guiMin");
lua_pushinteger(L, guiDay);
lua_setglobal(L, "cDay");
lua_pushinteger(L, guiHour);
lua_setglobal(L, "cHour");
lua_pushinteger(L, guiMin);
lua_setglobal(L, "cMin");
lua_pushinteger(L, guiCurrentScreen); lua_pushinteger(L, guiCurrentScreen);
lua_setglobal(L, "guiCurrentScreen"); lua_setglobal(L, "guiCurrentScreen");
+40 -47
View File
@@ -1,48 +1,41 @@
#include "Map Screen Helicopter.h" #include "Map Screen Helicopter.h"
#include "LaptopSave.h" #include "LaptopSave.h"
#include "Vehicles.h"
#include "finances.h"
#include "Quests.h"
#include "Game Clock.h"
#include "strategic.h"
#include "Queen Command.h"
#include "Strategic Pathing.h"
#include "random.h"
#include "Game Event Hook.h"
#include "string.h"
#include "Dialogue Control.h"
#include "message.h"
#include "Strategic Movement.h"
#include "Soldier Profile.h"
#include "Assignments.h"
#include "PreBattle Interface.h"
#include "strategicmap.h"
#include "worlddef.h"
#include "worldman.h"
#include "TileDat.h"
#include "Map Screen Interface.h"
#include "Text.h"
#include "Squads.h"
#include "Player Command.h"
#include "Sound Control.h"
#include "GameSettings.h"
#include "Meanwhile.h"
#include "Map Screen Interface Border.h"
#include "Strategic Event Handler.h"
#include "Overhead.h"
#include "Soldier Create.h"
#include "renderworld.h"
#include "soundman.h"
#include "Isometric Utils.h"
#include "Scheduling.h"
// HEADROCK HAM 3.5: Added facility-based skyrider costs modifier
#include "Facilities.h"
#include "Debug Control.h"
#include "expat.h"
#include "merc entering.h" // added by Flugente
#include "ASD.h" // added by Flugente
#include "Vehicles.h" #include "Vehicles.h"
#include "finances.h"
#include "Quests.h"
#include "Game Clock.h"
#include "strategic.h"
#include "Queen Command.h"
#include "Strategic Pathing.h"
#include "random.h"
#include "Game Event Hook.h"
#include "string.h"
#include "Dialogue Control.h"
#include "message.h"
#include "Strategic Movement.h"
#include "Soldier Profile.h"
#include "Assignments.h"
#include "strategicmap.h"
#include "worlddef.h"
#include "worldman.h"
#include "Map Screen Interface.h"
#include "Text.h"
#include "Squads.h"
#include "Sound Control.h"
#include "GameSettings.h"
#include "Meanwhile.h"
#include "Map Screen Interface Border.h"
#include "Overhead.h"
#include "Soldier Create.h"
#include "renderworld.h"
#include "Isometric Utils.h"
#include "Scheduling.h"
// HEADROCK HAM 3.5: Added facility-based skyrider costs modifier
#include "Facilities.h"
#include "Debug Control.h"
#include "expat.h"
#include "merc entering.h" // added by Flugente
#include "ASD.h" // added by Flugente
#include "NPC.h" #include "NPC.h"
#include "history.h" #include "history.h"
@@ -510,7 +503,7 @@ BOOLEAN ReadInHeliInfo(STR fileName)
return TRUE; return TRUE;
} }
BOOLEAN WriteInInfo(STR fileName) static BOOLEAN WriteInInfo(STR fileName)
{ {
HWFILE hFile; HWFILE hFile;
@@ -2446,7 +2439,7 @@ BOOLEAN WillAirRaidBeStopped( INT16 sSectorX, INT16 sSectorY )
return( FALSE ); return( FALSE );
} }
void HeliCrashSoundStopCallback( void *pData ) static void HeliCrashSoundStopCallback( void *pData )
{ {
SkyriderDestroyed( ); SkyriderDestroyed( );
} }
@@ -2589,7 +2582,7 @@ BOOLEAN CanHelicopterTakeOff( void )
return( FALSE ); return( FALSE );
} }
void AddHeliPiece( INT32 iGridNo, UINT16 sOStruct ) static void AddHeliPiece( INT32 iGridNo, UINT16 sOStruct )
{ {
UINT16 usDummy; UINT16 usDummy;
@@ -11,21 +11,16 @@
#include "mapscreen.h" #include "mapscreen.h"
#include "Render Dirty.h" #include "Render Dirty.h"
#include "Map Screen Interface Map.h" #include "Map Screen Interface Map.h"
#include "Map Screen Interface Border.h"
#include "Map Screen Interface.h" #include "Map Screen Interface.h"
#include "Map Screen Interface Map Inventory.h" #include "Map Screen Interface Map Inventory.h"
#include "Map Screen Helicopter.h" #include "Map Screen Helicopter.h"
#include "Text.h" #include "Text.h"
#include "Campaign Types.h"
#include "Strategic Town Loyalty.h"
#include "strategicmap.h"
#include "Assignments.h" #include "Assignments.h"
// HEADROCK HAM 4: Now accepts INI settings // HEADROCK HAM 4: Now accepts INI settings
#include "GameSettings.h" #include "GameSettings.h"
// Also include Quests, for checking whether a fact is true. // Also include Quests, for checking whether a fact is true.
#include "Quests.h" #include "Quests.h"
// HEADROCK HAM 5: Required for inventory filter popup // HEADROCK HAM 5: Required for inventory filter popup
#include "popup_callback.h"
#include "popup_class.h" #include "popup_class.h"
#include "Queen Command.h" // added by Flugente #include "Queen Command.h" // added by Flugente
@@ -22,10 +22,8 @@
#include "Options Screen.h" #include "Options Screen.h"
#include "Cursor Control.h" #include "Cursor Control.h"
#include "gameloop.h" #include "gameloop.h"
#include "ai.h"
#include "Tactical Save.h" #include "Tactical Save.h"
#include "Campaign Types.h" #include "Campaign Types.h"
#include "Air Raid.h"
#include "finances.h" #include "finances.h"
#include "LaptopSave.h" #include "LaptopSave.h"
#include "Interface Items.h" #include "Interface Items.h"
@@ -1,7 +1,6 @@
#include "Map Screen Interface Map Inventory.h" #include "Map Screen Interface Map Inventory.h"
#include "Render Dirty.h" #include "Render Dirty.h"
#include "vobject.h" #include "vobject.h"
#include "Utilities.h"
#include "WCheck.h" #include "WCheck.h"
#include "sysutil.h" #include "sysutil.h"
#include "Map Screen Interface Border.h" #include "Map Screen Interface Border.h"
@@ -28,7 +27,6 @@
#include "WordWrap.h" #include "WordWrap.h"
#include "Soldier macros.h" #include "Soldier macros.h"
#include "rt time defines.h" #include "rt time defines.h"
#include "Encyclopedia_new.h" //Moa: item visibility
#include "Town Militia.h" // added by Flugente #include "Town Militia.h" // added by Flugente
#include "ShopKeeper Interface.h" #include "ShopKeeper Interface.h"
@@ -36,10 +34,7 @@
#include <algorithm> #include <algorithm>
#include "InterfaceItemImages.h" #include "InterfaceItemImages.h"
#include "SaveLoadGame.h"//dnl ch51 081009 #include "SaveLoadGame.h"//dnl ch51 081009
#include "Map Information.h"//dnl ch51 091009
#include "Interface Items.h"
#include "Food.h" // added by Flugente #include "Food.h" // added by Flugente
#include "Campaign Types.h" // added by Flugente
#include "mapscreen.h" #include "mapscreen.h"
//forward declarations of common classes to eliminate includes //forward declarations of common classes to eliminate includes
@@ -1138,8 +1133,12 @@ void SaveSeenAndUnseenItems( void )
if(pipl->fExists && pipl->object.ubNumberOfObjects) if(pipl->fExists && pipl->object.ubNumberOfObjects)
{ {
uiTotalNumberOfVisibleItems += pipl->object.ubNumberOfObjects; uiTotalNumberOfVisibleItems += pipl->object.ubNumberOfObjects;
if(i > uiNumberOfSeenItems) if (i > uiNumberOfSeenItems)
{
pInventoryPoolList[uiNumberOfSeenItems] = *pipl; pInventoryPoolList[uiNumberOfSeenItems] = *pipl;
pipl->fExists = FALSE;
}
uiNumberOfSeenItems++; uiNumberOfSeenItems++;
} }
} }
-5
View File
@@ -19,7 +19,6 @@
#include "Squads.h" #include "Squads.h"
#include "message.h" #include "message.h"
#include "Soldier Profile.h" #include "Soldier Profile.h"
#include "Player Command.h"
#include "Strategic Movement.h" #include "Strategic Movement.h"
#include "Queen Command.h" #include "Queen Command.h"
#include "Campaign Types.h" #include "Campaign Types.h"
@@ -28,7 +27,6 @@
#include "Vehicles.h" #include "Vehicles.h"
#include "Map Screen Helicopter.h" #include "Map Screen Helicopter.h"
#include "Game Clock.h" #include "Game Clock.h"
#include "finances.h"
#include "line.h" #include "line.h"
#include "english.h" #include "english.h"
#include "PreBattle Interface.h" #include "PreBattle Interface.h"
@@ -39,7 +37,6 @@
#include "Tactical Save.h" #include "Tactical Save.h"
#include "Map Information.h" #include "Map Information.h"
#include "Air Raid.h" #include "Air Raid.h"
#include "Auto Resolve.h"
#include "ASD.h" // added by Flugente #include "ASD.h" // added by Flugente
#include "MilitiaIndividual.h" // added by Flugente #include "MilitiaIndividual.h" // added by Flugente
#include "Map Screen Interface Map Inventory.h" // added by Flugente #include "Map Screen Interface Map Inventory.h" // added by Flugente
@@ -50,10 +47,8 @@
#include "Quests.h" #include "Quests.h"
#include "connect.h" #include "connect.h"
#include "Strategic Mines.h"
// HEADROCK HAM 3.5: included for detectionlevels // HEADROCK HAM 3.5: included for detectionlevels
#include "Facilities.h" #include "Facilities.h"
#include "MilitiaSquads.h"
#include "LaptopSave.h" #include "LaptopSave.h"
#include <language.hpp> #include <language.hpp>
@@ -5,19 +5,15 @@
#include "Queen Command.h" #include "Queen Command.h"
#include "Player Command.h" #include "Player Command.h"
#include "Font Control.h" #include "Font Control.h"
#include "Font.h"
#include "Text.h" #include "Text.h"
#include "Map Screen Interface Map.h" #include "Map Screen Interface Map.h"
#include "Map Screen Interface Border.h" #include "Map Screen Interface Border.h"
#include "Handle UI.h"
#include "NPC.h"
#include "Strategic Town Loyalty.h" #include "Strategic Town Loyalty.h"
#include "Strategic Mines.h" #include "Strategic Mines.h"
#include "finances.h"
#include "Map Screen Interface Map Inventory.h" #include "Map Screen Interface Map Inventory.h"
#include "strategic.h" #include "strategic.h"
#include "Utilities.h" #include "Utilities.h"
#include "video.h" #include <vsurface.h>
#include "Town Militia.h" #include "Town Militia.h"
#include "HelpScreen.h" #include "HelpScreen.h"
#include "Map Screen Helicopter.h" #include "Map Screen Helicopter.h"
@@ -25,10 +21,7 @@
#include "GameSettings.h" #include "GameSettings.h"
#include "DEBUG.H" #include "DEBUG.H"
#include "Overhead.h" // added by Flugente #include "Overhead.h" // added by Flugente
#include "Game Clock.h" // added by Flugente
#include "Game Event Hook.h" // added by Flugente
#include "Strategic Mines.h"
#define BOX_BUTTON_WIDTH 100 #define BOX_BUTTON_WIDTH 100
#define BOX_BUTTON_HEIGHT 20 #define BOX_BUTTON_HEIGHT 20
+2 -6
View File
@@ -1,5 +1,4 @@
#include "Map Screen Interface.h" #include "Map Screen Interface.h"
#include "string.h"
#include "Map Screen Interface Map.h" #include "Map Screen Interface Map.h"
#include "Render Dirty.h" #include "Render Dirty.h"
#include "Font Control.h" #include "Font Control.h"
@@ -28,7 +27,6 @@
#include "Vehicles.h" #include "Vehicles.h"
#include "line.h" #include "line.h"
#include "Text.h" #include "Text.h"
#include "gameloop.h"
#include "Map Screen Helicopter.h" #include "Map Screen Helicopter.h"
#include "PreBattle Interface.h" #include "PreBattle Interface.h"
#include "WordWrap.h" #include "WordWrap.h"
@@ -46,11 +44,9 @@
#include "Game Init.h" #include "Game Init.h"
#include "Strategic Mines.h" #include "Strategic Mines.h"
#include "finances.h" #include "finances.h"
#include "strategic.h"
#include "Air Raid.h" #include "Air Raid.h"
#include "Queen Command.h" #include "Queen Command.h"
#include "Render Fun.h" #include "Render Fun.h"
#include "Food.h"
#include "personnel.h" #include "personnel.h"
#include "mapscreen.h" #include "mapscreen.h"
@@ -198,7 +194,7 @@ INT32 iHeightOfInitFastHelpText = 0;
extern INT32 giMapContractButton; extern INT32 giMapContractButton;
extern INT32 giCharInfoButton[]; extern INT32 giCharInfoButton[];
extern STR16 pUpdatePanelButtons[]; extern STR16* pUpdatePanelButtons;
// the list of soldiers that are moving // the list of soldiers that are moving
SOLDIERTYPE * pSoldierMovingList[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ]; SOLDIERTYPE * pSoldierMovingList[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ];
@@ -6166,7 +6162,7 @@ BOOLEAN HandleTimeCompressWithTeamJackedInAndGearedToGo( void )
//no ja25 UB //no ja25 UB
#else #else
// Add e-mail message // Add e-mail message
AddEmail(ENRICO_CONGRATS,ENRICO_CONGRATS_LENGTH,MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT); AddEmail(ENRICO_CONGRATS, ENRICO_CONGRATS_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_ENRICO_GOODLUCK);
#endif #endif
return( TRUE ); return( TRUE );
+2 -2
View File
@@ -1,4 +1,5 @@
#include "Map Screen Interface.h" #ifdef JA2UB
#include "Map Screen Interface.h"
#include "string.h" #include "string.h"
#include "Map Screen Interface Map.h" #include "Map Screen Interface Map.h"
#include "Font Control.h" #include "Font Control.h"
@@ -47,7 +48,6 @@
#include "connect.h" #include "connect.h"
#ifdef JA2UB
#include "Ja25 Strategic Ai.h" #include "Ja25 Strategic Ai.h"
#include "Ja25_Tactical.h" #include "Ja25_Tactical.h"
-2
View File
@@ -13,8 +13,6 @@
#include "Soldier Profile.h" #include "Soldier Profile.h"
#include "Overhead.h" #include "Overhead.h"
#include "Dialogue Control.h" #include "Dialogue Control.h"
#include "gameloop.h"
#include "NPC.h"
#include "Assignments.h" #include "Assignments.h"
#include "strategic.h" #include "strategic.h"
#include "Text.h" #include "Text.h"
+22 -13
View File
@@ -9,8 +9,6 @@
#include "Soldier Add.h" #include "Soldier Add.h"
#include "Dialogue Control.h" #include "Dialogue Control.h"
#include "Soldier Create.h" #include "Soldier Create.h"
#include "message.h"
#include "Font Control.h"
#include "personnel.h" #include "personnel.h"
#include "LaptopSave.h" #include "LaptopSave.h"
#include "Map Screen Interface.h" #include "Map Screen Interface.h"
@@ -18,8 +16,7 @@
#include "strategicmap.h" #include "strategicmap.h"
#include "Quests.h" #include "Quests.h"
#include "worlddef.h" #include "worlddef.h"
#include "Animation Control.h" #include <Overhead.h>
#include "Tactical Save.h"
#include "Interface Control.h" #include "Interface Control.h"
#include "gamescreen.h" #include "gamescreen.h"
#include "jascreens.h" #include "jascreens.h"
@@ -27,10 +24,8 @@
#include "Assignments.h" #include "Assignments.h"
#include "Strategic Movement.h" #include "Strategic Movement.h"
#include "Squads.h" #include "Squads.h"
#include "gameloop.h"
#include "Text.h" #include "Text.h"
#include "Strategic Status.h" #include "Strategic Status.h"
#include "mercs.h"
#include "insurance Contract.h" #include "insurance Contract.h"
#include "Vehicles.h" #include "Vehicles.h"
#include "email.h" #include "email.h"
@@ -909,7 +904,16 @@ BOOLEAN BeginStrategicRemoveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fAddRehireButto
else else
{ {
if (!is_networked) if (!is_networked)
{
#ifdef JA2UB
// Leave equipment to merc's current sector by default in UB
HandleLeavingOfEquipmentInCurrentSector(pSoldier->ubID);
StrategicRemoveMerc(pSoldier);
pLeaveSoldier = NULL;
#else
NotifyPlayerOfMercDepartureAndPromptEquipmentPlacement( pSoldier, fAddRehireButton ); NotifyPlayerOfMercDepartureAndPromptEquipmentPlacement( pSoldier, fAddRehireButton );
#endif
}
else else
{ {
// WANNE - MP: Skip all the dialog boxes that appear. Just dismiss the merc // WANNE - MP: Skip all the dialog boxes that appear. Just dismiss the merc
@@ -1107,10 +1111,12 @@ void CalculateMedicalDepositRefund( SOLDIERTYPE *pSoldier )
if( gubQuest[ QUEST_FIX_LAPTOP ] == QUESTDONE || gGameUBOptions.LaptopQuestEnabled == FALSE ) if( gubQuest[ QUEST_FIX_LAPTOP ] == QUESTDONE || gGameUBOptions.LaptopQuestEnabled == FALSE )
{ {
if ( gGameUBOptions.fDeadMerc == TRUE ) if ( gGameUBOptions.fDeadMerc == TRUE )
AddEmailWithSpecialData( 27, AIM_MEDICAL_DEPOSIT_REFUND_LENGTH, AIM_SITE, GetWorldTotalMin(), pSoldier->usMedicalDeposit, pSoldier->ubProfile, TYPE_EMAIL_DEAD_MERC_AIM_SITE_EMAIL_JA2_EDT, TYPE_E_AIM_L2 ); {
AddEmailWithSpecialData(27, AIM_MEDICAL_DEPOSIT_REFUND_LENGTH, AIM_SITE, GetWorldTotalMin(), pSoldier->usMedicalDeposit, pSoldier->ubProfile, TYPE_EMAIL_DEAD_MERC_AIM_SITE_EMAIL_JA2_EDT, TYPE_E_AIM_L2, XML_AIM_REFUND);
}
} }
#else #else
AddEmailWithSpecialData( AIM_MEDICAL_DEPOSIT_REFUND, AIM_MEDICAL_DEPOSIT_REFUND_LENGTH, AIM_SITE, GetWorldTotalMin(), pSoldier->usMedicalDeposit, pSoldier->ubProfile, TYPE_EMAIL_EMAIL_EDT, TYPE_E_NONE ); AddEmailWithSpecialData(AIM_MEDICAL_DEPOSIT_REFUND, AIM_MEDICAL_DEPOSIT_REFUND_LENGTH, AIM_SITE, GetWorldTotalMin(), pSoldier->usMedicalDeposit, pSoldier->ubProfile, TYPE_EMAIL_EMAIL_EDT, TYPE_E_NONE, XML_AIM_REFUND);
#endif #endif
} }
//else if the merc is a dead, refund NOTHING!! //else if the merc is a dead, refund NOTHING!!
@@ -1121,14 +1127,15 @@ void CalculateMedicalDepositRefund( SOLDIERTYPE *pSoldier )
//add an email //add an email
#ifdef JA2UB #ifdef JA2UB
//no UB
if( gubQuest[ QUEST_FIX_LAPTOP ] == QUESTDONE || gGameUBOptions.LaptopQuestEnabled == FALSE ) if( gubQuest[ QUEST_FIX_LAPTOP ] == QUESTDONE || gGameUBOptions.LaptopQuestEnabled == FALSE )
{ {
if ( gGameUBOptions.fDeadMerc == TRUE ) if ( gGameUBOptions.fDeadMerc == TRUE )
AddEmailWithSpecialData( 217, AIM_MEDICAL_DEPOSIT_NO_REFUND_LENGTH, AIM_SITE, GetWorldTotalMin(), pSoldier->usMedicalDeposit, pSoldier->ubProfile, TYPE_EMAIL_DEAD_MERC_AIM_SITE_EMAIL_JA2_EDT, TYPE_E_AIM_L3 ); {
AddEmailWithSpecialData(217, AIM_MEDICAL_DEPOSIT_NO_REFUND_LENGTH, AIM_SITE, GetWorldTotalMin(), pSoldier->usMedicalDeposit, pSoldier->ubProfile, TYPE_EMAIL_DEAD_MERC_AIM_SITE_EMAIL_JA2_EDT, TYPE_E_AIM_L3, XML_AIM_NOREFUND);
}
} }
#else #else
AddEmailWithSpecialData( AIM_MEDICAL_DEPOSIT_NO_REFUND, AIM_MEDICAL_DEPOSIT_NO_REFUND_LENGTH, AIM_SITE, GetWorldTotalMin(), pSoldier->usMedicalDeposit, pSoldier->ubProfile, TYPE_EMAIL_EMAIL_EDT, TYPE_E_NONE ); AddEmailWithSpecialData(AIM_MEDICAL_DEPOSIT_NO_REFUND, AIM_MEDICAL_DEPOSIT_NO_REFUND_LENGTH, AIM_SITE, GetWorldTotalMin(), pSoldier->usMedicalDeposit, pSoldier->ubProfile, TYPE_EMAIL_EMAIL_EDT, TYPE_E_NONE, XML_AIM_NOREFUND);
#endif #endif
} }
//else the player is injured, refund a partial amount //else the player is injured, refund a partial amount
@@ -1146,10 +1153,12 @@ void CalculateMedicalDepositRefund( SOLDIERTYPE *pSoldier )
if( gubQuest[ QUEST_FIX_LAPTOP ] == QUESTDONE || gGameUBOptions.LaptopQuestEnabled == FALSE ) if( gubQuest[ QUEST_FIX_LAPTOP ] == QUESTDONE || gGameUBOptions.LaptopQuestEnabled == FALSE )
{ {
if ( gGameUBOptions.fDeadMerc == TRUE ) if ( gGameUBOptions.fDeadMerc == TRUE )
AddEmailWithSpecialData( 214, AIM_MEDICAL_DEPOSIT_PARTIAL_REFUND_LENGTH, AIM_SITE, GetWorldTotalMin(), iRefundAmount, pSoldier->ubProfile, TYPE_EMAIL_DEAD_MERC_AIM_SITE_EMAIL_JA2_EDT, TYPE_E_AIM_L4 ); {
AddEmailWithSpecialData(214, AIM_MEDICAL_DEPOSIT_PARTIAL_REFUND_LENGTH, AIM_SITE, GetWorldTotalMin(), iRefundAmount, pSoldier->ubProfile, TYPE_EMAIL_DEAD_MERC_AIM_SITE_EMAIL_JA2_EDT, TYPE_E_AIM_L4, XML_AIM_PARTIALREFUND);
}
} }
#else #else
AddEmailWithSpecialData( AIM_MEDICAL_DEPOSIT_PARTIAL_REFUND, AIM_MEDICAL_DEPOSIT_PARTIAL_REFUND_LENGTH, AIM_SITE, GetWorldTotalMin(), iRefundAmount, pSoldier->ubProfile, TYPE_EMAIL_EMAIL_EDT, TYPE_E_NONE ); AddEmailWithSpecialData(AIM_MEDICAL_DEPOSIT_PARTIAL_REFUND, AIM_MEDICAL_DEPOSIT_PARTIAL_REFUND_LENGTH, AIM_SITE, GetWorldTotalMin(), iRefundAmount, pSoldier->ubProfile, TYPE_EMAIL_EMAIL_EDT, TYPE_E_NONE, XML_AIM_PARTIALREFUND);
#endif #endif
} }
} }
+1 -11
View File
@@ -4,25 +4,15 @@
#include "strategic.h" #include "strategic.h"
#include "strategicmap.h" #include "strategicmap.h"
#include "Overhead.h" #include "Overhead.h"
#include "Strategic Town Loyalty.h"
#include "Utilities.h"
#include "random.h" #include "random.h"
#include "Text.h" #include "Text.h"
#include "Map Screen Interface.h" #include <Font Control.h>
#include "Interface.h"
#include "LaptopSave.h"
#include "Game Clock.h" #include "Game Clock.h"
#include "Assignments.h" #include "Assignments.h"
#include "Squads.h"
#include "Soldier Create.h"
#include "Dialogue Control.h"
#include "GameSettings.h" #include "GameSettings.h"
#include "Queen Command.h" #include "Queen Command.h"
#include "math.h" #include "math.h"
#include "Auto Resolve.h" #include "Auto Resolve.h"
#include "Vehicles.h"
#include "Tactical Save.h"
#include "Campaign.h"
#include "message.h" #include "message.h"
#include "mapscreen.h" #include "mapscreen.h"
#include "Strategic Pathing.h" #include "Strategic Pathing.h"
+1 -6
View File
@@ -37,24 +37,19 @@ to call into.
#include "strategicmap.h" #include "strategicmap.h"
#include "Strategic Movement.h" #include "Strategic Movement.h"
#include "Strategic Town Loyalty.h" #include "Strategic Town Loyalty.h"
#include "Text.h"
#include "Town Militia.h" #include "Town Militia.h"
#include "Vehicles.h" #include "Vehicles.h"
extern "C" { extern "C" {
#include "lua.h" #include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
} }
#include <lua.h>
#include <lua_function.h> #include <lua_function.h>
#include <lua_state.h> #include <lua_state.h>
#include <lua_table.h>
extern CHAR16 gzUserDefinedButton1[ 128 ]; extern CHAR16 gzUserDefinedButton1[ 128 ];
extern CHAR16 gzUserDefinedButton2[ 128 ]; extern CHAR16 gzUserDefinedButton2[ 128 ];
extern CHAR16 pTownNames[MAX_TOWNS][MAX_TOWN_NAME_LENGHT]; extern CHAR16 (*pTownNames)[MAX_TOWN_NAME_LENGHT];
static size_t MAX_BUTTON_LENGTH = 60; static size_t MAX_BUTTON_LENGTH = 60;
static size_t MAX_BODY_LENGTH = 450; static size_t MAX_BODY_LENGTH = 450;
+1 -4
View File
@@ -8,7 +8,6 @@
#include "LaptopSave.h" #include "LaptopSave.h"
#include "Quests.h" #include "Quests.h"
#include "Morale.h" #include "Morale.h"
#include "Overhead.h"
#include "strategicmap.h" #include "strategicmap.h"
#include "Map Screen Helicopter.h" #include "Map Screen Helicopter.h"
#include "Game Clock.h" #include "Game Clock.h"
@@ -20,8 +19,6 @@
#include "PreBattle Interface.h" #include "PreBattle Interface.h"
#include "Map Screen Interface.h" #include "Map Screen Interface.h"
#include "Tactical Save.h" #include "Tactical Save.h"
#include "interface Dialogue.h"
#include "random.h"
// HEADROCK HAM 3.6: Added for facility string printing... // HEADROCK HAM 3.6: Added for facility string printing...
#include "PopUpBox.h" #include "PopUpBox.h"
#include "CampaignStats.h" // added by Flugente #include "CampaignStats.h" // added by Flugente
@@ -252,7 +249,7 @@ BOOLEAN SetThisSectorAsPlayerControlled( INT16 sMapX, INT16 sMapY, INT8 bMapZ, B
#ifdef JA2UB #ifdef JA2UB
// no UB // no UB
#else #else
AddEmail( BOBBYR_NOW_OPEN, BOBBYR_NOW_OPEN_LENGTH, BOBBY_R, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT); AddEmail(BOBBYR_NOW_OPEN, BOBBYR_NOW_OPEN_LENGTH, BOBBY_R, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_BR_VISITEDSITE);
#endif #endif
LaptopSaveInfo.ubHaveBeenToBobbyRaysAtLeastOnceWhileUnderConstruction = BOBBYR_ALREADY_SENT_EMAIL; LaptopSaveInfo.ubHaveBeenToBobbyRaysAtLeastOnceWhileUnderConstruction = BOBBYR_ALREADY_SENT_EMAIL;
} }
+1 -5
View File
@@ -16,7 +16,6 @@
#include "Strategic Pathing.h" #include "Strategic Pathing.h"
#include "Text.h" #include "Text.h"
#include "PopUpBox.h" #include "PopUpBox.h"
#include "Player Command.h"
#include "Cursors.h" #include "Cursors.h"
#include "Auto Resolve.h" #include "Auto Resolve.h"
#include "Sound Control.h" #include "Sound Control.h"
@@ -24,7 +23,6 @@
#include "Map Screen Interface Bottom.h" #include "Map Screen Interface Bottom.h"
#include "Overhead.h" #include "Overhead.h"
#include "Tactical Placement GUI.h" #include "Tactical Placement GUI.h"
#include "Town Militia.h"
#include "Campaign.h" #include "Campaign.h"
#include "GameSettings.h" #include "GameSettings.h"
#include "random.h" #include "random.h"
@@ -41,15 +39,13 @@
#include "Soldier macros.h" #include "Soldier macros.h"
#include "history.h" #include "history.h"
#include "Cheats.h" #include "Cheats.h"
// added by SANDRO
#include "Tactical Save.h" #include "Tactical Save.h"
#include "message.h" #include "message.h"
#include "CampaignStats.h" // added by Flugente #include "CampaignStats.h" // added by Flugente
#include "MilitiaSquads.h" // added by Flugente #include "MilitiaSquads.h" // added by Flugente
#include "SkillCheck.h" // added by Flugente #include "SkillCheck.h" // added by Flugente
#include "Strategic Transport Groups.h" #include "Strategic Transport Groups.h"
#include "Utilities.h"
#ifdef JA2UB #ifdef JA2UB
#include "ub_config.h" #include "ub_config.h"
#endif #endif
+1 -3
View File
@@ -1,7 +1,6 @@
//Queen Command.c //Queen Command.c
#include "Queen Command.h" #include "Queen Command.h"
#include "Strategic Event Handler.h"
#include "Overhead Types.h" #include "Overhead Types.h"
#include "strategicmap.h" #include "strategicmap.h"
#include "Soldier Init List.h" #include "Soldier Init List.h"
@@ -9,7 +8,7 @@
#include "random.h" #include "random.h"
#include "Strategic Movement.h" #include "Strategic Movement.h"
#include "Overhead.h" #include "Overhead.h"
#include "Strategic Pathing.h" #include <Vehicles.h>
#include "strategic.h" #include "strategic.h"
#include "message.h" #include "message.h"
#include "Map Edgepoints.h" #include "Map Edgepoints.h"
@@ -33,7 +32,6 @@
#include "Animation Data.h" #include "Animation Data.h"
#include "Game Clock.h" #include "Game Clock.h"
#include "renderworld.h" #include "renderworld.h"
#include "Town Militia.h"
#include "Dialogue Control.h" #include "Dialogue Control.h"
#include "Campaign Init.h" #include "Campaign Init.h"
#include "Meanwhile.h" #include "Meanwhile.h"
-2
View File
@@ -22,13 +22,11 @@
#include "Soldier Add.h" #include "Soldier Add.h"
#include "opplist.h" #include "opplist.h"
#include "Handle Items.h" #include "Handle Items.h"
#include "Game Clock.h"
#include "environment.h" #include "environment.h"
#include "Dialogue Control.h" #include "Dialogue Control.h"
//#include "Soldier Control.h" //#include "Soldier Control.h"
#include "Overhead.h" #include "Overhead.h"
#include "MessageBoxScreen.h" #include "MessageBoxScreen.h"
#include "stdio.h"
#include "english.h" #include "english.h"
#include "line.h" #include "line.h"
#include "Keys.h" #include "Keys.h"
+2 -2
View File
@@ -2,8 +2,8 @@
#define _QUEST_TEXT_H_ #define _QUEST_TEXT_H_
STR16 QuestDescText[]; extern STR16 *QuestDescText;
STR16 FactDescText[]; extern STR16 *FactDescText;
#endif #endif
-3
View File
@@ -8,12 +8,10 @@
#include "Handle Items.h" #include "Handle Items.h"
#include "Overhead.h" #include "Overhead.h"
#include "interface Dialogue.h" #include "interface Dialogue.h"
#include "Soldier Profile.h"
#include "Isometric Utils.h" #include "Isometric Utils.h"
#include "Render Fun.h" #include "Render Fun.h"
#include "history.h" #include "history.h"
#include "Map Screen Helicopter.h" #include "Map Screen Helicopter.h"
#include "Overhead.h"
#include "Strategic Mines.h" #include "Strategic Mines.h"
#include "Boxing.h" #include "Boxing.h"
#include "Campaign Types.h" #include "Campaign Types.h"
@@ -22,7 +20,6 @@
#include "Campaign.h" #include "Campaign.h"
#include "GameSettings.h" #include "GameSettings.h"
#include "Arms Dealer Init.h" #include "Arms Dealer Init.h"
#include "GameSettings.h"
#include "random.h" #include "random.h"
#include "Assignments.h" #include "Assignments.h"
#include "strategic.h" #include "strategic.h"
+1 -10
View File
@@ -1,20 +1,11 @@
#include "Town Militia.h" #include "Town Militia.h"
#include "Militia Control.h" #include "Militia Control.h"
#include "Campaign Types.h" #include "Campaign Types.h"
#include "strategic.h" #include "mapscreen.h"
#include "strategicmap.h" #include "strategicmap.h"
#include "Overhead.h" #include "Overhead.h"
#include "Strategic Town Loyalty.h"
#include "Utilities.h"
#include "random.h" #include "random.h"
#include "Text.h"
#include "Map Screen Interface.h"
#include "Interface.h"
#include "LaptopSave.h"
#include "Assignments.h"
#include "Squads.h"
#include "Soldier Create.h" #include "Soldier Create.h"
#include "Dialogue Control.h"
#include "Queen Command.h" #include "Queen Command.h"
#include "GameSettings.h" #include "GameSettings.h"
#include "Soldier Init List.h" #include "Soldier Init List.h"
+1 -2
View File
@@ -1,4 +1,3 @@
#include <memory.h>
#include "FileMan.h" #include "FileMan.h"
#include "types.h" #include "types.h"
#include "Scheduling.h" #include "Scheduling.h"
@@ -32,7 +31,7 @@ class SOLDIERTYPE;
#ifdef JA2EDITOR #ifdef JA2EDITOR
extern CHAR16 gszScheduleActions[ NUM_SCHEDULE_ACTIONS ][20]; extern CHAR16 (*gszScheduleActions)[20]; // NUM_SCHEDULE_ACTIONS entries
#endif #endif
BOOLEAN GetEarliestMorningScheduleEvent( SCHEDULENODE *pSchedule, UINT32 * puiTime ); BOOLEAN GetEarliestMorningScheduleEvent( SCHEDULENODE *pSchedule, UINT32 * puiTime );
+3 -7
View File
@@ -13,7 +13,6 @@
#include "strategicmap.h" #include "strategicmap.h"
#include "Game Clock.h" #include "Game Clock.h"
#include "strategic.h" #include "strategic.h"
#include "Explosion Control.h"
#include "Town Militia.h" #include "Town Militia.h"
#include "Overhead.h" #include "Overhead.h"
#include "Squads.h" #include "Squads.h"
@@ -26,15 +25,12 @@
#include "Campaign Init.h" #include "Campaign Init.h"
#include "Game Init.h" #include "Game Init.h"
#include "PreBattle Interface.h" #include "PreBattle Interface.h"
#include "Quests.h"
#include "Soldier Profile.h" #include "Soldier Profile.h"
#include "Scheduling.h" #include "Scheduling.h"
#include "Map Information.h" #include "Map Information.h"
#include "interface Dialogue.h" #include "interface Dialogue.h"
#include "ASD.h" // added by Flugente #include "ASD.h" // added by Flugente
#include "Rebel Command.h" #include "Rebel Command.h"
#include "Game Event Hook.h"
#include "Strategic Town Loyalty.h"
#include "Strategic Transport Groups.h" #include "Strategic Transport Groups.h"
#include "GameInitOptionsScreen.h" #include "GameInitOptionsScreen.h"
@@ -4885,14 +4881,14 @@ void ExecuteStrategicAIAction( UINT16 usActionCode, INT16 sSectorX, INT16 sSecto
} }
// depending on which cities the player currently holds, we send out attack on multiple cities. We try to make these attacks occur simultaneously, so the player will have to fend off // depending on which cities the player currently holds, we send out attack on multiple cities. We try to make these attacks occur simultaneously, so the player will have to fend off
// multiple gigantic attacks on different cities. Ideally, the attacks will be timed so well that the player cannot use a sqaud in both battles, even with use of the helicopter // multiple gigantic attacks on different cities. Ideally, the attacks will be timed so well that the player cannot use a squad in both battles, even with use of the helicopter
// we first have to check which cities we have to attack. For that, we simply check wether there are troops in the target sector. If not, we will attack here // we first have to check which cities we have to attack. For that, we simply check wether there are troops in the target sector. If not, we will attack here
BOOLEAN fAttack_Grumm = !(SectorInfo[ SEC_H3 ].ubNumTroops > 0); BOOLEAN fAttack_Grumm = !(SectorInfo[ SEC_H3 ].ubNumTroops > 0);
BOOLEAN fAttack_Cambria = !(SectorInfo[ SEC_H8 ].ubNumTroops > 0); BOOLEAN fAttack_Cambria = !(SectorInfo[ SEC_H8 ].ubNumTroops > 0);
BOOLEAN fCambriaSAMOccupied = !(SectorInfo[ SEC_I8 ].ubNumTroops > 0); BOOLEAN fCambriaSAMOccupied = !(SectorInfo[ SEC_I8 ].ubNumTroops > 0);
BOOLEAN fAttack_Alma = !(SectorInfo[ SEC_I13 ].ubNumTroops > 0); BOOLEAN fAttack_Alma = !(SectorInfo[ SEC_I13 ].ubNumTroops > 0);
BOOLEAN fAttack_Balime = !(SectorInfo[ SEC_L11 ].ubNumTroops > 0); BOOLEAN fAttack_Balime = !(SectorInfo[ SEC_L11 ].ubNumTroops > 0);
BOOLEAN fAttack_Chitzena = !(SectorInfo[ SEC_L11 ].ubNumTroops > 0); BOOLEAN fAttack_Chitzena = !(SectorInfo[ SEC_B2 ].ubNumTroops > 0);
ubNumSoldiers = (UINT8)( gubMinEnemyGroupSize + difficultyMod * 3); ubNumSoldiers = (UINT8)( gubMinEnemyGroupSize + difficultyMod * 3);
+3 -12
View File
@@ -1,9 +1,7 @@
#include "Strategic Event Handler.h" #include "Strategic Event Handler.h"
#include "MemMan.h" #include <Windows.h>
#include "message.h"
#include "Items.h" #include "Items.h"
#include "Handle Items.h" #include "Handle Items.h"
#include "LaptopSave.h"
#include "Tactical Save.h" #include "Tactical Save.h"
#include "strategicmap.h" #include "strategicmap.h"
#include "Quests.h" #include "Quests.h"
@@ -14,12 +12,6 @@
#include "random.h" #include "random.h"
#include "Overhead.h" #include "Overhead.h"
#include "Strategic Town Loyalty.h" #include "Strategic Town Loyalty.h"
#include "Soldier Init List.h"
#include "SaveLoadMap.h"
#include "Soldier Create.h"
#include "Soldier Add.h"
#include "renderworld.h"
#include "Soldier Profile.h"
#include "email.h" #include "email.h"
#include "strategic.h" #include "strategic.h"
#include "GameSettings.h" #include "GameSettings.h"
@@ -30,7 +22,6 @@
#include "Rebel Command.h" #include "Rebel Command.h"
#include "Luaglobal.h" #include "Luaglobal.h"
#include "connect.h"
#include "LuaInitNPCs.h" #include "LuaInitNPCs.h"
//forward declarations of common classes to eliminate includes //forward declarations of common classes to eliminate includes
@@ -698,7 +689,7 @@ void HandleNPCSystemEvent( UINT32 uiEvent )
#ifdef JA2UB #ifdef JA2UB
// no UB // no UB
#else #else
AddEmail( KING_PIN_LETTER, KING_PIN_LETTER_LENGTH, KING_PIN, GetWorldTotalMin(), -1, -1 , TYPE_EMAIL_EMAIL_EDT ); AddEmail(KING_PIN_LETTER, KING_PIN_LETTER_LENGTH, KING_PIN, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_KINGPIN_STOLEMONEY);
#endif #endif
StartQuest( QUEST_KINGPIN_MONEY, gMercProfiles[ KINGPIN ].sSectorX, gMercProfiles[ KINGPIN ].sSectorY ); StartQuest( QUEST_KINGPIN_MONEY, gMercProfiles[ KINGPIN ].sSectorX, gMercProfiles[ KINGPIN ].sSectorY );
// add event to send terrorists two days from now // add event to send terrorists two days from now
@@ -804,7 +795,7 @@ void HandleNPCSystemEvent( UINT32 uiEvent )
#ifdef JA2UB #ifdef JA2UB
// no UB // no UB
#else #else
AddEmail( ENRICO_MIGUEL, ENRICO_MIGUEL_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1 , TYPE_EMAIL_EMAIL_EDT); AddEmail(ENRICO_MIGUEL, ENRICO_MIGUEL_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_ENRICO_GREATNEWS);
#endif #endif
break; break;
-7
View File
@@ -16,7 +16,6 @@
#include "mercs.h" #include "mercs.h"
#include "Mapscreen.h" #include "Mapscreen.h"
#include "Weapons.h" #include "Weapons.h"
#include "personnel.h"
#include "Strategic Movement.h" #include "Strategic Movement.h"
#include "LaptopSave.h" #include "LaptopSave.h"
#include "message.h" #include "message.h"
@@ -25,23 +24,17 @@
#include "strategic.h" #include "strategic.h"
#include "strategicmap.h" #include "strategicmap.h"
#include "Strategic Status.h" #include "Strategic Status.h"
#include "aim.h"
#include "email.h" #include "email.h"
#include "Map Screen Interface.h" #include "Map Screen Interface.h"
#include "Campaign.h" #include "Campaign.h"
#include "Soldier Add.h" #include "Soldier Add.h"
#include "screenids.h" #include "screenids.h"
#include "gameloop.h"
#include "jascreens.h" #include "jascreens.h"
#include "Soldier macros.h" #include "Soldier macros.h"
#include "finances.h" #include "finances.h"
#include "GameSettings.h" #include "GameSettings.h"
#include "Quests.h" #include "Quests.h"
// HEADROCK HAM B1: Additional Include for Dynamic Roaming Restrictions
#include "MilitiaSquads.h"
// HEADROCK HAM 3.6: Additional include for Facility Operating Deby
#include "Facilities.h" #include "Facilities.h"
// HEADROCK HAM 3.6: And another include, for militia upkeep costs.
#include "Town Militia.h" #include "Town Militia.h"
#include "DynamicDialogue.h" // added by Flugente for HandleDynamicOpinionsDailyRefresh() #include "DynamicDialogue.h" // added by Flugente for HandleDynamicOpinionsDailyRefresh()
-1
View File
@@ -13,7 +13,6 @@
#include "Strategic Mines.h" #include "Strategic Mines.h"
#include "Strategic Mines LUA.h" #include "Strategic Mines LUA.h"
#include "UndergroundInit.h" #include "UndergroundInit.h"
#include <vfs/Core/vfs_debug.h> // for CBasicException
#include "connect.h" #include "connect.h"
-4
View File
@@ -1,18 +1,15 @@
#include <string.h>
#include "Strategic Mines.h" #include "Strategic Mines.h"
#include "finances.h" #include "finances.h"
#include "Strategic Town Loyalty.h" #include "Strategic Town Loyalty.h"
#include "strategic.h" #include "strategic.h"
#include "Game Clock.h" #include "Game Clock.h"
#include "strategicmap.h" #include "strategicmap.h"
#include "random.h"
#include "Soldier Profile.h" #include "Soldier Profile.h"
#include "Dialogue Control.h" #include "Dialogue Control.h"
#include "Map Screen Interface.h" #include "Map Screen Interface.h"
#include "Quests.h" #include "Quests.h"
#include "Creature Spreading.h" #include "Creature Spreading.h"
#include "message.h" #include "message.h"
#include "Text.h"
#include "Game Event Hook.h" #include "Game Event Hook.h"
#include "GameSettings.h" #include "GameSettings.h"
#include "Strategic AI.h" #include "Strategic AI.h"
@@ -22,7 +19,6 @@
#include "ASD.h" // added by Flugente #include "ASD.h" // added by Flugente
#include "Rebel Command.h" #include "Rebel Command.h"
#include "GameInitOptionsScreen.h"
#include "Strategic Mines LUA.h" #include "Strategic Mines LUA.h"
#include <vector> #include <vector>
-3
View File
@@ -1,6 +1,5 @@
#include "builddefines.h" #include "builddefines.h"
#include <stdlib.h> #include <stdlib.h>
#include <memory.h>
#include "Strategic Movement.h" #include "Strategic Movement.h"
#include "MemMan.h" #include "MemMan.h"
#include "DEBUG.H" #include "DEBUG.H"
@@ -34,7 +33,6 @@
#include "Tactical Save.h" #include "Tactical Save.h"
#include "Player Command.h" #include "Player Command.h"
#include "Strategic AI.h" #include "Strategic AI.h"
#include "Town Militia.h"
#include "Music Control.h" #include "Music Control.h"
#include "Campaign.h" #include "Campaign.h"
#include "Isometric Utils.h" #include "Isometric Utils.h"
@@ -53,7 +51,6 @@
#include "Strategic Transport Groups.h" #include "Strategic Transport Groups.h"
#include "MilitiaSquads.h" #include "MilitiaSquads.h"
#include "Vehicles.h"
#ifdef JA2UB #ifdef JA2UB
#include "Ja25Update.h" #include "Ja25Update.h"
+1 -7
View File
@@ -1,24 +1,18 @@
#include <stdio.h>
#include <time.h>
#include "types.h" #include "types.h"
#include "worlddef.h" #include "worlddef.h"
#include "sgp.h" #include <DEBUG.H>
#include "strategic.h" #include "strategic.h"
#include "mapscreen.h" #include "mapscreen.h"
#include "Overhead.h"
#include "strategicmap.h" #include "strategicmap.h"
#include "Strategic Pathing.h" #include "Strategic Pathing.h"
#include "Map Screen Interface Border.h"
#include "Game Clock.h" #include "Game Clock.h"
#include "Strategic Movement.h" #include "Strategic Movement.h"
#include "Campaign Types.h" #include "Campaign Types.h"
#include "Assignments.h" #include "Assignments.h"
#include "Squads.h"
#include "Vehicles.h" #include "Vehicles.h"
#include "Map Screen Helicopter.h" #include "Map Screen Helicopter.h"
#include "input.h" #include "input.h"
#include "english.h" #include "english.h"
#include "Map Screen Interface.h"
#include "Game Event Hook.h" #include "Game Event Hook.h"
#include "Strategic AI.h" #include "Strategic AI.h"
#include "Queen Command.h" // added by Flugente #include "Queen Command.h" // added by Flugente
+9 -9
View File
@@ -253,7 +253,7 @@ void HandleEnricoEmail(void)
// if creatures have attacked a mine (doesn't care if they're still there or not at the moment) // if creatures have attacked a mine (doesn't care if they're still there or not at the moment)
if (HasAnyMineBeenAttackedByMonsters() && !(gStrategicStatus.usEnricoEmailFlags & ENRICO_EMAIL_SENT_CREATURES)) if (HasAnyMineBeenAttackedByMonsters() && !(gStrategicStatus.usEnricoEmailFlags & ENRICO_EMAIL_SENT_CREATURES))
{ {
AddEmail(ENRICO_CREATURES, ENRICO_CREATURES_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT); AddEmail(ENRICO_CREATURES, ENRICO_CREATURES_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_ENRICO_CREPITUS);
gStrategicStatus.usEnricoEmailFlags |= ENRICO_EMAIL_SENT_CREATURES; gStrategicStatus.usEnricoEmailFlags |= ENRICO_EMAIL_SENT_CREATURES;
return; // avoid any other E-mail at the same time return; // avoid any other E-mail at the same time
} }
@@ -261,21 +261,21 @@ void HandleEnricoEmail(void)
if ((ubCurrentProgress >= SOME_PROGRESS_THRESHOLD) && !(gStrategicStatus.usEnricoEmailFlags & ENRICO_EMAIL_SENT_SOME_PROGRESS)) if ((ubCurrentProgress >= SOME_PROGRESS_THRESHOLD) && !(gStrategicStatus.usEnricoEmailFlags & ENRICO_EMAIL_SENT_SOME_PROGRESS))
{ {
AddEmail(ENRICO_PROG_20, ENRICO_PROG_20_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT); AddEmail(ENRICO_PROG_20, ENRICO_PROG_20_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_ENRICO_PROGRESS);
gStrategicStatus.usEnricoEmailFlags |= ENRICO_EMAIL_SENT_SOME_PROGRESS; gStrategicStatus.usEnricoEmailFlags |= ENRICO_EMAIL_SENT_SOME_PROGRESS;
return; // avoid any setback E-mail at the same time return; // avoid any setback E-mail at the same time
} }
if ((ubCurrentProgress >= ABOUT_HALFWAY_THRESHOLD) && !(gStrategicStatus.usEnricoEmailFlags & ENRICO_EMAIL_SENT_ABOUT_HALFWAY)) if ((ubCurrentProgress >= ABOUT_HALFWAY_THRESHOLD) && !(gStrategicStatus.usEnricoEmailFlags & ENRICO_EMAIL_SENT_ABOUT_HALFWAY))
{ {
AddEmail(ENRICO_PROG_55, ENRICO_PROG_55_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT); AddEmail(ENRICO_PROG_55, ENRICO_PROG_55_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_ENRICO_GOODWORK);
gStrategicStatus.usEnricoEmailFlags |= ENRICO_EMAIL_SENT_ABOUT_HALFWAY; gStrategicStatus.usEnricoEmailFlags |= ENRICO_EMAIL_SENT_ABOUT_HALFWAY;
return; // avoid any setback E-mail at the same time return; // avoid any setback E-mail at the same time
} }
if ((ubCurrentProgress >= NEARLY_DONE_THRESHOLD) && !(gStrategicStatus.usEnricoEmailFlags & ENRICO_EMAIL_SENT_NEARLY_DONE)) if ((ubCurrentProgress >= NEARLY_DONE_THRESHOLD) && !(gStrategicStatus.usEnricoEmailFlags & ENRICO_EMAIL_SENT_NEARLY_DONE))
{ {
AddEmail(ENRICO_PROG_80, ENRICO_PROG_80_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT); AddEmail(ENRICO_PROG_80, ENRICO_PROG_80_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_ENRICO_FINALPUSH);
gStrategicStatus.usEnricoEmailFlags |= ENRICO_EMAIL_SENT_NEARLY_DONE; gStrategicStatus.usEnricoEmailFlags |= ENRICO_EMAIL_SENT_NEARLY_DONE;
return; // avoid any setback E-mail at the same time return; // avoid any setback E-mail at the same time
} }
@@ -285,7 +285,7 @@ void HandleEnricoEmail(void)
(((ubHighestProgress - ubCurrentProgress) >= MINOR_SETBACK_THRESHOLD) && (gStrategicStatus.usEnricoEmailFlags & ENRICO_EMAIL_FLAG_SETBACK_OVER))) && (((ubHighestProgress - ubCurrentProgress) >= MINOR_SETBACK_THRESHOLD) && (gStrategicStatus.usEnricoEmailFlags & ENRICO_EMAIL_FLAG_SETBACK_OVER))) &&
!(gStrategicStatus.usEnricoEmailFlags & ENRICO_EMAIL_SENT_MAJOR_SETBACK)) !(gStrategicStatus.usEnricoEmailFlags & ENRICO_EMAIL_SENT_MAJOR_SETBACK))
{ {
AddEmail(ENRICO_SETBACK, ENRICO_SETBACK_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT); AddEmail(ENRICO_SETBACK, ENRICO_SETBACK_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_ENRICO_BADNEWS);
gStrategicStatus.usEnricoEmailFlags |= ENRICO_EMAIL_SENT_MAJOR_SETBACK; gStrategicStatus.usEnricoEmailFlags |= ENRICO_EMAIL_SENT_MAJOR_SETBACK;
} }
else else
@@ -293,7 +293,7 @@ void HandleEnricoEmail(void)
if (((ubHighestProgress - ubCurrentProgress) >= MINOR_SETBACK_THRESHOLD) && if (((ubHighestProgress - ubCurrentProgress) >= MINOR_SETBACK_THRESHOLD) &&
!(gStrategicStatus.usEnricoEmailFlags & (ENRICO_EMAIL_SENT_MINOR_SETBACK | ENRICO_EMAIL_SENT_MAJOR_SETBACK))) !(gStrategicStatus.usEnricoEmailFlags & (ENRICO_EMAIL_SENT_MINOR_SETBACK | ENRICO_EMAIL_SENT_MAJOR_SETBACK)))
{ {
AddEmail(ENRICO_SETBACK_2, ENRICO_SETBACK_2_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT); AddEmail(ENRICO_SETBACK_2, ENRICO_SETBACK_2_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_ENRICO_SETBACK);
gStrategicStatus.usEnricoEmailFlags |= ENRICO_EMAIL_SENT_MINOR_SETBACK; gStrategicStatus.usEnricoEmailFlags |= ENRICO_EMAIL_SENT_MINOR_SETBACK;
} }
else else
@@ -356,15 +356,15 @@ void HandleEnricoEmail(void)
switch( bComplaint ) switch( bComplaint )
{ {
case 3: case 3:
AddEmail(LACK_PLAYER_PROGRESS_3, LACK_PLAYER_PROGRESS_3_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT); AddEmail(LACK_PLAYER_PROGRESS_3, LACK_PLAYER_PROGRESS_3_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_ENRICO_DISAPPOINTED);
gStrategicStatus.usEnricoEmailFlags |= ENRICO_EMAIL_SENT_LACK_PROGRESS3; gStrategicStatus.usEnricoEmailFlags |= ENRICO_EMAIL_SENT_LACK_PROGRESS3;
break; break;
case 2: case 2:
AddEmail(LACK_PLAYER_PROGRESS_2, LACK_PLAYER_PROGRESS_2_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT); AddEmail(LACK_PLAYER_PROGRESS_2, LACK_PLAYER_PROGRESS_2_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_ENRICO_WORRIED);
gStrategicStatus.usEnricoEmailFlags |= ENRICO_EMAIL_SENT_LACK_PROGRESS2; gStrategicStatus.usEnricoEmailFlags |= ENRICO_EMAIL_SENT_LACK_PROGRESS2;
break; break;
default: default:
AddEmail(LACK_PLAYER_PROGRESS_1, LACK_PLAYER_PROGRESS_1_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT); AddEmail(LACK_PLAYER_PROGRESS_1, LACK_PLAYER_PROGRESS_1_LENGTH, MAIL_ENRICO, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT, XML_ENRICO_CONCERNED);
gStrategicStatus.usEnricoEmailFlags |= ENRICO_EMAIL_SENT_LACK_PROGRESS1; gStrategicStatus.usEnricoEmailFlags |= ENRICO_EMAIL_SENT_LACK_PROGRESS1;
break; break;
+1 -7
View File
@@ -8,7 +8,6 @@
#include "Queen Command.h" #include "Queen Command.h"
#include "Animation Data.h" #include "Animation Data.h"
#include "Quests.h" #include "Quests.h"
#include "Font.h"
#include "message.h" #include "message.h"
#include "LOS.h" #include "LOS.h"
#include "World Items.h" #include "World Items.h"
@@ -18,9 +17,7 @@
#include "random.h" #include "random.h"
#include "Strategic Movement.h" #include "Strategic Movement.h"
#include "Strategic Pathing.h" #include "Strategic Pathing.h"
#include "Vehicles.h"
#include "Game Clock.h" #include "Game Clock.h"
#include "Game Event Hook.h"
#include "Morale.h" #include "Morale.h"
#include "GameSettings.h" #include "GameSettings.h"
#include "Text.h" #include "Text.h"
@@ -29,9 +26,6 @@
#include "history.h" #include "history.h"
#include "Meanwhile.h" #include "Meanwhile.h"
#include "Strategic Status.h" #include "Strategic Status.h"
// HEADROCK HAM B1: Added include for Dynamic Roaming Militia
#include "MilitiaSquads.h"
// HEADROCK HAM 3.6: Include for Facility Debt
#include "Facilities.h" #include "Facilities.h"
#include "CampaignStats.h" // added by Flugente #include "CampaignStats.h" // added by Flugente
#include "DynamicDialogue.h" // added by Flugente #include "DynamicDialogue.h" // added by Flugente
@@ -186,7 +180,7 @@ INT16 sWorldSectorLocationOfFirstBattle = 0;
// preprocess sector for mercs in it // preprocess sector for mercs in it
extern BOOLEAN fSectorsWithSoldiers[ MAP_WORLD_X * MAP_WORLD_X ][ 4 ]; extern BOOLEAN fSectorsWithSoldiers[ MAP_WORLD_X * MAP_WORLD_X ][ 4 ];
extern CHAR16 pTownNames[MAX_TOWNS][MAX_TOWN_NAME_LENGHT]; extern CHAR16 (*pTownNames)[MAX_TOWN_NAME_LENGHT];
+2 -12
View File
@@ -1,22 +1,12 @@
#include "sgp.h" #include "sgp.h"
#include "Game Clock.h" #include "Game Clock.h"
#include "Font Control.h"
#include "Timer Control.h" #include "Timer Control.h"
#include "Overhead.h" #include "Overhead.h"
#include "Game Clock.h" #include <Overhead Types.h>
#include "message.h"
#include "worlddef.h"
#include "Soldier Create.h"
#include "Soldier Add.h"
#include "Strategic Turns.h" #include "Strategic Turns.h"
#include "Isometric Utils.h"
#include "Animation Data.h"
#include "Animation Control.h"
#include "Tactical Turns.h" #include "Tactical Turns.h"
#include "Strategic Turns.h"
#include "rt time defines.h" #include "rt time defines.h"
#include "Assignments.h"
-4
View File
@@ -7,7 +7,6 @@
#include "strategicmap.h" #include "strategicmap.h"
#include "Overhead.h" #include "Overhead.h"
#include "Strategic Town Loyalty.h" #include "Strategic Town Loyalty.h"
#include "Utilities.h"
#include "random.h" #include "random.h"
#include "Text.h" #include "Text.h"
#include "Map Screen Interface.h" #include "Map Screen Interface.h"
@@ -16,8 +15,6 @@
#include "finances.h" #include "finances.h"
#include "Game Clock.h" #include "Game Clock.h"
#include "Assignments.h" #include "Assignments.h"
#include "Squads.h"
#include "Soldier Create.h"
#include "Dialogue Control.h" #include "Dialogue Control.h"
#include "GameSettings.h" #include "GameSettings.h"
#include "Queen Command.h" #include "Queen Command.h"
@@ -39,7 +36,6 @@
#include "Soldier Control.h" #include "Soldier Control.h"
#include "soldier profile type.h" #include "soldier profile type.h"
#include "MilitiaSquads.h"
#define SIZE_OF_MILITIA_COMPLETED_TRAINING_LIST 50 #define SIZE_OF_MILITIA_COMPLETED_TRAINING_LIST 50
// temporary local global variables // temporary local global variables
-2
View File
@@ -9,8 +9,6 @@
extern "C" { extern "C" {
#include "lua.h" #include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
} }
#include "lua_state.h" #include "lua_state.h"
-1
View File
@@ -7,7 +7,6 @@
#include "FileMan.h" #include "FileMan.h"
#include "MemMan.h" #include "MemMan.h"
#include "Debug Control.h" #include "Debug Control.h"
#include "mapscreen.h"
#define MAX_CHAR_DATA_LENGTH 500 #define MAX_CHAR_DATA_LENGTH 500
+1 -1
View File
@@ -11,7 +11,7 @@
#include "sgp.h" #include "sgp.h"
#include "Debug Control.h" #include "Debug Control.h"
#include "expat.h" #include "expat.h"
#include "GameSettings.h" #include <Item Types.h>
#include "XML.h" #include "XML.h"
#include "FileMan.h" #include "FileMan.h"
#include "Campaign Types.h" #include "Campaign Types.h"
-1
View File
@@ -16,7 +16,6 @@
#include "XML.h" #include "XML.h"
#include "FileMan.h" #include "FileMan.h"
#include "Campaign Types.h" #include "Campaign Types.h"
#include "Facilities.h"
FACILITYTYPE gFacilityTypes[ MAX_NUM_FACILITY_TYPES ]; FACILITYTYPE gFacilityTypes[ MAX_NUM_FACILITY_TYPES ];
UINT16 NUM_FACILITY_TYPES = 0; UINT16 NUM_FACILITY_TYPES = 0;
-1
View File
@@ -2,7 +2,6 @@
#include "Debug Control.h" #include "Debug Control.h"
#include "expat.h" #include "expat.h"
#include "XML.h" #include "XML.h"
#include "Interface.h"
#include "Map Screen Interface Map.h" #include "Map Screen Interface Map.h"
struct struct
+1 -2
View File
@@ -1,6 +1,5 @@
#include "sgp.h" #include "sgp.h"
#include "Map Screen Interface.h" #include <FileMan.h>
#include "Overhead.h"
#include "Debug Control.h" #include "Debug Control.h"
#include "expat.h" #include "expat.h"
#include "XML.h" #include "XML.h"
-2
View File
@@ -13,11 +13,9 @@
#include "XML.h" #include "XML.h"
#include "expat.h" #include "expat.h"
#include "string.h" #include "string.h"
#include "Campaign Types.h"
#include "FileMan.h" #include "FileMan.h"
#include "MemMan.h" #include "MemMan.h"
#include "Debug Control.h" #include "Debug Control.h"
#include "mapscreen.h"
#define MAX_CHAR_DATA_LENGTH 500 #define MAX_CHAR_DATA_LENGTH 500

Some files were not shown because too many files have changed in this diff Show More