Cleanup game_dialog.h (#52)

This commit is contained in:
k3tamina 2022-06-19 09:59:36 +02:00 committed by GitHub
parent 8de2871593
commit 7d4d2af1d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 240 additions and 342 deletions

View File

@ -34,6 +34,10 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#define DIALOG_REVIEW_ENTRIES_CAPACITY 80
#define DIALOG_OPTION_ENTRIES_CAPACITY 30
#define GAME_DIALOG_WINDOW_WIDTH 640 #define GAME_DIALOG_WINDOW_WIDTH 640
#define GAME_DIALOG_WINDOW_HEIGHT 480 #define GAME_DIALOG_WINDOW_HEIGHT 480
@ -50,103 +54,177 @@
#define GAME_DIALOG_REVIEW_WINDOW_WIDTH 640 #define GAME_DIALOG_REVIEW_WINDOW_WIDTH 640
#define GAME_DIALOG_REVIEW_WINDOW_HEIGHT 480 #define GAME_DIALOG_REVIEW_WINDOW_HEIGHT 480
typedef enum GameDialogReviewWindowButton {
GAME_DIALOG_REVIEW_WINDOW_BUTTON_SCROLL_UP,
GAME_DIALOG_REVIEW_WINDOW_BUTTON_SCROLL_DOWN,
GAME_DIALOG_REVIEW_WINDOW_BUTTON_DONE,
GAME_DIALOG_REVIEW_WINDOW_BUTTON_COUNT,
} GameDialogReviewWindowButton;
typedef enum GameDialogReviewWindowButtonFrm {
GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_ARROW_UP_NORMAL,
GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_ARROW_UP_PRESSED,
GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_ARROW_DOWN_NORMAL,
GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_ARROW_DOWN_PRESSED,
GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_DONE_NORMAL,
GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_DONE_PRESSED,
GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_COUNT,
} GameDialogReviewWindowButtonFrm;
typedef enum GameDialogReaction {
GAME_DIALOG_REACTION_GOOD = 49,
GAME_DIALOG_REACTION_NEUTRAL = 50,
GAME_DIALOG_REACTION_BAD = 51,
} GameDialogReaction;
typedef struct GameDialogReviewEntry {
int replyMessageListId;
int replyMessageId;
// Can be NULL.
char* replyText;
int optionMessageListId;
int optionMessageId;
char* optionText;
} GameDialogReviewEntry;
typedef struct GameDialogOptionEntry {
int messageListId;
int messageId;
int reaction;
int proc;
int btn;
int field_14;
char text[900];
int field_39C;
} GameDialogOptionEntry;
// Provides button configuration for party member combat control and
// customization interface.
typedef struct GameDialogButtonData {
int x;
int y;
int upFrmId;
int downFrmId;
int disabledFrmId;
CacheEntry* upFrmHandle;
CacheEntry* downFrmHandle;
CacheEntry* disabledFrmHandle;
int keyCode;
int value;
} GameDialogButtonData;
typedef struct STRUCT_5189E4 {
int messageId;
int value;
} STRUCT_5189E4;
typedef enum PartyMemberCustomizationOption {
PARTY_MEMBER_CUSTOMIZATION_OPTION_AREA_ATTACK_MODE,
PARTY_MEMBER_CUSTOMIZATION_OPTION_RUN_AWAY_MODE,
PARTY_MEMBER_CUSTOMIZATION_OPTION_BEST_WEAPON,
PARTY_MEMBER_CUSTOMIZATION_OPTION_DISTANCE,
PARTY_MEMBER_CUSTOMIZATION_OPTION_ATTACK_WHO,
PARTY_MEMBER_CUSTOMIZATION_OPTION_CHEM_USE,
PARTY_MEMBER_CUSTOMIZATION_OPTION_COUNT,
} PartyMemberCustomizationOption;
// 0x444D10 // 0x444D10
int _Dogs[3] = { static int _Dogs[3] = {
0x1000088, 0x1000088,
0x1000156, 0x1000156,
0x1000180, 0x1000180,
}; };
// 0x5186D4 // 0x5186D4
int _dialog_state_fix = 0; static int _dialog_state_fix = 0;
// 0x5186D8 // 0x5186D8
int gGameDialogOptionEntriesLength = 0; static int gGameDialogOptionEntriesLength = 0;
// 0x5186DC // 0x5186DC
int gGameDialogReviewEntriesLength = 0; static int gGameDialogReviewEntriesLength = 0;
// 0x5186E0 // 0x5186E0
unsigned char* gGameDialogDisplayBuffer = NULL; static unsigned char* gGameDialogDisplayBuffer = NULL;
// 0x5186E4 // 0x5186E4
int gGameDialogReplyWindow = -1; static int gGameDialogReplyWindow = -1;
// 0x5186E8 // 0x5186E8
int gGameDialogOptionsWindow = -1; static int gGameDialogOptionsWindow = -1;
// 0x5186EC // 0x5186EC
bool _gdialog_window_created = false; static bool _gdialog_window_created = false;
// 0x5186F0 // 0x5186F0
int _boxesWereDisabled = 0; static int _boxesWereDisabled = 0;
// 0x5186F4 // 0x5186F4
int gGameDialogFidgetFid = 0; static int gGameDialogFidgetFid = 0;
// 0x5186F8 // 0x5186F8
CacheEntry* gGameDialogFidgetFrmHandle = NULL; static CacheEntry* gGameDialogFidgetFrmHandle = NULL;
// 0x5186FC // 0x5186FC
Art* gGameDialogFidgetFrm = NULL; static Art* gGameDialogFidgetFrm = NULL;
// 0x518700 // 0x518700
int gGameDialogBackground = 2; static int gGameDialogBackground = 2;
// 0x518704 // 0x518704
int _lipsFID = 0; static int _lipsFID = 0;
// 0x518708 // 0x518708
CacheEntry* _lipsKey = NULL; static CacheEntry* _lipsKey = NULL;
// 0x51870C // 0x51870C
Art* _lipsFp = NULL; static Art* _lipsFp = NULL;
// 0x518710 // 0x518710
bool gGameDialogLipSyncStarted = false; static bool gGameDialogLipSyncStarted = false;
// 0x518714 // 0x518714
int _dialogue_state = 0; static int _dialogue_state = 0;
// 0x518718 // 0x518718
int _dialogue_switch_mode = 0; static int _dialogue_switch_mode = 0;
// 0x51871C // 0x51871C
int _gdialog_state = -1; static int _gdialog_state = -1;
// 0x518720 // 0x518720
bool _gdDialogWentOff = false; static bool _gdDialogWentOff = false;
// 0x518724 // 0x518724
bool _gdDialogTurnMouseOff = false; static bool _gdDialogTurnMouseOff = false;
// 0x518728 // 0x518728
int _gdReenterLevel = 0; static int _gdReenterLevel = 0;
// 0x51872C // 0x51872C
bool _gdReplyTooBig = false; static bool _gdReplyTooBig = false;
// 0x518730 // 0x518730
Object* _peon_table_obj = NULL; static Object* _peon_table_obj = NULL;
// 0x518734 // 0x518734
Object* _barterer_table_obj = NULL; static Object* _barterer_table_obj = NULL;
// 0x518738 // 0x518738
Object* _barterer_temp_obj = NULL; static Object* _barterer_temp_obj = NULL;
// 0x51873C // 0x51873C
int gGameDialogBarterModifier = 0; static int gGameDialogBarterModifier = 0;
// dialogueBackWindow // dialogueBackWindow
// 0x518740 // 0x518740
int gGameDialogBackgroundWindow = -1; static int gGameDialogBackgroundWindow = -1;
// 0x518744 // 0x518744
int gGameDialogWindow = -1; static int gGameDialogWindow = -1;
// 0x518748 // 0x518748
Rect _backgrndRects[8] = { static Rect _backgrndRects[8] = {
{ 126, 14, 152, 40 }, { 126, 14, 152, 40 },
{ 488, 14, 514, 40 }, { 488, 14, 514, 40 },
{ 126, 188, 152, 214 }, { 126, 188, 152, 214 },
@ -158,40 +236,40 @@ Rect _backgrndRects[8] = {
}; };
// 0x5187C8 // 0x5187C8
int _talk_need_to_center = 1; static int _talk_need_to_center = 1;
// 0x5187CC // 0x5187CC
bool _can_start_new_fidget = false; static bool _can_start_new_fidget = false;
// 0x5187D0 // 0x5187D0
int _gd_replyWin = -1; static int _gd_replyWin = -1;
// 0x5187D4 // 0x5187D4
int _gd_optionsWin = -1; static int _gd_optionsWin = -1;
// 0x5187D8 // 0x5187D8
int gGameDialogOldMusicVolume = -1; static int gGameDialogOldMusicVolume = -1;
// 0x5187DC // 0x5187DC
int gGameDialogOldCenterTile = -1; static int gGameDialogOldCenterTile = -1;
// 0x5187E0 // 0x5187E0
int gGameDialogOldDudeTile = -1; static int gGameDialogOldDudeTile = -1;
// 0x5187E4 // 0x5187E4
unsigned char* _light_BlendTable = NULL; static unsigned char* _light_BlendTable = NULL;
// 0x5187E8 // 0x5187E8
unsigned char* _dark_BlendTable = NULL; static unsigned char* _dark_BlendTable = NULL;
// 0x5187EC // 0x5187EC
int _dialogue_just_started = 0; static int _dialogue_just_started = 0;
// 0x5187F0 // 0x5187F0
int _dialogue_seconds_since_last_input = 0; static int _dialogue_seconds_since_last_input = 0;
// 0x5187F4 // 0x5187F4
CacheEntry* gGameDialogReviewWindowButtonFrmHandles[GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_COUNT] = { static CacheEntry* gGameDialogReviewWindowButtonFrmHandles[GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_COUNT] = {
INVALID_CACHE_ENTRY, INVALID_CACHE_ENTRY,
INVALID_CACHE_ENTRY, INVALID_CACHE_ENTRY,
INVALID_CACHE_ENTRY, INVALID_CACHE_ENTRY,
@ -201,30 +279,30 @@ CacheEntry* gGameDialogReviewWindowButtonFrmHandles[GAME_DIALOG_REVIEW_WINDOW_BU
}; };
// 0x51880C // 0x51880C
CacheEntry* _reviewBackKey = INVALID_CACHE_ENTRY; static CacheEntry* _reviewBackKey = INVALID_CACHE_ENTRY;
// 0x518810 // 0x518810
CacheEntry* gGameDialogReviewWindowBackgroundFrmHandle = INVALID_CACHE_ENTRY; static CacheEntry* gGameDialogReviewWindowBackgroundFrmHandle = INVALID_CACHE_ENTRY;
// 0x518814 // 0x518814
unsigned char* gGameDialogReviewWindowBackgroundFrmData = NULL; static unsigned char* gGameDialogReviewWindowBackgroundFrmData = NULL;
// 0x518818 // 0x518818
const int gGameDialogReviewWindowButtonWidths[GAME_DIALOG_REVIEW_WINDOW_BUTTON_COUNT] = { static const int gGameDialogReviewWindowButtonWidths[GAME_DIALOG_REVIEW_WINDOW_BUTTON_COUNT] = {
35, 35,
35, 35,
82, 82,
}; };
// 0x518824 // 0x518824
const int gGameDialogReviewWindowButtonHeights[GAME_DIALOG_REVIEW_WINDOW_BUTTON_COUNT] = { static const int gGameDialogReviewWindowButtonHeights[GAME_DIALOG_REVIEW_WINDOW_BUTTON_COUNT] = {
35, 35,
37, 37,
46, 46,
}; };
// 0x518830 // 0x518830
int gGameDialogReviewWindowButtonFrmIds[GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_COUNT] = { static int gGameDialogReviewWindowButtonFrmIds[GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_COUNT] = {
89, // di_bgdn1.frm - dialog big down arrow 89, // di_bgdn1.frm - dialog big down arrow
90, // di_bgdn2.frm - dialog big down arrow 90, // di_bgdn2.frm - dialog big down arrow
87, // di_bgup1.frm - dialog big up arrow 87, // di_bgup1.frm - dialog big up arrow
@ -248,7 +326,7 @@ int gGameDialogSid = -1;
// Maps phoneme to talking head frame. // Maps phoneme to talking head frame.
// //
// 0x518858 // 0x518858
int _head_phoneme_lookup[PHONEME_COUNT] = { static int _head_phoneme_lookup[PHONEME_COUNT] = {
0, 0,
3, 3,
1, 1,
@ -294,26 +372,26 @@ int _head_phoneme_lookup[PHONEME_COUNT] = {
}; };
// 0x518900 // 0x518900
int _phone_anim = 0; static int _phone_anim = 0;
// 0x518904 // 0x518904
int _loop_cnt = -1; static int _loop_cnt = -1;
// 0x518908 // 0x518908
unsigned int _tocksWaiting = 10000; static unsigned int _tocksWaiting = 10000;
// 0x51890C // 0x51890C
const char* _react_strs[3] = { static const char* _react_strs[3] = {
"Said Good", "Said Good",
"Said Neutral", "Said Neutral",
"Said Bad", "Said Bad",
}; };
// 0x518918 // 0x518918
int _dialogue_subwin_len = 0; static int _dialogue_subwin_len = 0;
// 0x51891C // 0x51891C
GameDialogButtonData gGameDialogDispositionButtonsData[5] = { static GameDialogButtonData gGameDialogDispositionButtonsData[5] = {
{ 438, 37, 397, 395, 396, NULL, NULL, NULL, 2098, 4 }, { 438, 37, 397, 395, 396, NULL, NULL, NULL, 2098, 4 },
{ 438, 67, 394, 392, 393, NULL, NULL, NULL, 2103, 3 }, { 438, 67, 394, 392, 393, NULL, NULL, NULL, 2103, 3 },
{ 438, 96, 406, 404, 405, NULL, NULL, NULL, 2102, 2 }, { 438, 96, 406, 404, 405, NULL, NULL, NULL, 2102, 2 },
@ -322,7 +400,7 @@ GameDialogButtonData gGameDialogDispositionButtonsData[5] = {
}; };
// 0x5189E4 // 0x5189E4
STRUCT_5189E4 _custom_settings[PARTY_MEMBER_CUSTOMIZATION_OPTION_COUNT][6] = { static STRUCT_5189E4 _custom_settings[PARTY_MEMBER_CUSTOMIZATION_OPTION_COUNT][6] = {
{ {
{ 100, AREA_ATTACK_MODE_ALWAYS }, // Always! { 100, AREA_ATTACK_MODE_ALWAYS }, // Always!
{ 101, AREA_ATTACK_MODE_SOMETIMES }, // Sometimes, don't worry about hitting me { 101, AREA_ATTACK_MODE_SOMETIMES }, // Sometimes, don't worry about hitting me
@ -374,7 +452,7 @@ STRUCT_5189E4 _custom_settings[PARTY_MEMBER_CUSTOMIZATION_OPTION_COUNT][6] = {
}; };
// 0x518B04 // 0x518B04
GameDialogButtonData _custom_button_info[PARTY_MEMBER_CUSTOMIZATION_OPTION_COUNT] = { static GameDialogButtonData _custom_button_info[PARTY_MEMBER_CUSTOMIZATION_OPTION_COUNT] = {
{ 95, 9, 410, 409, -1, NULL, NULL, NULL, 0, 0 }, { 95, 9, 410, 409, -1, NULL, NULL, NULL, 0, 0 },
{ 96, 38, 416, 415, -1, NULL, NULL, NULL, 1, 0 }, { 96, 38, 416, 415, -1, NULL, NULL, NULL, 1, 0 },
{ 96, 68, 418, 417, -1, NULL, NULL, NULL, 2, 0 }, { 96, 68, 418, 417, -1, NULL, NULL, NULL, 2, 0 },
@ -384,86 +462,86 @@ GameDialogButtonData _custom_button_info[PARTY_MEMBER_CUSTOMIZATION_OPTION_COUNT
}; };
// 0x518BF4 // 0x518BF4
int _totalHotx = 0; static int _totalHotx = 0;
// 0x58EA80 // 0x58EA80
int _custom_current_selected[PARTY_MEMBER_CUSTOMIZATION_OPTION_COUNT]; static int _custom_current_selected[PARTY_MEMBER_CUSTOMIZATION_OPTION_COUNT];
// custom.msg // custom.msg
// //
// 0x58EA98 // 0x58EA98
MessageList gCustomMessageList; static MessageList gCustomMessageList;
// 0x58EAA0 // 0x58EAA0
unsigned char _light_GrayTable[256]; static unsigned char _light_GrayTable[256];
// 0x58EBA0 // 0x58EBA0
unsigned char _dark_GrayTable[256]; static unsigned char _dark_GrayTable[256];
// 0x58ECA0 // 0x58ECA0
unsigned char* _backgrndBufs[8]; static unsigned char* _backgrndBufs[8];
// 0x58ECC0 // 0x58ECC0
Rect _optionRect; static Rect _optionRect;
// 0x58ECD0 // 0x58ECD0
Rect _replyRect; static Rect _replyRect;
// 0x58ECE0 // 0x58ECE0
GameDialogReviewEntry gDialogReviewEntries[DIALOG_REVIEW_ENTRIES_CAPACITY]; static GameDialogReviewEntry gDialogReviewEntries[DIALOG_REVIEW_ENTRIES_CAPACITY];
// 0x58F460 // 0x58F460
int _custom_buttons_start; static int _custom_buttons_start;
// 0x58F464 // 0x58F464
int _control_buttons_start; static int _control_buttons_start;
// 0x58F468 // 0x58F468
int gGameDialogReviewWindowOldFont; static int gGameDialogReviewWindowOldFont;
// 0x58F46C // 0x58F46C
CacheEntry* gGameDialogRedButtonUpFrmHandle; static CacheEntry* gGameDialogRedButtonUpFrmHandle;
// 0x58F470 // 0x58F470
int _gdialog_buttons[9]; static int _gdialog_buttons[9];
// 0x58F494 // 0x58F494
CacheEntry* gGameDialogUpperHighlightFrmHandle; static CacheEntry* gGameDialogUpperHighlightFrmHandle;
// 0x58F498 // 0x58F498
CacheEntry* gGameDialogReviewButtonUpFrmHandle; static CacheEntry* gGameDialogReviewButtonUpFrmHandle;
// 0x58F49C // 0x58F49C
int gGameDialogLowerHighlightFrmHeight; static int gGameDialogLowerHighlightFrmHeight;
// 0x58F4A0 // 0x58F4A0
CacheEntry* gGameDialogReviewButtonDownFrmHandle; static CacheEntry* gGameDialogReviewButtonDownFrmHandle;
// 0x58F4A4 // 0x58F4A4
unsigned char* gGameDialogRedButtonDownFrmData; static unsigned char* gGameDialogRedButtonDownFrmData;
// 0x58F4A8 // 0x58F4A8
int gGameDialogLowerHighlightFrmWidth; static int gGameDialogLowerHighlightFrmWidth;
// 0x58F4AC // 0x58F4AC
unsigned char* gGameDialogRedButtonUpFrmData; static unsigned char* gGameDialogRedButtonUpFrmData;
// 0x58F4B0 // 0x58F4B0
int gGameDialogUpperHighlightFrmWidth; static int gGameDialogUpperHighlightFrmWidth;
// Yellow highlight blick effect. // Yellow highlight blick effect.
// //
// 0x58F4B4 // 0x58F4B4
Art* gGameDialogLowerHighlightFrm; static Art* gGameDialogLowerHighlightFrm;
// 0x58F4B8 // 0x58F4B8
int gGameDialogUpperHighlightFrmHeight; static int gGameDialogUpperHighlightFrmHeight;
// 0x58F4BC // 0x58F4BC
CacheEntry* gGameDialogRedButtonDownFrmHandle; static CacheEntry* gGameDialogRedButtonDownFrmHandle;
// 0x58F4C0 // 0x58F4C0
CacheEntry* gGameDialogLowerHighlightFrmHandle; static CacheEntry* gGameDialogLowerHighlightFrmHandle;
// White highlight blick effect. // White highlight blick effect.
// //
@ -471,28 +549,28 @@ CacheEntry* gGameDialogLowerHighlightFrmHandle;
// [gDialogLowerHighlight] it gives an effect of depth of the monitor. // [gDialogLowerHighlight] it gives an effect of depth of the monitor.
// //
// 0x58F4C4 // 0x58F4C4
Art* gGameDialogUpperHighlightFrm; static Art* gGameDialogUpperHighlightFrm;
// 0x58F4C8 // 0x58F4C8
int _oldFont; static int _oldFont;
// 0x58F4CC // 0x58F4CC
unsigned int gGameDialogFidgetLastUpdateTimestamp; static unsigned int gGameDialogFidgetLastUpdateTimestamp;
// 0x58F4D0 // 0x58F4D0
int gGameDialogFidgetReaction; static int gGameDialogFidgetReaction;
// 0x58F4D4 // 0x58F4D4
Program* gDialogReplyProgram; static Program* gDialogReplyProgram;
// 0x58F4D8 // 0x58F4D8
int gDialogReplyMessageListId; static int gDialogReplyMessageListId;
// 0x58F4DC // 0x58F4DC
int gDialogReplyMessageId; static int gDialogReplyMessageId;
// 0x58F4E0 // 0x58F4E0
int dword_58F4E0; static int dword_58F4E0;
// NOTE: The is something odd about this variable. There are 2700 bytes, which // NOTE: The is something odd about this variable. There are 2700 bytes, which
// is 3 x 900, but anywhere in the app only 900 characters is used. The length // is 3 x 900, but anywhere in the app only 900 characters is used. The length
@ -506,19 +584,84 @@ int dword_58F4E0;
// important role. // important role.
// //
// 0x58F4E4 // 0x58F4E4
char gDialogReplyText[900]; static char gDialogReplyText[900];
// 0x58FF70 // 0x58FF70
GameDialogOptionEntry gDialogOptionEntries[DIALOG_OPTION_ENTRIES_CAPACITY]; static GameDialogOptionEntry gDialogOptionEntries[DIALOG_OPTION_ENTRIES_CAPACITY];
// 0x596C30 // 0x596C30
int _talkOldFont; static int _talkOldFont;
// 0x596C34 // 0x596C34
unsigned int gGameDialogFidgetUpdateDelay; static unsigned int gGameDialogFidgetUpdateDelay;
// 0x596C38 // 0x596C38
int gGameDialogFidgetFrmCurrentFrame; static int gGameDialogFidgetFrmCurrentFrame;
static int _gdialogReset();
static void gameDialogEndLips();
static int gameDialogAddMessageOption(int a1, int a2, int a3);
static int gameDialogAddTextOption(int a1, const char* a2, int a3);
static int gameDialogReviewWindowInit(int* win);
static int gameDialogReviewWindowFree(int* win);
static int gameDialogShowReview();
static void gameDialogReviewButtonOnMouseUp(int btn, int keyCode);
static void gameDialogReviewWindowUpdate(int win, int origin);
static void dialogReviewEntriesClear();
static int gameDialogAddReviewMessage(int messageListId, int messageId);
static int gameDialogAddReviewText(const char* text);
static int gameDialogSetReviewOptionMessage(int messageListId, int messageId);
static int gameDialogSetReviewOptionText(const char* text);
static int _gdProcessInit();
static void _gdProcessCleanup();
static int _gdProcessExit();
static void gameDialogRenderCaps();
static int _gdProcess();
static int _gdProcessChoice(int a1);
static void gameDialogOptionOnMouseEnter(int a1);
static void gameDialogOptionOnMouseExit(int a1);
static void gameDialogRenderReply();
static void _gdProcessUpdate();
static int _gdCreateHeadWindow();
static void _gdDestroyHeadWindow();
static void _gdSetupFidget(int headFid, int reaction);
static void gameDialogWaitForFidgetToComplete();
static void _gdPlayTransition(int a1);
static void _reply_arrow_up(int btn, int a2);
static void _reply_arrow_down(int btn, int a2);
static void _reply_arrow_restore(int btn, int a2);
static void _demo_copy_title(int win);
static void _demo_copy_options(int win);
static void _gDialogRefreshOptionsRect(int win, Rect* drawRect);
static void gameDialogTicker();
static void _gdialog_scroll_subwin(int a1, int a2, unsigned char* a3, unsigned char* a4, unsigned char* a5, int a6, int a7);
static int _text_num_lines(const char* a1, int a2);
static int gameDialogDrawText(unsigned char* buffer, Rect* rect, char* string, int* a4, int height, int pitch, int color, int a7);
static int _gdialog_barter_create_win();
static void _gdialog_barter_destroy_win();
static void _gdialog_barter_cleanup_tables();
static int partyMemberControlWindowInit();
static void partyMemberControlWindowFree();
static void partyMemberControlWindowUpdate();
static void gameDialogCombatControlButtonOnMouseUp(int a1, int a2);
static int _gdPickAIUpdateMsg(Object* obj);
static int _gdCanBarter();
static void partyMemberControlWindowHandleEvents();
static int partyMemberCustomizationWindowInit();
static void partyMemberCustomizationWindowFree();
static void partyMemberCustomizationWindowHandleEvents();
static void partyMemberCustomizationWindowUpdate();
static void _gdCustomSelectRedraw(unsigned char* dest, int pitch, int type, int selectedIndex);
static int _gdCustomSelect(int a1);
static void _gdCustomUpdateSetting(int option, int value);
static void gameDialogBarterButtonUpMouseUp(int btn, int a2);
static int _gdialog_window_create();
static void _gdialog_window_destroy();
static int gameDialogWindowRenderBackground();
static int _talkToRefreshDialogWindowRect(Rect* rect);
static void gameDialogRenderHighlight(unsigned char* src, int srcWidth, int srcHeight, int srcPitch, unsigned char* dest, int x, int y, int destPitch, unsigned char* a9, unsigned char* a10);
static void gameDialogRenderTalkingHead(Art* art, int frame);
static void gameDialogPrepareHighlights();
// gdialog_init // gdialog_init
// 0x444D1C // 0x444D1C

View File

@ -1,204 +1,21 @@
#ifndef GAME_DIALOG_H #ifndef GAME_DIALOG_H
#define GAME_DIALOG_H #define GAME_DIALOG_H
#include "art.h"
#include "geometry.h"
#include "interpreter.h" #include "interpreter.h"
#include "lips.h"
#include "message.h"
#include "obj_types.h" #include "obj_types.h"
#define DIALOG_REVIEW_ENTRIES_CAPACITY 80
#define DIALOG_OPTION_ENTRIES_CAPACITY 30
typedef enum GameDialogReviewWindowButton {
GAME_DIALOG_REVIEW_WINDOW_BUTTON_SCROLL_UP,
GAME_DIALOG_REVIEW_WINDOW_BUTTON_SCROLL_DOWN,
GAME_DIALOG_REVIEW_WINDOW_BUTTON_DONE,
GAME_DIALOG_REVIEW_WINDOW_BUTTON_COUNT,
} GameDialogReviewWindowButton;
typedef enum GameDialogReviewWindowButtonFrm {
GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_ARROW_UP_NORMAL,
GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_ARROW_UP_PRESSED,
GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_ARROW_DOWN_NORMAL,
GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_ARROW_DOWN_PRESSED,
GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_DONE_NORMAL,
GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_DONE_PRESSED,
GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_COUNT,
} GameDialogReviewWindowButtonFrm;
typedef enum GameDialogReaction {
GAME_DIALOG_REACTION_GOOD = 49,
GAME_DIALOG_REACTION_NEUTRAL = 50,
GAME_DIALOG_REACTION_BAD = 51,
} GameDialogReaction;
typedef struct GameDialogReviewEntry {
int replyMessageListId;
int replyMessageId;
// Can be NULL.
char* replyText;
int optionMessageListId;
int optionMessageId;
char* optionText;
} GameDialogReviewEntry;
typedef struct GameDialogOptionEntry {
int messageListId;
int messageId;
int reaction;
int proc;
int btn;
int field_14;
char text[900];
int field_39C;
} GameDialogOptionEntry;
// Provides button configuration for party member combat control and
// customization interface.
typedef struct GameDialogButtonData {
int x;
int y;
int upFrmId;
int downFrmId;
int disabledFrmId;
CacheEntry* upFrmHandle;
CacheEntry* downFrmHandle;
CacheEntry* disabledFrmHandle;
int keyCode;
int value;
} GameDialogButtonData;
typedef struct STRUCT_5189E4 {
int messageId;
int value;
} STRUCT_5189E4;
typedef enum PartyMemberCustomizationOption {
PARTY_MEMBER_CUSTOMIZATION_OPTION_AREA_ATTACK_MODE,
PARTY_MEMBER_CUSTOMIZATION_OPTION_RUN_AWAY_MODE,
PARTY_MEMBER_CUSTOMIZATION_OPTION_BEST_WEAPON,
PARTY_MEMBER_CUSTOMIZATION_OPTION_DISTANCE,
PARTY_MEMBER_CUSTOMIZATION_OPTION_ATTACK_WHO,
PARTY_MEMBER_CUSTOMIZATION_OPTION_CHEM_USE,
PARTY_MEMBER_CUSTOMIZATION_OPTION_COUNT,
} PartyMemberCustomizationOption;
extern int _Dogs[3];
extern int _dialog_state_fix;
extern int gGameDialogOptionEntriesLength;
extern int gGameDialogReviewEntriesLength;
extern unsigned char* gGameDialogDisplayBuffer;
extern int gGameDialogReplyWindow;
extern int gGameDialogOptionsWindow;
extern bool _gdialog_window_created;
extern int _boxesWereDisabled;
extern int gGameDialogFidgetFid;
extern CacheEntry* gGameDialogFidgetFrmHandle;
extern Art* gGameDialogFidgetFrm;
extern int gGameDialogBackground;
extern int _lipsFID;
extern int _lipsFID;
extern Art* _lipsFp;
extern bool gGameDialogLipSyncStarted;
extern int _dialogue_state;
extern int _dialogue_switch_mode;
extern int _gdialog_state;
extern bool _gdDialogWentOff;
extern bool _gdDialogTurnMouseOff;
extern int _gdReenterLevel;
extern bool _gdReplyTooBig;
extern Object* _peon_table_obj;
extern Object* _barterer_table_obj;
extern Object* _barterer_temp_obj;
extern int gGameDialogBarterModifier;
extern int gGameDialogBackgroundWindow;
extern int gGameDialogWindow;
extern Rect _backgrndRects[8];
extern int _talk_need_to_center;
extern bool _can_start_new_fidget;
extern int _gd_replyWin;
extern int _gd_optionsWin;
extern int gGameDialogOldMusicVolume;
extern int gGameDialogOldCenterTile;
extern int gGameDialogOldDudeTile;
extern unsigned char* _light_BlendTable;
extern unsigned char* _dark_BlendTable;
extern int _dialogue_just_started;
extern int _dialogue_seconds_since_last_input;
extern CacheEntry* gGameDialogReviewWindowButtonFrmHandles[GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_COUNT];
extern CacheEntry* _reviewBackKey;
extern CacheEntry* gGameDialogReviewWindowBackgroundFrmHandle;
extern unsigned char* gGameDialogReviewWindowBackgroundFrmData;
extern const int gGameDialogReviewWindowButtonWidths[GAME_DIALOG_REVIEW_WINDOW_BUTTON_COUNT];
extern const int gGameDialogReviewWindowButtonHeights[GAME_DIALOG_REVIEW_WINDOW_BUTTON_COUNT];
extern int gGameDialogReviewWindowButtonFrmIds[GAME_DIALOG_REVIEW_WINDOW_BUTTON_FRM_COUNT];
extern Object* gGameDialogSpeaker; extern Object* gGameDialogSpeaker;
extern bool gGameDialogSpeakerIsPartyMember; extern bool gGameDialogSpeakerIsPartyMember;
extern int gGameDialogHeadFid; extern int gGameDialogHeadFid;
extern int gGameDialogSid; extern int gGameDialogSid;
extern int _head_phoneme_lookup[PHONEME_COUNT];
extern int _phone_anim;
extern int _loop_cnt;
extern unsigned int _tocksWaiting;
extern const char* _react_strs[3];
extern int _dialogue_subwin_len;
extern GameDialogButtonData gGameDialogDispositionButtonsData[5];
extern STRUCT_5189E4 _custom_settings[PARTY_MEMBER_CUSTOMIZATION_OPTION_COUNT][6];
extern GameDialogButtonData _custom_button_info[PARTY_MEMBER_CUSTOMIZATION_OPTION_COUNT];
extern int _totalHotx;
extern int _custom_current_selected[PARTY_MEMBER_CUSTOMIZATION_OPTION_COUNT];
extern MessageList gCustomMessageList;
extern unsigned char _light_GrayTable[256];
extern unsigned char _dark_GrayTable[256];
extern unsigned char* _backgrndBufs[8];
extern Rect _optionRect;
extern Rect _replyRect;
extern GameDialogReviewEntry gDialogReviewEntries[DIALOG_REVIEW_ENTRIES_CAPACITY];
extern int _custom_buttons_start;
extern int _control_buttons_start;
extern int gGameDialogReviewWindowOldFont;
extern CacheEntry* gGameDialogRedButtonUpFrmHandle;
extern int _gdialog_buttons[9];
extern CacheEntry* gGameDialogUpperHighlightFrmHandle;
extern CacheEntry* gGameDialogReviewButtonUpFrmHandle;
extern int gGameDialogLowerHighlightFrmHeight;
extern CacheEntry* gGameDialogReviewButtonDownFrmHandle;
extern unsigned char* gGameDialogRedButtonDownFrmData;
extern int gGameDialogLowerHighlightFrmWidth;
extern unsigned char* gGameDialogRedButtonUpFrmData;
extern int gGameDialogUpperHighlightFrmWidth;
extern Art* gGameDialogLowerHighlightFrm;
extern int gGameDialogUpperHighlightFrmHeight;
extern CacheEntry* gGameDialogRedButtonDownFrmHandle;
extern CacheEntry* gGameDialogLowerHighlightFrmHandle;
extern Art* gGameDialogUpperHighlightFrm;
extern int _oldFont;
extern unsigned int gGameDialogFidgetLastUpdateTimestamp;
extern int gGameDialogFidgetReaction;
extern Program* gDialogReplyProgram;
extern int gDialogReplyMessageListId;
extern int gDialogReplyMessageId;
extern int dword_58F4E0;
extern char gDialogReplyText[900];
extern GameDialogOptionEntry gDialogOptionEntries[DIALOG_OPTION_ENTRIES_CAPACITY];
extern int _talkOldFont;
extern unsigned int gGameDialogFidgetUpdateDelay;
extern int gGameDialogFidgetFrmCurrentFrame;
int gameDialogInit(); int gameDialogInit();
int _gdialogReset();
int gameDialogReset(); int gameDialogReset();
int gameDialogExit(); int gameDialogExit();
bool _gdialogActive(); bool _gdialogActive();
void gameDialogEnter(Object* a1, int a2); void gameDialogEnter(Object* a1, int a2);
void _gdialogSystemEnter(); void _gdialogSystemEnter();
void gameDialogStartLips(const char* a1); void gameDialogStartLips(const char* a1);
void gameDialogEndLips();
int gameDialogEnable(); int gameDialogEnable();
int gameDialogDisable(); int gameDialogDisable();
int _gdialogInitFromScript(int headFid, int reaction); int _gdialogInitFromScript(int headFid, int reaction);
@ -215,71 +32,9 @@ int gameDialogSetMessageReply(Program* a1, int a2, int a3);
int gameDialogSetTextReply(Program* a1, int a2, const char* a3); int gameDialogSetTextReply(Program* a1, int a2, const char* a3);
int _gdialogGo(); int _gdialogGo();
void _gdialogUpdatePartyStatus(); void _gdialogUpdatePartyStatus();
int gameDialogAddMessageOption(int a1, int a2, int a3);
int gameDialogAddTextOption(int a1, const char* a2, int a3);
int gameDialogReviewWindowInit(int* win);
int gameDialogReviewWindowFree(int* win);
int gameDialogShowReview();
void gameDialogReviewButtonOnMouseUp(int btn, int keyCode);
void gameDialogReviewWindowUpdate(int win, int origin);
void dialogReviewEntriesClear();
int gameDialogAddReviewMessage(int messageListId, int messageId);
int gameDialogAddReviewText(const char* text);
int gameDialogSetReviewOptionMessage(int messageListId, int messageId);
int gameDialogSetReviewOptionText(const char* text);
int _gdProcessInit();
void _gdProcessCleanup();
int _gdProcessExit();
void gameDialogRenderCaps();
int _gdProcess();
int _gdProcessChoice(int a1);
void gameDialogOptionOnMouseEnter(int a1);
void gameDialogOptionOnMouseExit(int a1);
void gameDialogRenderReply();
void _gdProcessUpdate();
int _gdCreateHeadWindow();
void _gdDestroyHeadWindow();
void _gdSetupFidget(int headFid, int reaction);
void gameDialogWaitForFidgetToComplete();
void _gdPlayTransition(int a1);
void _reply_arrow_up(int btn, int a2);
void _reply_arrow_down(int btn, int a2);
void _reply_arrow_restore(int btn, int a2);
void _demo_copy_title(int win);
void _demo_copy_options(int win);
void _gDialogRefreshOptionsRect(int win, Rect* drawRect);
void gameDialogTicker();
void _talk_to_critter_reacts(int a1); void _talk_to_critter_reacts(int a1);
void _gdialog_scroll_subwin(int a1, int a2, unsigned char* a3, unsigned char* a4, unsigned char* a5, int a6, int a7);
int _text_num_lines(const char* a1, int a2);
int gameDialogDrawText(unsigned char* buffer, Rect* rect, char* string, int* a4, int height, int pitch, int color, int a7);
void gameDialogSetBarterModifier(int modifier); void gameDialogSetBarterModifier(int modifier);
int gameDialogBarter(int modifier); int gameDialogBarter(int modifier);
void _barter_end_to_talk_to(); void _barter_end_to_talk_to();
int _gdialog_barter_create_win();
void _gdialog_barter_destroy_win();
void _gdialog_barter_cleanup_tables();
int partyMemberControlWindowInit();
void partyMemberControlWindowFree();
void partyMemberControlWindowUpdate();
void gameDialogCombatControlButtonOnMouseUp(int a1, int a2);
int _gdPickAIUpdateMsg(Object* obj);
int _gdCanBarter();
void partyMemberControlWindowHandleEvents();
int partyMemberCustomizationWindowInit();
void partyMemberCustomizationWindowFree();
void partyMemberCustomizationWindowHandleEvents();
void partyMemberCustomizationWindowUpdate();
void _gdCustomSelectRedraw(unsigned char* dest, int pitch, int type, int selectedIndex);
int _gdCustomSelect(int a1);
void _gdCustomUpdateSetting(int option, int value);
void gameDialogBarterButtonUpMouseUp(int btn, int a2);
int _gdialog_window_create();
void _gdialog_window_destroy();
int gameDialogWindowRenderBackground();
int _talkToRefreshDialogWindowRect(Rect* rect);
void gameDialogRenderHighlight(unsigned char* src, int srcWidth, int srcHeight, int srcPitch, unsigned char* dest, int x, int y, int destPitch, unsigned char* a9, unsigned char* a10);
void gameDialogRenderTalkingHead(Art* art, int frame);
void gameDialogPrepareHighlights();
#endif /* GAME_DIALOG_H */ #endif /* GAME_DIALOG_H */