From 404236c0cb0ba2e54d71aa514cd0e0db511dfa4e Mon Sep 17 00:00:00 2001 From: Mike Klaas Date: Sun, 8 Mar 2026 22:14:20 -0700 Subject: [PATCH] Deobfuscate audio_file, character_selector, options, dictionary, map, elevator, movie.cc/h (#293) * Debobfuscate audio_file, character_selector, options, and others * dictionary, font_manager, nevs * elevator, map, movie * item, mp_proto, skill * proto_instance * proto, proto_types * revert dictionary, step -> i * PR feedback * criticalChanceModifier -> skillBonus * skillOrCritSuccessBonus --- src/audio_file.cc | 22 +++++++------- src/character_selector.cc | 6 ++-- src/dictionary.h | 4 +-- src/elevator.cc | 22 +++++++------- src/font_manager.cc | 8 ++--- src/game_sound.cc | 6 ++-- src/item.cc | 6 ++-- src/map.cc | 48 +++++++++++++++--------------- src/map.h | 6 ++-- src/mapper/mp_proto.cc | 25 ++++++++-------- src/movie.cc | 44 +++++++++++++-------------- src/nevs.cc | 18 ++++++------ src/obj_types.h | 2 +- src/object.cc | 2 +- src/options.cc | 19 ++++++------ src/options.h | 2 +- src/proto.cc | 52 ++++++++++++++++---------------- src/proto_instance.cc | 62 ++++++++++++++++++++------------------- src/proto_instance.h | 8 ++--- src/proto_types.h | 14 ++++----- src/queue.cc | 8 ++--- src/skill.cc | 34 ++++++++++----------- src/skill.h | 2 +- 23 files changed, 212 insertions(+), 208 deletions(-) diff --git a/src/audio_file.cc b/src/audio_file.cc index 42db8600..ced31a21 100644 --- a/src/audio_file.cc +++ b/src/audio_file.cc @@ -148,26 +148,26 @@ long audioFileSeek(int handle, long offset, int origin) { void* buf; int remaining; - int a4; + int targetPosition; AudioFile* audioFile = &(gAudioFileList[handle - 1]); switch (origin) { case SEEK_SET: - a4 = offset; + targetPosition = offset; break; case SEEK_CUR: - a4 = audioFile->fileSize + offset; + targetPosition = audioFile->fileSize + offset; break; case SEEK_END: - a4 = audioFile->position + offset; + targetPosition = audioFile->position + offset; break; default: assert(false && "Should be unreachable"); } if ((audioFile->flags & AUDIO_FILE_COMPRESSED) != 0) { - if (a4 <= audioFile->position) { + if (targetPosition <= audioFile->position) { soundDecoderFree(audioFile->soundDecoder); fseek(audioFile->stream, 0, 0); @@ -176,20 +176,20 @@ long audioFileSeek(int handle, long offset, int origin) audioFile->fileSize *= 2; audioFile->position = 0; - if (a4) { + if (targetPosition != 0) { buf = internal_malloc_safe(4096, __FILE__, __LINE__); // "..\int\audiof.c", 364 - while (a4 > 4096) { + while (targetPosition > 4096) { audioFileRead(handle, buf, 4096); - a4 -= 4096; + targetPosition -= 4096; } - if (a4 != 0) { - audioFileRead(handle, buf, a4); + if (targetPosition != 0) { + audioFileRead(handle, buf, targetPosition); } internal_free_safe(buf, __FILE__, __LINE__); // "..\int\audiof.c", 370 } } else { buf = internal_malloc_safe(0x400, __FILE__, __LINE__); // "..\int\audiof.c", 316 - remaining = audioFile->position - a4; + remaining = audioFile->position - targetPosition; while (remaining > 1024) { audioFileRead(handle, buf, 1024); remaining -= 1024; diff --git a/src/character_selector.cc b/src/character_selector.cc index 76d3ea41..ed18b3ad 100644 --- a/src/character_selector.cc +++ b/src/character_selector.cc @@ -77,7 +77,7 @@ typedef enum PremadeCharacter { typedef struct PremadeCharacterDescription { char fileName[20]; int face; - char field_18[20]; + char vid[20]; } PremadeCharacterDescription; static bool characterSelectorWindowInit(); @@ -959,7 +959,7 @@ void premadeCharactersInit() faceFidsString = pch + 1; - gCustomPremadeCharacterDescriptions[index].field_18[0] = '\0'; + gCustomPremadeCharacterDescriptions[index].vid[0] = '\0'; } } @@ -969,7 +969,7 @@ void premadeCharactersInit() for (int index = 0; index < PREMADE_CHARACTER_COUNT; index++) { strcpy(gCustomPremadeCharacterDescriptions[index].fileName, gPremadeCharacterDescriptions[index].fileName); gCustomPremadeCharacterDescriptions[index].face = gPremadeCharacterDescriptions[index].face; - strcpy(gCustomPremadeCharacterDescriptions[index].field_18, gPremadeCharacterDescriptions[index].field_18); + strcpy(gCustomPremadeCharacterDescriptions[index].vid, gPremadeCharacterDescriptions[index].vid); } } diff --git a/src/dictionary.h b/src/dictionary.h index 17dd91c2..a9adf30a 100644 --- a/src/dictionary.h +++ b/src/dictionary.h @@ -5,8 +5,8 @@ namespace fallout { -typedef int(DictionaryReadProc)(FILE* stream, void* buffer, unsigned int size, int a4); -typedef int(DictionaryWriteProc)(FILE* stream, void* buffer, unsigned int size, int a4); +typedef int(DictionaryReadProc)(FILE* stream, void* buffer, unsigned int size, int a3); +typedef int(DictionaryWriteProc)(FILE* stream, void* buffer, unsigned int size, int a3); // NOTE: Last unnamed fields are likely seek, tell, and filelength. typedef struct DictionaryIO { diff --git a/src/elevator.cc b/src/elevator.cc index a5265d11..4406047d 100644 --- a/src/elevator.cc +++ b/src/elevator.cc @@ -383,10 +383,10 @@ int elevatorSelectLevel(int elevator, int* mapPtr, int* elevationPtr, int* tileP debugPrint("\n the start elev level %d\n", *elevationPtr); - int v18 = (_elevatorFrmImages[ELEVATOR_FRM_GAUGE].getWidth() * _elevatorFrmImages[ELEVATOR_FRM_GAUGE].getHeight()) / 13; - float v42 = 12.0f / (float)(gElevatorLevels[elevator] - 1); + int gaugeSliceSize = (_elevatorFrmImages[ELEVATOR_FRM_GAUGE].getWidth() * _elevatorFrmImages[ELEVATOR_FRM_GAUGE].getHeight()) / 13; + float gaugeUnitsPerLevel = 12.0f / (float)(gElevatorLevels[elevator] - 1); blitBufferToBuffer( - _elevatorFrmImages[ELEVATOR_FRM_GAUGE].getData() + v18 * (int)((float)(*elevationPtr) * v42), + _elevatorFrmImages[ELEVATOR_FRM_GAUGE].getData() + gaugeSliceSize * (int)((float)(*elevationPtr) * gaugeUnitsPerLevel), _elevatorFrmImages[ELEVATOR_FRM_GAUGE].getWidth(), _elevatorFrmImages[ELEVATOR_FRM_GAUGE].getHeight() / 13, _elevatorFrmImages[ELEVATOR_FRM_GAUGE].getWidth(), @@ -424,12 +424,12 @@ int elevatorSelectLevel(int elevator, int* mapPtr, int* elevationPtr, int* tileP keyCode -= 500; if (*elevationPtr != keyCode) { - float v43 = (float)(gElevatorLevels[elevator] - 1) / 12.0f; + float levelStep = (float)(gElevatorLevels[elevator] - 1) / 12.0f; - unsigned int delay = (unsigned int)(v43 * 276.92307); + unsigned int delay = (unsigned int)(levelStep * 276.92307); if (keyCode < *elevationPtr) { - v43 = -v43; + levelStep = -levelStep; } int numberOfLevelsTravelled = keyCode - *elevationPtr; @@ -439,15 +439,15 @@ int elevatorSelectLevel(int elevator, int* mapPtr, int* elevationPtr, int* tileP soundPlayFile(gElevatorSoundEffects[gElevatorLevels[elevator] - 2][numberOfLevelsTravelled]); - float v41 = (float)keyCode * v42; - float v44 = (float)(*elevationPtr) * v42; + float targetGaugePosition = (float)keyCode * gaugeUnitsPerLevel; + float currentGaugePosition = (float)(*elevationPtr) * gaugeUnitsPerLevel; do { sharedFpsLimiter.mark(); unsigned int tick = getTicks(); - v44 += v43; + currentGaugePosition += levelStep; blitBufferToBuffer( - _elevatorFrmImages[ELEVATOR_FRM_GAUGE].getData() + v18 * (int)v44, + _elevatorFrmImages[ELEVATOR_FRM_GAUGE].getData() + gaugeSliceSize * (int)currentGaugePosition, _elevatorFrmImages[ELEVATOR_FRM_GAUGE].getWidth(), _elevatorFrmImages[ELEVATOR_FRM_GAUGE].getHeight() / 13, _elevatorFrmImages[ELEVATOR_FRM_GAUGE].getWidth(), @@ -460,7 +460,7 @@ int elevatorSelectLevel(int elevator, int* mapPtr, int* elevationPtr, int* tileP renderPresent(); sharedFpsLimiter.throttle(); - } while ((v43 <= 0.0 || v44 < v41) && (v43 > 0.0 || v44 > v41)); + } while ((levelStep <= 0.0 || currentGaugePosition < targetGaugePosition) && (levelStep > 0.0 || currentGaugePosition > targetGaugePosition)); inputPauseForTocks(200); } diff --git a/src/font_manager.cc b/src/font_manager.cc index a46bf25e..aefc278f 100644 --- a/src/font_manager.cc +++ b/src/font_manager.cc @@ -324,14 +324,14 @@ static int interfaceFontGetMonospacedCharacterWidthImpl() return 0; } - int v1; + int spacing; if (gCurrentInterfaceFontDescriptor->wordSpacing <= gCurrentInterfaceFontDescriptor->field_8) { - v1 = gCurrentInterfaceFontDescriptor->lineSpacing; + spacing = gCurrentInterfaceFontDescriptor->lineSpacing; } else { - v1 = gCurrentInterfaceFontDescriptor->letterSpacing; + spacing = gCurrentInterfaceFontDescriptor->letterSpacing; } - return v1 + gCurrentInterfaceFontDescriptor->maxHeight; + return spacing + gCurrentInterfaceFontDescriptor->maxHeight; } // 0x4422B4 diff --git a/src/game_sound.cc b/src/game_sound.cc index ea1a3867..2d2e798c 100644 --- a/src/game_sound.cc +++ b/src/game_sound.cc @@ -1451,7 +1451,7 @@ char* sfxBuildWeaponName(int effectType, Object* weapon, int hitMode, Object* ta break; case OBJ_TYPE_SCENERY: protoGetProto(target->pid, &proto); - material = proto->scenery.field_2C; + material = proto->scenery.material; break; case OBJ_TYPE_WALL: protoGetProto(target->pid, &proto); @@ -1508,7 +1508,7 @@ char* sfxBuildOpenName(Object* object, int action) char scenerySoundId; Proto* proto; if (protoGetProto(object->pid, &proto) != -1) { - scenerySoundId = proto->scenery.field_34; + scenerySoundId = proto->scenery.soundId; } else { scenerySoundId = 'A'; } @@ -1516,7 +1516,7 @@ char* sfxBuildOpenName(Object* object, int action) } else { Proto* proto; protoGetProto(object->pid, &proto); - snprintf(_sfx_file_name, sizeof(_sfx_file_name), "I%cCNTNR%c", _snd_lookup_scenery_action[action], proto->item.field_80); + snprintf(_sfx_file_name, sizeof(_sfx_file_name), "I%cCNTNR%c", _snd_lookup_scenery_action[action], proto->item.soundId); } compat_strupr(_sfx_file_name); return _sfx_file_name; diff --git a/src/item.cc b/src/item.cc index 3a0e5a59..005935c5 100644 --- a/src/item.cc +++ b/src/item.cc @@ -76,7 +76,7 @@ static void healingItemsInitCustom(); typedef struct DrugDescription { int drugPid; int gvar; - int field_8; + int maxActiveEffects; } DrugDescription; typedef struct BookDescription { @@ -2756,7 +2756,7 @@ static bool _drug_effect_allowed(Object* critter, int pid) return true; } - if (drugDescription->field_8 == 0) { + if (drugDescription->maxActiveEffects == 0) { return true; } @@ -2766,7 +2766,7 @@ static bool _drug_effect_allowed(Object* critter, int pid) while (drugEffectEvent != nullptr) { if (drugEffectEvent->drugPid == pid) { count++; - if (count >= drugDescription->field_8) { + if (count >= drugDescription->maxActiveEffects) { return false; } } diff --git a/src/map.cc b/src/map.cc index 810a6e69..f1c47342 100644 --- a/src/map.cc +++ b/src/map.cc @@ -68,7 +68,7 @@ static int mapLocalVariablesLoad(File* stream); static void _map_place_dude_and_mouse(); static void square_init(); static void _square_reset(); -static int _square_load(File* stream, int a2); +static int _square_load(File* stream, int flags); static int mapHeaderWrite(MapHeader* ptr, File* stream); static int mapHeaderRead(MapHeader* ptr, File* stream); @@ -1094,14 +1094,14 @@ int mapLoadSaved(char* fileName) if (!wmMapIsSaveable()) { debugPrint("\nDestroying RANDOM encounter map."); - char v15[16]; - strcpy(v15, gMapHeader.name); + char mapName[16]; + strcpy(mapName, gMapHeader.name); - _strmfe(gMapHeader.name, v15, "SAV"); + _strmfe(gMapHeader.name, mapName, "SAV"); _MapDirEraseFile_("MAPS\\", gMapHeader.name); - strcpy(gMapHeader.name, v15); + strcpy(gMapHeader.name, mapName); } return rc; @@ -1448,7 +1448,7 @@ static int _map_save_file(File* stream) } // 0x483C98 -int _map_save_in_game(bool a1) +int _map_save_in_game(bool isLeavingMap) { if (gMapHeader.name[0] == '\0') { return 0; @@ -1457,7 +1457,7 @@ int _map_save_in_game(bool a1) animationStop(); _partyMemberSaveProtos(); - if (a1) { + if (isLeavingMap) { _queue_leaving_map(); _partyMemberPrepLoad(); _partyMemberPrepItemSaveAll(); @@ -1477,7 +1477,7 @@ int _map_save_in_game(bool a1) char name[16]; - if (a1 && !wmMapIsSaveable()) { + if (isLeavingMap && !wmMapIsSaveable()) { debugPrint("\nNot saving RANDOM encounter map."); strcpy(name, gMapHeader.name); @@ -1497,7 +1497,7 @@ int _map_save_in_game(bool a1) automapSaveCurrent(); - if (a1) { + if (isLeavingMap) { gMapHeader.name[0] = '\0'; _obj_remove_all(); _proto_remove_all(); @@ -1715,12 +1715,12 @@ static void _square_reset() *p = (((buildFid(OBJ_TYPE_TILE, 1, 0, 0, 0) & 0xFFF) | (((fid >> 16) & 0xF000) >> 12)) << 16) | (fid & 0xFFFF); fid = *p; - int v3 = (fid & 0xF000) >> 12; - int v4 = (buildFid(OBJ_TYPE_TILE, 1, 0, 0, 0) & 0xFFF) | v3; + int tileFlags = (fid & 0xF000) >> 12; + int updatedLowerTile = (buildFid(OBJ_TYPE_TILE, 1, 0, 0, 0) & 0xFFF) | tileFlags; fid &= ~0xFFFF; - *p = v4 | ((fid >> 16) << 16); + *p = updatedLowerTile | ((fid >> 16) << 16); p++; } @@ -1731,10 +1731,10 @@ static void _square_reset() // 0x48431C static int _square_load(File* stream, int flags) { - int v6; - int v7; - int v8; - int v9; + int upperTileWord; + int upperTileFlags; + int upperTileArtId; + int lowerTileWord; _square_reset(); @@ -1746,16 +1746,16 @@ static int _square_load(File* stream, int flags) } for (int tile = 0; tile < SQUARE_GRID_SIZE; tile++) { - v6 = arr[tile]; - v6 &= ~(0xFFFF); - v6 >>= 16; + upperTileWord = arr[tile]; + upperTileWord &= ~(0xFFFF); + upperTileWord >>= 16; - v7 = (v6 & 0xF000) >> 12; - v7 &= ~(0x01); + upperTileFlags = (upperTileWord & 0xF000) >> 12; + upperTileFlags &= ~(0x01); - v8 = v6 & 0xFFF; - v9 = arr[tile] & 0xFFFF; - arr[tile] = ((v8 | (v7 << 12)) << 16) | v9; + upperTileArtId = upperTileWord & 0xFFF; + lowerTileWord = arr[tile] & 0xFFFF; + arr[tile] = ((upperTileArtId | (upperTileFlags << 12)) << 16) | lowerTileWord; } } } diff --git a/src/map.h b/src/map.h index 744f1406..835c78bd 100644 --- a/src/map.h +++ b/src/map.h @@ -93,7 +93,7 @@ int mapGetGlobalVar(int var, ProgramValue& value); int mapSetLocalVar(int var, ProgramValue& value); int mapGetLocalVar(int var, ProgramValue& value); int mapAllocLocalVars(int numNewVars); -void mapSetStart(int a1, int a2, int a3); +void mapSetStart(int tile, int elevation, int rotation); char* mapGetName(int map_num, int elev); bool mapAreSameArea(int map_num1, int map_num2); int _get_map_idx_same(int map_num1, int map_num2); @@ -101,7 +101,7 @@ char* mapGetCityName(int map_num); char* mapDescriptionById(int map_index); int mapGetCurrentMap(); int mapScroll(int dx, int dy); -int mapSetEnteringLocation(int a1, int a2, int a3); +int mapSetEnteringLocation(int elevation, int tile, int rotation); void mapNewMap(); int mapLoadByName(char* fileName); int mapLoadById(int map_index); @@ -109,7 +109,7 @@ int mapLoadSaved(char* fileName); int mapGetLoadedAreaId(); int mapSetTransition(MapTransition* transition); int mapHandleTransition(); -int _map_save_in_game(bool a1); +int _map_save_in_game(bool isLeavingMap); } // namespace fallout diff --git a/src/mapper/mp_proto.cc b/src/mapper/mp_proto.cc index 6e1b1be4..8488b4e9 100644 --- a/src/mapper/mp_proto.cc +++ b/src/mapper/mp_proto.cc @@ -18,14 +18,15 @@ namespace fallout { #define CRITTER_FLAG_COUNT 10 +#define SUBDATA_ROWS_PER_COLUMN 9 #define YES 0 #define NO 1 static int proto_choose_container_flags(Proto* proto); -static int proto_subdata_setup_int_button(const char* title, int key, int value, int min_value, int max_value, int* y, int a7); -static int proto_subdata_setup_fid_button(const char* title, int key, int fid, int* y, int a5); -static int proto_subdata_setup_pid_button(const char* title, int key, int pid, int* y, int a5); +static int proto_subdata_setup_int_button(const char* title, int key, int value, int min_value, int max_value, int* y, int itemIndex); +static int proto_subdata_setup_fid_button(const char* title, int key, int fid, int* y, int itemIndex); +static int proto_subdata_setup_pid_button(const char* title, int key, int pid, int* y, int itemIndex); static void proto_critter_flags_redraw(int win, int pid); static int proto_critter_flags_modify(int pid); static int mp_pick_kill_type(); @@ -229,7 +230,7 @@ int proto_choose_container_flags(Proto* proto) } // 0x492A3C -int proto_subdata_setup_int_button(const char* title, int key, int value, int min_value, int max_value, int* y, int a7) +int proto_subdata_setup_int_button(const char* title, int key, int value, int min_value, int max_value, int* y, int itemIndex) { char text[36]; int button_x; @@ -238,11 +239,11 @@ int proto_subdata_setup_int_button(const char* title, int key, int value, int mi button_x = 10; value_offset_x = 90; - if (a7 == 9) { + if (itemIndex == SUBDATA_ROWS_PER_COLUMN) { *y -= 189; } - if (a7 > 8) { + if (itemIndex >= SUBDATA_ROWS_PER_COLUMN) { button_x = 165; value_offset_x -= 16; } @@ -280,7 +281,7 @@ int proto_subdata_setup_int_button(const char* title, int key, int value, int mi } // 0x492B28 -int proto_subdata_setup_fid_button(const char* title, int key, int fid, int* y, int a5) +int proto_subdata_setup_fid_button(const char* title, int key, int fid, int* y, int itemIndex) { char text[36]; char* pch; @@ -290,11 +291,11 @@ int proto_subdata_setup_fid_button(const char* title, int key, int fid, int* y, button_x = 10; value_offset_x = 90; - if (a5 == 9) { + if (itemIndex == SUBDATA_ROWS_PER_COLUMN) { *y -= 189; } - if (a5 > 8) { + if (itemIndex >= SUBDATA_ROWS_PER_COLUMN) { button_x = 165; value_offset_x -= 16; } @@ -336,7 +337,7 @@ int proto_subdata_setup_fid_button(const char* title, int key, int fid, int* y, } // 0x492C20 -int proto_subdata_setup_pid_button(const char* title, int key, int pid, int* y, int a5) +int proto_subdata_setup_pid_button(const char* title, int key, int pid, int* y, int itemIndex) { int button_x; int value_offset_x; @@ -344,11 +345,11 @@ int proto_subdata_setup_pid_button(const char* title, int key, int pid, int* y, button_x = 10; value_offset_x = 90; - if (a5 == 9) { + if (itemIndex == SUBDATA_ROWS_PER_COLUMN) { *y -= 189; } - if (a5 > 8) { + if (itemIndex >= SUBDATA_ROWS_PER_COLUMN) { button_x = 165; value_offset_x = 74; } diff --git a/src/movie.cc b/src/movie.cc index 54afd3b3..1472084e 100644 --- a/src/movie.cc +++ b/src/movie.cc @@ -40,7 +40,7 @@ static int _blitAlpha(int win, unsigned char* data, int width, int height, int p static int _movieScaleWindow(int win, unsigned char* data, int width, int height, int pitch); static int _blitNormal(int win, unsigned char* data, int width, int height, int pitch); static void movieSetPaletteEntriesImpl(unsigned char* palette, int start, int end); -static void _cleanupMovie(int a1); +static void _cleanupMovie(bool shouldEndMovie); static void _cleanupLast(); static File* movieOpen(char* filePath); static void movieLoadSubtitles(char* filePath); @@ -207,8 +207,8 @@ static bool movieReadImpl(void* handle, void* buf, int count) // 0x486654 static void movieDirectImpl(unsigned char* pixels, int src_width, int src_height, int src_x, int src_y, int dst_width, int dst_height, int dst_x, int dst_y) { - int v14; - int v15; + int movieWindowWidth; + int movieWindowSpan; SDL_Rect srcRect; srcRect.x = src_x; @@ -216,15 +216,15 @@ static void movieDirectImpl(unsigned char* pixels, int src_width, int src_height srcRect.w = src_width; srcRect.h = src_height; - v14 = gMovieWindowRect.right - gMovieWindowRect.left; - v15 = gMovieWindowRect.right - gMovieWindowRect.left + 1; + movieWindowWidth = gMovieWindowRect.right - gMovieWindowRect.left; + movieWindowSpan = movieWindowWidth + 1; SDL_Rect destRect; if (_movieScaleFlag) { if ((gMovieFlags & MOVIE_EXTENDED_FLAG_0x08) != 0) { destRect.y = (gMovieWindowRect.bottom - gMovieWindowRect.top + 1 - dst_height) / 2; - destRect.x = (v15 - 4 * src_width / 3) / 2; + destRect.x = (movieWindowSpan - 4 * src_width / 3) / 2; } else { destRect.y = _movieY + gMovieWindowRect.top; destRect.x = gMovieWindowRect.left + _movieX; @@ -235,7 +235,7 @@ static void movieDirectImpl(unsigned char* pixels, int src_width, int src_height } else { if ((gMovieFlags & MOVIE_EXTENDED_FLAG_0x08) != 0) { destRect.y = (gMovieWindowRect.bottom - gMovieWindowRect.top + 1 - dst_height) / 2; - destRect.x = (v15 - dst_width) / 2; + destRect.x = (movieWindowSpan - dst_width) / 2; } else { destRect.y = _movieY + gMovieWindowRect.top; destRect.x = gMovieWindowRect.left + _movieX; @@ -298,10 +298,10 @@ int _movieScaleSubRect(int win, unsigned char* data, int width, int height, int return 0; } - int v1 = width / 3; + int tripletCount = width / 3; for (int y = 0; y < height; y++) { int x; - for (x = 0; x < v1; x++) { + for (x = 0; x < tripletCount; x++) { unsigned int value = data[0]; value |= data[1] << 8; value |= data[2] << 16; @@ -404,7 +404,7 @@ void movieInit() } // 0x486E98 -static void _cleanupMovie(int a1) +static void _cleanupMovie(bool shouldEndMovie) { if (!_running) { return; @@ -426,7 +426,7 @@ static void _cleanupMovie(int a1) MVE_lastBuffer = nullptr; } - if (a1) { + if (shouldEndMovie) { MVE_rmEndMovie(); } @@ -637,11 +637,11 @@ static void movieRenderSubtitles() return; } - int v1 = fontGetLineHeight(); - int v2 = (480 - _lastMovieH - _lastMovieY - v1) / 2 + _lastMovieH + _lastMovieY; + int lineHeight = fontGetLineHeight(); + int subtitleY = (480 - _lastMovieH - _lastMovieY - lineHeight) / 2 + _lastMovieH + _lastMovieY; - if (_subtitleH + v2 > windowGetYres()) { - _subtitleH = windowGetYres() - v2; + if (_subtitleH + subtitleY > windowGetYres()) { + _subtitleH = windowGetYres() - subtitleY; } int frame; @@ -655,7 +655,7 @@ static void movieRenderSubtitles() MovieSubtitleListNode* next = gMovieSubtitleHead->next; - windowFill(gMovieWindow, 0, v2, _subtitleW, _subtitleH, 0); + windowFill(gMovieWindow, 0, subtitleY, _subtitleW, _subtitleH, 0); int oldFont; if (gMovieSubtitlesFont != -1) { @@ -664,12 +664,12 @@ static void movieRenderSubtitles() } int colorIndex = (gMovieSubtitlesColorR << 10) | (gMovieSubtitlesColorG << 5) | gMovieSubtitlesColorB; - windowWrapLine(gMovieWindow, gMovieSubtitleHead->text, _subtitleW, _subtitleH, 0, v2, _colorTable[colorIndex] | 0x2000000, TEXT_ALIGNMENT_CENTER); + windowWrapLine(gMovieWindow, gMovieSubtitleHead->text, _subtitleW, _subtitleH, 0, subtitleY, _colorTable[colorIndex] | 0x2000000, TEXT_ALIGNMENT_CENTER); Rect rect; rect.right = _subtitleW; - rect.top = v2; - rect.bottom = v2 + _subtitleH; + rect.top = subtitleY; + rect.bottom = subtitleY + _subtitleH; rect.left = 0; windowRefreshRect(gMovieWindow, &rect); @@ -806,12 +806,12 @@ static int _stepMovie() fileRead(_alphaBuf, 1, size, _alphaHandle); } - int v1 = _MVE_rmStepMovie(); - if (v1 != -1) { + int stepResult = _MVE_rmStepMovie(); + if (stepResult != -1) { movieRenderSubtitles(); } - return v1; + return stepResult; } // 0x487BC8 diff --git a/src/nevs.cc b/src/nevs.cc index 626d1cd7..845d5f1b 100644 --- a/src/nevs.cc +++ b/src/nevs.cc @@ -20,7 +20,7 @@ typedef struct Nevs { int type; int hits; bool busy; - void (*field_38)(); + void (*callbackProc)(); // unused } Nevs; static Nevs* _nevs_alloc(); @@ -138,18 +138,18 @@ int _nevs_addevent(const char* name, Program* program, int proc, int type) nevs->program = program; nevs->proc = proc; nevs->type = type; - nevs->field_38 = nullptr; + nevs->callbackProc = nullptr; return 0; } // nevs_clearevent // 0x48859C -int _nevs_clearevent(const char* a1) +int _nevs_clearevent(const char* name) { - debugPrint("nevs_clearevent( '%s');\n", a1); + debugPrint("nevs_clearevent( '%s');\n", name); - Nevs* nevs = _nevs_find(a1); + Nevs* nevs = _nevs_find(name); if (nevs != nullptr) { // NOTE: Uninline. _nevs_reset(nevs); @@ -173,7 +173,7 @@ int _nevs_signal(const char* name) debugPrint("nep: %p, used = %u, prog = %p, proc = %d", nevs, nevs->used, nevs->program, nevs->proc); if (nevs->used - && ((nevs->program != nullptr && nevs->proc != 0) || nevs->field_38 != nullptr) + && ((nevs->program != nullptr && nevs->proc != 0) || nevs->callbackProc != nullptr) && !nevs->busy) { nevs->hits++; gNevsHits++; @@ -198,7 +198,7 @@ void _nevs_update() for (int index = 0; index < NEVS_COUNT; index++) { Nevs* nevs = &(gNevs[index]); if (nevs->used - && ((nevs->program != nullptr && nevs->proc != 0) || nevs->field_38 != nullptr) + && ((nevs->program != nullptr && nevs->proc != 0) || nevs->callbackProc != nullptr) && !nevs->busy) { if (nevs->hits > 0) { nevs->busy = true; @@ -206,10 +206,10 @@ void _nevs_update() nevs->hits -= 1; gNevsHits += nevs->hits; - if (nevs->field_38 == nullptr) { + if (nevs->callbackProc == nullptr) { _executeProc(nevs->program, nevs->proc); } else { - nevs->field_38(); + nevs->callbackProc(); } nevs->busy = false; diff --git a/src/obj_types.h b/src/obj_types.h index 41013973..8dd87911 100644 --- a/src/obj_types.h +++ b/src/obj_types.h @@ -211,7 +211,7 @@ typedef struct CritterCombatData { } CritterCombatData; typedef struct CritterObjectData { - int field_0; // obj_pud.reaction_to_pc + int reaction; // obj_pud.reaction_to_pc (unused) CritterCombatData combat; // obj_pud.combat_data int hp; // obj_pud.curr_hp int radiation; // obj_pud.curr_rad diff --git a/src/object.cc b/src/object.cc index dac9bf81..a1ccdfa8 100644 --- a/src/object.cc +++ b/src/object.cc @@ -2080,7 +2080,7 @@ bool _obj_portal_is_walk_thru(Object* obj) } } - return (proto->scenery.data.generic.field_0 & 0x04) != 0; + return (proto->scenery.data.generic.genericFlags & 0x04) != 0; } // 0x48B2E8 diff --git a/src/options.cc b/src/options.cc index 0ecf3e88..68d3917d 100644 --- a/src/options.cc +++ b/src/options.cc @@ -42,7 +42,7 @@ typedef enum OptionsWindowFrm { static int optionsWindowInit(); static int optionsWindowFree(); -static void _ShadeScreen(bool a1); +static void _ShadeScreen(bool preserveWorldState); // 0x48FC0C static const int gPauseWindowFrmIds[PAUSE_WINDOW_FRM_COUNT] = { @@ -328,10 +328,11 @@ static int optionsWindowFree() } // 0x4902B0 -int showPause(bool a1) +// preserveWorldState is always false +int showPause(bool preserveWorldState) { bool gameMouseWasVisible; - if (!a1) { + if (!preserveWorldState) { gOptionsWindowIsoWasEnabled = isoDisable(); colorCycleDisable(); @@ -342,7 +343,7 @@ int showPause(bool a1) } gameMouseSetCursor(MOUSE_CURSOR_ARROW); - _ShadeScreen(a1); + _ShadeScreen(preserveWorldState); FrmImage frmImages[PAUSE_WINDOW_FRM_COUNT]; for (int index = 0; index < PAUSE_WINDOW_FRM_COUNT; index++) { @@ -368,7 +369,7 @@ int showPause(bool a1) int pauseWindowX = (screenGetWidth() - frmImages[PAUSE_WINDOW_FRM_BACKGROUND].getWidth()) / 2; int pauseWindowY = (screenGetHeight() - frmImages[PAUSE_WINDOW_FRM_BACKGROUND].getHeight()) / 2; - if (a1) { + if (preserveWorldState) { pauseWindowX -= 65; pauseWindowY -= 24; } else { @@ -471,14 +472,14 @@ int showPause(bool a1) sharedFpsLimiter.throttle(); } - if (!a1) { + if (!preserveWorldState) { tileWindowRefresh(); } windowDestroy(window); messageListFree(&gPreferencesMessageList); - if (!a1) { + if (!preserveWorldState) { if (gameMouseWasVisible) { gameMouseObjectsShow(); } @@ -498,9 +499,9 @@ int showPause(bool a1) } // 0x490748 -static void _ShadeScreen(bool a1) +static void _ShadeScreen(bool preserveWorldState) { - if (a1) { + if (preserveWorldState) { mouseHideCursor(); } else { mouseHideCursor(); diff --git a/src/options.h b/src/options.h index 4373856a..5acb5828 100644 --- a/src/options.h +++ b/src/options.h @@ -4,7 +4,7 @@ namespace fallout { int showOptions(); -int showPause(bool a1); +int showPause(bool preserveWorldState); int _init_options_menu(); } // namespace fallout diff --git a/src/proto.cc b/src/proto.cc index 6896b66e..ab9a8262 100644 --- a/src/proto.cc +++ b/src/proto.cc @@ -391,7 +391,7 @@ int proto_item_init(Proto* proto, int a2) proto->item.weight = 10; proto->item.cost = 0; proto->item.inventoryFid = -1; - proto->item.field_80 = '0'; + proto->item.soundId = '0'; return 0; } @@ -563,7 +563,7 @@ int objectDataRead(Object* obj, File* stream) if (fileReadInt32(stream, &temp) == -1) return -1; if (PID_TYPE(obj->pid) == OBJ_TYPE_CRITTER) { - if (fileReadInt32(stream, &(obj->data.critter.field_0)) == -1) return -1; + if (fileReadInt32(stream, &(obj->data.critter.reaction)) == -1) return -1; if (objectCritterCombatDataRead(&(obj->data.critter.combat), stream) == -1) return -1; if (fileReadInt32(stream, &(obj->data.critter.hp)) == -1) return -1; if (fileReadInt32(stream, &(obj->data.critter.radiation)) == -1) return -1; @@ -775,8 +775,8 @@ static int _proto_update_gen(Object* obj) data->scenery.door.openFlags = proto->scenery.data.door.openFlags; break; case SCENERY_TYPE_STAIRS: - data->scenery.stairs.destinationBuiltTile = proto->scenery.data.stairs.field_0; - data->scenery.stairs.destinationMap = proto->scenery.data.stairs.field_4; + data->scenery.stairs.destinationBuiltTile = proto->scenery.data.stairs.destinationBuiltTile; + data->scenery.stairs.destinationMap = proto->scenery.data.stairs.destinationMap; break; case SCENERY_TYPE_ELEVATOR: data->scenery.elevator.type = proto->scenery.data.elevator.type; @@ -784,7 +784,7 @@ static int _proto_update_gen(Object* obj) break; case SCENERY_TYPE_LADDER_UP: case SCENERY_TYPE_LADDER_DOWN: - data->scenery.ladder.destinationMap = proto->scenery.data.ladder.field_0; + data->scenery.ladder.destinationMap = proto->scenery.data.ladder.destinationMap; break; } break; @@ -953,8 +953,8 @@ int proto_scenery_init(Proto* proto, int pid) proto->scenery.sid = -1; proto->scenery.type = SCENERY_TYPE_GENERIC; proto_scenery_subdata_init(proto, proto->scenery.type); - proto->scenery.field_2C = -1; - proto->scenery.field_34 = '0'; + proto->scenery.material = -1; + proto->scenery.soundId = '0'; return 0; } @@ -968,8 +968,8 @@ int proto_scenery_subdata_init(Proto* proto, int type) proto->scenery.extendedFlags |= 0x800; break; case SCENERY_TYPE_STAIRS: - proto->scenery.data.stairs.field_0 = -1; - proto->scenery.data.stairs.field_4 = -1; + proto->scenery.data.stairs.destinationBuiltTile = -1; + proto->scenery.data.stairs.destinationMap = -1; proto->scenery.extendedFlags |= 0x800; break; case SCENERY_TYPE_ELEVATOR: @@ -978,11 +978,11 @@ int proto_scenery_subdata_init(Proto* proto, int type) proto->scenery.extendedFlags |= 0x800; break; case SCENERY_TYPE_LADDER_UP: - proto->scenery.data.ladder.field_0 = -1; + proto->scenery.data.ladder.destinationMap = -1; proto->scenery.extendedFlags |= 0x800; break; case SCENERY_TYPE_LADDER_DOWN: - proto->scenery.data.ladder.field_0 = -1; + proto->scenery.data.ladder.destinationMap = -1; proto->scenery.extendedFlags |= 0x800; break; } @@ -1240,7 +1240,7 @@ int protoGetDataMember(int pid, int member, ProtoDataMemberValue* value) value->integerValue = proto->scenery.type; break; case SCENERY_DATA_MEMBER_MATERIAL: - value->integerValue = proto->scenery.field_2C; + value->integerValue = proto->scenery.material; break; default: debugPrint("\n\tError: Unimp'd data member in member in proto_data_member!"); @@ -1635,8 +1635,8 @@ static int protoSceneryDataRead(SceneryProtoData* scenery_data, int type, File* return 0; case SCENERY_TYPE_STAIRS: - if (fileReadInt32(stream, &(scenery_data->stairs.field_0)) == -1) return -1; - if (fileReadInt32(stream, &(scenery_data->stairs.field_4)) == -1) return -1; + if (fileReadInt32(stream, &(scenery_data->stairs.destinationBuiltTile)) == -1) return -1; + if (fileReadInt32(stream, &(scenery_data->stairs.destinationMap)) == -1) return -1; return 0; case SCENERY_TYPE_ELEVATOR: @@ -1646,11 +1646,11 @@ static int protoSceneryDataRead(SceneryProtoData* scenery_data, int type, File* return 0; case SCENERY_TYPE_LADDER_UP: case SCENERY_TYPE_LADDER_DOWN: - if (fileReadInt32(stream, &(scenery_data->ladder.field_0)) == -1) return -1; + if (fileReadInt32(stream, &(scenery_data->ladder.destinationMap)) == -1) return -1; return 0; case SCENERY_TYPE_GENERIC: - if (fileReadInt32(stream, &(scenery_data->generic.field_0)) == -1) return -1; + if (fileReadInt32(stream, &(scenery_data->generic.genericFlags)) == -1) return -1; return 0; } @@ -1679,7 +1679,7 @@ static int protoRead(Proto* proto, File* stream) if (_db_freadInt(stream, &(proto->item.weight)) == -1) return -1; if (fileReadInt32(stream, &(proto->item.cost)) == -1) return -1; if (fileReadInt32(stream, &(proto->item.inventoryFid)) == -1) return -1; - if (fileReadUInt8(stream, &(proto->item.field_80)) == -1) return -1; + if (fileReadUInt8(stream, &(proto->item.soundId)) == -1) return -1; if (protoItemDataRead(&(proto->item.data), proto->item.type, stream) == -1) return -1; return 0; @@ -1703,8 +1703,8 @@ static int protoRead(Proto* proto, File* stream) if (fileReadInt32(stream, &(proto->scenery.extendedFlags)) == -1) return -1; if (fileReadInt32(stream, &(proto->scenery.sid)) == -1) return -1; if (fileReadInt32(stream, &(proto->scenery.type)) == -1) return -1; - if (fileReadInt32(stream, &(proto->scenery.field_2C)) == -1) return -1; - if (fileReadUInt8(stream, &(proto->scenery.field_34)) == -1) return -1; + if (fileReadInt32(stream, &(proto->scenery.material)) == -1) return -1; + if (fileReadUInt8(stream, &(proto->scenery.soundId)) == -1) return -1; if (protoSceneryDataRead(&(proto->scenery.data), proto->scenery.type, stream) == -1) return -1; return 0; case OBJ_TYPE_WALL: @@ -1821,8 +1821,8 @@ static int protoSceneryDataWrite(SceneryProtoData* scenery_data, int type, File* return 0; case SCENERY_TYPE_STAIRS: - if (fileWriteInt32(stream, scenery_data->stairs.field_0) == -1) return -1; - if (fileWriteInt32(stream, scenery_data->stairs.field_4) == -1) return -1; + if (fileWriteInt32(stream, scenery_data->stairs.destinationBuiltTile) == -1) return -1; + if (fileWriteInt32(stream, scenery_data->stairs.destinationMap) == -1) return -1; return 0; case SCENERY_TYPE_ELEVATOR: @@ -1832,11 +1832,11 @@ static int protoSceneryDataWrite(SceneryProtoData* scenery_data, int type, File* return 0; case SCENERY_TYPE_LADDER_UP: case SCENERY_TYPE_LADDER_DOWN: - if (fileWriteInt32(stream, scenery_data->ladder.field_0) == -1) return -1; + if (fileWriteInt32(stream, scenery_data->ladder.destinationMap) == -1) return -1; return 0; case SCENERY_TYPE_GENERIC: - if (fileWriteInt32(stream, scenery_data->generic.field_0) == -1) return -1; + if (fileWriteInt32(stream, scenery_data->generic.genericFlags) == -1) return -1; return 0; } @@ -1864,7 +1864,7 @@ static int protoWrite(Proto* proto, File* stream) if (_db_fwriteLong(stream, proto->item.weight) == -1) return -1; if (fileWriteInt32(stream, proto->item.cost) == -1) return -1; if (fileWriteInt32(stream, proto->item.inventoryFid) == -1) return -1; - if (fileWriteUInt8(stream, proto->item.field_80) == -1) return -1; + if (fileWriteUInt8(stream, proto->item.soundId) == -1) return -1; if (protoItemDataWrite(&(proto->item.data), proto->item.type, stream) == -1) return -1; return 0; @@ -1887,8 +1887,8 @@ static int protoWrite(Proto* proto, File* stream) if (fileWriteInt32(stream, proto->scenery.extendedFlags) == -1) return -1; if (fileWriteInt32(stream, proto->scenery.sid) == -1) return -1; if (fileWriteInt32(stream, proto->scenery.type) == -1) return -1; - if (fileWriteInt32(stream, proto->scenery.field_2C) == -1) return -1; - if (fileWriteUInt8(stream, proto->scenery.field_34) == -1) return -1; + if (fileWriteInt32(stream, proto->scenery.material) == -1) return -1; + if (fileWriteUInt8(stream, proto->scenery.soundId) == -1) return -1; if (protoSceneryDataWrite(&(proto->scenery.data), proto->scenery.type, stream) == -1) return -1; case OBJ_TYPE_WALL: if (fileWriteInt32(stream, proto->wall.lightDistance) == -1) return -1; diff --git a/src/proto_instance.cc b/src/proto_instance.cc index de7b12a0..d040fea0 100644 --- a/src/proto_instance.cc +++ b/src/proto_instance.cc @@ -619,45 +619,45 @@ static int _obj_remove_from_inven(Object* critter, Object* item) { Rect updatedRect; int fid; - int v11 = 0; + int appearanceUpdateType = 0; if (critterGetItem2(critter) == item) { if (critter != gDude || interfaceGetCurrentHand()) { fid = buildFid(OBJ_TYPE_CRITTER, critter->fid & 0xFFF, FID_ANIM_TYPE(critter->fid), 0, critter->rotation); objectSetFid(critter, fid, &updatedRect); - v11 = 2; + appearanceUpdateType = 2; } else { - v11 = 1; + appearanceUpdateType = 1; } } else if (critterGetItem1(critter) == item) { if (critter == gDude && !interfaceGetCurrentHand()) { fid = buildFid(OBJ_TYPE_CRITTER, critter->fid & 0xFFF, FID_ANIM_TYPE(critter->fid), 0, critter->rotation); objectSetFid(critter, fid, &updatedRect); - v11 = 2; + appearanceUpdateType = 2; } else { - v11 = 1; + appearanceUpdateType = 1; } } else if (critterGetArmor(critter) == item) { if (critter == gDude) { - int v5 = 1; + int defaultFid = 1; Proto* proto; if (protoGetProto(0x1000000, &proto) != -1) { - v5 = proto->fid; + defaultFid = proto->fid; } - fid = buildFid(OBJ_TYPE_CRITTER, v5, FID_ANIM_TYPE(critter->fid), (critter->fid & 0xF000) >> 12, critter->rotation); + fid = buildFid(OBJ_TYPE_CRITTER, defaultFid, FID_ANIM_TYPE(critter->fid), (critter->fid & 0xF000) >> 12, critter->rotation); objectSetFid(critter, fid, &updatedRect); - v11 = 3; + appearanceUpdateType = 3; } } int rc = itemRemove(critter, item, 1); - if (v11 >= 2) { + if (appearanceUpdateType >= 2) { tileWindowRefreshRect(&updatedRect, critter->elevation); } - if (v11 <= 2 && critter == gDude) { + if (appearanceUpdateType <= 2 && critter == gDude) { interfaceUpdateItems(false, INTERFACE_ITEM_ACTION_DEFAULT, INTERFACE_ITEM_ACTION_DEFAULT); } @@ -1119,12 +1119,12 @@ int objectUseItem(Object* userObj, Object* item) if (root != nullptr) { int flags = item->flags & OBJECT_IN_ANY_HAND; itemRemove(root, item, 1); - Object* v8 = itemReplace(root, item, flags); + Object* replacementItem = itemReplace(root, item, flags); if (root == gDude) { int leftItemAction; int rightItemAction; interfaceGetItemActions(&leftItemAction, &rightItemAction); - if (v8 == nullptr) { + if (replacementItem == nullptr) { if ((flags & OBJECT_IN_LEFT_HAND) != 0) { leftItemAction = INTERFACE_ITEM_ACTION_DEFAULT; } else if ((flags & OBJECT_IN_RIGHT_HAND) != 0) { @@ -1243,32 +1243,32 @@ static int _protinst_default_use_item(Object* user, Object* targetObj, Object* i int objectUseItemOnInternal(Object* critter, Object* targetObj, Object* item) { int messageId = -1; - int criticalChanceModifier = 0; + int skillBonus = 0; int skill = -1; switch (item->pid) { case PROTO_ID_DOCTORS_BAG: // The supplies in the Doctor's Bag run out. messageId = 900; - criticalChanceModifier = 20; + skillBonus = 20; skill = SKILL_DOCTOR; break; case PROTO_ID_FIRST_AID_KIT: // The supplies in the First Aid Kit run out. messageId = 901; - criticalChanceModifier = 20; + skillBonus = 20; skill = SKILL_FIRST_AID; break; case PROTO_ID_PARAMEDICS_BAG: // The supplies in the Paramedic's Bag run out. messageId = 910; - criticalChanceModifier = 40; + skillBonus = 40; skill = SKILL_DOCTOR; break; case PROTO_ID_FIELD_MEDIC_FIRST_AID_KIT: // The supplies in the Field Medic First Aid Kit run out. messageId = 911; - criticalChanceModifier = 40; + skillBonus = 40; skill = SKILL_FIRST_AID; break; } @@ -1333,7 +1333,7 @@ int objectUseItemOnInternal(Object* critter, Object* targetObj, Object* item) return -1; } - if (skillUse(critter, targetObj, skill, criticalChanceModifier) != 0) { + if (skillUse(critter, targetObj, skill, skillBonus) != 0) { return 0; } @@ -1398,8 +1398,10 @@ int objectUseItemOn(Object* user, Object* targetObj, Object* item) } // 0x49C6BC -int checkSceneryUseActionPointCost(Object* obj, Object* a2) +int checkSceneryUseActionPointCost(Object* obj, Object* _) { + (void)_; // unused + if (!isInCombat()) { return 0; } @@ -2249,27 +2251,27 @@ int objectAttemptPlacementPartyMember(Object* obj, int tile, int elevation) return -1; } - int v9 = tile; - int v7 = 0; + int destinationTile = tile; + int rotation = 0; if (!wmEvalTileNumForPlacement(tile)) { - v9 = gDude->tile; - for (int v4 = 1; v4 <= 100; v4++) { + destinationTile = gDude->tile; + for (int i = 1; i <= 100; i++) { // TODO: Check. - v7++; - v9 = tileGetTileInDirection(v9, v7 % ROTATION_COUNT, 1); - if (wmEvalTileNumForPlacement(v9) != 0) { + rotation++; + destinationTile = tileGetTileInDirection(destinationTile, rotation % ROTATION_COUNT, 1); + if (wmEvalTileNumForPlacement(destinationTile) != 0) { break; } - if (tileDistanceBetween(gDude->tile, v9) > 8) { - v9 = tile; + if (tileDistanceBetween(gDude->tile, destinationTile) > 8) { + destinationTile = tile; break; } } } objectShow(obj, nullptr); - objectSetLocation(obj, v9, elevation, nullptr); + objectSetLocation(obj, destinationTile, elevation, nullptr); return 0; } diff --git a/src/proto_instance.h b/src/proto_instance.h index 37a2dd82..1af32f1b 100644 --- a/src/proto_instance.h +++ b/src/proto_instance.h @@ -7,7 +7,7 @@ namespace fallout { int objectGetSid(Object* object, int* sidPtr); int objectSetScriptFromProto(Object* object, int* sidPtr); -int objectSetScript(Object* obj, int a2, int a3); +int objectSetScript(Object* obj, int scriptType, int scriptIndex); int objectLookAt(Object* critter, Object* target); int objectLookAtFunc(Object* critter, Object* target, void (*fn)(char* string)); int objectExamine(Object* critter, Object* target); @@ -15,15 +15,15 @@ int objectExamineFunc(Object* critter, Object* target, void (*fn)(char* string)) int objectPickup(Object* critter, Object* item); int objectDrop(Object* invenObj, Object* itemObj); int objectDestroy(Object* obj); -int objectUseItemInternal(Object* a1, Object* a2); +int objectUseItemInternal(Object* critter, Object* item); int objectUseItem(Object* userObj, Object* item); int objectUseItemOnInternal(Object* critter, Object* targetObj, Object* item); int objectUseItemOn(Object* user, Object* targetObj, Object* item); -int checkSceneryUseActionPointCost(Object* obj, Object* a2); +int checkSceneryUseActionPointCost(Object* obj, Object* _); int objectUse(Object* user, Object* targetObj); int objectUseDoor(Object* user, Object* doorObj, bool animateOnly = false); int objectUseContainer(Object* critter, Object* item); -int objectUseSkillOn(Object* a1, Object* a2, int skill); +int objectUseSkillOn(Object* source, Object* target, int skill); bool objectIsLocked(Object* obj); int objectLock(Object* obj); int objectUnlock(Object* obj); diff --git a/src/proto_types.h b/src/proto_types.h index f3188503..9b1db713 100644 --- a/src/proto_types.h +++ b/src/proto_types.h @@ -329,7 +329,7 @@ typedef struct ItemProto { int weight; // weight int cost; // cost int inventoryFid; // inv_fid - unsigned char field_80; + unsigned char soundId; } ItemProto; typedef struct CritterProtoData { @@ -365,8 +365,8 @@ typedef struct { } SceneryProtoDoorData; typedef struct { - int field_0; // d.lower_tile - int field_4; // d.upper_tile + int destinationBuiltTile; // d.lower_tile + int destinationMap; // d.upper_tile } SceneryProtoStairsData; typedef struct { @@ -375,11 +375,11 @@ typedef struct { } SceneryProtoElevatorData; typedef struct { - int field_0; + int destinationMap; // destination map } SceneryProtoLadderData; typedef struct { - int field_0; + int genericFlags; } SceneryProtoGenericData; typedef struct SceneryProtoData { @@ -403,9 +403,9 @@ typedef struct SceneryProto { int sid; // sid int type; // type SceneryProtoData data; - int field_2C; // material + int material; // material int field_30; // - unsigned char field_34; + unsigned char soundId; } SceneryProto; typedef struct WallProto { diff --git a/src/queue.cc b/src/queue.cc index e4c81f35..406ddd09 100644 --- a/src/queue.cc +++ b/src/queue.cc @@ -30,8 +30,8 @@ typedef struct EventTypeDescription { QueueEventDataFreeProc* freeProc; QueueEventDataReadProc* readProc; QueueEventDataWriteProc* writeProc; - bool field_10; - QueueEventHandler* field_14; + bool clearOnMapExit; // unused + QueueEventHandler* mapExitHandlerProc; // unused } EventTypeDescription; static int flareEventProcess(Object* obj, void* data); @@ -511,8 +511,8 @@ void _queue_leaving_map() { for (int eventType = 0; eventType < EVENT_TYPE_COUNT; eventType++) { EventTypeDescription* eventTypeDescription = &(gEventTypeDescriptions[eventType]); - if (eventTypeDescription->field_10) { - queueClearByEventType(eventType, eventTypeDescription->field_14); + if (eventTypeDescription->clearOnMapExit) { + queueClearByEventType(eventType, eventTypeDescription->mapExitHandlerProc); } } } diff --git a/src/skill.cc b/src/skill.cc index 314db867..feec1513 100644 --- a/src/skill.cc +++ b/src/skill.cc @@ -45,10 +45,10 @@ typedef struct SkillDescription { int stat2; int baseValueMult; int experience; - int field_28; + int gainXpFromSkillPenalty; } SkillDescription; -static void _show_skill_use_messages(Object* obj, int skill, Object* target, int successCount, int criticalChanceModifier); +static void _show_skill_use_messages(Object* obj, int skill, Object* target, int successCount, int skillBonus); static int skillGetFreeUsageSlot(int skill); static int skill_use_slot_clear(); @@ -503,7 +503,7 @@ int skillGetFrmId(int skill) } // 0x4AAC2C -static void _show_skill_use_messages(Object* obj, int skill, Object* target, int successCount, int criticalChanceModifier) +static void _show_skill_use_messages(Object* obj, int skill, Object* target, int successCount, int skillBonus) { if (obj != gDude) { return; @@ -520,8 +520,8 @@ static void _show_skill_use_messages(Object* obj, int skill, Object* target, int return; } - if (skillDescription->field_28 && criticalChanceModifier < 0) { - baseExperience += abs(criticalChanceModifier); + if (skillDescription->gainXpFromSkillPenalty && skillBonus < 0) { + baseExperience += abs(skillBonus); } int xpToAdd = successCount * baseExperience; @@ -543,7 +543,7 @@ static void _show_skill_use_messages(Object* obj, int skill, Object* target, int // skill_use // 0x4AAD08 -int skillUse(Object* obj, Object* target, int skill, int criticalChanceModifier) +int skillUse(Object* obj, Object* target, int skill, int skillBonus) { MessageListItem messageListItem; char text[60]; @@ -564,7 +564,7 @@ int skillUse(Object* obj, Object* target, int skill, int criticalChanceModifier) } } - int criticalChance = critterGetStat(obj, STAT_CRITICAL_CHANCE) + criticalChanceModifier; + int skillOrCritSuccessBonus = critterGetStat(obj, STAT_CRITICAL_CHANCE) + skillBonus; int damageHealingAttempts = 1; int successCount = 0; @@ -603,7 +603,7 @@ int skillUse(Object* obj, Object* target, int skill, int criticalChanceModifier) if (critterGetBodyType(target) == BODY_TYPE_ROBOTIC) { roll = ROLL_FAILURE; } else { - roll = skillRoll(obj, skill, criticalChance, &hpToHeal); + roll = skillRoll(obj, skill, skillOrCritSuccessBonus, &hpToHeal); } if (roll == ROLL_SUCCESS || roll == ROLL_CRITICAL_SUCCESS) { @@ -707,7 +707,7 @@ int skillUse(Object* obj, Object* target, int skill, int criticalChanceModifier) if ((target->data.critter.combat.results & flags[index]) != 0) { damageHealingAttempts++; - int roll = skillRoll(obj, skill, criticalChance, &hpToHeal); + int roll = skillRoll(obj, skill, skillOrCritSuccessBonus, &hpToHeal); // 530: damaged eye // 531: crippled left arm @@ -745,7 +745,7 @@ int skillUse(Object* obj, Object* target, int skill, int criticalChanceModifier) snprintf(text, sizeof(text), prefix.text, messageListItem.text); displayMonitorAddMessage(text); - _show_skill_use_messages(obj, skill, target, successCount, criticalChanceModifier); + _show_skill_use_messages(obj, skill, target, successCount, skillBonus); giveExp = false; } @@ -757,7 +757,7 @@ int skillUse(Object* obj, Object* target, int skill, int criticalChanceModifier) roll = ROLL_FAILURE; } else { int skillValue = skillGetValue(obj, skill); - roll = randomRoll(skillValue, criticalChance, &hpToHeal); + roll = randomRoll(skillValue, skillOrCritSuccessBonus, &hpToHeal); } if (roll == ROLL_SUCCESS || roll == ROLL_CRITICAL_SUCCESS) { @@ -789,7 +789,7 @@ int skillUse(Object* obj, Object* target, int skill, int criticalChanceModifier) } successCount = 1; - _show_skill_use_messages(obj, skill, target, successCount, criticalChanceModifier); + _show_skill_use_messages(obj, skill, target, successCount, skillBonus); scriptsExecMapUpdateProc(); paletteFadeTo(_cmap); @@ -893,7 +893,7 @@ int skillUse(Object* obj, Object* target, int skill, int criticalChanceModifier) if ((target->data.critter.combat.results & flags[index]) != 0) { damageHealingAttempts++; - int roll = skillRoll(obj, skill, criticalChance, &hpToHeal); + int roll = skillRoll(obj, skill, skillOrCritSuccessBonus, &hpToHeal); // 530: damaged eye // 531: crippled left arm @@ -931,13 +931,13 @@ int skillUse(Object* obj, Object* target, int skill, int criticalChanceModifier) snprintf(text, sizeof(text), prefix.text, messageListItem.text); displayMonitorAddMessage(text); - _show_skill_use_messages(obj, skill, target, successCount, criticalChanceModifier); + _show_skill_use_messages(obj, skill, target, successCount, skillBonus); giveExp = false; } } int skillValue = skillGetValue(obj, skill); - int roll = randomRoll(skillValue, criticalChance, &hpToHeal); + int roll = randomRoll(skillValue, skillOrCritSuccessBonus, &hpToHeal); if (roll == ROLL_SUCCESS || roll == ROLL_CRITICAL_SUCCESS) { hpToHeal = randomBetween(minimumHpToHeal + 4, maximumHpToHeal + 10); @@ -968,7 +968,7 @@ int skillUse(Object* obj, Object* target, int skill, int criticalChanceModifier) } successCount = 1; - _show_skill_use_messages(obj, skill, target, successCount, criticalChanceModifier); + _show_skill_use_messages(obj, skill, target, successCount, skillBonus); scriptsExecMapUpdateProc(); paletteFadeTo(_cmap); @@ -1017,7 +1017,7 @@ int skillUse(Object* obj, Object* target, int skill, int criticalChanceModifier) } if (giveExp) { - _show_skill_use_messages(obj, skill, target, successCount, criticalChanceModifier); + _show_skill_use_messages(obj, skill, target, successCount, skillBonus); } if (skill == SKILL_FIRST_AID || skill == SKILL_DOCTOR) { diff --git a/src/skill.h b/src/skill.h index 4a401ff0..16af8f22 100644 --- a/src/skill.h +++ b/src/skill.h @@ -34,7 +34,7 @@ char* skillGetName(int skill); char* skillGetDescription(int skill); char* skillGetAttributes(int skill); int skillGetFrmId(int skill); -int skillUse(Object* obj, Object* target, int skill, int criticalChanceModifier); +int skillUse(Object* obj, Object* target, int skill, int skillBonus); int skillsPerformStealing(Object* thief, Object* target, Object* item, bool isPlanting); int skillGetGameDifficultyModifier(int skill); int skillUpdateLastUse(int skill);