Compare commits

..
179 Commits
Author SHA1 Message Date
NovaRain 199502782b Fixed a crash bug in CorpseLineOfFireFix (from commit 521b6c7, #270)
Updated version number for hotfix.
2019-11-19 14:02:17 +08:00
NovaRain 09d97464c8 Merge branch 'develop' 2019-11-07 09:50:16 +08:00
NovaRain b8de20d455 Fixed gl_partycontrol change in commit 9fab4b3 2019-11-07 09:45:57 +08:00
NovaRain 4ae09522f0 Merge branch 'develop' 2019-11-05 09:28:03 +08:00
NovaRain 76cc0471d6 Minor edits to Structs.h and HookScripts.cpp
Fixed Debug build configuration in project file.
2019-11-05 09:18:46 +08:00
NovaRain 2e39325521 Updated define_extra.h
Added define of OBJ_DATA_SCRIPT_INDEX to define_extra.h.
2019-11-04 21:23:11 +08:00
NovaRain f3abea3462 Updated script mods. 2019-11-03 10:05:55 +08:00
NovaRain d0c4bc3b78 Added "get_inven_ap_cost" script function
Added grey outline to controlled critters at the beginning of the turn.
2019-11-02 10:24:05 +08:00
NovaRain 2e655945c0 Added support for displaying item AP cost up to 19 (#228)
* Requires an extended MVENUM.frm in the art\intrface\ directory to
display properly (included in sfal.dat).
2019-10-31 12:46:42 +08:00
NovaRain 521b6c7e08 Fixed the previous commit (conflict with INVENWIELD hook)
Moved some option codes from MiscPatches.cpp to other modules.

Removed CorpseLineOfFireFix from ddraw.ini (always enabled).
2019-10-31 11:28:05 +08:00
NovaRain c348925c95 Fixed PM's weapon being misplaced after level up 2019-10-30 21:13:46 +08:00
NovaRain 0d023c32db Improved and moved the address conflict checking to CheckAddress.cpp/h
Added ddraw_CheckAddr.ini file to check conflicts properly.
Some code fixes/edits.
2019-10-29 10:41:03 +08:00
NovaRain 0570062123 Renamed AnimationsAtOnceLimit module to Animations 2019-10-28 09:44:32 +08:00
NovaRain a6c09d4d5c Added a debug message about missing art file for critters
Minor edit to sfall.h.
2019-10-25 10:21:01 +08:00
NovaRain 20119daf3d Minor code edit to previous commit 2019-10-23 09:36:13 +08:00
NovaRain 3553d45e5c Engine now uses 'English' as the fallback language for all msg files (#256) 2019-10-22 15:42:25 +08:00
NovaRain fc9c260a9f Cleanup in solution files 2019-10-22 09:44:17 +08:00
NovaRain 9f27c160ff Added "add_trait" script function 2019-10-20 19:29:19 +08:00
NovaRain 1f156d39ae Fixed amount argument for critter_add/rm_trait functions 2019-10-17 09:38:28 +08:00
NovaRain 3d9febecb9 Replaced GetPrivateProfileInt/String with wrapper functions
Fixed crash when a name in PremadePaths exceeds 11 characters.
2019-10-16 13:09:02 +08:00
NovaRain 9fab4b32ee Fixed inherited perks in gl_partycontrol 2019-10-15 22:17:08 +08:00
NovaRain d762f57cbc Added a new flag to MainMenuFontColour option
* set bit 1 of the first byte to only change the color of version text
(old behavior)
2019-10-15 11:40:59 +08:00
NovaRain e13a27469f Refactored CritterStats.cpp
Minor edits to to some code.
2019-10-15 10:55:07 +08:00
NovaRain ab2283f0e3 Rewrote set_xp_mod, get_sfall_args, set_sfall_arg functions in C++
Cleanup in ASM scripting handlers code.
2019-10-14 15:29:03 +08:00
NovaRain 882a601b0c Added optional options to the perks ini file
* to toggle modification sections for perks and traits.

Reorganized ini reading functions in main.cpp, and edited related code
in Perks/Stats modules.

Added error/warning icons to message boxes.
2019-10-14 10:19:11 +08:00
NovaRain 85dfb35f01 Updated NPC armor appearance mod script
Added command_lite.h header file (from EcCo mod).
Added alternative npcarmor.ini for vanilla Fallout 2.
2019-10-11 00:49:15 +08:00
NovaRain 614caded92 Fixed art_change_fid_num when the hero appearance mod is enabled
* before it set player's FID incorrectly if PC is in other appearance.

Prevented the player from equipping a weapon when player's current
appearance doesn't have the animation for it.

Fixed the player name while controlling other critters.

Edited texts for some error message boxes.
2019-10-10 11:48:33 +08:00
NovaRain 1b6d6179a1 Added "unwield_slot" script function
Re-fixed obj_art_fid for player's FID (commit 50f4885)
2019-10-08 10:53:47 +08:00
NovaRain 6ede19ceec Fixed inven_unwield script function
* now it updates the interface slot for the player properly.

Fixed some code in PartyControl module.
2019-10-07 13:30:49 +08:00
NovaRain 172495bdc5 Fixed arg1 of HOOK_INVENWIELD when calling move_obj_inven_to_obj
Moved critter stats code from Stats.cpp to a new CritterStats module.
Moved CRC files from Modules folder to the root folder of the project.
Moved get/set_proto_data functions from Misc to Objects handler.
2019-10-05 07:47:17 +08:00
NovaRain 2187854bf2 Improved the implementation of HOOK_INVENWIELD (#266)
* it now runs for the player and NPCs when removing equipped items.
* added an additional argument.

Fixed drop_obj script function not removing the equipped armor properly
for the player and party members.

Fixed incorrect PIDs for RP new party members in npcarmor.ini.
2019-10-04 20:23:49 +08:00
NovaRain 8d29e04712 Fixed move_obj_inven_to_obj script function
* it didn't remove the equipped armor properly for the player and party
members, resulting in broken armor stats.

Added a check for valid objects to get/set_object_data functions.

Some code edits to HeroAppearance.cpp.
2019-09-30 07:45:49 +08:00
NovaRain 8468fee7b4 Improved file searching for hero appearance mod (#251)
* now it will search files in .dat files and folders simultaneously.

* files in folders have higher priority than .dat files.
2019-09-28 10:45:36 +08:00
NovaRain 000b116895 Removed NPCStage6Fix from ddraw.ini (always enabled)
Moved the code of NPCStage6Fix to BugFixes module.
(to its original relative location, right above MultiHexPathingFix)

Reorganized some code in BugFixes.cpp.
2019-09-27 20:50:20 +08:00
NovaRain 98199b4e7e Refactored code in Arrays.cpp and fixed save_array() script function.
* related to "corrupted" savegames in #265.
2019-09-24 12:30:02 +08:00
NovaRain a17471b624 Some minor changes:
* Improved the display of the car fuel gauge on the world map interface.

* Expanded set_critter_stat function to allow changing STAT_unused and
STAT_dmg_* stats for the player, and STAT_unused for other critters.

* Changed AllowUnsafeScripting to not require sfall debugging mode.

* Changed NPCStage6Fix to be enabled by default.

* Added a new value to AIBestWeaponFix to change the priority multiplier
for having weapon perk to 3x.

* Added RP's extra weapon anim codes to vanilla PMs in npcarmor.ini.

Updated version number.
2019-09-24 12:20:16 +08:00
NovaRain 7f474bcb6d Merge branch 'develop' 2019-09-15 07:19:08 +08:00
NovaRain 91ac51d3ff Changed CorpseLineOfFireFix to be enabled by default 2019-09-15 07:16:38 +08:00
NovaRain ffe9d4c8cf Removed duplicate code from intface_redraw_ engine function
Minor edits to code/documents.
2019-09-14 08:50:54 +08:00
NovaRain affb7c4020 Updated UI hotkeys example mod. 2019-09-12 22:59:51 +08:00
NovaRain 2bdd469919 Added "register_hook_proc_spec" script function
Updated documents to address the new function.
2019-09-12 22:16:17 +08:00
NovaRain e23c224535 Excluded timed_event_p_proc from HOOK_STDPROCEDURE 2019-09-12 19:38:30 +08:00
NovaRain 693b78f9db Added a new hook: HOOK_STDPROCEDURE
Optimized execution for global/hook scripts.
2019-09-11 12:40:18 +08:00
NovaRain e55a4f95d2 Fixed AllowLargeTiles option (broken in 4.1.8)
(due to commit d2cf728)
2019-09-10 09:37:46 +08:00
NovaRain 66d4db10ad Fixed some non-critical memory address conflicts
Renamed F1EngineBehavior option to Fallout1Behavior.
2019-09-10 06:57:21 +08:00
NovaRain 4afde14f04 Added F1EngineBehavior option to change some of F2 engine funcs to F1
* disables playing the final movie/credits after the endgame slideshow.
* disables halving the weight for power armor items.

Moved FastShotFix and Ray's combat_p_proc fix from MiscPatches to other
modules.
2019-09-09 14:46:54 +08:00
NovaRain 4975177c34 Added printing a list of all mem addrs in the log for debug version
* for checking hidden memory conflicts.
2019-09-09 12:55:24 +08:00
NovaRain fee142342c Added a call to load f2_res.dll library from sfall code
Fixed some code that depends on HRP addresses.
2019-09-08 10:43:16 +08:00
NovaRain 28cd8f6f43 Changed CriticalOverrides.ini to be parsed only once at game start
* before the ini was always reparsed after each game load/reset. This
should improve the performance.
2019-09-07 20:59:38 +08:00
NovaRain 7e317134dc Removed the dependency of Body_Torso from Body_Uncalled hit modifier
Re-added BodyHit_Torso to ddraw.ini.
Reverted set_bodypart_hit_modifier function to pre-3.7.4 behavior.
2019-09-07 20:03:29 +08:00
NovaRain 19252ba507 Added options for tweaking some engine perks to the perks ini file
Added some engine function defines & util func for possible later use.
2019-09-06 13:11:27 +08:00
NovaRain 694b3995ef Added a compute damage example script.
Updated compiled scripts due to main.h changes.
2019-09-01 11:37:04 +08:00
NovaRain fb718e6fad Increased the width of the car fuel gauge to 2px 2019-09-01 09:00:27 +08:00
NovaRain 241f174bae Tweaked reordering the execution of functions before exiting the map
Added event clearing for active explosives before exiting the map.

Minor code edit to BARTERPRICE hook.
2019-08-31 19:38:59 +08:00
NovaRain 5e693aa955 Fixed some args in HOOK_BARTERPRICE hook when trading with PM
And added a new argument to indicate trading with a party member.
2019-08-27 22:24:30 +08:00
NovaRain b2fa359e3c Replaced 'Take All' hotkey mod with UI hotkeys mod
Minor edits to documents.
2019-08-26 21:47:52 +08:00
NovaRain ab5d7fdf97 Fixed player stuck at "climbing" frame after ladder climbing animation
Removed the previous fix about player's direction.

Some code format edits.
2019-08-25 10:09:17 +08:00
NovaRain 7f59d7a7fd Added MainMenuBigFontColour option to change button text color
Changed the fix for player's direction after climbing ladder (9fea480)
2019-08-23 10:32:07 +08:00
NovaRain 477ff9668c Added a new argument to HOOK_ADJUSTFID.
Fixed incorrect FRM being displayed for opened bag/backpack in the
inventory when Hero Appearance Mod is enabled (#262)

Fixed MainMenuFontColour not changing the font color for the copyright
text on the main menu (#261)

Code correction in main.cpp.
2019-08-22 13:12:32 +08:00
NovaRain 9fea48093e Fixed player's position if entrance tile is blocked when entering a map
Fixed player's direction after leaving a map via ladder/stairs.
Other minor fixes in sfall code.
2019-08-22 11:32:33 +08:00
NovaRain 09e282cd65 Corrected/edited some code. 2019-08-20 14:53:33 +08:00
NovaRain 5c4eb31bc3 Added IniConfigFolder option to override the path of all scripted ini
Fixed a crash bug in message_str_game function when passing a negative
fileId value.
2019-08-20 00:26:35 +08:00
NovaRain 9d0b061d1b Added OverrideCriticalFile option for specifying alternative crit file
Added code for preparing clearing map_update_event in queue.
2019-08-19 14:12:03 +08:00
NovaRain 2b93bf6045 Added new game mode COUNTERWIN.
Improved add_extra_msg_file function to use "English" as the fallback
language for loading msg files (#256)
2019-08-17 20:44:41 +08:00
NovaRain 2dfbe903e7 Added an additional 'Energy Weapon' flag to ext flags in weapon protos
* it forces the weapon to use EW skill regardless of its damage type.

Placed an object with PID 0x5000004 (corpse blood) to the lower z-layer
of the tile.
2019-08-16 15:02:14 +08:00
NovaRain cce9697dfd Set DAM_BACKWASH_ flag for attacker before calling combat damage (#246) 2019-08-14 11:48:45 +08:00
NovaRain 8855326e41 Fixed the lost car bug with using the Town/World button
(http://www.nma-fallout.com/threads/fallout-2-vehicle-bug.217993/)
2019-08-13 13:53:41 +08:00
NovaRain da864c9789 Rewrote the code of force_encounter functions
Added a new flag to force_encounter_with_flags.
2019-08-12 12:06:45 +08:00
NovaRain 50f4885407 Fixed obj_art_fid for dude_obj when the hero appearance mod is enabled 2019-08-11 23:46:26 +08:00
NovaRain f59d104975 Fixed create_message_window script function
* prevent it from creating multiple message windows.

Capped StartMonth/StartDay in case people didn't notice "0-indexed".
Minor fix for assigning an ID to objects when loading a map.
Small optimization for sfall gl/hs scripts.
2019-08-11 10:58:32 +08:00
NovaRain 744213dea1 Fixed unable to reach the specified max level in XPTable
Fixed the AP cost display issue in NPC combat control mod.
Added a tweak for weapon perk modifier to AIBestWeaponFix.
Minor edits to code/documents.
Updated version number.
2019-08-09 11:47:33 +08:00
NovaRain 7c23bb2dc2 Merge branch 'develop' 2019-07-18 09:33:44 +08:00
NovaRain 839e8d2636 Minor edits to ddraw.ini 2019-07-18 09:26:47 +08:00
NovaRain 01bbd111d3 Fixed elevation check in get/set_can_rest_on_map
Changed DebugMode to not require enabling sfall debugging mode.
Changed version to 4.1.9.1 as maintenance release.
2019-07-17 10:02:20 +08:00
NovaRain 16fbc0f93f Changed "add_extra_msg_file" script function (#249)
* added auto ID assignment for the message file.
2019-07-16 12:45:22 +08:00
NovaRain 2bfb886ece Fixed two issues in party control code
* perks picked in combat disappeared after switching control to other
critters.

* player's selected weapon mode was not saved.
2019-07-16 10:51:26 +08:00
NovaRain b33277c35a Fixed the error handling on loading sfallgv.sav
* to improve backward compatibility with older saved games.
2019-07-15 20:49:55 +08:00
NovaRain e127be29e8 Fixed key_pressed function not working in KEYPRESS hook (#248)
Minor text edits to CombatHs.cpp.
Updated version number.
2019-07-15 09:54:41 +08:00
NovaRain 361ebbe939 Added PerksList option to gl_partycontrol 2019-07-14 10:38:17 +08:00
NovaRain 2cdf0dcf48 Merge branch 'develop' 2019-07-12 07:37:09 +08:00
NovaRain b41a870f3b Fixed flickering when switching control in gl_partycontrol 2019-07-12 07:36:47 +08:00
NovaRain cccdd4cb16 Merge branch 'develop' 2019-07-11 09:25:06 +08:00
NovaRain 9a5ea216c4 Excluded barter mode for ItemCounterDefaultMax
Minor edits to document/code.
2019-07-10 10:47:25 +08:00
NovaRain 8d1b959f20 Added assignment of unique IDs to items/critters for event queue
* to prevent event queue being added to the incorrect object on the map.
2019-07-09 21:47:27 +08:00
NovaRain c3080a2db9 Changed the implementation of the bug fix in commit 02a3bbd
Added additional fix for "NPC turns into a container" bug.
2019-07-09 10:45:53 +08:00
NovaRain 32ecdcfdd9 Fixed bugs related to knockout/knockdown critters
Fixed knocked down critters not playing stand up animation after the
combat ends.

Fixed dead NPCs reloading their weapons after the combat ends.
2019-07-06 22:27:06 +08:00
NovaRain 914655085a Fixed the execution of functions before exiting map in commit 045926c 2019-07-06 01:53:46 +08:00
NovaRain cde3157153 Added KnockoutTime option to change the duration of the knockout effect.
Renamed WorldMapInterface option to ExpandWorldMap.

Fixed op_lookup_string_proc_ engine function not searching the last
procedure in a script.
2019-07-04 13:49:11 +08:00
NovaRain e2865b751b Added reassignment of IDs for critters upon first loading a map
* for fixing mapper not checking existing object IDs and generating
duplicated ones for new critters added on a map.
2019-07-03 15:08:26 +08:00
NovaRain 274e141277 Added a check for the DAM_KNOCKED_OUT flag
to wield_obj_critter/inven_unwield script functions.

Added climbing ladders to "interrupted player's movement in combat" fix.
2019-07-03 12:09:39 +08:00
NovaRain d8d3bade94 Fixed XP stealing bug in gl_partycontrol.
* if the combat ends automatically after a controlled critter's turn,
it would get the player's combat xp and "level up".
2019-07-01 13:06:32 +08:00
NovaRain ff2ebdc82a Added "combat ends normally" event to HOOK_COMBATTURN
Fixed a crash in COMBATTURN hook when loading in combat mode while
controlling critters.

Fixed critter control algorithm in PartyControl.cpp and set_dude_obj
not accepting a null argument.
2019-07-01 12:15:32 +08:00
NovaRain 2ffdc43869 Added a memory conflict warning to the log. 2019-07-01 06:34:00 +08:00
NovaRain 9f585ba7e6 Added SkipOpeningMovies=2 to also skip the splash screen 2019-06-29 20:01:41 +08:00
NovaRain 3f96e42730 Added ActionPointsBar option to [Interface] in INI
Added a new Interface module.
Moved WorldMapInterface to the new [Interface] section.
Moved some code from Worldmap.cpp to Interface.cpp.
Updated sfall.dat with new IFACE_E.frm and HR_IFACE_800E.frm files.
2019-06-28 21:40:57 +08:00
NovaRain d3f7e2a79a Moved unlisted FRM functions and structure from HeroAppearance.cpp to EngineUtils.cpp/Structs.h.
Tweaked the formate of some text in sfall log.
2019-06-28 07:33:47 +08:00
NovaRain f9ca201741 Fixed combat not ending automatically when there are no hostiles. 2019-06-26 06:10:47 +08:00
NovaRain 06a115070b Added AutoSearchPath option to [ExtraPatches].
* this provides a simpler way to load assorted .dat files without the
need of adding/editing PatchFileXX options in ddraw.ini.
2019-06-25 22:53:15 +08:00
NovaRain 56764c86c7 Changed DataLoadOrderPatch to be 1 by default. 2019-06-24 12:18:00 +08:00
NovaRain b8b16d5449 Fixed get/set_critter_*_stat not accepting a pointer to the player.
* for the compatibility with earlier versions.
2019-06-23 08:18:34 +08:00
NovaRain 1020851bcd Corrected the position of entrances on town maps for WorldMapInterface. 2019-06-19 10:56:14 +08:00
NovaRain e790178e66 Fixed fade in/out of the screen in DX9 mode. 2019-06-18 09:25:53 +08:00
NovaRain 28059ce890 Fixed Scout perk being taken into account for mark_area_known function.
* technically it should only effect the visibility of tiles when you're
exploring on the world map.

Fixed the incorrect coordinates for small/medium location circles when
highlighting their sub-tiles (one of bugs listed in #228)

Slightly adjusted the position/size for Local variables button in debug
editor.
2019-06-17 11:19:40 +08:00
NovaRain 04d06a8167 Added viewing and modifying local vars for critters to the debug editor. 2019-06-15 09:57:14 +08:00
NovaRain ddda559898 Added "add_extra_msg_file" and "metarule_exist" script functions. 2019-06-14 11:05:42 +08:00
NovaRain 88438edbc5 Code correction to previous two commits. 2019-06-12 09:10:29 +08:00
NovaRain 1e9dd57224 Party Control: added saving selected weapon mode.
* before weapon mode got reset when switching control between critters.
2019-06-11 10:10:00 +08:00
NovaRain 7826a937db Rewrote get_attack_type script function in C++. 2019-06-11 09:37:49 +08:00
NovaRain 480de50f88 Fixed the interrupted player's movement in combat.
* it happens when the player try to use objects with Bonus Move APs
available. The distance has to be greater than remaining normal APs.

Replaced calling db_dir_entry_ with db_access_ in some code.
2019-06-10 09:43:49 +08:00
NovaRain a64268a88a Fixed the position of the target maker for location circles.
Improved WorldMapInterface option, now the game won't crash when
WorldMap.frm is not found.
2019-06-09 11:33:04 +08:00
NovaRain fcd5e8475b Fixed the reserve movement fix in commit 02a3bbd.
* before the reserve movement didn't work correctly if the player has
free move AP (yellow, from Bonus Move) left.
2019-06-09 07:22:47 +08:00
NovaRain 808ba05a0b Added WorldMapInterface option to expand the world map interface.
Fixed the up/down button images in the world map interface.
Added loading sfall.dat resource file, which contains new WorldMap.frm
and AppHeroWin.frm.
2019-06-08 23:53:56 +08:00
NovaRain 02a3bbd536 Fixed anim_move_to_tile_ ignoring the distance argument.
* this also fixes the broken "reserve movement" feature.
2019-06-08 09:45:01 +08:00
NovaRain 137644aa72 Fixed a few bugs in WorldMapSlots option.
Updated version number.
2019-06-06 10:18:10 +08:00
NovaRain 250e7bef8a Merge branch 'develop' 2019-06-03 09:15:05 +08:00
NovaRain 229911336b Fixed a bug in knockback modifier functions that could crash the game (#237)
Updated version number.
Improved compatibility with older processors (pre-SSE2)
2019-06-03 09:14:45 +08:00
NovaRain e105b8c328 Merge branch 'develop' 2019-05-31 09:34:22 +08:00
NovaRain e5e2ef5ab0 Minor edit to gl_ammomod example script. 2019-05-31 09:10:36 +08:00
NovaRain 8778d1c695 Improved the fix for the removal of PM corpses.
* to prevent save file corruption (one of bugs listed in #228). Now
party member's corpse is removed in the same way as all other critter
corpses.

Simplified the ASM code of combat_ai_hack (take 2).
2019-05-30 10:30:25 +08:00
NovaRain 4ee20e06b4 Fixed the code for removal of party member's corpse when loading the map. 2019-05-29 09:35:38 +08:00
NovaRain aa5bd95dfe Fixed AI not checking min HP properly for using stims.
Edited the code of InventoryApCost in Inventory.cpp.
Minor edits to some other code.
2019-05-28 13:51:40 +08:00
NovaRain aa221adea3 Fix for fake perks related functions.
* now fake perks are no longer added to all controlled critters.

Added alternative functions that allow to add fake perks to party
member NPC.

Rewrote set_fake_perk/trait, set_selectable_perk, has_fake_perk/trait
functions in C++.
2019-05-27 12:01:09 +08:00
NovaRain 22cdc32d26 Simplified the ASM code of combat_ai_hack. 2019-05-24 20:00:07 +08:00
NovaRain fca3307bd9 Rewrote the fix to allow fleeing NPC to use drugs.
Code edits to Perks.cpp.
2019-05-24 10:35:50 +08:00
NovaRain 04d7f4aefa Removed LoadProtoMaxLimit option from ddraw.ini.
* now the proto limit is always handled by set_proto_data function when
needed, since the related issue was originally from using it to process
lots of protos at once.
2019-05-23 17:04:51 +08:00
NovaRain f5317ad5ee Rewrote NPC fleeing fix.
Removed DialogOptions9Lines option from ddraw.ini.
2019-05-22 10:41:37 +08:00
NovaRain 119b0afacd Fixed getting perks and traits of real_dude_obj while controlling other NPCs.
* When switching control to party members, their own table of perks is
copied into player's current perk table.

Fixed the position of the items in active item slots after ending the
NPC control (NPC's wielded weapon should always be in the right slot).
2019-05-22 10:32:43 +08:00
NovaRain 10a6b76d5b Increased the max text width of the info card in the char screen.
* the increased the width is according to the max width of one char in
font (uppercase A seems to be the widest with 8 px).
2019-05-20 11:25:42 +08:00
NovaRain 3a86f1d134 Added two fixes for NPC fleeing in combat.
* added fix to allow fleeing NPC to use drugs.
* fixed NPC stuck in fleeing mode when the hit chance of a target was
too low.
2019-05-19 15:38:54 +08:00
NovaRain 30ac2a9690 Slightly simplified the code of NPCStage6Fix.
Moved NPCsTryToSpendExtraAP to AI.cpp.
2019-05-19 08:15:45 +08:00
NovaRain 16a0ef3bdf Improved the fix in previous commit.
* now ignoring the inv capacity only happens in combat for preventing
AI inf loop. The vanilla behavior still applies outside of combat.
* added a correct message for NPC not being able to pick up an item.
2019-05-18 10:55:38 +08:00
NovaRain 58d5271d49 Fixed two item pickup issues for NPC.
* message for the player is displayed when the NPC cannot pick up item.
* if in combat, NPC will also be stuck in a loop of picking up item.

Fixed HideObjIsNullMsg option.
2019-05-17 09:55:09 +08:00
NovaRain 6a226aef34 Added a tweak to op_use_obj_on_obj_hack in BugFixes (from Mr.Stalin)
Minor edits to code/documents.
2019-05-14 07:16:23 +08:00
NovaRain 6ac9949feb Added "dropping item on the character portrait" event to HOOK_INVENTORYMOVE.
Rewrote get_ini_setting/string script functions in C++.
Rewrote Ray's combat_p_proc fix.
Minor code edits.
2019-05-13 11:29:24 +08:00
NovaRain d2cf728131 Refactored code in Tiles.cpp and EngineUtils.cpp.
Moved RegAnimCombatCheck code from ScriptExtender.cpp to Anims.cpp.
2019-05-11 09:56:58 +08:00
NovaRain a63ea24572 Added aspect ratio scaling to draw_image_scaled.
Rewrote create_message_window script function in C++.
2019-05-11 08:49:30 +08:00
NovaRain 4b221b5367 Improved the error handling for previous commit.
Reverted the change in Tiles.cpp from commit 4bc1a422c3.
2019-05-10 10:38:51 +08:00
NovaRain 02c2df50ac Added "draw_image" and "draw_image_scaled" script functions. 2019-05-09 22:22:02 +08:00
NovaRain 4bc1a422c3 Changed the names of FRM structures.
Added some functions for later use.
Fixed get FID type.
2019-05-09 10:11:26 +08:00
NovaRain 88cf6dcd32 Moved Test_ForceFloats to [Debugging] section.
* Since it's never mentioned anywhere, should be OK moving it before
the formal release.
2019-05-07 23:04:00 +08:00
NovaRain 943cd5d2dc Code edits on ScriptShaders & OpcodeContext.cpp.
Minor edits on some other code.
Added the missing Test_ForceFloats option to ddraw.ini.
2019-05-07 13:49:26 +08:00
NovaRain bc47c87583 Moved script shader functions code from Graphics.cpp to a separate module. 2019-05-05 10:53:50 +08:00
NovaRain 0f98591b77 Code refactoring in Arrays.cpp.
Added a new example mod gl_ammomod to modderspack.
2019-05-05 08:47:08 +08:00
NovaRain 42cf5ded97 Unset the read-only attribute for party member's .sav proto files 2019-05-02 14:23:02 +08:00
NovaRain edac0ba393 Fixed the issue with read-only party member base protos.
* the protos being placed in the proto\critters\ directory will cause
party member's stats reset after loading a saved game.
2019-05-01 20:56:35 +08:00
NovaRain 045926c860 Reordered the execution of functions before exiting the map
* partyMemberSaveProtos and queue_leaving_map are now called after
executing map_exit_p_proc procedure.

Replaced some obsolete implementation in ScriptExtender/Worldmap.
2019-05-01 09:45:51 +08:00
NovaRain c65e1ec6d3 Fixed the argument value of dialogue_reaction script function 2019-04-30 11:17:37 +08:00
NovaRain 6a38fd0794 Replaced opcode/metarule names in error messages
* before they are explicitly specified in text. Now the names are taken
from the opcode/metarule tables.
2019-04-30 10:09:34 +08:00
NovaRain f788246283 Reordered sfall modules to fix the issue #235
Unified the directory separator in documents.
Updated version number.
2019-04-30 06:45:22 +08:00
NovaRain 428ac62883 Merge branch 'develop' 2019-04-24 20:27:26 +08:00
NovaRain 1b1b85c3b4 Rewrote Force Encounter script function code.
Added two functions to Utils.cpp.
Minor edits to BugFixes.cpp and ddraw.ini.
2019-04-24 10:05:47 +08:00
NovaRain 28493432db Replaced ASM code in various opcodes with macros (from Mr.Stalin)
* The two macros are from sfall 3.x.
2019-04-23 11:38:21 +08:00
NovaRain 1d6150e341 Fixed the previous TalkingHeads.cpp commit.
* Now textures for all animation sets will be displayed correctly.

Some code edits to AI.cpp, MainMenu.cpp, Movies.cpp.
2019-04-22 10:37:34 +08:00
NovaRain 3798e5239d Fixed and improved Use32BitHeadGraphics option:
* Fixed the position of the talking head texture when the game res is
larger than 640x480.

* Added the support to use textures without the need of patching
talking head FRM files.

Fixed a bug in item highlighting that item keeps its outline if player
picked it up while holding the highlight key.
2019-04-20 22:49:02 +08:00
NovaRain 533020cd8b Renamed AmmoMod module to DamageMod. 2019-04-19 09:10:31 +08:00
NovaRain 69e3faeb7d Reverted some changes in previous commit.
* Now weapons with knockback modifiers applied still stack with others
in the inventory.

Rewrote the code of set/remove_*_knockback functions in C++.
2019-04-17 10:28:14 +08:00
NovaRain 4cdc028cb7 Further implementation of unique ID.
* weapons with knockback modifiers applied will have a special ID
(negative value) that work as a temporary UID for the current game
session.

Added checks on object types to functions in Combat module.
Added the second argument to set_unique_id script function.
2019-04-16 20:33:00 +08:00
NovaRain e92b8021c0 Fixed the start procedure not being called correctly
* If the required standard script procedure is missing, the procedure
above the start proc is called instead of the start (from Crafty)

Added a id reversion mechanism to remove_weapon_knockback.
2019-04-15 12:57:44 +08:00
NovaRain 601d25be97 Fixed adding fake perks to the player (#232) 2019-04-14 07:36:57 +08:00
NovaRain 7a2b7dee6a Added "picking up item" event to HOOK_INVENTORYMOVE.
Added "set_unique_id" script function.
2019-04-12 12:15:55 +08:00
NovaRain dcf0561653 Added new HOOK_SNEAK (from Mr.Stalin) 2019-04-10 17:13:00 +08:00
NovaRain 5c3f10db91 Edited/reorganized some code.
Updated proto offsets in define_extra.h.
2019-04-10 09:46:31 +08:00
NovaRain 3e49922898 Extended the number of simultaneously displayed notification boxes
(now it depends on on the resolution of the game.)
2019-04-09 11:03:17 +08:00
NovaRain 564202f225 Re-fixed CheckWeaponAmmoCost option. 2019-04-08 00:32:04 +08:00
NovaRain 143f6895a4 Fixed a bug in CheckWeaponAmmoCost (from Mr.Stalin)
It caused NPCs to not switch to other weapons when there is not enough
ammo to shoot.
Moved CheckWeaponAmmoCost code from Inventory.cpp to Combat.cpp.
Now the debug editor starts at the center of the screen.
Updated the previous fix in NPC combat control mod.
2019-04-07 10:59:02 +08:00
NovaRain d946850af4 Fixed the weapon duplication bug in NPC combat control mod. 2019-04-06 09:33:27 +08:00
NovaRain ae7245579e Fixed setting array values in the debug editor.
Some code corrections.
2019-04-06 08:24:49 +08:00
NovaRain 563fdddc7e Added setting array values for the debug editor. 2019-04-05 12:03:25 +08:00
NovaRain 06bbe3ceb5 Updates to sfall debug editor (part 1) 2019-04-05 09:17:43 +08:00
NovaRain 56083c3bc6 Updated sfall debug editor (from Mr.Stalin)
Formatted the code of sfall debug editor.
2019-04-04 10:22:02 +08:00
NovaRain dee0065863 Removed PipBoyAutomaps from ddraw.ini.
* By default nothing will change with the option enabled, because all
data is copied from the vanilla map list, and modders still need to add
the new 'automap' parameter to override the engine values to add/remove
areas in the automap list. Basically the option itself is redundant.
2019-04-03 22:01:53 +08:00
NovaRain 3614ee355f Added an option to add support for the new 'automap=yes/no' parameter to maps.txt (from Mr.Stalin)
Fixed "out of bounds" bug when printing the automap list.
2019-04-02 10:31:08 +08:00
NovaRain 7c05a0fea9 Fixed a duplicate obj_dude script being created when loading a saved game.
Added a fix to prevent the reserved object IDs of the player and party members from being generated for other objects.
Removed a redundant line in MiscPatches.cpp.
2019-03-31 22:50:48 +08:00
NovaRain dd87a83025 Added DisableSpecialMapIDs option (from Mr.Stalin)
Fixed the overflow of the automap tables when the number of maps in maps.txt is more than 160.
2019-03-30 11:07:16 +08:00
NovaRain da3fd5c671 Replaced the fix in the previous commit with a fix for unexplored areas being revealed on the automap when entering a map. 2019-03-28 12:01:41 +08:00
NovaRain acc51cae03 Fixed player's position when entering a map.
This also fixed the issue with getting player's position in the map_enter_p_proc procedure.
2019-03-27 20:07:40 +08:00
NovaRain 8332a2bba7 Fixed incorrect use of emplace_back() method for the vector.
Replaced some push_back() with emplace_back() method.
Changed BlockCall to use the long NOP.
2019-03-26 22:33:05 +08:00
NovaRain 2cfa20ed47 Implemented the critter individualization (from Mr.Stalin):
* each critter has its own independent base/bonus stats, separated from other critters sharing the same PID.
* get/set_critter_base/extra_stat script functions now only set stats for a specific critter.

Rewrote get/set_pc_base/extra_stat and get/set_critter_base/extra_stat script functions in C++.
Fixed the argument numbering in error messages when validating arguments.
Minor edits on some code.
Update solution files and version number.
2019-03-26 12:29:28 +08:00
NovaRain 9911eb5f01 Changed hero_select_win function to require an AppHeroWin.frm file in the art\intrface\ folder (from Mr.Stalin) 2019-03-25 20:55:39 +08:00
173 changed files with 11661 additions and 5663 deletions
+95 -69
View File
@@ -24,16 +24,17 @@
/// </summary> /// </summary>
private void InitializeComponent() { private void InitializeComponent() {
this.dataGridView1 = new System.Windows.Forms.DataGridView(); this.dataGridView1 = new System.Windows.Forms.DataGridView();
this.Column0 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.bGlobals = new System.Windows.Forms.Button(); this.bGlobals = new System.Windows.Forms.Button();
this.bMapVars = new System.Windows.Forms.Button(); this.bMapVars = new System.Windows.Forms.Button();
this.bCritters = new System.Windows.Forms.Button(); this.bCritters = new System.Windows.Forms.Button();
this.bSGlobals = new System.Windows.Forms.Button(); this.bSGlobals = new System.Windows.Forms.Button();
this.bArrays = new System.Windows.Forms.Button(); this.bArrays = new System.Windows.Forms.Button();
this.Column0 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.bEdit = new System.Windows.Forms.Button(); this.bEdit = new System.Windows.Forms.Button();
this.bCrittersLvar = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
this.SuspendLayout(); this.SuspendLayout();
// //
@@ -41,84 +42,38 @@
// //
this.dataGridView1.AllowUserToAddRows = false; this.dataGridView1.AllowUserToAddRows = false;
this.dataGridView1.AllowUserToDeleteRows = false; this.dataGridView1.AllowUserToDeleteRows = false;
this.dataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) this.dataGridView1.AllowUserToResizeRows = false;
| System.Windows.Forms.AnchorStyles.Left) this.dataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Right))); | System.Windows.Forms.AnchorStyles.Left)
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; | System.Windows.Forms.AnchorStyles.Right)));
this.dataGridView1.ColumnHeadersHeight = 22;
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.Column0, this.Column0,
this.Column1, this.Column1,
this.Column2, this.Column2,
this.Column3}); this.Column3});
this.dataGridView1.Location = new System.Drawing.Point(12, 12); this.dataGridView1.Location = new System.Drawing.Point(12, 12);
this.dataGridView1.MultiSelect = false;
this.dataGridView1.Name = "dataGridView1"; this.dataGridView1.Name = "dataGridView1";
this.dataGridView1.Size = new System.Drawing.Size(444, 215); this.dataGridView1.RowHeadersVisible = false;
this.dataGridView1.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing;
this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dataGridView1.Size = new System.Drawing.Size(561, 354);
this.dataGridView1.TabIndex = 0; this.dataGridView1.TabIndex = 0;
this.dataGridView1.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellDoubleClick);
this.dataGridView1.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellEndEdit); this.dataGridView1.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellEndEdit);
// this.dataGridView1.RowsAdded += new System.Windows.Forms.DataGridViewRowsAddedEventHandler(this.dataGridView1_RowsAdded);
// bGlobals
//
this.bGlobals.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.bGlobals.Location = new System.Drawing.Point(12, 233);
this.bGlobals.Name = "bGlobals";
this.bGlobals.Size = new System.Drawing.Size(100, 23);
this.bGlobals.TabIndex = 1;
this.bGlobals.Text = "Globals";
this.bGlobals.UseVisualStyleBackColor = true;
this.bGlobals.Click += new System.EventHandler(this.bGlobals_Click);
//
// bMapVars
//
this.bMapVars.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.bMapVars.Location = new System.Drawing.Point(118, 233);
this.bMapVars.Name = "bMapVars";
this.bMapVars.Size = new System.Drawing.Size(100, 23);
this.bMapVars.TabIndex = 2;
this.bMapVars.Text = "Map variables";
this.bMapVars.UseVisualStyleBackColor = true;
this.bMapVars.Click += new System.EventHandler(this.bMapVars_Click);
//
// bCritters
//
this.bCritters.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.bCritters.Location = new System.Drawing.Point(118, 262);
this.bCritters.Name = "bCritters";
this.bCritters.Size = new System.Drawing.Size(100, 23);
this.bCritters.TabIndex = 3;
this.bCritters.Text = "Critters";
this.bCritters.UseVisualStyleBackColor = true;
this.bCritters.Click += new System.EventHandler(this.bCritters_Click);
//
// bSGlobals
//
this.bSGlobals.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.bSGlobals.Location = new System.Drawing.Point(225, 233);
this.bSGlobals.Name = "bSGlobals";
this.bSGlobals.Size = new System.Drawing.Size(100, 23);
this.bSGlobals.TabIndex = 4;
this.bSGlobals.Text = "sfall globals";
this.bSGlobals.UseVisualStyleBackColor = true;
this.bSGlobals.Click += new System.EventHandler(this.bSGlobals_Click);
//
// bArrays
//
this.bArrays.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.bArrays.Location = new System.Drawing.Point(12, 262);
this.bArrays.Name = "bArrays";
this.bArrays.Size = new System.Drawing.Size(100, 23);
this.bArrays.TabIndex = 5;
this.bArrays.Text = "sfall arrays";
this.bArrays.UseVisualStyleBackColor = true;
this.bArrays.Click += new System.EventHandler(this.bArrays_Click);
// //
// Column0 // Column0
// //
this.Column0.HeaderText = "ID"; this.Column0.HeaderText = "ID";
this.Column0.Name = "Column0"; this.Column0.Name = "Column0";
this.Column0.ReadOnly = true; this.Column0.ReadOnly = true;
this.Column0.Width = 50;
// //
// Column1 // Column1
// //
this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.Column1.HeaderText = "Name"; this.Column1.HeaderText = "Name";
this.Column1.Name = "Column1"; this.Column1.Name = "Column1";
this.Column1.ReadOnly = true; this.Column1.ReadOnly = true;
@@ -133,10 +88,65 @@
this.Column3.HeaderText = "Value (Float)"; this.Column3.HeaderText = "Value (Float)";
this.Column3.Name = "Column3"; this.Column3.Name = "Column3";
// //
// bGlobals
//
this.bGlobals.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.bGlobals.Location = new System.Drawing.Point(12, 372);
this.bGlobals.Name = "bGlobals";
this.bGlobals.Size = new System.Drawing.Size(100, 23);
this.bGlobals.TabIndex = 1;
this.bGlobals.Text = "Globals";
this.bGlobals.UseVisualStyleBackColor = true;
this.bGlobals.Click += new System.EventHandler(this.bGlobals_Click);
//
// bMapVars
//
this.bMapVars.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.bMapVars.Location = new System.Drawing.Point(118, 372);
this.bMapVars.Name = "bMapVars";
this.bMapVars.Size = new System.Drawing.Size(100, 23);
this.bMapVars.TabIndex = 2;
this.bMapVars.Text = "Map variables";
this.bMapVars.UseVisualStyleBackColor = true;
this.bMapVars.Click += new System.EventHandler(this.bMapVars_Click);
//
// bCritters
//
this.bCritters.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.bCritters.Location = new System.Drawing.Point(12, 401);
this.bCritters.Name = "bCritters";
this.bCritters.Size = new System.Drawing.Size(100, 23);
this.bCritters.TabIndex = 3;
this.bCritters.Text = "Critters";
this.bCritters.UseVisualStyleBackColor = true;
this.bCritters.Click += new System.EventHandler(this.bCritters_Click);
//
// bSGlobals
//
this.bSGlobals.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.bSGlobals.Location = new System.Drawing.Point(367, 372);
this.bSGlobals.Name = "bSGlobals";
this.bSGlobals.Size = new System.Drawing.Size(100, 23);
this.bSGlobals.TabIndex = 4;
this.bSGlobals.Text = "sfall globals";
this.bSGlobals.UseVisualStyleBackColor = true;
this.bSGlobals.Click += new System.EventHandler(this.bSGlobals_Click);
//
// bArrays
//
this.bArrays.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.bArrays.Location = new System.Drawing.Point(473, 372);
this.bArrays.Name = "bArrays";
this.bArrays.Size = new System.Drawing.Size(100, 23);
this.bArrays.TabIndex = 5;
this.bArrays.Text = "sfall arrays";
this.bArrays.UseVisualStyleBackColor = true;
this.bArrays.Click += new System.EventHandler(this.bArrays_Click);
//
// bEdit // bEdit
// //
this.bEdit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.bEdit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.bEdit.Location = new System.Drawing.Point(225, 262); this.bEdit.Location = new System.Drawing.Point(473, 401);
this.bEdit.Name = "bEdit"; this.bEdit.Name = "bEdit";
this.bEdit.Size = new System.Drawing.Size(100, 23); this.bEdit.Size = new System.Drawing.Size(100, 23);
this.bEdit.TabIndex = 6; this.bEdit.TabIndex = 6;
@@ -144,11 +154,24 @@
this.bEdit.UseVisualStyleBackColor = true; this.bEdit.UseVisualStyleBackColor = true;
this.bEdit.Click += new System.EventHandler(this.bEdit_Click); this.bEdit.Click += new System.EventHandler(this.bEdit_Click);
// //
// bCrittersLvar
//
this.bCrittersLvar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.bCrittersLvar.Enabled = false;
this.bCrittersLvar.Location = new System.Drawing.Point(118, 401);
this.bCrittersLvar.Name = "bCrittersLvar";
this.bCrittersLvar.Size = new System.Drawing.Size(100, 23);
this.bCrittersLvar.TabIndex = 7;
this.bCrittersLvar.Text = "Local variables";
this.bCrittersLvar.UseVisualStyleBackColor = true;
this.bCrittersLvar.Click += new System.EventHandler(this.bCrittersLvar_Click);
//
// DebugEditor // DebugEditor
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(468, 297); this.ClientSize = new System.Drawing.Size(585, 436);
this.Controls.Add(this.bCrittersLvar);
this.Controls.Add(this.bEdit); this.Controls.Add(this.bEdit);
this.Controls.Add(this.bArrays); this.Controls.Add(this.bArrays);
this.Controls.Add(this.bSGlobals); this.Controls.Add(this.bSGlobals);
@@ -156,8 +179,10 @@
this.Controls.Add(this.bMapVars); this.Controls.Add(this.bMapVars);
this.Controls.Add(this.bGlobals); this.Controls.Add(this.bGlobals);
this.Controls.Add(this.dataGridView1); this.Controls.Add(this.dataGridView1);
this.MinimumSize = new System.Drawing.Size(450, 300);
this.Name = "DebugEditor"; this.Name = "DebugEditor";
this.Text = "DebugEditor"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "sfall Debug Editor";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.DebugEditor_FormClosing); this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.DebugEditor_FormClosing);
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
this.ResumeLayout(false); this.ResumeLayout(false);
@@ -172,11 +197,12 @@
private System.Windows.Forms.Button bCritters; private System.Windows.Forms.Button bCritters;
private System.Windows.Forms.Button bSGlobals; private System.Windows.Forms.Button bSGlobals;
private System.Windows.Forms.Button bArrays; private System.Windows.Forms.Button bArrays;
private System.Windows.Forms.Button bEdit;
private System.Windows.Forms.DataGridViewTextBoxColumn Column0; private System.Windows.Forms.DataGridViewTextBoxColumn Column0;
private System.Windows.Forms.DataGridViewTextBoxColumn Column1; private System.Windows.Forms.DataGridViewTextBoxColumn Column1;
private System.Windows.Forms.DataGridViewTextBoxColumn Column2; private System.Windows.Forms.DataGridViewTextBoxColumn Column2;
private System.Windows.Forms.DataGridViewTextBoxColumn Column3; private System.Windows.Forms.DataGridViewTextBoxColumn Column3;
private System.Windows.Forms.Button bEdit; private System.Windows.Forms.Button bCrittersLvar;
} }
} }
+225 -140
View File
File diff suppressed because it is too large Load Diff
+43 -33
View File
@@ -3,7 +3,9 @@ using System.Net.Sockets;
using System.IO; using System.IO;
namespace FalloutClient { namespace FalloutClient {
class EditorConnection {
class EditorConnection
{
private TcpClient client; private TcpClient client;
private NetworkStream stream; private NetworkStream stream;
private BinaryReader br; private BinaryReader br;
@@ -11,73 +13,81 @@ namespace FalloutClient {
public readonly int[] Globals; public readonly int[] Globals;
public readonly int[] MapVars; public readonly int[] MapVars;
public readonly uint[] Critters; public readonly uint[,] Critters;
public readonly ulong[] SGlobalKeys; public readonly ulong[] SGlobalKeys;
public readonly int[] sGlobals; public readonly int[] sGlobals;
public readonly uint[] Arrays; public readonly uint[] Arrays;
public readonly int[] ArrayLengths; public readonly int[] ArrayLengths;
public readonly int[] ArrayDataSizes; public readonly int[] ArrayFlag;
public readonly bool[] ArrayIsMap;
public EditorConnection() { public EditorConnection() {
System.Threading.Thread.Sleep(1000); System.Threading.Thread.Sleep(1000);
client=new TcpClient("127.0.0.1", 4245); client = new TcpClient("127.0.0.1", 4245);
stream=client.GetStream(); stream = client.GetStream();
br=new BinaryReader(stream); br = new BinaryReader(stream);
bw=new BinaryWriter(stream); bw = new BinaryWriter(stream);
Globals=new int[br.ReadInt32()]; Globals = new int[br.ReadInt32()];
MapVars=new int[br.ReadInt32()]; MapVars = new int[br.ReadInt32()];
SGlobalKeys=new ulong[br.ReadInt32()]; SGlobalKeys = new ulong[br.ReadInt32()];
sGlobals=new int[SGlobalKeys.Length]; sGlobals = new int[SGlobalKeys.Length];
Arrays=new uint[br.ReadInt32()]; Arrays = new uint[br.ReadInt32()];
ArrayLengths=new int[Arrays.Length]; ArrayLengths = new int[Arrays.Length];
ArrayDataSizes=new int[Arrays.Length]; ArrayFlag = new int[Arrays.Length];
Critters=new uint[br.ReadInt32()]; ArrayIsMap = new bool[Arrays.Length];
Critters = new uint[br.ReadInt32(), 2];
for(int i=0;i<Globals.Length;i++) Globals[i]=br.ReadInt32(); for (int i = 0; i < Globals.Length; i++) Globals[i] = br.ReadInt32();
for(int i=0;i<MapVars.Length;i++) MapVars[i]=br.ReadInt32(); for (int i = 0; i < MapVars.Length; i++) MapVars[i] = br.ReadInt32();
for(int i=0;i<sGlobals.Length;i++) { for (int i = 0; i < sGlobals.Length; i++) {
SGlobalKeys[i]=br.ReadUInt64(); SGlobalKeys[i] = br.ReadUInt64();
sGlobals[i]=br.ReadInt32(); sGlobals[i] = br.ReadInt32();
br.ReadInt32(); br.ReadInt32();
} }
for(int i=0;i<Arrays.Length;i++) { for (int i = 0; i < Arrays.Length; i++) {
Arrays[i]=br.ReadUInt32(); Arrays[i] = br.ReadUInt32();
ArrayLengths[i]=br.ReadInt32(); ArrayIsMap[i] = (br.ReadInt32() != 0);
ArrayDataSizes[i]=br.ReadInt32(); ArrayLengths[i] = br.ReadInt32();
ArrayFlag[i] = br.ReadInt32();
}
for (int i = 0; i < Critters.Length / 2; i++) {
Critters[i, 0] = br.ReadUInt32();
Critters[i, 1] = br.ReadUInt32();
} }
for(int i=0;i<Critters.Length;i++) Critters[i]=br.ReadUInt32();
} }
public void Close() { public void Close() {
stream.Close(); stream.Close();
client.Close(); client.Close();
stream=null; stream = null;
client=null; client = null;
} }
public void WriteDataType(DataTypeSend type) { public void WriteDataType(DataTypeSend type) {
stream.WriteByte((byte)type); stream.WriteByte((byte)type);
//bw.Write((byte)type); //bw.Write((byte)type);
} }
public void WriteByte(byte b) { bw.Write(b); } public void WriteByte(byte b) { bw.Write(b); }
public void WriteInt16(short value) { bw.Write(value); } public void WriteInt16(short value) { bw.Write(value); }
public void WriteInt(int value) { bw.Write(value); } public void WriteInt(int value) { bw.Write(value); }
public void WriteBytes(byte[] buf) { bw.Write(buf); } public void WriteBytes(byte[] buf) { bw.Write(buf); }
public void WriteBytes(byte[] buf, int start, int len) { public void WriteBytes(byte[] buf, int start, int len) {
bw.Write(buf, start, len); bw.Write(buf, start, len);
} }
public void Read(byte[] buffer) { public void Read(byte[] buffer) {
int upto=0; int upto = 0;
while(upto<buffer.Length) { while (upto < buffer.Length) {
upto+=stream.Read(buffer, upto, buffer.Length-upto); upto += stream.Read(buffer, upto, buffer.Length - upto);
} }
} }
public void Read(byte[] buffer, int offset, int length) { public void Read(byte[] buffer, int offset, int length) {
int upto=0; int upto = 0;
//System.Diagnostics.Debug.WriteLine("Read - offset: "+offset+" length: "+length); //System.Diagnostics.Debug.WriteLine("Read - offset: "+offset+" length: "+length);
while(upto<length) { while (upto < length) {
upto+=stream.Read(buffer, offset+upto, length-upto); upto += stream.Read(buffer, offset + upto, length - upto);
} }
} }
public int ReadByte() { public int ReadByte() {
+41 -11
View File
@@ -29,13 +29,14 @@
this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.checkBox = new System.Windows.Forms.CheckBox();
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
this.SuspendLayout(); this.SuspendLayout();
// //
// bSave // bSave
// //
this.bSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.bSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.bSave.Location = new System.Drawing.Point(281, 265); this.bSave.Location = new System.Drawing.Point(12, 336);
this.bSave.Name = "bSave"; this.bSave.Name = "bSave";
this.bSave.Size = new System.Drawing.Size(75, 23); this.bSave.Size = new System.Drawing.Size(75, 23);
this.bSave.TabIndex = 0; this.bSave.TabIndex = 0;
@@ -46,7 +47,7 @@
// bCancel // bCancel
// //
this.bCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.bCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.bCancel.Location = new System.Drawing.Point(200, 265); this.bCancel.Location = new System.Drawing.Point(371, 336);
this.bCancel.Name = "bCancel"; this.bCancel.Name = "bCancel";
this.bCancel.Size = new System.Drawing.Size(75, 23); this.bCancel.Size = new System.Drawing.Size(75, 23);
this.bCancel.TabIndex = 1; this.bCancel.TabIndex = 1;
@@ -58,49 +59,77 @@
// //
this.dataGridView1.AllowUserToAddRows = false; this.dataGridView1.AllowUserToAddRows = false;
this.dataGridView1.AllowUserToDeleteRows = false; this.dataGridView1.AllowUserToDeleteRows = false;
this.dataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) this.dataGridView1.AllowUserToResizeRows = false;
| System.Windows.Forms.AnchorStyles.Left) this.dataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Right))); | System.Windows.Forms.AnchorStyles.Left)
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; | System.Windows.Forms.AnchorStyles.Right)));
this.dataGridView1.ColumnHeadersHeight = 22;
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.Column1, this.Column1,
this.Column2, this.Column2,
this.Column3}); this.Column3});
this.dataGridView1.Location = new System.Drawing.Point(12, 12); this.dataGridView1.Location = new System.Drawing.Point(12, 12);
this.dataGridView1.MultiSelect = false;
this.dataGridView1.Name = "dataGridView1"; this.dataGridView1.Name = "dataGridView1";
this.dataGridView1.Size = new System.Drawing.Size(344, 247); this.dataGridView1.RowHeadersVisible = false;
this.dataGridView1.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing;
this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect;
this.dataGridView1.Size = new System.Drawing.Size(434, 318);
this.dataGridView1.TabIndex = 2; this.dataGridView1.TabIndex = 2;
this.dataGridView1.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellEndEdit); this.dataGridView1.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellEndEdit);
// //
// Column1 // Column1
// //
this.Column1.HeaderText = "Name"; this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.Column1.HeaderText = "Element";
this.Column1.Name = "Column1"; this.Column1.Name = "Column1";
this.Column1.ReadOnly = true; this.Column1.ReadOnly = true;
this.Column1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
// //
// Column2 // Column2
// //
this.Column2.HeaderText = "Type"; this.Column2.HeaderText = "Type";
this.Column2.Name = "Column2"; this.Column2.Name = "Column2";
this.Column2.ReadOnly = true; this.Column2.ReadOnly = true;
this.Column2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
this.Column2.Width = 75;
// //
// Column3 // Column3
// //
this.Column3.HeaderText = "Value"; this.Column3.HeaderText = "Value";
this.Column3.Name = "Column3"; this.Column3.Name = "Column3";
this.Column3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
this.Column3.Width = 150;
//
// checkBox
//
this.checkBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.checkBox.AutoSize = true;
this.checkBox.Location = new System.Drawing.Point(103, 341);
this.checkBox.Name = "checkBox";
this.checkBox.Size = new System.Drawing.Size(91, 17);
this.checkBox.TabIndex = 3;
this.checkBox.Text = "Values in Hex";
this.checkBox.UseVisualStyleBackColor = true;
this.checkBox.Click += new System.EventHandler(this.checkBox_Click);
// //
// EditorWindow // EditorWindow
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(368, 300); this.ClientSize = new System.Drawing.Size(458, 371);
this.Controls.Add(this.checkBox);
this.Controls.Add(this.dataGridView1); this.Controls.Add(this.dataGridView1);
this.Controls.Add(this.bCancel); this.Controls.Add(this.bCancel);
this.Controls.Add(this.bSave); this.Controls.Add(this.bSave);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
this.MinimumSize = new System.Drawing.Size(300, 200);
this.Name = "EditorWindow"; this.Name = "EditorWindow";
this.Text = "EditorWindow"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Edit Values";
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
this.ResumeLayout(false); this.ResumeLayout(false);
this.PerformLayout();
} }
@@ -112,5 +141,6 @@
private System.Windows.Forms.DataGridViewTextBoxColumn Column1; private System.Windows.Forms.DataGridViewTextBoxColumn Column1;
private System.Windows.Forms.DataGridViewTextBoxColumn Column2; private System.Windows.Forms.DataGridViewTextBoxColumn Column2;
private System.Windows.Forms.DataGridViewTextBoxColumn Column3; private System.Windows.Forms.DataGridViewTextBoxColumn Column3;
private System.Windows.Forms.CheckBox checkBox;
} }
} }
+90 -19
View File
@@ -3,32 +3,93 @@ using System.Collections.Generic;
using System.Windows.Forms; using System.Windows.Forms;
namespace FalloutClient { namespace FalloutClient {
public enum DataType : int { None=0, Int=1, Float=2, String=3 }
public partial class EditorWindow : Form {
private readonly DataType[] types;
private readonly string[] values;
private bool save;
private EditorWindow(string[] names, DataType[] types, string[] values) { public enum DataType : int { None = 0, Int = 1, Float = 2, String = 3 }
this.types=types;
this.values=values; public partial class EditorWindow : Form
{
private readonly DataType[] types = null;
private string[] values;
private bool save;
private static bool valueInHex = false;
private void ConvertValues(bool toHex) {
for (int i = 0; i < values.Length; i++) {
if (toHex) {
if (types == null || types[i] == DataType.Int) {
int val = int.Parse(values[i]);
values[i] = "0x" + val.ToString("x").ToUpper();
}
} else {
if (types == null || types[i] == DataType.Int) {
values[i] = Convert.ToInt32(values[i], 16).ToString();
}
}
}
}
private EditorWindow(string[] names, DataType[] types, string[] values, bool isMap) {
this.types = types;
this.values = values;
InitializeComponent(); InitializeComponent();
checkBox.Checked = EditorWindow.valueInHex;
dataGridView1.SuspendLayout(); dataGridView1.SuspendLayout();
if(names==null) for(int i=0;i<types.Length;i++) dataGridView1.Rows.Add(i.ToString(), types[i].ToString(), values[i]); if (valueInHex) ConvertValues(true);
else for(int i=0;i<types.Length;i++) dataGridView1.Rows.Add(names[i], types[i].ToString(), values[i]); if (names == null)
for (int i = 0; i < types.Length; i++) {
string element = i.ToString();
if (isMap && (i % 2) == 0) element += " - Key";
dataGridView1.Rows.Add(element, types[i].ToString(), values[i]);
}
else
for (int i = 0; i < types.Length; i++) dataGridView1.Rows.Add("[0x" + (i * 4).ToString("x").ToUpper() + "]" + names[i], types[i].ToString(), values[i]);
dataGridView1.ResumeLayout(); dataGridView1.ResumeLayout();
} }
public static string[] ShowEditor(string[] names, DataType[] types, string[] values) { public static string[] ShowEditor(DebugEditor form, string[] names, DataType[] types, string[] values, bool isMap = false) {
EditorWindow editor=new EditorWindow(names, types, values); EditorWindow editor = new EditorWindow(names, types, values, isMap);
editor.ShowDialog(); editor.ShowDialog();
if(editor.save) return editor.values; if (editor.save) {
else return null; if (valueInHex) editor.ConvertValues(false);
return editor.values;
}
return null;
}
private EditorWindow(string[] values) {
this.values = values;
InitializeComponent();
checkBox.Checked = EditorWindow.valueInHex;
dataGridView1.SuspendLayout();
if (valueInHex) ConvertValues(true);
for (int i = 0; i < values.Length; i++) {
dataGridView1.Rows.Add(i.ToString(), "Int", values[i]);
}
dataGridView1.ResumeLayout();
}
public static string[] ShowEditor(DebugEditor form, string[] lvalues) {
EditorWindow editor = new EditorWindow(lvalues);
editor.ShowDialog();
if (editor.save) {
if (valueInHex) editor.ConvertValues(false);
return editor.values;
}
return null;
} }
private bool CheckInput(DataType type, string str) { private bool CheckInput(DataType type, string str) {
switch(type) { switch (type) {
case DataType.Int: case DataType.Int:
if (valueInHex) {
try {
Convert.ToInt32(str, 16);
return true;
} catch (Exception) {
return false;
}
}
int i; int i;
return int.TryParse(str, out i); return int.TryParse(str, out i);
case DataType.Float: case DataType.Float:
@@ -39,9 +100,11 @@ namespace FalloutClient {
} }
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) {
string str=(string)dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; string str = (string)dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
if(CheckInput(types[e.RowIndex], str)) values[e.RowIndex]=str; if (str != null && CheckInput(((types != null) ? types[e.RowIndex] : DataType.Int), str))
else dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value=values[e.RowIndex]; values[e.RowIndex] = str;
else
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = values[e.RowIndex];
} }
private void bCancel_Click(object sender, EventArgs e) { private void bCancel_Click(object sender, EventArgs e) {
@@ -49,8 +112,16 @@ namespace FalloutClient {
} }
private void bSave_Click(object sender, EventArgs e) { private void bSave_Click(object sender, EventArgs e) {
save=true; save = true;
Close(); Close();
} }
private void checkBox_Click(object sender, EventArgs e) {
valueInHex = checkBox.Checked;
ConvertValues(valueInHex);
for (int i = 0; i < values.Length; i++) {
dataGridView1.Rows[i].Cells[2].Value = values[i];
}
}
} }
} }
+14 -6
View File
@@ -12,17 +12,25 @@ namespace FalloutClient {
Application.EnableVisualStyles(); Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false); Application.SetCompatibleTextRenderingDefault(false);
if(args.Length==1&&args[0]=="-debugedit") { if (args.Length == 1 && args[0] == "-debugedit") {
Application.Run(new DebugEditor(new EditorConnection())); Application.Run(new DebugEditor(new EditorConnection()));
} else { } else {
throw new Exception("Multiplayer is no longer supported"); MessageBox.Show("The debug editor can only be run from the game.",
"sfall Debug Editor", MessageBoxButtons.OK, MessageBoxIcon.Stop);
} }
} }
} }
enum DataTypeSend { enum DataTypeSend {
Mouse=0, LMouseDown=1, LMouseUp=2, RMouseDown=3, RMouseUp=4, TakeChar=5, ReleaseChar=6, SetGlobal = 0,
SetGlobal=0, SetMapVar=1, RetrieveCritter=2, SetCritter=3, SetSGlobal=4, GetArray=9, SetArray=10, SetMapVar = 1,
Exit=254 RetrieveCritter = 2,
} SetCritter = 3,
SetSGlobal = 4,
GetArray = 9,
SetArray = 10,
GetLocal = 11,
SetLocal = 12,
Exit = 254
}
} }
+5 -5
View File
@@ -5,12 +5,12 @@ using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following // General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information // set of attributes. Change these attribute values to modify the information
// associated with an assembly. // associated with an assembly.
[assembly: AssemblyTitle("FalloutClient")] [assembly: AssemblyTitle("sfall Debug Editor")]
[assembly: AssemblyDescription("")] [assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")] [assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("FalloutClient")] [assembly: AssemblyProduct("sfall")]
[assembly: AssemblyCopyright("Copyright © 2009")] [assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number // Build Number
// Revision // Revision
// //
[assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyVersion("4.1.9.0")]
[assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyFileVersion("4.1.9.0")]
@@ -16,6 +16,21 @@
<UpgradeBackupLocation> <UpgradeBackupLocation>
</UpgradeBackupLocation> </UpgradeBackupLocation>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion> <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>false</BootstrapperEnabled>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
@@ -33,6 +48,8 @@
<DefineConstants>TRACE</DefineConstants> <DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="System" /> <Reference Include="System" />
@@ -62,6 +79,18 @@
<DependentUpon>EditorWindow.cs</DependentUpon> <DependentUpon>EditorWindow.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
</ItemGroup> </ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
@@ -71,6 +100,7 @@
</Target> </Target>
--> -->
<PropertyGroup> <PropertyGroup>
<PostBuildEvent>copy "$(TargetPath)" "C:\Games\Fallout2\$(TargetName)$(TargetExt)"</PostBuildEvent> <PostBuildEvent>
</PostBuildEvent>
</PropertyGroup> </PropertyGroup>
</Project> </Project>
@@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 11.00 Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010 # Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MPClient", "MPClient.csproj", "{80ED0DCE-100E-4EC9-A79D-2FBFA4CAD1E3}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SfallDebugEditor", "SfallDebugEditor.csproj", "{80ED0DCE-100E-4EC9-A79D-2FBFA4CAD1E3}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
+30
View File
@@ -7,6 +7,30 @@
; have an additional NoHardcode option in this file which can ; have an additional NoHardcode option in this file which can
; be used to remove their hardcoded effects, and add new stat/skill effects ; be used to remove their hardcoded effects, and add new stat/skill effects
[PerksTweak]
;Change the penalty distance and distance bonus for 'Weapon Scope Range' weapon perk
;0 - no penalty, 8 - default penalty
WeaponScopeRangePenalty=8
;2 - no bonus, 5 - default bonus
WeaponScopeRangeBonus=5
;Changes the distance bonus for 'Weapon Long Range' weapon perk
;2 - no bonus, 4 - default bonus
WeaponLongRangeBonus=4
;Changes the hit chance bonus for 'Weapon Accurate' weapon perk
;0 - no bonus, 200 - maximum bonus, 20 - default bonus
WeaponAccurateBonus=20
;Changes the strength bonus for 'Weapon Handling' perk
;0 - no bonus, 10 - maximum bonus, 3 - default bonus
WeaponHandlingBonus=3
;##############################################################################
[Perks]
;Set to 1 to enable the modifications for perks
Enable=0
;Name=The name of the perk (max 63 characters) ;Name=The name of the perk (max 63 characters)
;Desc=The description of the perk (max 255 characters) ;Desc=The description of the perk (max 255 characters)
;Image=The line number (0-indexed) of the corresponding FRM in skilldex.lst ;Image=The line number (0-indexed) of the corresponding FRM in skilldex.lst
@@ -43,6 +67,7 @@
;Skill3-Skill5 = The skill to be modified (or -1 for none) ;Skill3-Skill5 = The skill to be modified (or -1 for none)
;Skill3Mod-Skill5Mod = The increased/decreased value to the modified skill ;Skill3Mod-Skill5Mod = The increased/decreased value to the modified skill
;##############################################################################
;This is a modification to vanilla perk 0 ;This is a modification to vanilla perk 0
[0] [0]
Name=Example Name=Example
@@ -98,6 +123,11 @@ Skill4Mod=0
Skill5=-1 Skill5=-1
Skill5Mod=0 Skill5Mod=0
;##############################################################################
[Traits]
;Set to 1 to enable the modifications for traits
Enable=0
;This is a modification to trait 0 ;This is a modification to trait 0
[t0] [t0]
NoHardcode=0 NoHardcode=0
+2 -1
View File
@@ -10,8 +10,9 @@ SaveSfallDataFail=ERROR saving extended savegame information! Check if other pro
PartyLvlMsg=Lvl: PartyLvlMsg=Lvl:
PartyACMsg=AC: PartyACMsg=AC:
PartyAddictMsg=Addict PartyAddictMsg=Addict
NPCPickupFail=%s cannot pick up the item.
[AppearanceMod] [AppearanceMod]
RaceText=Race RaceText=Race
StyleText=Style StyleText=Style
MainButtonText=Appearance DoneBtn=Done
@@ -0,0 +1,82 @@
;NPC armor appearance configuration for vanilla Fallout 2. Does not require any new graphics
;Party members will use player's armor appearance just like old B-Team mod
;WeaponAnims codes
; 1 - Knife (D)
; 2 - Club (E)
; 3 - Sledgehammer (F)
; 4 - Spear (G)
; 5 - Pistol (H)
; 6 - SMG (I)
; 7 - Rifle (J)
; 8 - Big Gun (K)
; 9 - Minigun (L)
; 10 - Rocket Launcher (M)
; 11-15 - sfall additional weapon animation codes
; This section maps 7 armor types to corresponding armor item PIDs
[ArmorTypes]
Jacket = 74,265
Leather = 1,379
Metal = 2,240,380
Power = 3,232
AdvPower = 348,349
Combat = 17,239,381
Robe = 113,524
; Default armor FIDs (the same for all NPCs)
[Default]
Jacket = 16777229
Leather = 16777228
Metal = 16777230
Combat = 16777226
Power = 16777217
AdvPower = 16777287
Robe = 16777218
; Sulik
[1]
PID=16777313
WeaponAnims=1,3,4,6
Default=16777280
; Vic
[2]
PID=16777278
WeaponAnims=1,5,7
Default=16777307
; Cassidy
[3]
PID=16777305
WeaponAnims=4,5,7
Default=16777260
Leather=16777260
; Myron
[4]
PID=16777376
WeaponAnims=1,5
Default=16777304
; Lenny
[5]
PID=16777323
WeaponAnims=1,5,6
Default=16777295
; Davin
[6]
PID=16777379
WeaponAnims=1,2,5
Default=16777264
; Miria
[7]
PID=16777380
WeaponAnims=1,6
Default=16777252
Jacket=16777222
Leather=16777221
Metal=16777223
Combat=16777219
+23 -25
View File
@@ -23,69 +23,67 @@ Robe = 113,524
; Default armor FIDs (the same for all NPCs) ; Default armor FIDs (the same for all NPCs)
[Default] [Default]
Power=16777217 Power = 16777217
AdvPower=16777287 AdvPower = 16777287
Robe=16777218 Robe = 16777218
; Sulik ; Sulik
[1] [1]
PID=16777313 PID=16777313
WeaponAnims=1,3,4,6 WeaponAnims=1,3,4,6,14
Default=16777280 Default=16777280
Leather=16777325
Power=16777324
Metal=16777323
Jacket=16777321 Jacket=16777321
Leather=16777325
Metal=16777323
Combat=16777322 Combat=16777322
Power=16777324
; Vic ; Vic
[2] [2]
PID=16777278 PID=16777278
WeaponAnims=1,5,7 WeaponAnims=1,5,7,13,14
Default=16777307 Default=16777307
Jacket=16777329 Jacket=16777329
Combat=16777330
Metal=16777331
Power=16777332
Leather=16777333 Leather=16777333
Metal=16777331
Combat=16777330
Power=16777332
; Cassidy ; Cassidy
[3] [3]
PID=16777305 PID=16777305
WeaponAnims=4,5,7 WeaponAnims=4,5,7,13
Default=16777354 Default=16777354
Leather=16777260
Power=16777328
Metal=16777327
Jacket=16777351 Jacket=16777351
Leather=16777260
Metal=16777327
Combat=16777326 Combat=16777326
Power=16777328
; Myron ; Myron
[4] [4]
PID=16777376 PID=16777376
WeaponAnims=1,5 WeaponAnims=1,5,14
Default=16777304 Default=16777304
Leather=
Power=16777349
Combat=16777350 Combat=16777350
Power=16777349
; Cat Jules ; Cat Jules (RP)
[5] [5]
PID=16777734 PID=16777720
WeaponAnims=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 WeaponAnims=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
Default=16777353 Default=16777353
Jacket=16777346
Leather=16777347 Leather=16777347
Metal=16777348 Metal=16777348
Jacket=16777346
Combat=16777226 Combat=16777226
; Kitsune ; Kitsune (RP)
[6] [6]
PID=16777724 PID=16777718
WeaponAnims=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 WeaponAnims=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
Default=16777222 Default=16777222
Jacket=16777222
Leather=16777221 Leather=16777221
Metal=16777223 Metal=16777223
Jacket=16777222
Combat=16777219 Combat=16777219
+3
View File
@@ -39,6 +39,9 @@ MotionScanner=0
Mode=0 Mode=0
;PIDList=62,89,97,107,160,161 ;PIDList=62,89,97,107,160,161
;Set a comma delimited list of perk IDs for perks to be inherited from the player during the combat control
PerksList=0,73
;Choose a notification box to display the name of the controlled critter above the interface bar ;Choose a notification box to display the name of the controlled critter above the interface bar
;Must be between 5 and (4 + the value of BoxBarCount in ddraw.ini) ;Must be between 5 and (4 + the value of BoxBarCount in ddraw.ini)
;For sfall 4.1.6+ the number for the notification box is set automatically, so just use any value ;For sfall 4.1.6+ the number for the notification box is set automatically, so just use any value
+100 -50
View File
@@ -1,21 +1,29 @@
;sfall configuration settings ;sfall configuration settings
;v4.1.6 ;v4.2.1
[Main] [Main]
;Change to 1 if you want to use command line args to tell sfall to use another ini file. ;Change to 1 if you want to use command line args to tell sfall to use another ini file.
UseCommandLine=0 UseCommandLine=0
;Uncomment and point to a file to get alternate translations for some sfall messages ;Uncomment and point to a file to get alternate translations for some sfall messages
;TranslationsINI=./Translations.ini ;TranslationsINI=.\Translations.ini
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[ExtraPatches] [ExtraPatches]
;This section allows you to set multiple paths to folders containing mods or patches that will be loaded by the game ;This section allows you to set multiple paths to folders containing mods or patches that will be loaded by the game
;The priority of read files will be higher than the files in patchXXX.dat. If DataLoadOrderPatch is enabled, the data load order will be: ;The priority of read files will be higher than the files in patchXXX.dat
;If DataLoadOrderPatch is enabled, the data load order will be:
;master_patches > critter_patches > PatchFile99 - PatchFile0 > patchXXX.dat > ... ;master_patches > critter_patches > PatchFile99 - PatchFile0 > patchXXX.dat > ...
;Paths to folders and Fallout .dat files are supported. The available range for PatchFile option names is from 0 to 99 ;Paths to folders and Fallout .dat files are supported. The available range for PatchFile option names is from 0 to 99
;The greater numbers take precedence over lesser numbers
;PatchFile0=mods\RP_data ;PatchFile0=mods\RP_data
;Path to the folder in which the game will automatically search and load custom .dat files
;The data load order of the .dat files in the folder will be in reverse alphabetical order of the filenames
;The .dat files specified in the PatchFileXX options will have higher priority than others
;Uncomment the option to specify a different folder path. The default path is <GameRoot>\mods\
;AutoSearchPath=mods
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[Sound] [Sound]
;Sets the number of allowed simultaneous sound effects ;Sets the number of allowed simultaneous sound effects
@@ -23,14 +31,14 @@ UseCommandLine=0
NumSoundBuffers=0 NumSoundBuffers=0
;Set to 1 to allow attaching sound files to combat float messages ;Set to 1 to allow attaching sound files to combat float messages
AllowSoundForFloats=1 AllowSoundForFloats=0
;Set to 1 to automatically search for alternative formats (mp3/wma/wav) when Fallout tries to play an acm ;Set to 1 to automatically search for alternative formats (mp3/wma/wav) when Fallout tries to play an acm
;Set to 2 to play alternative music files even if original acm files are not present in the music folder ;Set to 2 to play alternative music files even if original acm files are not present in the music folder
;This does not effect the play_sfall_sound and stop_sfall_sound script functions ;This does not effect the play_sfall_sound and stop_sfall_sound script functions
AllowDShowSound=0 AllowDShowSound=0
;Set to 1 to override the music path used by default if not present in the cfg ;Set to 1 to override the music path used by default (i.e. data\sound\music\) if not present in the cfg
;Set to 2 to overwrite all occurances of the music path ;Set to 2 to overwrite all occurances of the music path
OverrideMusicDir=2 OverrideMusicDir=2
@@ -78,18 +86,35 @@ GraphicsHeight=0
;GPU is faster, but requires v2.0 pixel shader support ;GPU is faster, but requires v2.0 pixel shader support
GPUBlt=0 GPUBlt=0
;Set to 1 to allow using 32 bit graphics for talking heads ;Set to 1 to allow using 32-bit textures for talking heads
;Requires graphics mode 4 or 5, and GPUBlt set to 1 ;The texture files should be placed in art\heads\<name of the talking head FRM file>\ (w/o extension)
;The files in the folder should be numbered according to the number of frames in the talking head FRM file (0.png, 1.png, etc.)
;See the text file in the modders pack for a detailed description
;Requires DX9 graphics mode and v2.0 pixel shader support (see GPUBlt option)
Use32BitHeadGraphics=0 Use32BitHeadGraphics=0
;Set to 1 to automatically search for alternative avi video files when Fallout tries to play the game movies ;Set to 1 to automatically search for alternative avi video files when Fallout tries to play the game movies
;Requires graphics mode 4 or 5 ;Requires DX9 graphics mode 4 or 5
AllowDShowMovies=0 AllowDShowMovies=0
;Fade effect time percentage modifier ;Fade effect time percentage modifier
;Default is 100. Decrease/increase this value to speed up/slow down fade effects ;Default is 100. Decrease/increase this value to speed up/slow down fade effects
FadeMultiplier=100 FadeMultiplier=100
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[Interface]
;Set to 1 to use the expanded world map interface
;Set to 2 to skip correcting the position of entrance markers on town maps
;You can use resized FRMs in 700x682 for town maps in the expanded world map interface
;Requires High Resolution Patch v4.1.8 and a new WORLDMAP.frm file in art\intrface\ (included in sfall.dat)
;The resolution of hi-res patch must be set to at least 890x720
ExpandWorldMap=0
;Set to 1 to expand the number of action points displayed on the interface bar
;Requires new IFACE_E.frm and HR_IFACE_<res>E.frm files in art\intrface\ (included in sfall.dat) to display correctly
;The minimum supported version of High Resolution Patch is 4.1.8
ActionPointsBar=0
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[Input] [Input]
;Set to 1 to enable the mouse scroll wheel to scroll through the inventory, barter, and loot screens ;Set to 1 to enable the mouse scroll wheel to scroll through the inventory, barter, and loot screens
@@ -166,6 +191,11 @@ DebugEditorKey=0
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[Misc] [Misc]
;Changes some of Fallout 2 engine functions to Fallout 1 behavior:
;- disables playing the final movie/credits after the endgame slideshow
;- disables halving the weight for power armor items
Fallout1Behavior=0
;Time limit in years. Must be between -3 and 13 ;Time limit in years. Must be between -3 and 13
;Set to 0 if you want to die the instant you leave arroyo ;Set to 0 if you want to die the instant you leave arroyo
;Set to -1 to remove the time limit, and automatically reset the date back to 2241 each time you would have reached it ;Set to -1 to remove the time limit, and automatically reset the date back to 2241 each time you would have reached it
@@ -213,10 +243,10 @@ UseFileSystemOverride=0
;Set to 1 to use the modified data load order for the engine to find game data ;Set to 1 to use the modified data load order for the engine to find game data
;Original: patchXXX.dat > critter_patches > critter_dat > f2_res_patches > f2_res_dat > master_patches > master_dat ;Original: patchXXX.dat > critter_patches > critter_dat > f2_res_patches > f2_res_dat > master_patches > master_dat
;Modified: master_patches > critter_patches > patchXXX.dat > critter_dat > f2_res_patches > f2_res_dat > master_dat ;Modified: master_patches > critter_patches > patchXXX.dat > critter_dat > f2_res_patches > f2_res_dat > master_dat
DataLoadOrderPatch=0 DataLoadOrderPatch=1
;Set to 1 to enable loading alternative dialog msg files from text/language/dialog_female/ for female PC ;Set to 1 to enable loading alternative dialog msg files from text\<language>\dialog_female\ for female PC
;Set to 2 to also load subtitle files from text/language/cuts_female/ for female PC ;Set to 2 to also load subtitle files from text\<language>\cuts_female\ for female PC
FemaleDialogMsgs=0 FemaleDialogMsgs=0
;To change the default and starting player models, uncomment the next four lines. ;To change the default and starting player models, uncomment the next four lines.
@@ -247,13 +277,13 @@ Movie16=artimer4.mve
Movie17=credits.mve Movie17=credits.mve
;To change the starting year, month or day, uncomment the next 3 lines ;To change the starting year, month or day, uncomment the next 3 lines
;Both StartMonth and StartDay are 0-indexed ;Both StartMonth and StartDay are 0-indexed (i.e. 0 is January or the first day of a month)
;StartYear=-1 ;StartYear=-1
;StartMonth=-1 ;StartMonth=-1
;StartDay=-1 ;StartDay=-1
;To change the limit of the distance away from the player to which you're allowed to scroll the local maps, uncomment the next two lines ;To change the limit of the distance away from the player to which you're allowed to scroll the local maps, uncomment the next two lines
;Defaults are 0x1E0 in the x direction and 0x190 in the y direction. ;Defaults are 480 in the x direction and 400 in the y direction.
;Not compatible with the res patch! ;Not compatible with the res patch!
;LocalMapXLimit=480 ;LocalMapXLimit=480
;LocalMapYLimit=400 ;LocalMapYLimit=400
@@ -311,7 +341,7 @@ OverrideArtCacheSize=0
;Set to 2 to block all saving in combat ;Set to 2 to block all saving in combat
SaveInCombatFix=1 SaveInCombatFix=1
;Point at an ini file containing elevator data ;Point to an ini file containing elevator data
;ElevatorsFile=Elevators.ini ;ElevatorsFile=Elevators.ini
;Uncomment and set a comma delimited list of numbers to use a custom xp table. ;Uncomment and set a comma delimited list of numbers to use a custom xp table.
@@ -324,14 +354,17 @@ SaveInCombatFix=1
AdditionalWeaponAnims=1 AdditionalWeaponAnims=1
;Uncomment these lines to modify the default modifiers for aimed shots at specific bodyparts ;Uncomment these lines to modify the default modifiers for aimed shots at specific bodyparts
;Modifiers affect both NPCs and the player
;BodyHit_Head=-40 ;BodyHit_Head=-40
;BodyHit_Left_Arm=-30 ;BodyHit_Left_Arm=-30
;BodyHit_Right_Arm=-30 ;BodyHit_Right_Arm=-30
;BodyHit_Torso_Uncalled=0 ;BodyHit_Torso=0
;BodyHit_Right_Leg=-20 ;BodyHit_Right_Leg=-20
;BodyHit_Left_Leg=-20 ;BodyHit_Left_Leg=-20
;BodyHit_Eyes=-60 ;BodyHit_Eyes=-60
;BodyHit_Groin=-30 ;BodyHit_Groin=-30
;The modifier for unaimed shots
;BodyHit_Torso_Uncalled=0
;Set to 1 to use a CriticalOverrides.ini file to override the default critical table ;Set to 1 to use a CriticalOverrides.ini file to override the default critical table
;Set to 2 to use the default critical with bug fixes (doesn't require an ini) ;Set to 2 to use the default critical with bug fixes (doesn't require an ini)
@@ -339,6 +372,8 @@ AdditionalWeaponAnims=1
;If the ExtraKillTypes option is enabled, this should be set to 3, with containing entries for any new types ;If the ExtraKillTypes option is enabled, this should be set to 3, with containing entries for any new types
;Must be non-zero to use the edit/get/reset_critical script functions ;Must be non-zero to use the edit/get/reset_critical script functions
OverrideCriticalTable=2 OverrideCriticalTable=2
;To change the path and filename of the critical table file, uncomment the next line
;OverrideCriticalFile=CriticalOverrides.ini
;Set to 1 to get notification of karma changes in the notification window ;Set to 1 to get notification of karma changes in the notification window
DisplayKarmaChanges=0 DisplayKarmaChanges=0
@@ -349,9 +384,6 @@ AlwaysReloadMsgs=0
;Set to 1 to force the player to play the idle animation when reloading their weapon ;Set to 1 to force the player to play the idle animation when reloading their weapon
PlayIdleAnimOnReload=0 PlayIdleAnimOnReload=0
;Set to 1 to prevent corpses from blocking line of fire
CorpseLineOfFireFix=0
;Changes the timer (in days) for deleting corpses on a map after you leave (valid range: 0..13) ;Changes the timer (in days) for deleting corpses on a map after you leave (valid range: 0..13)
;The corpses of critters with 'Ages' flag or on maps with 'dead_bodies_age=No' set in maps.txt will not disappear ;The corpses of critters with 'Ages' flag or on maps with 'dead_bodies_age=No' set in maps.txt will not disappear
;Default is 6. Set to 0 for a 12-hour timer ;Default is 6. Set to 0 for a 12-hour timer
@@ -363,15 +395,13 @@ CorpseDeleteTime=6
;Set to 1 (or some higher number if needed, the maximum is 127) to prevent 100% CPU use ;Set to 1 (or some higher number if needed, the maximum is 127) to prevent 100% CPU use
ProcessorIdle=-1 ProcessorIdle=-1
;Set a number of how many protos per type can be loaded into memory at once (valid range: 512..4096)
;Set to -1 to let set_proto_data script function automatically increase the limit when needed
LoadProtoMaxLimit=-1
;Set to 1 if using the hero appearance mod ;Set to 1 if using the hero appearance mod
;You can add AppChCrt.frm and AppChEdt.frm files to art/intrface/ to set a custom background for the character screen ;Set to 2 for backward compatibility with scripts that manually fix obj_art_fid/art_change_fid_num script functions for dude_obj
;You can add AppChCrt.frm and AppChEdt.frm files to art\intrface\ to set a custom background for the character screen
EnableHeroAppearanceMod=0 EnableHeroAppearanceMod=0
;Set to 1 to skip the 3 opening movies ;Set to 1 to skip the 3 opening movies
;Set to 2 to also skip the splash screen
SkipOpeningMovies=0 SkipOpeningMovies=0
;Causes NPCs who complete their combat turn with AP left over will try and find other ways to spend it. ;Causes NPCs who complete their combat turn with AP left over will try and find other ways to spend it.
@@ -379,16 +409,17 @@ SkipOpeningMovies=0
;Set to 0 to disable ;Set to 0 to disable
NPCsTryToSpendExtraAP=0 NPCsTryToSpendExtraAP=0
;Set to 1 to fix NPCs not checking weapon perks properly when searching for the best weapon ;Set to 1 to fix NPCs not checking weapon perks properly when choosing the best weapon in combat
;Note that enabling this option can significantly affect the weapon choice of some NPCs in combat ;Set to 2 to change the priority multiplier for having weapon perk to 3x (the original is 5x)
;Note that enabling this option can significantly affect the weapon of choice for some NPCs
AIBestWeaponFix=0 AIBestWeaponFix=0
;Set to 1 to fix NPCs not taking chem_primary_desire in AI.txt as drug use preference when using drugs in their inventory ;Set to 1 to fix NPCs not taking chem_primary_desire in AI.txt as drug use preference when using drugs in their inventory
AIDrugUsePerfFix=0 AIDrugUsePerfFix=0
;Allows the use of tiles over 80*36 in size. sfall will just split and resave them at startup ;Allows the use of tiles over 80x36 in size. sfall will just split and resave them at startup
;Set to 1 to check all tiles on started (slow) ;Set to 1 to check all tiles on started (slow)
;Set to 2 if you provide a XLtiles.lst file in art/tiles/ containing a list of the tile ids that need checking ;Set to 2 if you provide a XLtiles.lst file in art\tiles\ containing a list of the tile ids that need checking
AllowLargeTiles=0 AllowLargeTiles=0
;Set to 1 to boost the maximum number of tile FRMs from 4096 to 16383 ;Set to 1 to boost the maximum number of tile FRMs from 4096 to 16383
@@ -415,6 +446,7 @@ UseScrollingQuestsList=1
;Uncomment these lines to control the premade characters offered when starting a new game ;Uncomment these lines to control the premade characters offered when starting a new game
;Multiple options should be separated by commas, and there must be the same number of entries in both lines ;Multiple options should be separated by commas, and there must be the same number of entries in both lines
;Each name in PremadePaths is limited to 11 characters
;PremadePaths=combat,diplomat,stealth ;PremadePaths=combat,diplomat,stealth
;PremadeFIDs=201,203,202 ;PremadeFIDs=201,203,202
@@ -475,12 +507,11 @@ AnimationsAtOnceLimit=120
;Set to 1 to remove the limits that stop the player rolling critical successes/misses in the first few days of game time ;Set to 1 to remove the limits that stop the player rolling critical successes/misses in the first few days of game time
RemoveCriticalTimelimits=0 RemoveCriticalTimelimits=0
;Set to 1 to enable party members with level 6 protos to reach level 6 ;Change the colour of the font used on the main menu for the Fallout/sfall version number and copyright text
NPCStage6Fix=0 ;It's the last byte ('3C' by default) that picks the colour used. The first byte supplies additional flags for this option
;MainMenuFontColour=0x00003C
;Change the colour of the font used on the main menu for the Fallout/sfall version number ;Change the colour of the font used on the main menu for the button text
;It's the last byte ('3c' by default) that picks the colour used. The first byte supplies additional flags ;MainMenuBigFontColour=0x3C
;MainMenuFontColour=0x0600003c
;Two alternate fixes to the interaction between HtH attacks and the fast shot trait ;Two alternate fixes to the interaction between HtH attacks and the fast shot trait
;0 - Fallout 2 original behaviour ;0 - Fallout 2 original behaviour
@@ -492,7 +523,7 @@ FastShotFix=1
BoostScriptDialogLimit=0 BoostScriptDialogLimit=0
;Allows you to edit the skill tables ;Allows you to edit the skill tables
;Point the next line at an ini file containing the replacement skill data ;Point the next line to an ini file containing the replacement skill data
;SkillsFile=Skills.ini ;SkillsFile=Skills.ini
;To change the relationship between SPECIAL stats and derived stats, uncomment the next line ;To change the relationship between SPECIAL stats and derived stats, uncomment the next line
@@ -611,12 +642,9 @@ StackEmptyWeapons=0
;If the amount of ammo boxes in the inventory is less than or equal to the reserve, only one box will be used ;If the amount of ammo boxes in the inventory is less than or equal to the reserve, only one box will be used
ReloadReserve=-1 ReloadReserve=-1
;Set to 1 to change the counter in the 'Move Items' window to start at the maximum number of items ;Set to 1 to change the counter in the 'Move Items' window to start with maximum number, except in the barter screen
ItemCounterDefaultMax=0 ItemCounterDefaultMax=0
;Allows 9 options (lines of text) to be displayed correctly in a dialog window
DialogOptions9Lines=1
;Set to 1 to leave the music playing in dialogue with talking heads ;Set to 1 to leave the music playing in dialogue with talking heads
EnableMusicInDialogue=0 EnableMusicInDialogue=0
@@ -627,13 +655,17 @@ DontTurnOffSneakIfYouRun=0
;Set to 0 to disable switching. (Default is 3) ;Set to 0 to disable switching. (Default is 3)
UseWalkDistance=3 UseWalkDistance=3
;Set to 1 to fix the bug that unable to sell used geiger counters or stealth boys ;Set to 1 to fix the bug of being unable to sell used geiger counters or stealth boys
CanSellUsedGeiger=1 CanSellUsedGeiger=1
;Set to 1 to fix the issue with being able to charge the car by using cells on other scenary/critters ;Set to 1 to fix the issue with being able to charge the car by using cells on other scenery/critters
;Set to 0 if another mod you're using has custom vehicles ;Set to 0 if another mod you're using has custom vehicles
CarChargingFix=1 CarChargingFix=1
;Set to 1 to prevent the car from being lost when entering a location via the Town/World button and then leaving on foot
;Note that the global variable 633 (GVAR_CAR_PLACED_TILE) will be set to -1 when the player leaves a location
CarPlacedTileFix=1
;Set to 1 to skip weapon equip/unequip animations when performing various actions ;Set to 1 to skip weapon equip/unequip animations when performing various actions
InstantWeaponEquip=0 InstantWeaponEquip=0
@@ -669,7 +701,7 @@ PartyMemberExtraInfo=0
;that overrides First Aid/Doctor functions has very limited usefulness ;that overrides First Aid/Doctor functions has very limited usefulness
PartyMemberSkillFix=0 PartyMemberSkillFix=0
;Set to 1 to skip loading game settings from a saved game, except for the game/combat difficulty settings ;Set to 1 to skip loading all game settings except the game/combat difficulty from a saved game
;Set to 2 to also skip loading the game/combat difficulty settings ;Set to 2 to also skip loading the game/combat difficulty settings
SkipLoadingGameSettings=0 SkipLoadingGameSettings=0
@@ -680,16 +712,29 @@ InterfaceDontMoveOnTop=0
;Set to -1 to disable the special death message when the global variable is set ;Set to -1 to disable the special death message when the global variable is set
SpecialDeathGVAR=491 SpecialDeathGVAR=491
;Set to 1 to disable the special handling of map IDs 19 and 37 in the engine when entering the maps
;Note that enabling this option can break the map changes in Modoc and Vault 15
DisableSpecialMapIDs=0
;Changes the base value of the duration of the knockout effect (valid range: 35..100; default is 35)
;The formula for the duration in ticks is: 10 * (value - 3 * EN)
KnockoutTime=35
;Set to 1 to display sfall built-in credits at the bottom of credits.txt contents instead of at the top ;Set to 1 to display sfall built-in credits at the bottom of credits.txt contents instead of at the top
CreditsAtBottom=0 CreditsAtBottom=0
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[Scripts] [Scripts]
;Comma-separated list of masked paths to load global scripts from ;Comma-separated list of masked paths to load global scripts from
;Only use single slash \ as directory separator ;Only use single backslash \ as the directory separator
;Paths outside of scripts folder are supported ;Paths outside of scripts folder are supported
GlobalScriptPaths=scripts\gl*.int,scripts\sfall\gl*.int GlobalScriptPaths=scripts\gl*.int,scripts\sfall\gl*.int
;Uncomment the option to specify a common folder path for all ini files used by scripts
;You will have to put all the available ini files of the mods in this directory
;The maximum length of the specified path is 61 characters
;IniConfigFolder=IniConfig
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[Debugging] [Debugging]
;Extra sfall configuration settings that can be used by modders ;Extra sfall configuration settings that can be used by modders
@@ -699,7 +744,8 @@ GlobalScriptPaths=scripts\gl*.int,scripts\sfall\gl*.int
Enable=0 Enable=0
;Fallout 2 Debug Patch ;Fallout 2 Debug Patch
;Set to 1 to send debug output to the screen, 2 to a debug.log file, or 3 to both the screen and a debug.log file ;Set to 1 to send debug output to the screen, 2 to a debug.log file, or 3 to both the screen and debug.log
;Does not require sfall debugging mode
;While you don't need to create an environment variable, you do still need to set the appropriate lines in fallout2.cfg: ;While you don't need to create an environment variable, you do still need to set the appropriate lines in fallout2.cfg:
;------- ;-------
;[debug] ;[debug]
@@ -714,6 +760,9 @@ Enable=0
;------- ;-------
DebugMode=0 DebugMode=0
;Set to 1 to hide error messages in debug output when a null value is passed to the function as an object
HideObjIsNullMsg=0
;Change to 1 to skip the compatibility mode check ;Change to 1 to skip the compatibility mode check
SkipCompatModeCheck=0 SkipCompatModeCheck=0
@@ -726,24 +775,25 @@ SkipSizeCheck=0
;Does not require sfall debugging mode ;Does not require sfall debugging mode
;ExtraCRC=0x00000000,0x00000000 ;ExtraCRC=0x00000000,0x00000000
;Set to 1 to stop Fallout from deleting non readonly protos at startup ;Set to 1 to stop Fallout from deleting non read-only protos at startup
;Has pretty nasty side effects when saving/reloading, so don't use for regular gameplay ;Has pretty nasty side effects when saving/reloading, so don't use for regular gameplay
DontDeleteProtos=0 DontDeleteProtos=0
;Set to 1 to give scripts direct access to Fallout's address space, and to make arbitrary calls into Fallout's code ;Set to 1 to give scripts direct access to Fallout's address space, and to make arbitrary calls into Fallout's code
;Does not require sfall debugging mode
AllowUnsafeScripting=0 AllowUnsafeScripting=0
;Set to 1 to force sfall to search for global scripts every time the game loads rather than only once on the first game start
AlwaysFindScripts=0
;Set to 1 to force sfall to inject all hooks code into the game, even if corresponding hook scripts don't exist ;Set to 1 to force sfall to inject all hooks code into the game, even if corresponding hook scripts don't exist
InjectAllGameHooks=0 InjectAllGameHooks=0
;Set to 1 to hide error messages in debug output when a null value is passed to the function as an object ;Set to 1 to force sfall to search for global scripts every time the game loads rather than only once on the first game start
HideObjIsNullMsg=0 AlwaysFindScripts=0
;Set to 1 to force critters to display combat float messages
;Requires AllowSoundForFloats to be enabled
Test_ForceFloats=0
;These options control what output is saved in the debug log (sfall-log.txt) ;These options control what output is saved in the debug log (sfall-log.txt)
;Prints messages duing sfall initialization ;Prints messages duing sfall initialization
Init=0 Init=0
;Prints messages relating to hook scripts ;Prints messages relating to hook scripts
@@ -0,0 +1,201 @@
;Glovz's Damage Fix
; PID_EXPLOSIVE_ROCKET
[1]
pid=14
ac_adjust=-10
dr_adjust=0
dam_mult=1
dam_div=1
; PID_10MM_JHP
[2]
pid=29
ac_adjust=0
dr_adjust=0
dam_mult=2
dam_div=1
; PID_10MM_AP
[3]
pid=30
ac_adjust=-5
dr_adjust=0
dam_mult=1
dam_div=2
; PID_44_MAGNUM_JHP
[4]
pid=31
ac_adjust=0
dr_adjust=-10
dam_mult=2
dam_div=1
; PID_FLAMETHROWER_FUEL
[5]
pid=32
ac_adjust=-20
dr_adjust=0
dam_mult=1
dam_div=1
; PID_14MM_AP
[6]
pid=33
ac_adjust=-5
dr_adjust=-30
dam_mult=1
dam_div=2
; PID_223_FMJ
[7]
pid=34
ac_adjust=-15
dr_adjust=-15
dam_mult=2
dam_div=2
; PID_5MM_JHP
[8]
pid=35
ac_adjust=0
dr_adjust=-15
dam_mult=2
dam_div=1
; PID_5MM_AP
[9]
pid=36
ac_adjust=-5
dr_adjust=-15
dam_mult=1
dam_div=2
; PID_ROCKET_AP
[10]
pid=37
ac_adjust=-10
dr_adjust=0
dam_mult=1
dam_div=2
; PID_SMALL_ENERGY_CELL
[11]
pid=38
ac_adjust=-20
dr_adjust=0
dam_mult=2
dam_div=1
; PID_MICRO_FUSION_CELL
[12]
pid=39
ac_adjust=-20
dr_adjust=0
dam_mult=2
dam_div=1
; PID_SHOTGUN_SHELLS
[13]
pid=95
ac_adjust=-15
dr_adjust=0
dam_mult=3
dam_div=1
; PID_44_FMJ_MAGNUM
[14]
pid=111
ac_adjust=-5
dr_adjust=-10
dam_mult=2
dam_div=2
; PID_9MM_BALL
[15]
pid=121
ac_adjust=0
dr_adjust=0
dam_mult=1
dam_div=1
; PID_BBS
[16]
pid=163
ac_adjust=0
dr_adjust=0
dam_mult=1
dam_div=1
; PID_ROBO_ROCKET_AMMO
[17]
pid=274
ac_adjust=-10
dr_adjust=-10
dam_mult=1
dam_div=1
; PID_45_CALIBER_AMMO
[18]
pid=357
ac_adjust=0
dr_adjust=-5
dam_mult=2
dam_div=1
; PID_2MM_EC_AMMO
[19]
pid=358
ac_adjust=-25
dr_adjust=-20
dam_mult=1
dam_div=3
; PID_4_7MM_CASELESS
[20]
pid=359
ac_adjust=-5
dr_adjust=-25
dam_mult=1
dam_div=2
; PID_9MM_AMMO
[21]
pid=360
ac_adjust=0
dr_adjust=0
dam_mult=2
dam_div=1
; PID_HN_NEEDLER_CARTRIDGE
[22]
pid=361
ac_adjust=-20
dr_adjust=-5
dam_mult=1
dam_div=1
; PID_HN_AP_NEEDLER_CARTRIDGE
[23]
pid=362
ac_adjust=-20
dr_adjust=-5
dam_mult=1
dam_div=2
; PID_7_62MM_AMMO
[24]
pid=363
ac_adjust=-10
dr_adjust=-20
dam_mult=2
dam_div=2
; PID_FLAMETHROWER_FUEL_MK_II
[25]
pid=382
ac_adjust=-20
dr_adjust=-15
dam_mult=1
dam_div=1
+201
View File
@@ -0,0 +1,201 @@
;YAAM
; PID_EXPLOSIVE_ROCKET
[1]
pid=14
ac_adjust=0
dr_adjust=0
dam_mult=3
dam_div=2
; PID_10MM_JHP
[2]
pid=29
ac_adjust=0
dr_adjust=0
dam_mult=3
dam_div=2
; PID_10MM_AP
[3]
pid=30
ac_adjust=0
dr_adjust=4
dam_mult=1
dam_div=1
; PID_44_MAGNUM_JHP
[4]
pid=31
ac_adjust=0
dr_adjust=0
dam_mult=3
dam_div=2
; PID_FLAMETHROWER_FUEL
[5]
pid=32
ac_adjust=-20
dr_adjust=0
dam_mult=3
dam_div=4
; PID_14MM_AP
[6]
pid=33
ac_adjust=0
dr_adjust=8
dam_mult=1
dam_div=1
; PID_223_FMJ
[7]
pid=34
ac_adjust=-20
dr_adjust=5
dam_mult=1
dam_div=1
; PID_5MM_JHP
[8]
pid=35
ac_adjust=0
dr_adjust=0
dam_mult=3
dam_div=2
; PID_5MM_AP
[9]
pid=36
ac_adjust=0
dr_adjust=4
dam_mult=1
dam_div=1
; PID_ROCKET_AP
[10]
pid=37
ac_adjust=0
dr_adjust=20
dam_mult=1
dam_div=1
; PID_SMALL_ENERGY_CELL
[11]
pid=38
ac_adjust=0
dr_adjust=0
dam_mult=1
dam_div=1
; PID_MICRO_FUSION_CELL
[12]
pid=39
ac_adjust=0
dr_adjust=0
dam_mult=1
dam_div=1
; PID_SHOTGUN_SHELLS
[13]
pid=95
ac_adjust=-10
dr_adjust=0
dam_mult=1
dam_div=1
; PID_44_FMJ_MAGNUM
[14]
pid=111
ac_adjust=0
dr_adjust=5
dam_mult=1
dam_div=1
; PID_9MM_BALL
[15]
pid=121
ac_adjust=0
dr_adjust=2
dam_mult=3
dam_div=2
; PID_BBS
[16]
pid=163
ac_adjust=0
dr_adjust=0
dam_mult=1
dam_div=1
; PID_ROBO_ROCKET_AMMO
[17]
pid=274
ac_adjust=0
dr_adjust=10
dam_mult=1
dam_div=1
; PID_45_CALIBER_AMMO
[18]
pid=357
ac_adjust=0
dr_adjust=0
dam_mult=1
dam_div=1
; PID_2MM_EC_AMMO
[19]
pid=358
ac_adjust=-30
dr_adjust=9
dam_mult=3
dam_div=2
; PID_4_7MM_CASELESS
[20]
pid=359
ac_adjust=-5
dr_adjust=7
dam_mult=3
dam_div=2
; PID_9MM_AMMO
[21]
pid=360
ac_adjust=0
dr_adjust=2
dam_mult=1
dam_div=1
; PID_HN_NEEDLER_CARTRIDGE
[22]
pid=361
ac_adjust=-10
dr_adjust=2
dam_mult=1
dam_div=1
; PID_HN_AP_NEEDLER_CARTRIDGE
[23]
pid=362
ac_adjust=-10
dr_adjust=5
dam_mult=2
dam_div=1
; PID_7_62MM_AMMO
[24]
pid=363
ac_adjust=-5
dr_adjust=2
dam_mult=1
dam_div=1
; PID_FLAMETHROWER_FUEL_MK_II
[25]
pid=382
ac_adjust=-20
dr_adjust=0
dam_mult=1
dam_div=1
Binary file not shown.
@@ -0,0 +1,63 @@
/*
Ammo INI Loader mod for Fallout 2 by NovaRain
---------------------------------------------
- modifies ammo protos with data from an INI file:
* AmmoGlovz.ini if DamageFormula=1 or 2 in ddraw.ini
* AmmoYAAM.ini if DamageFormula=5 in ddraw.ini
* AmmoMod.ini if not using any bulit-in damage formula
Requires sfall 3.5 or higher
*/
#include "..\headers\define_extra.h"
procedure set_ammo_mod;
procedure start;
procedure map_enter_p_proc;
variable ammoIni;
variable enabled;
procedure set_ammo_mod begin
variable pid, dmg_mod, i := 1;
while (i > 0) do begin
pid := get_ini_setting(ammoIni + "|" + i + "|pid");
if (pid < 1) then break;
set_proto_data(pid, PROTO_AM_AC_MOD, get_ini_setting(ammoIni + "|" + i + "|ac_adjust"));
set_proto_data(pid, PROTO_AM_DR_MOD, get_ini_setting(ammoIni + "|" + i + "|dr_adjust"));
// dam_mult and dam_div must be positive integers
dmg_mod := get_ini_setting(ammoIni + "|" + i + "|dam_mult");
if (dmg_mod < 1) then dmg_mod := 1;
set_proto_data(pid, PROTO_AM_DMG_MULT, dmg_mod);
dmg_mod := get_ini_setting(ammoIni + "|" + i + "|dam_div");
if (dmg_mod < 1) then dmg_mod := 1;
set_proto_data(pid, PROTO_AM_DMG_DIV, dmg_mod);
i++;
end
//debug_msg("AmmoMod: " + ammoIni + " - set " + (i - 1) + " ammo protos.");
end
procedure start begin
if game_loaded then begin
ammoIni := get_ini_setting("ddraw.ini|Misc|DamageFormula");
if (ammoIni == 1 or ammoIni == 2) then
ammoIni := "AmmoGlovz.ini";
else if (ammoIni == 5) then
ammoIni := "AmmoYAAM.ini";
else
ammoIni := "AmmoMod.ini";
enabled := get_ini_setting(ammoIni + "|1|pid");
if (enabled > 0) then call set_ammo_mod;
end
end
procedure map_enter_p_proc begin
if (enabled > 0) then call set_ammo_mod;
end
+12
View File
@@ -0,0 +1,12 @@
Ammo INI Loader mod for Fallout 2 by NovaRain
---------------------------------------------
- modifies ammo protos with data from an INI file:
* AmmoGlovz.ini if DamageFormula=1 or 2 in ddraw.ini
* AmmoYAAM.ini if DamageFormula=5 in ddraw.ini
* AmmoMod.ini if not using any bulit-in damage formula
Requires sfall 3.5 or higher.
To use, copy gl_ammomod.int to your scripts folder, and copy the INI files to the same directory as sfall.

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