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 <string.h>
#define DIALOG_REVIEW_ENTRIES_CAPACITY 80
#define DIALOG_OPTION_ENTRIES_CAPACITY 30
#define GAME_DIALOG_WINDOW_WIDTH 640
#define GAME_DIALOG_WINDOW_HEIGHT 480
@ -50,103 +54,177 @@
#define GAME_DIALOG_REVIEW_WINDOW_WIDTH 640
#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
int _Dogs[3] = {
static int _Dogs[3] = {
0x1000088,
0x1000156,
0x1000180,
};
// 0x5186D4
int _dialog_state_fix = 0;
static int _dialog_state_fix = 0;
// 0x5186D8
int gGameDialogOptionEntriesLength = 0;
static int gGameDialogOptionEntriesLength = 0;
// 0x5186DC
int gGameDialogReviewEntriesLength = 0;
static int gGameDialogReviewEntriesLength = 0;
// 0x5186E0
unsigned char* gGameDialogDisplayBuffer = NULL;
static unsigned char* gGameDialogDisplayBuffer = NULL;
// 0x5186E4
int gGameDialogReplyWindow = -1;
static int gGameDialogReplyWindow = -1;
// 0x5186E8
int gGameDialogOptionsWindow = -1;
static int gGameDialogOptionsWindow = -1;
// 0x5186EC
bool _gdialog_window_created = false;
static bool _gdialog_window_created = false;
// 0x5186F0
int _boxesWereDisabled = 0;
static int _boxesWereDisabled = 0;
// 0x5186F4
int gGameDialogFidgetFid = 0;
static int gGameDialogFidgetFid = 0;
// 0x5186F8
CacheEntry* gGameDialogFidgetFrmHandle = NULL;
static CacheEntry* gGameDialogFidgetFrmHandle = NULL;
// 0x5186FC
Art* gGameDialogFidgetFrm = NULL;
static Art* gGameDialogFidgetFrm = NULL;
// 0x518700
int gGameDialogBackground = 2;
static int gGameDialogBackground = 2;
// 0x518704
int _lipsFID = 0;
static int _lipsFID = 0;
// 0x518708
CacheEntry* _lipsKey = NULL;
static CacheEntry* _lipsKey = NULL;
// 0x51870C
Art* _lipsFp = NULL;
static Art* _lipsFp = NULL;
// 0x518710
bool gGameDialogLipSyncStarted = false;
static bool gGameDialogLipSyncStarted = false;
// 0x518714
int _dialogue_state = 0;
static int _dialogue_state = 0;
// 0x518718
int _dialogue_switch_mode = 0;
static int _dialogue_switch_mode = 0;
// 0x51871C
int _gdialog_state = -1;
static int _gdialog_state = -1;
// 0x518720
bool _gdDialogWentOff = false;
static bool _gdDialogWentOff = false;
// 0x518724
bool _gdDialogTurnMouseOff = false;
static bool _gdDialogTurnMouseOff = false;
// 0x518728
int _gdReenterLevel = 0;
static int _gdReenterLevel = 0;
// 0x51872C
bool _gdReplyTooBig = false;
static bool _gdReplyTooBig = false;
// 0x518730
Object* _peon_table_obj = NULL;
static Object* _peon_table_obj = NULL;
// 0x518734
Object* _barterer_table_obj = NULL;
static Object* _barterer_table_obj = NULL;
// 0x518738
Object* _barterer_temp_obj = NULL;
static Object* _barterer_temp_obj = NULL;
// 0x51873C
int gGameDialogBarterModifier = 0;
static int gGameDialogBarterModifier = 0;
// dialogueBackWindow
// 0x518740
int gGameDialogBackgroundWindow = -1;
static int gGameDialogBackgroundWindow = -1;
// 0x518744
int gGameDialogWindow = -1;
static int gGameDialogWindow = -1;
// 0x518748
Rect _backgrndRects[8] = {
static Rect _backgrndRects[8] = {
{ 126, 14, 152, 40 },
{ 488, 14, 514, 40 },
{ 126, 188, 152, 214 },
@ -158,40 +236,40 @@ Rect _backgrndRects[8] = {
};
// 0x5187C8
int _talk_need_to_center = 1;
static int _talk_need_to_center = 1;
// 0x5187CC
bool _can_start_new_fidget = false;
static bool _can_start_new_fidget = false;
// 0x5187D0
int _gd_replyWin = -1;
static int _gd_replyWin = -1;
// 0x5187D4
int _gd_optionsWin = -1;
static int _gd_optionsWin = -1;
// 0x5187D8
int gGameDialogOldMusicVolume = -1;
static int gGameDialogOldMusicVolume = -1;
// 0x5187DC
int gGameDialogOldCenterTile = -1;
static int gGameDialogOldCenterTile = -1;
// 0x5187E0
int gGameDialogOldDudeTile = -1;
static int gGameDialogOldDudeTile = -1;
// 0x5187E4
unsigned char* _light_BlendTable = NULL;
static unsigned char* _light_BlendTable = NULL;
// 0x5187E8
unsigned char* _dark_BlendTable = NULL;
static unsigned char* _dark_BlendTable = NULL;
// 0x5187EC
int _dialogue_just_started = 0;
static int _dialogue_just_started = 0;
// 0x5187F0
int _dialogue_seconds_since_last_input = 0;
static int _dialogue_seconds_since_last_input = 0;
// 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,
@ -201,30 +279,30 @@ CacheEntry* gGameDialogReviewWindowButtonFrmHandles[GAME_DIALOG_REVIEW_WINDOW_BU
};
// 0x51880C
CacheEntry* _reviewBackKey = INVALID_CACHE_ENTRY;
static CacheEntry* _reviewBackKey = INVALID_CACHE_ENTRY;
// 0x518810
CacheEntry* gGameDialogReviewWindowBackgroundFrmHandle = INVALID_CACHE_ENTRY;
static CacheEntry* gGameDialogReviewWindowBackgroundFrmHandle = INVALID_CACHE_ENTRY;
// 0x518814
unsigned char* gGameDialogReviewWindowBackgroundFrmData = NULL;
static unsigned char* gGameDialogReviewWindowBackgroundFrmData = NULL;
// 0x518818
const int gGameDialogReviewWindowButtonWidths[GAME_DIALOG_REVIEW_WINDOW_BUTTON_COUNT] = {
static const int gGameDialogReviewWindowButtonWidths[GAME_DIALOG_REVIEW_WINDOW_BUTTON_COUNT] = {
35,
35,
82,
};
// 0x518824
const int gGameDialogReviewWindowButtonHeights[GAME_DIALOG_REVIEW_WINDOW_BUTTON_COUNT] = {
static const int gGameDialogReviewWindowButtonHeights[GAME_DIALOG_REVIEW_WINDOW_BUTTON_COUNT] = {
35,
37,
46,
};
// 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
90, // di_bgdn2.frm - dialog big down arrow
87, // di_bgup1.frm - dialog big up arrow
@ -248,7 +326,7 @@ int gGameDialogSid = -1;
// Maps phoneme to talking head frame.
//
// 0x518858
int _head_phoneme_lookup[PHONEME_COUNT] = {
static int _head_phoneme_lookup[PHONEME_COUNT] = {
0,
3,
1,
@ -294,26 +372,26 @@ int _head_phoneme_lookup[PHONEME_COUNT] = {
};
// 0x518900
int _phone_anim = 0;
static int _phone_anim = 0;
// 0x518904
int _loop_cnt = -1;
static int _loop_cnt = -1;
// 0x518908
unsigned int _tocksWaiting = 10000;
static unsigned int _tocksWaiting = 10000;
// 0x51890C
const char* _react_strs[3] = {
static const char* _react_strs[3] = {
"Said Good",
"Said Neutral",
"Said Bad",
};
// 0x518918
int _dialogue_subwin_len = 0;
static int _dialogue_subwin_len = 0;
// 0x51891C
GameDialogButtonData gGameDialogDispositionButtonsData[5] = {
static GameDialogButtonData gGameDialogDispositionButtonsData[5] = {
{ 438, 37, 397, 395, 396, NULL, NULL, NULL, 2098, 4 },
{ 438, 67, 394, 392, 393, NULL, NULL, NULL, 2103, 3 },
{ 438, 96, 406, 404, 405, NULL, NULL, NULL, 2102, 2 },
@ -322,7 +400,7 @@ GameDialogButtonData gGameDialogDispositionButtonsData[5] = {
};
// 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!
{ 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
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 },
{ 96, 38, 416, 415, -1, NULL, NULL, NULL, 1, 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
int _totalHotx = 0;
static int _totalHotx = 0;
// 0x58EA80
int _custom_current_selected[PARTY_MEMBER_CUSTOMIZATION_OPTION_COUNT];
static int _custom_current_selected[PARTY_MEMBER_CUSTOMIZATION_OPTION_COUNT];
// custom.msg
//
// 0x58EA98
MessageList gCustomMessageList;
static MessageList gCustomMessageList;
// 0x58EAA0
unsigned char _light_GrayTable[256];
static unsigned char _light_GrayTable[256];
// 0x58EBA0
unsigned char _dark_GrayTable[256];
static unsigned char _dark_GrayTable[256];
// 0x58ECA0
unsigned char* _backgrndBufs[8];
static unsigned char* _backgrndBufs[8];
// 0x58ECC0
Rect _optionRect;
static Rect _optionRect;
// 0x58ECD0
Rect _replyRect;
static Rect _replyRect;
// 0x58ECE0
GameDialogReviewEntry gDialogReviewEntries[DIALOG_REVIEW_ENTRIES_CAPACITY];
static GameDialogReviewEntry gDialogReviewEntries[DIALOG_REVIEW_ENTRIES_CAPACITY];
// 0x58F460
int _custom_buttons_start;
static int _custom_buttons_start;
// 0x58F464
int _control_buttons_start;
static int _control_buttons_start;
// 0x58F468
int gGameDialogReviewWindowOldFont;
static int gGameDialogReviewWindowOldFont;
// 0x58F46C
CacheEntry* gGameDialogRedButtonUpFrmHandle;
static CacheEntry* gGameDialogRedButtonUpFrmHandle;
// 0x58F470
int _gdialog_buttons[9];
static int _gdialog_buttons[9];
// 0x58F494
CacheEntry* gGameDialogUpperHighlightFrmHandle;
static CacheEntry* gGameDialogUpperHighlightFrmHandle;
// 0x58F498
CacheEntry* gGameDialogReviewButtonUpFrmHandle;
static CacheEntry* gGameDialogReviewButtonUpFrmHandle;
// 0x58F49C
int gGameDialogLowerHighlightFrmHeight;
static int gGameDialogLowerHighlightFrmHeight;
// 0x58F4A0
CacheEntry* gGameDialogReviewButtonDownFrmHandle;
static CacheEntry* gGameDialogReviewButtonDownFrmHandle;
// 0x58F4A4
unsigned char* gGameDialogRedButtonDownFrmData;
static unsigned char* gGameDialogRedButtonDownFrmData;
// 0x58F4A8
int gGameDialogLowerHighlightFrmWidth;
static int gGameDialogLowerHighlightFrmWidth;
// 0x58F4AC
unsigned char* gGameDialogRedButtonUpFrmData;
static unsigned char* gGameDialogRedButtonUpFrmData;
// 0x58F4B0
int gGameDialogUpperHighlightFrmWidth;
static int gGameDialogUpperHighlightFrmWidth;
// Yellow highlight blick effect.
//
// 0x58F4B4
Art* gGameDialogLowerHighlightFrm;
static Art* gGameDialogLowerHighlightFrm;
// 0x58F4B8
int gGameDialogUpperHighlightFrmHeight;
static int gGameDialogUpperHighlightFrmHeight;
// 0x58F4BC
CacheEntry* gGameDialogRedButtonDownFrmHandle;
static CacheEntry* gGameDialogRedButtonDownFrmHandle;
// 0x58F4C0
CacheEntry* gGameDialogLowerHighlightFrmHandle;
static CacheEntry* gGameDialogLowerHighlightFrmHandle;
// White highlight blick effect.
//
@ -471,28 +549,28 @@ CacheEntry* gGameDialogLowerHighlightFrmHandle;
// [gDialogLowerHighlight] it gives an effect of depth of the monitor.
//
// 0x58F4C4
Art* gGameDialogUpperHighlightFrm;
static Art* gGameDialogUpperHighlightFrm;
// 0x58F4C8
int _oldFont;
static int _oldFont;
// 0x58F4CC
unsigned int gGameDialogFidgetLastUpdateTimestamp;
static unsigned int gGameDialogFidgetLastUpdateTimestamp;
// 0x58F4D0
int gGameDialogFidgetReaction;
static int gGameDialogFidgetReaction;
// 0x58F4D4
Program* gDialogReplyProgram;
static Program* gDialogReplyProgram;
// 0x58F4D8
int gDialogReplyMessageListId;
static int gDialogReplyMessageListId;
// 0x58F4DC
int gDialogReplyMessageId;
static int gDialogReplyMessageId;
// 0x58F4E0
int dword_58F4E0;
static int dword_58F4E0;
// 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
@ -506,19 +584,84 @@ int dword_58F4E0;
// important role.
//
// 0x58F4E4
char gDialogReplyText[900];
static char gDialogReplyText[900];
// 0x58FF70
GameDialogOptionEntry gDialogOptionEntries[DIALOG_OPTION_ENTRIES_CAPACITY];
static GameDialogOptionEntry gDialogOptionEntries[DIALOG_OPTION_ENTRIES_CAPACITY];
// 0x596C30
int _talkOldFont;
static int _talkOldFont;
// 0x596C34
unsigned int gGameDialogFidgetUpdateDelay;
static unsigned int gGameDialogFidgetUpdateDelay;
// 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
// 0x444D1C

View File

@ -1,204 +1,21 @@
#ifndef GAME_DIALOG_H
#define GAME_DIALOG_H
#include "art.h"
#include "geometry.h"
#include "interpreter.h"
#include "lips.h"
#include "message.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 bool gGameDialogSpeakerIsPartyMember;
extern int gGameDialogHeadFid;
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 _gdialogReset();
int gameDialogReset();
int gameDialogExit();
bool _gdialogActive();
void gameDialogEnter(Object* a1, int a2);
void _gdialogSystemEnter();
void gameDialogStartLips(const char* a1);
void gameDialogEndLips();
int gameDialogEnable();
int gameDialogDisable();
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 _gdialogGo();
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 _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);
int gameDialogBarter(int modifier);
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 */