Compare commits

..
Author SHA1 Message Date
Vasilii Rogin a470bdc6af Enable workarounds only if address sanitizer is enabled 2026-01-25 12:03:13 +02:00
Vasilii Rogin 22ba94eca3 Merge remote-tracking branch 'origin/main' into delay_objects_deallocation 2026-01-25 11:58:04 +02:00
Vasilii Rogin 7e49ed8545 Check that script still exists 2026-01-25 11:57:47 +02:00
Vasilii Rogin 3249b7dc07 Merge pull request #276 from fallout2-ce/improvements_for_map_edge
Disable hi-res stencil if ignoreMapEdges is enabled
2026-01-25 10:37:23 +02:00
Vasilii Rogin f291f52a61 Merge pull request #275 from fallout2-ce/click_through_fix
Click through fix
2026-01-25 10:32:57 +02:00
Vasilii Rogin 4bc2ed5d0d Show message only once 2026-01-25 10:30:14 +02:00
Vasilii Rogin b6a522a065 Disable stencil on tile_hires_stencil_init 2026-01-25 10:28:40 +02:00
github-actions[bot] bbb01398ef chore: auto-format with clang-format 2026-01-20 18:11:36 +00:00
Vasilii Rogin fb5e1f9c07 Auto-disable stencil if gTileIgnoreMapEdges is enabled 2026-01-20 20:08:50 +02:00
Vasilii Rogin 625928265e Merge pull request #274 from JanSimek/ignore-map-edges
Ignore map edges
2026-01-20 20:03:56 +02:00
Jan Ĺ imek a6ccac2a58 Added IGNORE_MAP_EDGES configuration option to f2_res.ini 2026-01-19 19:23:50 +01:00
cambragol 19e72a5b6d Update inventory.cc
The block here prevents clicking triggering on window close.
2026-01-19 07:42:34 +09:00
cambragol 44f5477ee5 Update input.h
Define the global
2026-01-19 07:40:01 +09:00
cambragol 8d0587566f Update input.cc
Defined the global
2026-01-19 07:38:21 +09:00
cambragol 0ed3725124 Update game_mouse.cc
Adding block for mouse left mouse button up
2026-01-19 07:36:25 +09:00
Jan Ĺ imek 86787e2c97 correct SSL function names in comments 2026-01-18 21:46:20 +01:00
Vasilii Rogin f60b773ed4 Merge pull request #273 from fallout2-ce/add_cities_limit_fix_fallout2-ce
Add sfall CitiesLimitFix to fix Resurrection startup
2026-01-18 22:44:51 +02:00
Vasilii Rogin b6384ce8e9 Merge remote-tracking branch 'roginvs/add_cities_limit_fix' into add_cities_limit_fix_fallout2-ce 2026-01-18 20:11:20 +02:00
Vasilii Rogin 15aa1db286 Revert initialization order of gTownMapHotkeysFix 2026-01-18 20:09:17 +02:00
Vasilii Rogin 763169f33e Merge branch 'main' into add_cities_limit_fix 2026-01-18 19:57:07 +02:00
Vasilii Rogin 58b811f2ae Fix overlapping memory copy (#265) 2025-12-26 15:57:39 +02:00
Vasilii Rogin bfcfaa9540 Fix negative ammo for Mega Power Fist (#267)
* Add non-negative check for ammo

* Rename variables
2025-12-23 20:09:03 +02:00
github-actions[bot] 491806686b chore: auto-format with clang-format 2025-12-23 10:55:39 +00:00
Vasilii Rogin 245705c468 Update comment 2025-12-23 12:55:07 +02:00
github-actions[bot] 43c0b79f3f chore: auto-format with clang-format 2025-12-22 20:31:08 +00:00
Vasilii Rogin 216710f86c Delay object deallocation 2025-12-22 22:26:29 +02:00
Vasilii Rogin a478bad7fa Merge pull request #260 from fallout2-ce/allow_lower_mouse_sensivity
Allow lower mouse sensitivity
2025-09-11 18:21:15 +03:00
Vasilii Rogin 9a3ec752dd Fix typo 2025-09-09 20:45:03 +03:00
Vasilii Rogin f940766379 Allow 0.25-2.5 for mouse sensivity 2025-09-09 17:46:42 +03:00
Vasilii Rogin 87e1d1f11b Merge pull request #256 from fallout2-ce/ci_add_wait_for_deployment
Mark CI as done when preview is actually deployed
2025-09-08 08:04:44 +03:00
Vasilii Rogin 5d17e0ef89 Update deployment status AFTER website is actually deployed 2025-09-07 13:05:33 +03:00
Vasilii Rogin 2bf08228c5 Add step to ensure that deployment went well 2025-09-07 12:46:33 +03:00
Vasilii Rogin 41a7c97e69 Show warning if cities amount differs 2024-06-04 20:56:42 +03:00
Vasilii Rogin 2ca921c525 Revert "Remove cities amount check on game load"
This reverts commit e676089f83.
2024-06-04 20:50:03 +03:00
Vasilii Rogin e676089f83 Remove cities amount check on game load 2024-06-04 19:43:37 +03:00
Vasilii Rogin e119aa4c4d Use cities limit patch by default 2024-04-19 12:55:51 +03:00
Vasilii Rogin ea66287551 Load gCitiesLimitFix state before it is used 2024-04-18 23:23:41 +03:00
Vasilii Rogin db07e95f5b Use gCitiesLimitFix variable 2024-04-18 23:10:56 +03:00
Vasilii Rogin acd0413626 Check that save file have the same amount of cities 2024-04-18 23:02:22 +03:00
Vasilii Rogin 196ad2267f Fix formatting 2024-04-18 22:59:24 +03:00
Vasilii Rogin 22a864a0c9 Ignore cities count if CitiesLimitFix is enabled 2024-04-18 22:55:17 +03:00
Vasilii Rogin 252d7fe83e Add CitiesLimitFix into sFall config with default=true 2024-04-18 22:51:45 +03:00
25 changed files with 160 additions and 73 deletions
+26
View File
@@ -86,6 +86,10 @@ jobs:
SITE_BASE: ${{ steps.set-path.outputs.SITE_BASE }}
F2_GAME_VERSION: Game=${{github.event.pull_request.head.sha || github.sha }}
- name: Place hash file
if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository)
run: echo "$GITHUB_SHA" > fallout2-ce-ems/dist/site_hash.txt
- name: Install rsync (required for the next step)
if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository)
run: |
@@ -101,6 +105,28 @@ jobs:
clean: false
single-commit: true
- name: Check that site is deployed
if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository)
run: |
URL="$SITE_ORIGIN""$SITE_BASE""site_hash.txt"
echo "Expecting $GITHUB_SHA from $URL"
for i in `seq 1 80`; do
got="$(curl -fsSL --max-time 10 "$URL" | tr -d '\r\n' || true)"
if [ "$got" = "$GITHUB_SHA" ]; then
echo "âś… Match on attempt $i: ${got}"
exit 0
fi
echo "Received $got, waiting"
sleep 5
done
exit 1
env:
SITE_ORIGIN: https://${{ github.repository_owner }}.github.io
SITE_BASE: ${{ steps.set-path.outputs.SITE_BASE }}
- name: Update deployment status
if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository
uses: bobheadxi/deployments@v1
+11
View File
@@ -126,6 +126,17 @@ IFACE_BAR_SIDES_ORI=0
;if IFACE_BAR_WIDTH=640 - Interface bar will remain at it's original width.
;if IFACE_BAR_WIDTH=800 - Interface bar will use 800pix wide asset from f2_res.dat.
;IFACE_BAR_WIDTH=640
[STATIC_SCREENS]
;if SPLASH_SCRN_SIZE=0 - Splash screen shows at original size if it fits, otherwise scales down while preserving aspect ratio.
;if SPLASH_SCRN_SIZE=1 - Splash screen scales to fit the screen while preserving aspect ratio.
;if SPLASH_SCRN_SIZE=2 - Splash screen stretches to fill the entire screen.
SPLASH_SCRN_SIZE=0
[MAPS]
;if IGNORE_MAP_EDGES=0 - Hi-Res map scroll edges are enabled.
;if IGNORE_MAP_EDGES=1 - Hi-Res map scroll edges are ignored.
IGNORE_MAP_EDGES=0
```
Recommendations:
+5 -5
View File
@@ -3845,14 +3845,14 @@ static int attackCompute(Attack* attack)
}
int attackType = weaponGetAttackTypeForHitMode(attack->weapon, attack->hitMode);
int ammoQuantity = 1;
int roundsHitMainTarget = 1;
int damageMultiplier = 2;
int v26 = 1;
int roundsSpent = 1;
int roll;
if (anim == ANIM_FIRE_BURST || anim == ANIM_FIRE_CONTINUOUS) {
roll = _compute_spray(attack, accuracy, &ammoQuantity, &v26, anim);
roll = _compute_spray(attack, accuracy, &roundsHitMainTarget, &roundsSpent, anim);
} else {
int chance = critterGetStat(attack->attacker, STAT_CRITICAL_CHANCE);
roll = randomRoll(accuracy, chance - hit_location_penalty[attack->defenderHitLocation], nullptr);
@@ -3890,7 +3890,7 @@ static int attackCompute(Attack* attack)
}
if (attackType == ATTACK_TYPE_RANGED) {
attack->ammoQuantity = v26;
attack->ammoQuantity = roundsSpent;
if (roll == ROLL_SUCCESS && attack->attacker == gDude) {
if (perkGetRank(gDude, PERK_SNIPER) != 0) {
@@ -3928,7 +3928,7 @@ static int attackCompute(Attack* attack)
case ROLL_SUCCESS:
attack->attackerFlags |= DAM_HIT;
attackComputeEnhancedKnockout(attack);
attackComputeDamage(attack, ammoQuantity, damageMultiplier);
attackComputeDamage(attack, roundsHitMainTarget, damageMultiplier);
break;
case ROLL_FAILURE:
if (attackType == ATTACK_TYPE_RANGED || attackType == ATTACK_TYPE_THROW) {
+3 -11
View File
@@ -120,6 +120,8 @@ int _game_user_wants_to_quit = 0;
// 0x58E940
MessageList gMiscMessageList;
int gSplashScreenScaling = 0;
// CE: Sonora folks like to store objects in global variables.
static void** gGameGlobalPointers = nullptr;
@@ -1492,17 +1494,7 @@ static void showSplash()
}
}
int size = 0;
// TODO: Move to settings.
Config config;
if (configInit(&config)) {
if (configRead(&config, "f2_res.ini", false)) {
configGetInt(&config, "STATIC_SCREENS", "SPLASH_SCRN_SIZE", &size);
}
configFree(&config);
}
int size = gSplashScreenScaling;
int screenWidth = screenGetWidth();
int screenHeight = screenGetHeight();
+1
View File
@@ -20,6 +20,7 @@ extern int* gGameGlobalVars;
extern int gGameGlobalVarsLength;
extern const char* asc_5186C8;
extern int _game_user_wants_to_quit;
extern int gSplashScreenScaling;
extern MessageList gMiscMessageList;
+6
View File
@@ -917,6 +917,12 @@ void _gmouse_handle_event(int mouseX, int mouseY, int mouseState)
return;
}
// Check if we should block mouse button up events for inventoryOpenUseItemOn inventory window
if (gBlockMouseUpEvent && (mouseState & MOUSE_EVENT_LEFT_BUTTON_UP) != 0) {
gBlockMouseUpEvent = false;
return;
}
if ((mouseState & MOUSE_EVENT_RIGHT_BUTTON_DOWN) != 0) {
if ((mouseState & MOUSE_EVENT_RIGHT_BUTTON_REPEAT) == 0 && (gGameMouseHexCursor->flags & OBJECT_HIDDEN) == 0) {
gameMouseCycleMode();
+3
View File
@@ -99,6 +99,9 @@ static TickerListNode* gTickerListHead;
// 0x6AC788
static unsigned int gTickerLastTimestamp;
// global for inventoryOpenUseItemOn inventory to prevent click through bug
bool gBlockMouseUpEvent = false;
// 0x4C8A70
int inputInit(int a1)
{
+3
View File
@@ -7,6 +7,9 @@ typedef void(TickerProc)();
typedef int(ScreenshotHandler)(int width, int height, unsigned char* buffer, unsigned char* palette);
// global for blocking mouse event in inventoryOpenUseItemOn inventory screen
extern bool gBlockMouseUpEvent;
int inputInit(int a1);
void inputExit();
int inputGetInput();
+3 -2
View File
@@ -668,7 +668,7 @@ static void opDoCheck(Program* program)
programStackPushInteger(program, roll);
}
// success
// is_success
// 0x4549A8
static void opSuccess(Program* program)
{
@@ -690,7 +690,7 @@ static void opSuccess(Program* program)
programStackPushInteger(program, result);
}
// critical
// is_critical
// 0x454A44
static void opCritical(Program* program)
{
@@ -3079,6 +3079,7 @@ static void opSetObjectLightLevel(Program* program)
tileWindowRefreshRect(&rect, object->elevation);
}
// world_map
// 0x459170
static void opWorldmap(Program* program)
{
+2
View File
@@ -2736,6 +2736,8 @@ void inventoryOpenUseItemOn(Object* targetObj)
} else {
_action_use_an_item_on_object(gDude, targetObj, inventoryItem->item);
}
// fix for click through bug
gBlockMouseUpEvent = true;
keyCode = KEY_ESCAPE;
} else {
keyCode = -1;
+4
View File
@@ -1424,6 +1424,10 @@ void ammoSetQuantity(Object* ammoOrWeapon, int quantity)
quantity = capacity;
}
if (quantity < 0) {
quantity = 0;
}
Proto* proto;
protoGetProto(ammoOrWeapon->pid, &proto);
+2 -2
View File
@@ -623,8 +623,8 @@ void messageListFilterGenderWords(MessageList* messageList, int gender)
length = sep - start - 1;
}
strncpy(start, src, length);
strcpy(start + length, end + 1);
memmove(start, src, length);
memmove(start + length, end + 1, strlen(end + 1) + 1);
} else {
text = sep + 1;
}
+3 -27
View File
@@ -1,7 +1,6 @@
#include "mouse.h"
#include "color.h"
#include "debug.h"
#include "dinput.h"
#include "input.h"
#include "kb.h"
@@ -54,10 +53,6 @@ static unsigned char* _mouse_fptr = nullptr;
// 0x51E2A0
static double gMouseSensitivity = 1.0;
static double gMouseSensitivityDpiHorizontal = 1.0;
static double gMouseSensitivityDpiVertical = 1.0;
double gMouseSensitivityScale2Xoption = 1.0;
// 0x51E2AC
static int last_buttons = 0;
@@ -459,8 +454,8 @@ void _mouse_info()
}
// Adjust for mouse senstivity.
x = (int)(x * gMouseSensitivity * gMouseSensitivityDpiHorizontal * gMouseSensitivityScale2Xoption);
y = (int)(y * gMouseSensitivity * gMouseSensitivityDpiVertical * gMouseSensitivityScale2Xoption);
x = (int)(x * gMouseSensitivity);
y = (int)(y * gMouseSensitivity);
_mouse_simulate_input(x, y, buttons);
@@ -678,28 +673,9 @@ void _mouse_get_raw_state(int* out_x, int* out_y, int* out_buttons)
// 0x4CAC3C
void mouseSetSensitivity(double value)
{
if (value >= 1.0 && value <= 2.5) {
if (value >= MOUSE_SENSITIVITY_MIN && value <= MOUSE_SENSITIVITY_MAX) {
gMouseSensitivity = value;
}
gMouseSensitivityDpiHorizontal = 1.0;
gMouseSensitivityDpiVertical = 1.0;
if (gSdlWindow) {
int displayIndex = SDL_GetWindowDisplayIndex(gSdlWindow);
float ddpi, hdpi, vdpi;
if (SDL_GetDisplayDPI(displayIndex, &ddpi, &hdpi, &vdpi) == 0) {
hdpi /= 96.0f; // 96 is standard DPI
vdpi /= 96.0f; // 96 is standard DPI
gMouseSensitivityDpiHorizontal = 1 / hdpi;
gMouseSensitivityDpiVertical = 1 / vdpi;
debugPrint("Mouse DPI scaling: horizontal = %.2f, vertical = %.2f", hdpi, vdpi);
debugPrint("Mouse DPI sensitivity: horizontal = %.2f, vertical = %.2f", gMouseSensitivityDpiHorizontal, gMouseSensitivityDpiVertical);
} else {
debugPrint("Mouse DPI sensitivity is not available, SDL_GetDisplayDPI failed");
}
} else {
debugPrint("Mouse DPI sensitivity is not available, SDL window is null");
}
}
void mouseGetPositionInWindow(int win, int* x, int* y)
+3 -1
View File
@@ -28,6 +28,9 @@ namespace fallout {
#define BUTTON_REPEAT_TIME 250
#define MOUSE_SENSITIVITY_MIN 0.25
#define MOUSE_SENSITIVITY_MAX 2.5
extern WindowDrawingProc2* _mouse_blit_trans;
extern WINDOWDRAWINGPROC _mouse_blit;
@@ -54,7 +57,6 @@ void mouseGetWheel(int* x, int* y);
void convertMouseWheelToArrowKey(int* keyCodePtr);
int mouse_get_last_buttons();
extern double gMouseSensitivityScale2Xoption;
} // namespace fallout
#endif /* FALLOUT_MOUSE_H_ */
+28
View File
@@ -3767,7 +3767,35 @@ static void objectDeallocate(Object** objectPtr)
return;
}
#if defined(__SANITIZE_ADDRESS__)
#warning "Address sanitizer detected. Delayed free is enabled."
{
// Sometimes game scripts are using object
// after it has been destroyed.
//
// Usually it does not bring any issues, but it
// causes crashes when address sanitizer is enabled.
//
// To mitigate this issue, a simple delayed free queue is implemented.
//
// If the game still access this memory then let's at least ensure
// that this memory is not reallocated for something else right away.
//
// Delay value of 10 objects has been chosen arbitrarily.
// Is seems that value of 3 was not sufficient to avoid all use-after-free issues.
//
constexpr int DELAY = 10;
static Object* deleteQueue[DELAY] = { nullptr };
static int deleteQueueIndex = 0;
if (deleteQueue[deleteQueueIndex] != nullptr) {
internal_free(deleteQueue[deleteQueueIndex]);
}
deleteQueue[deleteQueueIndex] = *objectPtr;
deleteQueueIndex = (deleteQueueIndex + 1) % DELAY;
}
#else
internal_free(*objectPtr);
#endif
*objectPtr = nullptr;
}
+3 -3
View File
@@ -386,7 +386,7 @@ static PreferenceDescription gPreferenceDescriptions[PREF_COUNT] = {
{ 4, 0, 374, 298, 0, 0, { 202, 221, 209, 222 }, 0, GAME_CONFIG_SNDFX_VOLUME_KEY, 0, 32767.0, &gPreferencesSoundEffectsVolume1 },
{ 4, 0, 374, 349, 0, 0, { 202, 221, 209, 222 }, 0, GAME_CONFIG_SPEECH_VOLUME_KEY, 0, 32767.0, &gPreferencesSpeechVolume1 },
{ 2, 0, 374, 400, 0, 0, { 207, 223, 0, 0 }, 0, GAME_CONFIG_BRIGHTNESS_KEY, 1.0, 1.17999267578125, nullptr },
{ 2, 0, 374, 451, 0, 0, { 207, 218, 0, 0 }, 0, GAME_CONFIG_MOUSE_SENSITIVITY_KEY, 1.0, 2.5, nullptr },
{ 2, 0, 374, 451, 0, 0, { 207, 218, 0, 0 }, 0, GAME_CONFIG_MOUSE_SENSITIVITY_KEY, MOUSE_SENSITIVITY_MIN, MOUSE_SENSITIVITY_MAX, nullptr },
};
static FrmImage _preferencesFrmImages[PREFERENCES_WINDOW_FRM_COUNT];
@@ -540,7 +540,7 @@ static void _JustUpdate_()
gPreferencesSoundEffectsVolume1 = std::clamp(gPreferencesSoundEffectsVolume1, 0, VOLUME_MAX);
gPreferencesSpeechVolume1 = std::clamp(gPreferencesSpeechVolume1, 0, VOLUME_MAX);
gPreferencesBrightness1 = std::clamp(gPreferencesBrightness1, 1.0, 1.17999267578125);
gPreferencesMouseSensitivity1 = std::clamp(gPreferencesMouseSensitivity1, 1.0, 2.5);
gPreferencesMouseSensitivity1 = std::clamp(gPreferencesMouseSensitivity1, MOUSE_SENSITIVITY_MIN, MOUSE_SENSITIVITY_MAX);
textObjectsSetBaseDelay(gPreferencesTextBaseDelay1);
gameMouseLoadItemHighlight();
@@ -711,7 +711,7 @@ static void _UpdateThing(int index)
break;
case PREF_MOUSE_SENSITIVIY:
if (1) {
gPreferencesMouseSensitivity1 = std::clamp(gPreferencesMouseSensitivity1, 1.0, 2.5);
gPreferencesMouseSensitivity1 = std::clamp(gPreferencesMouseSensitivity1, meta->minValue, meta->maxValue);
int x = (int)((gPreferencesMouseSensitivity1 - meta->minValue) * (219.0 / (meta->maxValue - meta->minValue)) + 384.0);
blitBufferToBufferTrans(_preferencesFrmImages[PREFERENCES_WINDOW_FRM_KNOB_OFF].getData(), 21, 12, 21, gPreferencesWindowBuffer + 640 * meta->knobY + x, 640);
+9
View File
@@ -1338,6 +1338,15 @@ int scriptExecProc(int sid, int proc)
_executeProcedure(program, v9);
#if defined(__SANITIZE_ADDRESS__)
#warning "Address sanitizer detected. Adding extra script existence check."
// Check if script still exists after procedure execution.
// The script may have been destroyed during execution (e.g., via destroy_object).
if (scriptGetScript(sid, &script) == -1) {
return 0;
}
#endif
script->source = nullptr;
return 0;
+2 -3
View File
@@ -7,8 +7,6 @@
namespace fallout {
#define SFALL_CONFIG_FILE_NAME "ddraw.ini"
bool gSfallConfigInitialized = false;
Config gSfallConfig;
@@ -61,6 +59,7 @@ bool sfallConfigInit(int argc, char** argv)
configSetString(&gSfallConfig, SFALL_CONFIG_MISC_KEY, SFALL_CONFIG_VERSION_STRING, "");
configSetString(&gSfallConfig, SFALL_CONFIG_MISC_KEY, SFALL_CONFIG_CONFIG_FILE, "");
configSetString(&gSfallConfig, SFALL_CONFIG_MISC_KEY, SFALL_CONFIG_PATCH_FILE, "");
configSetBool(&gSfallConfig, SFALL_CONFIG_MISC_KEY, SFALL_CONFIG_CITIES_LIMIT_FIX, true);
configSetString(&gSfallConfig, SFALL_CONFIG_SCRIPTS_KEY, SFALL_CONFIG_INI_CONFIG_FOLDER, "");
configSetString(&gSfallConfig, SFALL_CONFIG_SCRIPTS_KEY, SFALL_CONFIG_GLOBAL_SCRIPT_PATHS, "");
@@ -87,7 +86,7 @@ bool sfallConfigInit(int argc, char** argv)
strcpy(path, SFALL_CONFIG_FILE_NAME);
}
auto configChecker = ConfigChecker(gSfallConfig, "ddraw.ini");
auto configChecker = ConfigChecker(gSfallConfig, SFALL_CONFIG_FILE_NAME);
configRead(&gSfallConfig, path, false);
+1
View File
@@ -76,6 +76,7 @@ namespace fallout {
#define SFALL_CONFIG_VERSION_STRING "VersionString"
#define SFALL_CONFIG_CONFIG_FILE "ConfigFile"
#define SFALL_CONFIG_PATCH_FILE "PatchFile"
#define SFALL_CONFIG_CITIES_LIMIT_FIX "CitiesLimitFix"
#define SFALL_CONFIG_HIRES_MODE "HiResMode"
#define SFALL_CONFIG_ENABLE_HIRES_STENCIL "EnableHighResolutionStencil"
#define SFALL_CONFIG_PIPBOY_AVAILABLE_AT_GAMESTART "PipBoyAvailableAtGameStart"
+3 -3
View File
@@ -982,7 +982,7 @@ static void op_party_member_list(Program* program)
programStackPushInteger(program, arrayId);
}
// type_of
// typeof
static void op_type_of(Program* program)
{
auto value = programStackPopValue(program);
@@ -1106,13 +1106,13 @@ static void op_sfall_func6(Program* program)
sfall_metarule(program, 6);
}
// sfall_func6
// sfall_func7
static void op_sfall_func7(Program* program)
{
sfall_metarule(program, 7);
}
// sfall_func6
// sfall_func8
static void op_sfall_func8(Program* program)
{
sfall_metarule(program, 8);

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