Compare commits

..
Author SHA1 Message Date
Mike Klaas 1b37a9b2dc Fix f2_res.ini migration
In https://github.com/fallout2-ce/fallout2-ce/commit/9e8eaa13f56988ef9e462d0ec6a31833931b7297, f2_res.ini stopped getting migrated, since settings were loaded in memory (with defaults) earlier.  This is a small fix that checks the value in the file instead of in memory.

Also, added some correctness checking to global scripts loading.  somehow I had a length 0 .int file in my scripts/ directly which caused a crash (now skips with an error log)
2026-04-22 23:20:56 -07:00
Vlad KandCopilot efd8a4a525 Fix last remaining warnings in MSVC (#406)
* Fix last remaining warnings in MSVC

* Update CMakeLists.txt

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-22 21:04:21 +00:00
Vlad Kandgithub-actions[bot] 4c09ffe9e6 Extended AP bar from sfall (#400)
* Extended AP bar from sfall

* Rewrote using new Buffer2D and blitBuffer2D + code review fixes

* chore: auto-format with clang-format

* Add ConstBuffer2D + other fixes

* chore: auto-format with clang-format

* Linux build fix attempt

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-22 22:09:12 +02:00
Mike Klaas 1026c79ac5 Implement objects_in_radius (#399)
* Implement `objects_in_radius`

Used by Et tu and a few other mods
2026-04-21 22:20:59 -07:00
Vlad K 3849b4ea17 Add AI agent related files to git ignore (#395)
* Add AI agent related files to git ignore

* Add gemini.md
2026-04-21 09:46:59 +02:00
Mike Klaas 6cbe68aef9 Fix setup (play) instructions, and add basic compile instructions to CONTRIBUTING.md (#390)
* Fix setup (play) instructions, and add basic compile instructions to CONTRIBUTING.md
2026-04-21 06:09:42 +00:00
Mike Klaas 066595f683 Add Fallout 1 .dat file support to fallout2-dat (#393) 2026-04-20 20:21:19 -07:00
Vlad Kandgithub-actions[bot] fbae40e9a8 Move content-related ddraw.ini settings into new DB config, introduce ce.dat (#387)
* Add basic content config structure

* Moved non-file related settings from ddraw.ini to game.cfg

* Various fixes from self review

* Moved remaining worldmap settings to game.cfg

* Migrate character and text related settings

* Update docs

* chore: auto-format with clang-format

* Add hard-coded foce_base.dat to have reliable location to load CE-provided content from

* Move game.cfg to new base mod

* Automatic migration from ddraw.ini

* chore: auto-format with clang-format

* Removed option to disable cities limit fix

* Minor review comment fixes

* Migrate to /data instead of CE dat

* Migrate to local game#patch.cfg and skip fields with default values

- This was if some mod modifies/overwrites game.cfg later, only fields that user cares about will be loaded from user's override, and said mod is less likely to break

* Fix potential issue when "master_patches" is an absolute path and move recursive mkdir into a helper function

* Refactor code and fix some edge cases: data folder not exists when migrating, ddraw.ini doesn't exist

* Rename face_base.dat -> ce.dat

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-20 20:23:13 +00:00
Mike Klaas 4070d29fcb set/remove_script and HOOK_STDPROCEDURE{_END} (#392)
* `set/remove_script` and `HOOK_STDPROCEDURE{_END}`

These were implemented together as I thought HOOK_STDPROCEDURE would be useful for testing set_script.
2026-04-20 19:56:08 +00:00
Mike Klaas dcba8882bf Commandline .dat file viewer (#373) 2026-04-19 15:29:18 -07:00
Mike Klaas 62c2621fef Implement HOOK_ONDEATH (#384)
* Implement HOOK_ONDEATH

Test both combat death and script-triggered death

* move hp and DEAD flag above hook call
2026-04-19 14:24:51 -07:00
Vlad Kandgithub-actions[bot] 5188ebd4f4 Simplify settings registry with macros (#386)
* Simplify settings registry with macros

* chore: auto-format with clang-format

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-17 22:44:23 +02:00
98 changed files with 2968 additions and 12823 deletions
+13
View File
@@ -10,6 +10,7 @@
*.userosscache
*.sln.docstates
.DS_Store
.local-tools/
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
@@ -399,3 +400,15 @@ FodyWeavers.xsd
# versioning header
src/platform/git_version.h
CMakeUserPresets.json
# Local configs for AI agents
.opencode
.agents
.aider*
.gemini
.claude
.mcp.json
AGENTS.md
CLAUDE.md
GEMINI.md
opencode.json
+35 -12
View File
@@ -20,6 +20,10 @@ set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED YES)
set(CMAKE_CXX_EXTENSIONS NO)
if(MSVC)
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:/EHsc>)
endif()
option(FALLOUT_VENDORED "Use vendored third-party libraries" ON)
if(ANDROID)
@@ -62,6 +66,8 @@ target_sources(${EXECUTABLE_NAME} PUBLIC
"src/combat.h"
"src/config.cc"
"src/config.h"
"src/content_config.cc"
"src/content_config.h"
"src/credits.cc"
"src/credits.h"
"src/critter.cc"
@@ -98,12 +104,6 @@ target_sources(${EXECUTABLE_NAME} PUBLIC
"src/file_find.h"
"src/file_utils.cc"
"src/file_utils.h"
"src/fo1db/fo1_assoc.cc"
"src/fo1db/fo1_assoc.h"
"src/fo1db/fo1_db.cc"
"src/fo1db/fo1_db.h"
"src/fo1db/fo1_lzss.cc"
"src/fo1db/fo1_lzss.h"
"src/font_manager.cc"
"src/font_manager.h"
"src/game_config.cc"
@@ -120,8 +120,6 @@ target_sources(${EXECUTABLE_NAME} PUBLIC
"src/game_movie.h"
"src/game_sound.cc"
"src/game_sound.h"
"src/game_variant.cc"
"src/game_variant.h"
"src/game_vars.h"
"src/game.cc"
"src/game.h"
@@ -330,10 +328,6 @@ if(WIN32)
)
endif()
if(MSVC)
target_compile_options(${EXECUTABLE_NAME} PRIVATE /EHsc)
endif()
if(WIN32)
target_link_libraries(${EXECUTABLE_NAME}
winmm
@@ -458,6 +452,35 @@ target_include_directories(${EXECUTABLE_NAME} PRIVATE ${ZLIB_INCLUDE_DIRS})
target_link_libraries(${EXECUTABLE_NAME} ${SDL2_LIBRARIES})
target_include_directories(${EXECUTABLE_NAME} PRIVATE ${SDL2_INCLUDE_DIRS})
if((NOT ANDROID) AND (NOT IOS) AND (NOT CMAKE_SYSTEM_NAME MATCHES "Emscripten"))
add_executable(fallout2-dat
"tools/dat_tool.cc"
"tools/dat_archive.cc"
"tools/fo1_dat_lzss.cc"
"src/dfile.cc"
"src/platform_compat.cc"
)
if(APPLE)
set_target_properties(fallout2-dat PROPERTIES
XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO"
XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO"
)
endif()
target_link_libraries(fallout2-dat
fpattern_windows::fpattern_windows
${ZLIB_LIBRARIES}
${SDL2_LIBRARIES}
)
if(WIN32)
target_link_libraries(fallout2-dat winmm)
endif()
target_include_directories(fallout2-dat PRIVATE "src")
target_include_directories(fallout2-dat PRIVATE ${ZLIB_INCLUDE_DIRS})
target_include_directories(fallout2-dat PRIVATE ${SDL2_INCLUDE_DIRS})
endif()
if(APPLE)
if(IOS)
install(TARGETS ${EXECUTABLE_NAME} DESTINATION "Payload")
-3
View File
@@ -119,9 +119,6 @@
"base"
],
"generator": "Xcode",
"cacheVariables": {
"CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY": ""
},
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
+66
View File
@@ -2,6 +2,72 @@
This file is currently a shell to be filled in over time. For now, it only captures project-specific maintenance notes that are easy to miss.
For current sfall compatibility status and the remaining work needed to close gaps, see [SFALL_COMPATIBILITY.md](SFALL_COMPATIBILITY.md).
## Building
The project uses CMake, so building mostly comes down to picking the right preset.
### macOS
- Install the Command Line Tools if needed: `xcode-select --install`
- Install the common build dependencies: `brew install cmake ninja`
- Configure and build:
```sh
cmake -S . -B out/build/macos -G Ninja -DCMAKE_BUILD_TYPE=Debug
cmake --build out/build/macos --target fallout2-ce
```
### Linux
Install SDL and a toolchain:
- Debian / Ubuntu:
```sh
sudo apt install build-essential cmake ninja-build libsdl2-dev zlib1g-dev
```
- Fedora:
```sh
sudo dnf install gcc-c++ cmake ninja-build SDL2-devel zlib-devel
```
- Arch Linux:
```sh
sudo pacman -S base-devel cmake ninja sdl2 zlib
```
Then build:
```
cmake -S . -B out/build/linux-x64-debug -G Ninja -DCMAKE_BUILD_TYPE=Debug
cmake --build out/build/linux-x64-debug --target fallout2-ce
```
### Windows
TODO: add Visual Studio build instructions. This will likely need a Visual Studio generator or preset plus the MSVC toolchain and Windows SDK.
## `.dat` CLI Tool
There is a small command-line archive tool in this repo for inspecting Fallout `.dat` files. It supports both Fallout 2 and Fallout 1 archives.
From the repo root, build it with your normal CMake workflow, targeting `fallout2-dat`:
`cmake --build out/build/<preset-name> --target fallout2-dat`
The executable is written to your selected build directory, so the exact path will vary by preset and configuration.
The current tool is read-only. Available commands:
1. `./<BUILD_DIR>/fallout2-dat <archive.dat> list [pattern]`
2. `./<BUILD_DIR>/fallout2-dat <archive.dat> info [pattern]`
3. `./<BUILD_DIR>/fallout2-dat <archive.dat> extract [--lower] <output-dir> [pattern]`
4. `./<BUILD_DIR>/fallout2-dat <archive.dat> cat <entry>`
Use `--lower` with `extract` when you want every extracted file and directory name forced to lowercase.
For example:
`fallout2-dat master.dat extract --lower /tmp/fallout2-dat-lower data\\*`
## Updating SDL
SDL is pinned for native builds in `third_party/sdl2/CMakeLists.txt`. Right now, Android also relies on checked-in Java bindings in `os/android/app/src/main/java/org/libsdl/app`, and those bindings must match the SDL version fetched by CMake.
+12 -19
View File
@@ -2,13 +2,15 @@
Fallout 2 Community Edition is a fully working re-implementation of Fallout 2, with the same original gameplay, engine bugfixes, and some quality of life improvements, that works (mostly) hassle-free on multiple platforms. This is a fork of the original project, which isn't getting regular updates.
Popular Fallout 2 total conversion mods are partially supported. Original versions of Nevada and Sonora (that do not rely on extended features provided by Sfall) work. [Fallout 2 Restoration Project](https://github.com/BGforgeNet/Fallout2_Restoration_Project), [Fallout Et Tu](https://github.com/rotators/Fo1in2) and [Olympus 2207](https://olympus2207.com) are not yet supported. Other mods (particularly Resurrection and Yesterday) are not tested.
Popular Fallout 2 total conversion mods are partially supported. Original versions of Nevada and Sonora (that do not rely on extended features provided by Sfall) work. [Fallout 2 Restoration Project](https://github.com/BGforgeNet/Fallout2_Restoration_Project) is supported (in Beta). [Fallout Et Tu](https://github.com/rotators/Fo1in2) and [Olympus 2207](https://olympus2207.com) are not yet supported. Other mods (particularly Resurrection and Yesterday) are not tested.
There is also [Fallout Community Edition](https://github.com/alexbatalov/fallout1-ce) (not affiliated with this fork).
For build and contributor notes, see [CONTRIBUTING.md](CONTRIBUTING.md).
## Installation
You must own the game to play. Purchase your copy on [GOG](https://www.gog.com/game/fallout_2), [Epic Games](https://store.epicgames.com/p/fallout-2) or [Steam](https://store.steampowered.com/app/38410). Download latest [release](https://github.com/fallout2-ce/fallout2-ce/releases) or build from source.
You must own the game to play. Purchase your copy on [GOG](https://www.gog.com/game/fallout_2), [Epic Games](https://store.epicgames.com/p/fallout-2) or [Steam](https://store.steampowered.com/app/38410). Download latest [release](https://github.com/fallout2-ce/fallout2-ce/releases) or build from source.
### Windows
@@ -22,17 +24,10 @@ Download and copy `fallout2-ce.exe` to your `Fallout2` folder. It serves as a dr
```console
$ sudo apt install innoextract
$ innoextract ~/Downloads/setup_fallout2_2.1.0.18.exe -I app
$ mv app Fallout2
$ innoextract ~/Downloads/setup_fallout_2_1.02_gog_v1_\(77792\).exe -d Fallout2
```
- Download and copy `fallout2-ce` to this folder.
- Install [SDL2](https://libsdl.org/download-2.0.php):
```console
$ sudo apt install libsdl2-2.0-0
```
- Download the Linux release archive, extract `fallout2-ce`, and copy it into this folder.
- Run `./fallout2-ce`.
@@ -48,13 +43,13 @@ $ sudo apt install libsdl2-2.0-0
```console
$ brew install innoextract
$ innoextract ~/Downloads/setup_fallout2_2.1.0.18.exe -I app
$ mv app /Applications/Fallout2
$ innoextract ~/Downloads/setup_fallout_2_1.02_gog_v1_\(77792\).exe -d fallout2
$ mv fallout2 /Applications/Fallout2
```
- Download and copy `fallout2-ce.app` to this folder.
- [Download](https://github.com/fallout2-ce/fallout2-ce/releases) and copy `Fallout II Community Edition.app` to this folder.
- Run `fallout2-ce.app`.
- Run `Fallout II Community Edition.app`.
### Android
@@ -141,11 +136,9 @@ For a sample ddraw.ini configuration file, containing all currently working sett
## Contributing
Integrating Sfall goodies is the top priority. Quality of life updates are OK too. Please no large scale refactorings at this time as we need to reconcile changes from Reference Edition, which will make this process slow and error-prone. In any case open up an issue with your suggestion or to notify other people that something is being worked on.
Integrating Sfall goodies is the top priority. Quality of life updates are OK too. In any case open up an issue with your suggestion or to notify other people that something is being worked on.
### Integrating Sfall
There are literally hundreds if not thousands of fixes and features in sfall. I guess not all of them are needed in Community Edition, but for the sake of compatibility with big mods out there, let's integrate them all.
For current sfall compatibility status and the remaining work needed to close gaps, see [SFALL_COMPATIBILITY.md](SFALL_COMPATIBILITY.md).
## License
+13 -9
View File
@@ -4,9 +4,13 @@ This document tracks Fallout 2 CE compatibility with sfall. This is for modders
For now, this covers opcodes/metarules, and hooks. In the future, it will include other ways of modifying the engine (like ini files), and other Sfall-specific behaviour.
## Settings (ddraw.ini → fallout2.cfg)
## Settings (ddraw.ini → fallout2.cfg / game.cfg)
Some settings previously read from `ddraw.ini` have been moved into `fallout2.cfg`. The table below maps each setting to its new location. `HiResMode` had no effect in CE and has been removed.
Settings previously read from `ddraw.ini` have been moved into standard CE config files.
Most settings that control game behavior (premade characters, extra message files, combat tweaks, worldmap, etc.) have been moved into [`<DAT>/config/game.cfg`](files/ce.dat/config/game.cfg), which is a content-mod config file intended to be overridden by mods. See that file for the full list with descriptions.
The following settings were moved into [`fallout2.cfg`](files/fallout2.cfg) instead:
| ddraw.ini section | ddraw.ini key | fallout2.cfg section | fallout2.cfg key |
| --- | --- | --- | --- |
@@ -48,7 +52,7 @@ See [`https://sfall-team.github.io/sfall/`](https://sfall-team.github.io/sfall/)
| Explosions | set_attack_explosion_pattern<br>set_attack_explosion_art<br>set_attack_explosion_radius<br>set_attack_is_explosion_fire<br>set_explosion_radius<br>set_dynamite_damage<br>set_plastic_damage<br>get_explosion_damage<br>set_explosion_max_targets<br>item_make_explosive | âś… except item_make_explosive | - |
| Animations | reg_anim_combat_check<br>reg_anim_destroy<br>reg_anim_animate_and_hide<br>reg_anim_light<br>reg_anim_change_fid<br>reg_anim_take_out<br>reg_anim_turn_towards<br>reg_anim_callback<br>reg_anim_animate_and_move | âś… except reg_anim_callback | - |
| Art and appearance | art_exists<br>refresh_pc_art<br>art_cache_clear<br>set_hero_race<br>set_hero_style | implemented: art_exists, refresh_pc_art, art_cache_clear | - |
| Tiles and paths | get_tile_fid<br>tile_under_cursor<br>tile_light<br>tile_get_objs<br>tile_refresh_display<br>obj_blocking_tile<br>tile_by_position<br>get_tile_ground_fid<br>get_tile_roof_fid<br>obj_blocking_line<br>path_find_to<br>objects_in_radius | âś… except objects_in_radius | - |
| Tiles and paths | get_tile_fid<br>tile_under_cursor<br>tile_light<br>tile_get_objs<br>tile_refresh_display<br>obj_blocking_tile<br>tile_by_position<br>get_tile_ground_fid<br>get_tile_roof_fid<br>obj_blocking_line<br>path_find_to<br>objects_in_radius | âś… | - |
| Utility | sprintf<br>typeof<br>atoi<br>atof | âś… | - |
| Utility / Strings | string_split<br>substr<br>strlen<br>charcode<br>get_string_pointer<br>string_find<br>string_find_from<br>string_format<br>string_format_array<br>string_replace<br>string_to_case<br>string_compare | âś… | `get_string_pointer` is deprecated and intentionally omitted. |
| Interface / Tags | show_iface_tag<br>hide_iface_tag<br>is_iface_tag_active<br>set_iface_tag_text<br>add_iface_tag | âś… except set_iface_tag_text, add_iface_tag | CE only handles built-in interface tags here; custom tag creation/text is not supported yet. |
@@ -57,7 +61,7 @@ See [`https://sfall-team.github.io/sfall/`](https://sfall-team.github.io/sfall/)
| Arrays / Array functions | create_array<br>temp_array<br>fix_array<br>get/set_array<br>resize_array<br>free_array<br>scan_array<br>len_array<br>save/load_array<br>array_key<br>arrayexpr | âś… except save_array, load_array | - |
| Perks and traits / NPC perks | set_fake_perk_npc<br>set_fake_trait_npc<br>set_selectable_perk_npc<br>has_fake_perk_npc<br>has_fake_trait_npc | not implemented | - |
| Global scripts / Global script functions | set_global_script_repeat<br>set_global_script_type<br>available_global_script_types | âś… except available_global_script_types | - |
| Combat | attack_is_aimed<br>block_combat<br>force_aimed_shots<br>disable_aimed_shots<br>get_attack_type<br>get/set_bodypart_hit_modifier<br>combat_data<br>get/set/reset_critical_table<br>get_last_target<br>get_last_attacker<br>set_critter_burst_disable<br>get/set_critter_current_ap<br>set_spray_settings<br>get/set_combat_free_move | implemented: get_attack_type, get_bodypart_hit_modifier, combat_data, set_bodypart_hit_modifier, get_critter_current_ap, set_critter_current_ap, get_combat_free_move, set_combat_free_move | - |
| Combat | attack_is_aimed<br>block_combat<br>force_aimed_shots<br>disable_aimed_shots<br>get_attack_type<br>get/set_bodypart_hit_modifier<br>combat_data<br>get/set/reset_critical_table<br>get_last_target<br>get_last_attacker<br>set_critter_burst_disable<br>get/set_critter_current_ap<br>set_spray_settings<br>get/set_combat_free_move | implemented: get_attack_type, get/set_bodypart_hit_modifier, combat_data, get/set_critter_current_ap, get/set_combat_free_move | - |
| Car | set_car_current_town<br>car_gas_amount<br>set_car_intface_art | implemented: all except set_car_intface_art | - |
| Interface / Windows and images | art_frame_data<br>interface_art_draw<br>interface_print<br>draw_image<br>draw_image_scaled<br>get_window_under_mouse<br>create_win<br>get_window_attribute<br>message_box<br>set_window_flag<br>win_fill_color<br>interface_overlay<br>dialog_message<br>get_text_width<br>hide_window<br>show_window<br>create_message_window | implemented: only message_box, get_text_width, show_window, create_message_window | - |
| Interface / Outline | outlined_object<br>get_outline<br>set_outline | âś… | - |
@@ -66,9 +70,9 @@ See [`https://sfall-team.github.io/sfall/`](https://sfall-team.github.io/sfall/)
| Interface / Cursor | get/set_cursor_mode | âś… | - |
| Locks | lock_is_jammed<br>unjam_lock<br>set_unjam_locks_time | not implemented | - |
| INI settings | get_ini_setting<br>get_ini_string<br>get_ini_section<br>get_ini_sections<br>get_ini_config<br>get_ini_config_db<br>set_ini_setting | âś… except get_ini_config, get_ini_config_db | `modified_ini` is intentionally omitted as deprecated. |
| Objects and scripts | set_self<br>set_dude_obj<br>real_dude_obj<br>remove_script<br>get/set_script<br>obj_is_carrying_obj<br>loot_obj<br>dialog_obj<br>obj_under_cursor<br>get/set_object_data<br>get/set_flags<br>set_unique_id<br>set_scr_name<br>obj_is_openable<br>get/set_proto_data<br>get_object_ai_data | implemented: set_self, get_script, obj_is_carrying_obj, loot_obj, dialog_obj, obj_under_cursor, get_object_data, get_flags, set_flags, obj_is_openable, get_proto_data, set_proto_data | - |
| Objects and scripts | set_self<br>set_dude_obj<br>real_dude_obj<br>remove_script<br>get/set_script<br>obj_is_carrying_obj<br>loot_obj<br>dialog_obj<br>obj_under_cursor<br>get/set_object_data<br>get/set_flags<br>set_unique_id<br>set_scr_name<br>obj_is_openable<br>get/set_proto_data<br>get_object_ai_data | implemented: set_self, get/set/remove_script, obj_is_carrying_obj, loot_obj, dialog_obj, obj_under_cursor, get_object_data, get_flags, set_flags, obj_is_openable, get_proto_data, set_proto_data | - |
| Other / Game management | set_movie_path<br>stop/resume_game<br>mark_movie_played<br>game_loaded<br>get_game_mode<br>get_uptime<br>signal_close_game | implemented: game_loaded, get_game_mode, get_uptime, signal_close_game | - |
| Gameplay tweaks | set_pickpocket_max<br>set_hit_chance_max<br>set_xp_mod<br>set_critter_hit_chance_mod<br>set_base_hit_chance_mod<br>set_hp_per_level_mod<br>get_unspent_ap_bonus<br>gdialog_get_barter_mod<br>set_unspent_ap_bonus<br>get/set_unspent_ap_perk_bonus<br>set_inven_ap_cost<br>set_base_pickpocket_mod<br>set_critter_pickpocket_mod<br>get_inven_ap_cost<br>set_drugs_data<br>get_kill_counter<br>mod_kill_counter<br>set_pipboy_available | implemented: gdialog_get_barter_mod | - |
| Gameplay tweaks | set_pickpocket_max<br>set_hit_chance_max<br>set_xp_mod<br>set_critter_hit_chance_mod<br>set_base_hit_chance_mod<br>set_hp_per_level_mod<br>gdialog_get_barter_mod<br>get/set_unspent_ap_bonus<br>get/<br>set_base_pickpocket_mod<br>set_critter_pickpocket_mod<br>get/set_inven_ap_cost<br>set_drugs_data<br>get_kill_counter<br>mod_kill_counter<br>set_pipboy_available | implemented: gdialog_get_barter_mod | - |
| NPCs | inc_npc_level<br>get_npc_level<br>npc_engine_level_up | not implemented | - |
| Other | get_year<br>set_dm/df_model<br>active_hand<br>toggle_active_hand<br>get/set_viewport_x/y<br>hero_select_win<br>get_light_level<br>message_str_game<br>sneak_success<br>create_spatial<br>unwield_slot<br>add_g_timer_event<br>add_extra_msg_file<br>get_metarule_table<br>metarule_exist<br>remove_timer_event<br>spatial_radius | implemented: get_year, active_hand, toggle_active_hand, get_light_level, message_str_game, add_extra_msg_file, metarule_exist | `input_funcs_available`, `nb_create_char` are deprecated in sfall and intentionally absent in CE. `add_extra_msg_file` does not support the explicit `fileNumber` form in CE. |
@@ -82,7 +86,7 @@ See [`https://sfall-team.github.io/sfall/`](https://sfall-team.github.io/sfall/)
| DeathAnim1 | `HOOK_DEATHANIM1` | đźš« | Use DEATHANIM2 instead |
| DeathAnim2 | `HOOK_DEATHANIM2` | âś… | - |
| CombatDamage | `HOOK_COMBATDAMAGE` | âś… | - |
| OnDeath | `HOOK_ONDEATH` | đźš« | - |
| OnDeath | `HOOK_ONDEATH` | âś… | - |
| FindTarget | `HOOK_FINDTARGET` | đźš« | (maybe) |
| UseObjOn | `HOOK_USEOBJON` | âś… | - |
| UseObj | `HOOK_USEOBJ` | âś… | CE notes an sfall-matching inconsistency around return code `2` behavior between interface contexts. |
@@ -100,8 +104,8 @@ See [`https://sfall-team.github.io/sfall/`](https://sfall-team.github.io/sfall/)
| InvenWield | `HOOK_INVENWIELD` | đźš« | - |
| AdjustFID | `HOOK_ADJUSTFID` | đźš« | - |
| CombatTurn | `HOOK_COMBATTURN` | âś… | - |
| StdProcedure | `HOOK_STDPROCEDURE` | đźš« | Et tu |
| StdProcedureEnd | `HOOK_STDPROCEDURE_END` | đźš« | - |
| StdProcedure | `HOOK_STDPROCEDURE` | âś… | - |
| StdProcedureEnd | `HOOK_STDPROCEDURE_END` | âś… | - |
| CarTravel | `HOOK_CARTRAVEL` | đźš« | - |
| SetGlobalVar | `HOOK_SETGLOBALVAR` | đźš« | - |
| RestTimer | `HOOK_RESTTIMER` | đźš« | Et tu |
Binary file not shown.
+128
View File
@@ -0,0 +1,128 @@
;
; Game general config
;
; Fallout 2
;
[start]
; Starting year, month, day. Month and day are 0-indexed (0 = January, 0 = first day of month).
year=2241
month=6
day=24
; To start a new game somewhere other than artemple.map, set this to the map file name.
map=
; Starting (tribal) and default (jumpsuit) player models. Can also be changed in-game via script.
model_male=hmwarr
model_male_default=hmjmps
model_female=hfprim
model_female_default=hfjmps
; Set to 1 if you want the pipboy to be available at the start of the game.
; Set to 2 to make the pipboy available by only skipping the vault suit movie check.
pipboy=0
[karma]
; FRM numbers for karma icons on the character screen. Number of points entries should be 1 less than number of frms entries.
; Example: frms=47,48,49 points=-100,100
frms=
points=
[items]
; Proto IDs for healing items.
stimpak=40
super_stimpak=144
healing_powder=273
[dialog]
; Set to 1 to prevent using 0 to escape from dialogue at any time.
no_exit_hotkey=1
; Set to 1 to allow using '^' in dialog msg files to specify gender-based alternative text.
; Text must be enclosed in angle brackets, e.g. <MaleText^FemaleText>.
gender_words=0
[main_menu]
; Custom version string shown on the main menu. Supports up to two %d placeholders for the game version numbers.
; Example: FALLOUT II v1.02d
version_string=
; Font color for the version string and copyright text. Last byte picks the color (default 0x3C).
; First byte flags: 1 - version string only, 2 - underline, 4 - monospace font.
; Example: 0x000055
font_color=0
; Font color for the main menu button text.
big_font_color=0
; Pixel offset for main menu buttons.
offset_x=0
offset_y=0
; Pixel offset for the copyright text line.
credits_offset_x=0
credits_offset_y=0
[movies]
; Number of days after game start when each Hakunin dream sequence becomes available.
artimer1=90
artimer2=180
artimer3=270
artimer4=360
[combat]
; Damage formula used to calculate combat damage.
; 0 - Fallout default, 1 - Glovz's Damage Fix, 2 - Glovz's Damage Fix with Damage Multiplier tweak, 5 - Haenlomal's Yet Another Ammo Mod
; Don't change this unless another mod explicitly requires it.
damage_formula=0
; Set to 1 to fix the bug that caused bonus HtH damage to not be applied correctly.
bonus_hth_damage_fix=1
; Set to 1 to remove the time limits that prevent critical hits/misses in the first few days of the game.
remove_critical_time_limits=0
; Set to 1 to allow science and repair to be used on the player, or 2 for all critters (rather than only brahmin/robots).
science_on_critters=0
; Set to 1 to enable modified burst bullet distribution (spray mod).
burst_enabled=0
; Ratio of bullets going to the center group vs. left/right in burst attacks. Multiplier is capped at divisor.
burst_center_mult=1
burst_center_div=3
; Ratio of center-group bullets that target the primary target directly. Multiplier is capped at divisor.
burst_target_mult=1
burst_target_div=2
[explosions]
; Set to 1 to make explosions and projectiles emit light.
emit_light=0
; Dynamite damage range. Max is capped at 9999; min is capped at max.
dynamite_max=50
dynamite_min=30
; Plastic explosive damage range. Max is capped at 9999; min is capped at max.
plastic_explosive_max=80
plastic_explosive_min=40
[skilldex]
; FRM numbers for Skilldex skill cursors. Default is 293 for all skills.
lockpick=293
steal=293
traps=293
first_aid=293
doctor=293
science=293
repair=293
[worldmap]
; Set to 1 to prevent using number keys to enter unvisited areas on a town map.
town_map_hotkeys_fix=1
; Set to 1 to show travel markers on the world map, or 2 to show only when sneaking.
trail_markers=0
; Set to 1 to skip the encounter with Frank Horrigan.
disable_horrigan=0
; City reputation overrides. Syntax: city_id:global_id pairs separated by commas.
; Example: 0:5001,2:5003,3:5004
city_reputation_list=
[characters]
; Custom premade characters for the character selection screen.
; premade_paths is a comma-separated list of file names (max 11 chars each) in the premade\ folder, without extension.
; premade_fids is a comma-separated list of FRM numbers for the character portrait, matching the order of premade_paths.
; Example: premade_paths=combat,diplomat,stealth premade_fids=201,203,202
premade_paths=
premade_fids=
[text]
; Comma-separated list of extra game message file names (without .msg extension) to load from the game\ folder.
; Use 'filename:number' syntax to assign explicit IDs. Access via message_str_game script function.
extra_msg_file_list=
-127
View File
@@ -6,19 +6,6 @@
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[Misc]
;Uncomment these lines to change the timers of how many days after the game starts Hakunin dream sequences will occur
;MovieTimer_artimer1=5000
;MovieTimer_artimer2=5000
;MovieTimer_artimer3=5000
;MovieTimer_artimer4=5000
;To start a new game somewhere other than artemple.map, uncomment the next line and set it to the map you want to load
;StartingMap=V13ent.map
;To change the 'FALLOUT II v1.02d' version string on the main menu, uncomment the next line
;You can use up to 2 %d's in this if you want to include Fallout's version number somewhere
;VersionString=FALLOUT II v1.02d
;To use a config file other than fallout2.cfg, uncomment the next line and add the name of your new file
;ConfigFile=
@@ -26,40 +13,6 @@
;If you want to load multiple patch files (up to 1000) at once, you can include a %d in the file name (sprintf syntax)
;PatchFile=patch%03d.dat
;Set to 1 to allow using the caret character '^' in dialog msg files to specify alternative text in dialogue based on the player's gender
;The text must be enclosed in angle brackets (example: <MaleText^FemaleText>)
;DialogGenderWords=0
;To change the default and starting player models, uncomment the next four lines.
;The default models can also be changed in-game via script
;MaleStartModel=hmjmps
;MaleDefaultModel=hmjmps
;FemaleStartModel=hfjmps
;FemaleDefaultModel=hfjmps
;To change the starting year, month or day, uncomment the next 3 lines
;Both StartMonth and StartDay are 0-indexed (i.e. 0 is January or the first day of a month)
;StartYear=2241
;StartMonth=01
;StartDay=01
;Set to 1 if you want the pipboy to be available at the start of the game
;Set to 2 to make the pipboy available by only skipping the vault suit movie check
;PipBoyAvailableAtGameStart=1
;Choose the damage formula used to calculate combat damage.
;Don't set this to anything other than 0 unless another mod you're using explicitly tells you to!
;0 - Fallout default
;1 - Glovz's Damage Fix
;2 - Glovz's Damage Fix with Damage Multiplier tweak
;5 - Haenlomal's Yet Another Ammo Mod
;DamageFormula=0
;Prevents you from using 0 to escape from dialogue at any time.
;DialogueFix=1
;Prevents you from using number keys to enter unvisited areas on a town map
TownMapHotkeysFix=1
;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)
@@ -67,86 +20,9 @@ TownMapHotkeysFix=1
;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
;OverrideCriticalTable=2
;Change the Skilldex cursor FRM numbers
;Default is 293 for all skills
Lockpick=293
Steal=293
Traps=293
FirstAid=293
Doctor=293
Science=293
Repair=293
;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
;Each name in PremadePaths is limited to 11 characters
;PremadePaths=combat,diplomat,stealth
;PremadeFIDs=201,203,202
;Use this line to modify the list of cities and their associated global variables used for city reputations
;Syntax is 'city id:global id', with each city/global pair separated by a comma.
;CityRepsList=0:5001,2:5003,3:5004,4:5005,5:5006,6:5007,7:5008,8:5009,10:5011,11:5012,60:1640
;Set to 1 to add additional pages of save slots !!! can be implemented !!!
;ExtraSaveSlots=1
;These lines allow you to control the karma FRMs displayed on the character screen
;Number of KarmaPoints should be 1 less than number of KarmaFRMs
;KarmaFRMs=47,48,49
;KarmaPoints=-100,100
;Set to 1 to allow science and repair to be used on the player, or 2 for all critters. (Rather than only brahmin/robots)
ScienceOnCritters=0
;Set to 1 to fix the bug that caused bonus HtH damage to not be applied correctly.
BonusHtHDamageFix=1
;Set to 1 to remove the limits that stop the game from rolling critical successes/failures in the first few days of game time
RemoveCriticalTimelimits=0
;Change the colour of the font used on the main menu for the Fallout/sfall version string and copyright text
;It's the last byte ('3C' by default) that picks the colour used. The first byte supplies additional flags for this option
;1 - change the colour for the version string only
;2 - underline text for the version string
;4 - use monospace font for the version string
;MainMenuFontColour=0x000055
;Change the colour of the font used on the main menu for the button text
;MainMenuBigFontColour=0x3C
;Uncomment the next four lines to move the main menu buttons and credit text (the 'Copyright(c)' line on the main menu)
;MainMenuOffsetX=392
;MainMenuOffsetY=26
;MainMenuCreditsOffsetX=0
;MainMenuCreditsOffsetY=0
;These options modify the bullet distribution of burst attacks
;All the bullets are divided into three groups: center, left, and right
;These groups will then travel along three parallel tracks, trying to hit targets on the way
;CenterMult/Div set the ratio of how many bullets go to the center group, and the remaining are divided equally to the left and right sides
;TargetMult/Div set the ratio of how many bullets in the center group will attack the primary target directly
;Multiplier values are capped at divisor values
;ComputeSpray_CenterMult=1
;ComputeSpray_CenterDiv=3
;ComputeSpray_TargetMult=1
;ComputeSpray_TargetDiv=2
;Set to 1 to make explosions and projectiles emit light
;ExplosionsEmitLight=1
;Uncomment these lines to change explosives damage. DmgMax can be set to 9999 at max, and DmgMin is capped at DmgMax
;Dynamite_DmgMax=50
;Dynamite_DmgMin=30
;PlasticExplosive_DmgMax=80
;PlasticExplosive_DmgMin=40
;To add additional game msg files, uncomment the next line and set a comma delimited list of filenames without .msg extension
;By default, the files will have consecutive numbers assigned beginning with 0
;You can use the syntax 'filename:number' to manually assign numbers to specific msg files, with each pair separated by a comma
;If a file after the specified pair does not have a number assigned, it will have the next consecutive number from the last pair
;You need to use the message_str_game script function to get messages from the files
;ExtraGameMsgFileList=
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; Configuration ini files
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
@@ -165,9 +41,6 @@ RemoveCriticalTimelimits=0
;See the Unarmed.ini in the modders pack for an example file
;UnarmedFile=sfall\Unarmed.ini
;To change some engine parameters for the game mechanics, uncomment the next line
;TweaksFile=sfall\Tweaks.ini
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[Scripts]
+2
View File
@@ -96,6 +96,8 @@ display_bonus_damage=1
display_karma_changes=0
;Set to one to hide areas outside map bounds when using higher than 640x480 resolution, and to zero to disable
enable_high_resolution_stencil=1
;Set to 1 to extend the action points bar to show up to 16 AP instead of 10 (requires iface_apbar_e.frm)
extend_ap_bar=0
iface_bar_mode=0
iface_bar_side_art=2
iface_bar_sides_ori=0
File diff suppressed because it is too large Load Diff
-61
View File
@@ -1,61 +0,0 @@
#
# enddeath.txt
#
# format of each line is:
#
# gvar, value, worldAreaKnown, worldAreaNotKnown, minLevel, %, narrator file
#
# Where:
#
# gvar is the GVAR_* number for the variable controlling the slide.
#
# value is the value that the gvar must be >= to for this slide
# to be shown
#
# worldAreaKnown is the # of a worldmap area that has to be known
# in order to get this one as an option
#
# worldAreaNotKnown is the # of a worldmap area that has to be *not*
# known in order to get this one as an option
#
# minLevel is the minimum player level in order to get this one as
# an option
#
# % is the % chance of a given line to occur
#
# narrator file is the base filename (no path path or extension) used
# for the narrator voice-over and subtitles. Maximum of 8 characters.
#
#####
# Generic Deaths
#####
-1, 0, -1, -1, 0, 20, NAR_3
-1, 0, -1, -1, 0, 20, NAR_4
-1, 0, -1, -1, 0, 20, NAR_5
-1, 0, -1, -1, 0, 20, NAR_6
-1, 0, 8, -1, 0, 20, NAR_8
#####
# Specific Deaths
#####
-1, 0, -1, 0, 200, 0, nar_dth3
-1, 0, -1, 0, 200, 0, nar_dth4
-1, 0, -1, 0, 200, 0, nar_dth5
-1, 0, -1, 0, 200, 0, nar_dth6
-1, 0, -1, 0, 200, 0, nar_dth7
-1, 0, -1, 0, 200, 0, nar_dth8
-1, 0, -1, 0, 200, 0, nar_dth9
# Special Radiation Death
491, 999, 3, -1, 150, 0, NAR_7
#####
# Joke Deaths
#####
-1, 0, -1, -1, 10, 1, nar_jdd1
-1, 0, -1, -1, 10, 1, nar_jdd3
-1, 0, -1, -1, 10, 1, nar_jdd4
-1, 0, -1, -1, 10, 1, nar_jdd5
-1, 0, -1, -1, 10, 1, nar_jdd6
File diff suppressed because it is too large Load Diff
-104
View File
@@ -1,104 +0,0 @@
;
; Party Member valid option data
;
;
; Warning: Adding a party member here means you must also add it to party.h!
;
;
; Note: Party Member level-up float messages are found in game\misc.msg!
;
[Party Member 0] ; Player -- Not actually used!
party_member_pid=16777216
area_attack_mode=always, sometimes, be_sure, be_careful, be_absolutely_sure
attack_who=whomever_attacking_me, strongest, weakest, whomever, closest
best_weapon=no_pref, melee, melee_over_ranged, ranged_over_melee, ranged, unarmed, unarmed_over_thrown, random
chem_use=clean, stims_when_hurt_little, stims_when_hurt_lots, sometimes, anytime, always
distance=stay_close, charge, snipe, on_your_own, stay
run_away_mode=none, coward, finger_hurts, bleeding, not_feeling_good, tourniquet, never
disposition=none, custom, coward, defensive, aggressive, berserk
level_minimum=0
level_up_every=0
level_pids=-1
[Party Member 1] ; pMIan_PID
party_member_pid=16777292
area_attack_mode=always, sometimes, be_sure, be_careful, be_absolutely_sure
attack_who=whomever_attacking_me, strongest, weakest, whomever, closest
best_weapon=no_pref, melee, ranged_over_melee, ranged
chem_use=clean, stims_when_hurt_little, stims_when_hurt_lots, sometimes, anytime
distance=stay_close, charge, snipe, on_your_own, stay
run_away_mode=none, not_feeling_good, tourniquet, never
disposition=none, custom, defensive, aggressive, berserk
level_minimum=3
level_up_every=3
level_pids=16777530,16777531,16777532,16777533
[Party Member 2] ; pMDog_PID
party_member_pid=16777338
area_attack_mode=
attack_who=whomever_attacking_me, strongest, weakest, whomever, closest
best_weapon=unarmed
chem_use=clean
distance=stay_close, charge, on_your_own, stay
run_away_mode=none, not_feeling_good, tourniquet, never
disposition=none, custom, aggressive, berserk
level_minimum=4
level_up_every=3
level_pids=16777542,16777543,16777544,16777545
[Party Member 3] ; pMTycho_PID
party_member_pid=16777426
area_attack_mode=always, sometimes, be_sure, be_careful, be_absolutely_sure
attack_who=whomever_attacking_me, strongest, weakest, whomever, closest
best_weapon=no_pref, ranged_over_melee, ranged, unarmed
chem_use=clean, stims_when_hurt_little, stims_when_hurt_lots, sometimes, anytime
distance=stay_close, charge, snipe, on_your_own, stay
run_away_mode=none, not_feeling_good, tourniquet, never
disposition=none, custom, defensive, aggressive, berserk
level_minimum=4
level_up_every=3
level_pids=16777534,16777535,16777536,16777537
[Party Member 4] ; pMKatja_PID
party_member_pid=16777518
area_attack_mode=sometimes, be_sure, be_careful, be_absolutely_sure
attack_who=whomever_attacking_me, weakest, whomever, closest
best_weapon=no_pref, melee, melee_over_ranged, ranged_over_melee, ranged, unarmed
chem_use=stims_when_hurt_little, stims_when_hurt_lots
distance=stay_close, charge, on_your_own, stay
run_away_mode=none, coward, finger_hurts, bleeding, not_feeling_good
disposition=none, custom, defensive, aggressive, coward
level_minimum=4
level_up_every=2
level_pids=16777538,16777539,16777540,16777541
[Party Member 5] ; pMTandi_PID
party_member_pid=16777279
area_attack_mode=always, sometimes, be_sure, be_careful, be_absolutely_sure
attack_who=whomever_attacking_me, strongest, weakest, whomever, closest
best_weapon=no_pref, melee, melee_over_ranged, ranged_over_melee, ranged, unarmed
chem_use=clean, stims_when_hurt_little, stims_when_hurt_lots, sometimes, anytime, always
distance=stay_close, charge, snipe, on_your_own, stay
run_away_mode=none, coward, finger_hurts, bleeding, not_feeling_good, tourniquet, never
disposition=none, custom, coward, defensive, aggressive, berserk
level_minimum=0
level_up_every=0
level_pids=-1
[Party Member 6] ; pMMrHandyC_PID
party_member_pid=16777529
area_attack_mode=always, sometimes, be_sure, be_careful, be_absolutely_sure
attack_who=whomever_attacking_me, strongest, weakest, whomever, closest
best_weapon=no_pref, melee, melee_over_ranged, ranged_over_melee, ranged, unarmed
chem_use=clean
distance=stay_close, charge, snipe, on_your_own, stay
run_away_mode=none, coward, finger_hurts, bleeding, not_feeling_good, tourniquet, never
disposition=none, custom, coward, defensive, aggressive, berserk
level_minimum=0
level_up_every=0
level_pids=-1
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-402
View File
@@ -1,402 +0,0 @@
;
; Fallout team quotes
;
; The fonts used to display this file are the reverse of the
; credits.txt file. In other words, the font used to display
; titles in credits.txt (the lines with the '@') is the font
; used to display these quotes. Putting an '@' at the start of
; a line in this file will use the font used to display the
; names in the credits.txt file (currently 104).
;
; Max line length with the current font (103) is about 63.
; Anything longer than that won't be displayed, as it won't fit
; on the screen.
;
; All lines are automatically centered on the display.
;
; See top of credits.txt for additional info.
;
@Quotes from the Fallout team:
(Press ESC if you don't want to see some raw language)
I asked for anatomically correct, but not naked!
- Tim C.
I appreciate the fact that ?? is only speaking to us when spoken to.
- Leonard
So now that you are past the learning curve,
you can blow up people much faster, right?
- Tim C.
So how fast can _you_ draw a bunny?
- JT
I didn't do it yet today because I was waiting for Leonard's head.
- Scott C.
Did you see Steven Spielberg go by?
- Tim C.
No, I was taking a piss.
- Mark Harrison
Blueberry muffins are one of Man's crowning achievements.
- JT
Out of my way. I'm a fucking genius.
- Jason
Dismemberment is just inherently funny.
- JT
I had a wooden one, but Spence broke it.
- Jesse
You can say penis, but you can't say cocksucker.
- Leonard
It's fun to make fun of people who are stupid.
- JT
Crap is the hardest stuff to make.
- Michael
No, I haven't shot anyone today.
- JT
But 15 _is_ an even number!
- Leonard
But 15 isn't divisible by 2.
- Tim.
You know what I mean. I meant 15 is prime.
- Leonard
I'll be going on to death at the end of the day.
- Michael
I'm tired of looking at that peanut.
- Tim C.
I only wash my nose. It's the only thing that gets dirty.
- Fred
I'm going to jiujitsu his ass.
- Leonard
I'll have to remember or else I'll forget.
- Jesse
You never know what wacky things I'm going to do with my hand.
- Tim C.
Sorry I'm late, but Mary needed marbles and I had lost mine.
- Chris T.
It's fun hitting other people's balls.
- Tim C.
I'm going to kill this game.
- Mark Morgan
Do you want help putting on your bikini?
- Fred to Tim C.
I like to get them in the butt.
- Tim C.
I need more peasants!
- Fred
If I hadn't had sex, I would have called Tom or Jesse.
- Scotty
Did you know you can talk to people who don't have heads?
- Jesse
We'll have a little bowl hair-cut kid so you
can't tell if it's a boy or a girl when you're killing it.
- Leonard
It's just a flag!
- Scotty
I'll tell them to give me more exploding peasants.
- Fred
Do you need help changing his pants?
- Leonard
I was getting home and getting ready to get some,
and I remembered it was a holiday.
- Scotty
I'd rather drink a bottle of urine than THAT!
- Scotty
Rusty wants any body he can have.
- Gus
Nick's are worn and falling apart and orange.
- Jesse
I never let work interfere with my cooking.
- Tim C.
I don't want you to stop making them,
because it's the only time I get any.
- Scotty
I vote for Hate.
- Jason
That reminds me of Toxic Avenger, the unrated version.
- Scotty
You know, we should lock down sex.
- Chris T.
How do I kill people? I need some dead bodies.
- Robert H.
Don't quote me on that.
- Leonard
I had a weird dream involving Scotty,
and I don't even want to remember it.
- Jesse
What?!
- Scotty
I don't know what we're going to do about it.
I guess we're going to have to start cutting heads.
- Tim C.
Well, that's true and that's untrue.
- Gus
But I like being a woman!
- Scotty
I'm used to playing with myself.
- Scotty
That's the essence of art -- making it all work together.
- Leonard
Did I tell you I broke my thingy?
- Dave
I want more randomness in my randomology.
- Robert H.
I can't finish the AI without drugs.
- Tim C.
Please do not make fun of my poop.
- Tim C.
I know how to tell males from females now.
- Tim C.
Excuse me, my butt did that.
- Jesse
I'm going to kick you in the butt.
- Robert H. to Tim C.
Because it's soft as a baby's behind.
- Jesse.
How do you know?
- Scotty
I can do Troy. I used to be his monkey.
- Chris T.
I had one once, but I pumped it too hard and I broke it.
- Scotty
I stripped and wiped.
- Scotty
Why can't I be a lesbian?
- Shanna
I wonder what that thing hanging there is.
- Shanna
I need more intelligence.
- Nick
At the same time, I want to make sure that
I don't have dead people stand up.
- Tim C.
I'd model dust, if I could.
- Jason
I'm on top now.
- Evan
I do a good cow.
- Greg B.
If he's on top of me, I'm gonna be pissed!
- Shanna
If I was a girl, I'd do him.
- Evan
You won't be here when I get off.
- Mike Krueger
Well, I was playing with it last night but I
couldn't get anything to come out!
- Mike Krueger
Stop shaking my monkey!
- Matt Murakami
I like people who say poop.
- Savina
It's not unstable, it's just buggy.
There's a difference.
- Chris J.
Instead of sexual urges, they get
sucking blood urges.
- Scotty
I like little boys who wear skirts.
- Mike Krueger
His iguana-stick is way too long.
- Leonard
Fallout is "By Americans, For Americans" and
the rest of the world can just get stuffed.
- Scotty
All the Brotherhood do it. They know how.
- Nick
I'm going to teach you to script,
that'll be torture.
- Nick
His little thing looks better anyway.
- Evan
He TOLD me to touch it!
- Nick
I'm really scared of the people on the Internet.
They're all dumb. Except for that one guy.
- Scotty
I haven't touched it for two months.
- Nick
Well, you better start touching it.
- Evan
You can never be paranoid enough.
- Scotty
You should be 14-18 when you blow the Master.
- Jess
Oh, wait a minute, talk to Jesse.
Jesse usually has lots of drugs.
- Scotty
I burnt my part, for one thing.
- Mark H.
I'm usually a lot happier about the
game when I'm not playing it.
- Scotty
You gotta take it easy, this is my first time.
- Dave Hendee
It's really quick to get it up.
- Mark H.
I can find the hole without looking now.
- Ed H.
I've actually had it both ways, but I'm not sure why...
- Dan S.
I can touch it everywhere and it seems to work.
- Scotty
OK, I was sleeping with Ian...
- Gus
What is the sound of one man working on another?
- Dan S.
I hate being fucked.
- Gus
I think our game has a high potential
for being very violent.
- Jason A.
I'm not going to be beaten by cheesecake.
- Tim C.
I have new respect for crowbars.
(pause)
Well, at least it isn't about sex.
- Scotty
That thing is a little too
big to stick right there.
- Matt G.
I'm not going to do the cows.
- Dan S.
The cows are glad to hear that.
- Robert H.
But I love faggot pizza.
- Scotty
It won't crash any more. In theory.
- Mark H.
I wasn't wearing anything
the first time I won the game.
- Tim C.
@FIN
@@ -0,0 +1,59 @@
#include "sfall.h"
#include "test_utils.h"
#define TEST_SCRIPT_INDEX (2)
// Depends on Test0.int, which provides a controllable object script helper.
// Put the compiled helper at mods/test_script_override/scripts/Test0.int,
// and add "test_script_override" to mod_order.txt. The helper must live there
// (and not scripts/) because patch000.dat already contains a stock Test0.int and
// scripts/ load before it.
// Without Test0, these 2 tests will fail:
// - "set_script normal hp"
// - "set_script no map_enter hp"
variable testScriptObj := 0;
procedure create_test_object begin
if (testScriptObj != 0) then return;
testScriptObj := create_object_sid(obj_pid(dude_obj), tile_num_in_direction(tile_num(dude_obj), has_trait(TRAIT_OBJECT, dude_obj, OBJECT_CUR_ROT), 3), elevation(dude_obj), -1);
end
procedure stdprocedure_hook begin
if (get_sfall_arg_at(0) != 15) then return;
if (get_sfall_arg_at(3)) then begin
set_sfall_global("T0HAFTR1", 1);
end else begin
set_sfall_global("T0HBEFO1", 1);
end
end
procedure exercise_set_script(variable scriptId, variable expectedHp, variable expectedBeforeHook, variable expectedAfterHook, variable desc) begin
set_sfall_global("T0MAPEN1", 0);
set_sfall_global("T0HBEFO1", 0);
set_sfall_global("T0HAFTR1", 0);
set_script(testScriptObj, scriptId);
call assertEquals(desc + " get_script", get_script(testScriptObj), TEST_SCRIPT_INDEX);
call assertEquals(desc + " map_enter global", get_sfall_global_int("T0MAPEN1"), expectedHp);
call assertEquals(desc + " stdprocedure hook before", get_sfall_global_int("T0HBEFO1"), expectedBeforeHook);
call assertEquals(desc + " stdprocedure hook after", get_sfall_global_int("T0HAFTR1"), expectedAfterHook);
remove_script(testScriptObj);
call assertEquals(desc + " remove_script clears get_script", get_script(testScriptObj), 0);
end
procedure start begin
if (not game_loaded) then return;
display_msg("Testing set_script/remove_script/get_script...");
register_hook_proc(HOOK_STDPROCEDURE, stdprocedure_hook);
register_hook_proc(HOOK_STDPROCEDURE_END, stdprocedure_hook);
call create_test_object;
call exercise_set_script(TEST_SCRIPT_INDEX, 22, 1, 1, "set_script normal");
call exercise_set_script(TEST_SCRIPT_INDEX bwor 0x80000000, 11, 0, 0, "set_script no map_enter");
destroy_object(testScriptObj);
testScriptObj := 0;
call report_test_results("script_manipulation");
end
+28
View File
@@ -1,13 +1,21 @@
#include "sfall.h"
#include "define_extra.h"
#include "test_utils.h"
#define TEST_ITEM_PID 40
variable blocker_obj := 0;
variable radius_obj := 0;
procedure cleanup begin
if (blocker_obj) then begin
destroy_object(blocker_obj);
blocker_obj := 0;
end
if (radius_obj) then begin
destroy_object(radius_obj);
radius_obj := 0;
end
end
procedure start begin
@@ -45,6 +53,26 @@ procedure start begin
call assertEquals("one-step path length", len_array(path), 1);
if (len_array(path) == 1) then
call assertEquals("one-step path direction", get_array(path, 0), step_dir);
radius_obj := create_object_sid(TEST_ITEM_PID, step_tile, elev, -1);
call assertNotEquals("spawned radius item", radius_obj, 0);
if (radius_obj) then begin
objs := sfall_func3("objects_in_radius", dude_tile, 1, elev);
call assertTrue("objects_in_radius all contains dude", scan_array(objs, dude_obj) != -1);
call assertTrue("objects_in_radius all contains item", scan_array(objs, radius_obj) != -1);
objs := sfall_func3("objects_in_radius", dude_tile, 0, elev);
call assertTrue("objects_in_radius radius 0 contains dude", scan_array(objs, dude_obj) != -1);
call assertEquals("objects_in_radius radius 0 excludes adjacent item", scan_array(objs, radius_obj), -1);
objs := objects_in_radius(dude_tile, 1, elev, OBJ_TYPE_ITEM);
call assertTrue("objects_in_radius item filter contains item", scan_array(objs, radius_obj) != -1);
call assertEquals("objects_in_radius item filter excludes dude", scan_array(objs, dude_obj), -1);
objs := objects_in_radius(dude_tile, 1, elev, OBJ_TYPE_CRITTER);
call assertTrue("objects_in_radius critter filter contains dude", scan_array(objs, dude_obj) != -1);
call assertEquals("objects_in_radius critter filter excludes item", scan_array(objs, radius_obj), -1);
end
end
if (block_tile != -1) then begin
+52
View File
@@ -0,0 +1,52 @@
#include "sfall.h"
#include "dik.h"
#include "define_lite.h"
#define TEST_KEY (DIK_J)
procedure ondeath_handler begin
variable
dead_critter := get_sfall_arg_at(0),
critter_name := "<null>",
critter_pid := -1;
if (dead_critter) then begin
critter_name := obj_name(dead_critter);
critter_pid := obj_pid(dead_critter);
end
display_msg(string_format2("ondeath critter=%s pid=%d", critter_name, critter_pid));
end
procedure keypress_handler begin
variable
pressed := get_sfall_arg_at(0),
key := get_sfall_arg_at(1),
target;
if (not pressed) then return;
if (key != TEST_KEY) then return;
target := obj_under_cursor(true, false);
if (target == 0) then begin
display_msg("ondeath test: no critter under cursor");
return;
end
if (target == dude_obj) then begin
display_msg("ondeath test: refusing to kill dude");
return;
end
display_msg(string_format1("ondeath test: killing %s", obj_name(target)));
critter_dmg(target, 9999, DMG_BYPASS_ARMOR);
end
procedure start begin
if (not game_loaded) then return;
display_msg("ondeath manual test ready: hover a critter and press J");
register_hook_proc(HOOK_KEYPRESS, keypress_handler);
register_hook_proc(HOOK_ONDEATH, ondeath_handler);
end

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