parent
ce0f7f8091
commit
b3f6721ee1
|
@ -1,5 +1,6 @@
|
||||||
#include "endgame.h"
|
#include "endgame.h"
|
||||||
|
|
||||||
|
#include "art.h"
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "core.h"
|
#include "core.h"
|
||||||
#include "credits.h"
|
#include "credits.h"
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "actions.h"
|
#include "actions.h"
|
||||||
#include "animation.h"
|
#include "animation.h"
|
||||||
|
#include "art.h"
|
||||||
#include "automap.h"
|
#include "automap.h"
|
||||||
#include "character_editor.h"
|
#include "character_editor.h"
|
||||||
#include "character_selector.h"
|
#include "character_selector.h"
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "map.h"
|
#include "map.h"
|
||||||
|
|
||||||
#include "animation.h"
|
#include "animation.h"
|
||||||
|
#include "art.h"
|
||||||
#include "automap.h"
|
#include "automap.h"
|
||||||
#include "character_editor.h"
|
#include "character_editor.h"
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
|
|
252
src/pipboy.cc
252
src/pipboy.cc
|
@ -1,5 +1,6 @@
|
||||||
#include "pipboy.h"
|
#include "pipboy.h"
|
||||||
|
|
||||||
|
#include "art.h"
|
||||||
#include "automap.h"
|
#include "automap.h"
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "combat.h"
|
#include "combat.h"
|
||||||
|
@ -15,9 +16,11 @@
|
||||||
#include "game_mouse.h"
|
#include "game_mouse.h"
|
||||||
#include "game_movie.h"
|
#include "game_movie.h"
|
||||||
#include "game_sound.h"
|
#include "game_sound.h"
|
||||||
|
#include "geometry.h"
|
||||||
#include "interface.h"
|
#include "interface.h"
|
||||||
#include "map.h"
|
#include "map.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
|
#include "message.h"
|
||||||
#include "object.h"
|
#include "object.h"
|
||||||
#include "party_member.h"
|
#include "party_member.h"
|
||||||
#include "platform_compat.h"
|
#include "platform_compat.h"
|
||||||
|
@ -34,6 +37,189 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#define PIPBOY_WINDOW_WIDTH (640)
|
||||||
|
#define PIPBOY_WINDOW_HEIGHT (480)
|
||||||
|
|
||||||
|
#define PIPBOY_WINDOW_DAY_X (20)
|
||||||
|
#define PIPBOY_WINDOW_DAY_Y (17)
|
||||||
|
|
||||||
|
#define PIPBOY_WINDOW_MONTH_X (46)
|
||||||
|
#define PIPBOY_WINDOW_MONTH_Y (18)
|
||||||
|
|
||||||
|
#define PIPBOY_WINDOW_YEAR_X (83)
|
||||||
|
#define PIPBOY_WINDOW_YEAR_Y (17)
|
||||||
|
|
||||||
|
#define PIPBOY_WINDOW_TIME_X (155)
|
||||||
|
#define PIPBOY_WINDOW_TIME_Y (17)
|
||||||
|
|
||||||
|
#define PIPBOY_HOLODISK_LINES_MAX (35)
|
||||||
|
|
||||||
|
#define PIPBOY_WINDOW_CONTENT_VIEW_X (254)
|
||||||
|
#define PIPBOY_WINDOW_CONTENT_VIEW_Y (46)
|
||||||
|
#define PIPBOY_WINDOW_CONTENT_VIEW_WIDTH (374)
|
||||||
|
#define PIPBOY_WINDOW_CONTENT_VIEW_HEIGHT (410)
|
||||||
|
|
||||||
|
#define PIPBOY_IDLE_TIMEOUT (120000)
|
||||||
|
|
||||||
|
#define PIPBOY_BOMB_COUNT (16)
|
||||||
|
|
||||||
|
typedef enum Holiday {
|
||||||
|
HOLIDAY_NEW_YEAR,
|
||||||
|
HOLIDAY_VALENTINES_DAY,
|
||||||
|
HOLIDAY_FOOLS_DAY,
|
||||||
|
HOLIDAY_SHIPPING_DAY,
|
||||||
|
HOLIDAY_INDEPENDENCE_DAY,
|
||||||
|
HOLIDAY_HALLOWEEN,
|
||||||
|
HOLIDAY_THANKSGIVING_DAY,
|
||||||
|
HOLIDAY_CRISTMAS,
|
||||||
|
HOLIDAY_COUNT,
|
||||||
|
} Holiday;
|
||||||
|
|
||||||
|
// Options used to render Pipboy texts.
|
||||||
|
typedef enum PipboyTextOptions {
|
||||||
|
// Specifies that text should be rendered in the center of the Pipboy
|
||||||
|
// monitor.
|
||||||
|
//
|
||||||
|
// This option is mutually exclusive with other alignment options.
|
||||||
|
PIPBOY_TEXT_ALIGNMENT_CENTER = 0x02,
|
||||||
|
|
||||||
|
// Specifies that text should be rendered in the beginning of the right
|
||||||
|
// column in two-column layout.
|
||||||
|
//
|
||||||
|
// This option is mutually exclusive with other alignment options.
|
||||||
|
PIPBOY_TEXT_ALIGNMENT_RIGHT_COLUMN = 0x04,
|
||||||
|
|
||||||
|
// Specifies that text should be rendered in the center of the left column.
|
||||||
|
//
|
||||||
|
// This option is mutually exclusive with other alignment options.
|
||||||
|
PIPBOY_TEXT_ALIGNMENT_LEFT_COLUMN_CENTER = 0x10,
|
||||||
|
|
||||||
|
// Specifies that text should be rendered in the center of the right
|
||||||
|
// column.
|
||||||
|
//
|
||||||
|
// This option is mutually exclusive with other alignment options.
|
||||||
|
PIPBOY_TEXT_ALIGNMENT_RIGHT_COLUMN_CENTER = 0x20,
|
||||||
|
|
||||||
|
// Specifies that text should rendered with underline.
|
||||||
|
PIPBOY_TEXT_STYLE_UNDERLINE = 0x08,
|
||||||
|
|
||||||
|
// Specifies that text should rendered with strike-through line.
|
||||||
|
PIPBOY_TEXT_STYLE_STRIKE_THROUGH = 0x40,
|
||||||
|
|
||||||
|
// Specifies that text should be rendered with no (minimal) indentation.
|
||||||
|
PIPBOY_TEXT_NO_INDENT = 0x80,
|
||||||
|
} PipboyTextOptions;
|
||||||
|
|
||||||
|
typedef enum PipboyRestDuration {
|
||||||
|
PIPBOY_REST_DURATION_TEN_MINUTES,
|
||||||
|
PIPBOY_REST_DURATION_THIRTY_MINUTES,
|
||||||
|
PIPBOY_REST_DURATION_ONE_HOUR,
|
||||||
|
PIPBOY_REST_DURATION_TWO_HOURS,
|
||||||
|
PIPBOY_REST_DURATION_THREE_HOURS,
|
||||||
|
PIPBOY_REST_DURATION_FOUR_HOURS,
|
||||||
|
PIPBOY_REST_DURATION_FIVE_HOURS,
|
||||||
|
PIPBOY_REST_DURATION_SIX_HOURS,
|
||||||
|
PIPBOY_REST_DURATION_UNTIL_MORNING,
|
||||||
|
PIPBOY_REST_DURATION_UNTIL_NOON,
|
||||||
|
PIPBOY_REST_DURATION_UNTIL_EVENING,
|
||||||
|
PIPBOY_REST_DURATION_UNTIL_MIDNIGHT,
|
||||||
|
PIPBOY_REST_DURATION_UNTIL_HEALED,
|
||||||
|
PIPBOY_REST_DURATION_UNTIL_PARTY_HEALED,
|
||||||
|
PIPBOY_REST_DURATION_COUNT,
|
||||||
|
PIPBOY_REST_DURATION_COUNT_WITHOUT_PARTY = PIPBOY_REST_DURATION_COUNT - 1,
|
||||||
|
} PipboyRestDuration;
|
||||||
|
|
||||||
|
typedef enum PipboyFrm {
|
||||||
|
PIPBOY_FRM_LITTLE_RED_BUTTON_UP,
|
||||||
|
PIPBOY_FRM_LITTLE_RED_BUTTON_DOWN,
|
||||||
|
PIPBOY_FRM_NUMBERS,
|
||||||
|
PIPBOY_FRM_BACKGROUND,
|
||||||
|
PIPBOY_FRM_NOTE,
|
||||||
|
PIPBOY_FRM_MONTHS,
|
||||||
|
PIPBOY_FRM_NOTE_NUMBERS,
|
||||||
|
PIPBOY_FRM_ALARM_DOWN,
|
||||||
|
PIPBOY_FRM_ALARM_UP,
|
||||||
|
PIPBOY_FRM_LOGO,
|
||||||
|
PIPBOY_FRM_BOMB,
|
||||||
|
PIPBOY_FRM_COUNT,
|
||||||
|
} PipboyFrm;
|
||||||
|
|
||||||
|
// Provides metadata information on quests.
|
||||||
|
//
|
||||||
|
// Loaded from `data/quest.txt`.
|
||||||
|
typedef struct QuestDescription {
|
||||||
|
int location;
|
||||||
|
int description;
|
||||||
|
int gvar;
|
||||||
|
int displayThreshold;
|
||||||
|
int completedThreshold;
|
||||||
|
} QuestDescription;
|
||||||
|
|
||||||
|
// Provides metadata information on holodisks.
|
||||||
|
//
|
||||||
|
// Loaded from `data/holodisk.txt`.
|
||||||
|
typedef struct HolodiskDescription {
|
||||||
|
int gvar;
|
||||||
|
int name;
|
||||||
|
int description;
|
||||||
|
} HolodiskDescription;
|
||||||
|
|
||||||
|
typedef struct HolidayDescription {
|
||||||
|
short month;
|
||||||
|
short day;
|
||||||
|
short textId;
|
||||||
|
} HolidayDescription;
|
||||||
|
|
||||||
|
typedef struct STRUCT_664350 {
|
||||||
|
char* name;
|
||||||
|
short field_4;
|
||||||
|
short field_6;
|
||||||
|
} STRUCT_664350;
|
||||||
|
|
||||||
|
typedef struct PipboyBomb {
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
float field_8;
|
||||||
|
float field_C;
|
||||||
|
unsigned char field_10;
|
||||||
|
} PipboyBomb;
|
||||||
|
|
||||||
|
typedef void PipboyRenderProc(int a1);
|
||||||
|
|
||||||
|
static int pipboyWindowInit(bool forceRest);
|
||||||
|
static void pipboyWindowFree();
|
||||||
|
static void _pip_init_();
|
||||||
|
static void pipboyDrawNumber(int value, int digits, int x, int y);
|
||||||
|
static void pipboyDrawDate();
|
||||||
|
static void pipboyDrawText(const char* text, int a2, int a3);
|
||||||
|
static void pipboyDrawBackButton(int a1);
|
||||||
|
static int _save_pipboy(File* stream);
|
||||||
|
static void pipboyWindowHandleStatus(int a1);
|
||||||
|
static void pipboyWindowRenderQuestLocationList(int a1);
|
||||||
|
static void pipboyRenderHolodiskText();
|
||||||
|
static int pipboyWindowRenderHolodiskList(int a1);
|
||||||
|
static int _qscmp(const void* a1, const void* a2);
|
||||||
|
static void pipboyWindowHandleAutomaps(int a1);
|
||||||
|
static int _PrintAMelevList(int a1);
|
||||||
|
static int _PrintAMList(int a1);
|
||||||
|
static void pipboyHandleVideoArchive(int a1);
|
||||||
|
static int pipboyRenderVideoArchive(int a1);
|
||||||
|
static void pipboyHandleAlarmClock(int a1);
|
||||||
|
static void pipboyWindowRenderRestOptions(int a1);
|
||||||
|
static void pipboyDrawHitPoints();
|
||||||
|
static void pipboyWindowCreateButtons(int a1, int a2, bool a3);
|
||||||
|
static void pipboyWindowDestroyButtons();
|
||||||
|
static bool pipboyRest(int hours, int minutes, int kind);
|
||||||
|
static bool _Check4Health(int a1);
|
||||||
|
static bool _AddHealth();
|
||||||
|
static void _ClacTime(int* hours, int* minutes, int wakeUpHour);
|
||||||
|
static int pipboyRenderScreensaver();
|
||||||
|
static int questInit();
|
||||||
|
static void questFree();
|
||||||
|
static int questDescriptionCompare(const void* a1, const void* a2);
|
||||||
|
static int holodiskInit();
|
||||||
|
static void holodiskFree();
|
||||||
|
|
||||||
// 0x496FC0
|
// 0x496FC0
|
||||||
const Rect gPipboyWindowContentRect = {
|
const Rect gPipboyWindowContentRect = {
|
||||||
PIPBOY_WINDOW_CONTENT_VIEW_X,
|
PIPBOY_WINDOW_CONTENT_VIEW_X,
|
||||||
|
@ -283,7 +469,7 @@ int pipboyOpen(bool forceRest)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x497228
|
// 0x497228
|
||||||
int pipboyWindowInit(bool forceRest)
|
static int pipboyWindowInit(bool forceRest)
|
||||||
{
|
{
|
||||||
gPipboyWindowIsoWasEnabled = isoDisable();
|
gPipboyWindowIsoWasEnabled = isoDisable();
|
||||||
|
|
||||||
|
@ -498,7 +684,7 @@ int pipboyWindowInit(bool forceRest)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x497828
|
// 0x497828
|
||||||
void pipboyWindowFree()
|
static void pipboyWindowFree()
|
||||||
{
|
{
|
||||||
bool showScriptMessages = false;
|
bool showScriptMessages = false;
|
||||||
configGetBool(&gGameConfig, GAME_CONFIG_DEBUG_KEY, GAME_CONFIG_SHOW_SCRIPT_MESSAGES_KEY, &showScriptMessages);
|
configGetBool(&gGameConfig, GAME_CONFIG_DEBUG_KEY, GAME_CONFIG_SHOW_SCRIPT_MESSAGES_KEY, &showScriptMessages);
|
||||||
|
@ -540,7 +726,7 @@ void pipboyWindowFree()
|
||||||
// NOTE: Collapsed.
|
// NOTE: Collapsed.
|
||||||
//
|
//
|
||||||
// 0x497918
|
// 0x497918
|
||||||
void _pip_init_()
|
static void _pip_init_()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -559,7 +745,7 @@ void pipboyReset()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x49791C
|
// 0x49791C
|
||||||
void pipboyDrawNumber(int value, int digits, int x, int y)
|
static void pipboyDrawNumber(int value, int digits, int x, int y)
|
||||||
{
|
{
|
||||||
int offset = PIPBOY_WINDOW_WIDTH * y + x + 9 * (digits - 1);
|
int offset = PIPBOY_WINDOW_WIDTH * y + x + 9 * (digits - 1);
|
||||||
|
|
||||||
|
@ -571,7 +757,7 @@ void pipboyDrawNumber(int value, int digits, int x, int y)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x4979B4
|
// 0x4979B4
|
||||||
void pipboyDrawDate()
|
static void pipboyDrawDate()
|
||||||
{
|
{
|
||||||
int day;
|
int day;
|
||||||
int month;
|
int month;
|
||||||
|
@ -586,7 +772,7 @@ void pipboyDrawDate()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x497A40
|
// 0x497A40
|
||||||
void pipboyDrawText(const char* text, int flags, int color)
|
static void pipboyDrawText(const char* text, int flags, int color)
|
||||||
{
|
{
|
||||||
if ((flags & PIPBOY_TEXT_STYLE_UNDERLINE) != 0) {
|
if ((flags & PIPBOY_TEXT_STYLE_UNDERLINE) != 0) {
|
||||||
color |= FONT_UNDERLINE;
|
color |= FONT_UNDERLINE;
|
||||||
|
@ -622,7 +808,7 @@ void pipboyDrawText(const char* text, int flags, int color)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x497B64
|
// 0x497B64
|
||||||
void pipboyDrawBackButton(int color)
|
static void pipboyDrawBackButton(int color)
|
||||||
{
|
{
|
||||||
if (gPipboyLinesCount >= 0) {
|
if (gPipboyLinesCount >= 0) {
|
||||||
gPipboyCurrentLine = gPipboyLinesCount;
|
gPipboyCurrentLine = gPipboyLinesCount;
|
||||||
|
@ -638,7 +824,7 @@ void pipboyDrawBackButton(int color)
|
||||||
// NOTE: Collapsed.
|
// NOTE: Collapsed.
|
||||||
//
|
//
|
||||||
// 0x497BD4
|
// 0x497BD4
|
||||||
int _save_pipboy(File* stream)
|
static int _save_pipboy(File* stream)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -656,7 +842,7 @@ int pipboyLoad(File* stream)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x497BD8
|
// 0x497BD8
|
||||||
void pipboyWindowHandleStatus(int a1)
|
static void pipboyWindowHandleStatus(int a1)
|
||||||
{
|
{
|
||||||
if (a1 == 1024) {
|
if (a1 == 1024) {
|
||||||
pipboyWindowDestroyButtons();
|
pipboyWindowDestroyButtons();
|
||||||
|
@ -996,7 +1182,7 @@ void pipboyWindowHandleStatus(int a1)
|
||||||
// [a1] is likely selected location, or -1 if nothing is selected
|
// [a1] is likely selected location, or -1 if nothing is selected
|
||||||
//
|
//
|
||||||
// 0x498734
|
// 0x498734
|
||||||
void pipboyWindowRenderQuestLocationList(int a1)
|
static void pipboyWindowRenderQuestLocationList(int a1)
|
||||||
{
|
{
|
||||||
if (gPipboyLinesCount >= 0) {
|
if (gPipboyLinesCount >= 0) {
|
||||||
gPipboyCurrentLine = 0;
|
gPipboyCurrentLine = 0;
|
||||||
|
@ -1046,7 +1232,7 @@ void pipboyWindowRenderQuestLocationList(int a1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x4988A0
|
// 0x4988A0
|
||||||
void pipboyRenderHolodiskText()
|
static void pipboyRenderHolodiskText()
|
||||||
{
|
{
|
||||||
blitBufferToBuffer(gPipboyFrmData[PIPBOY_FRM_BACKGROUND] + PIPBOY_WINDOW_WIDTH * PIPBOY_WINDOW_CONTENT_VIEW_Y + PIPBOY_WINDOW_CONTENT_VIEW_X,
|
blitBufferToBuffer(gPipboyFrmData[PIPBOY_FRM_BACKGROUND] + PIPBOY_WINDOW_WIDTH * PIPBOY_WINDOW_CONTENT_VIEW_Y + PIPBOY_WINDOW_CONTENT_VIEW_X,
|
||||||
PIPBOY_WINDOW_CONTENT_VIEW_WIDTH,
|
PIPBOY_WINDOW_CONTENT_VIEW_WIDTH,
|
||||||
|
@ -1180,7 +1366,7 @@ void pipboyRenderHolodiskText()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x498C40
|
// 0x498C40
|
||||||
int pipboyWindowRenderHolodiskList(int a1)
|
static int pipboyWindowRenderHolodiskList(int a1)
|
||||||
{
|
{
|
||||||
if (gPipboyLinesCount >= 2) {
|
if (gPipboyLinesCount >= 2) {
|
||||||
gPipboyCurrentLine = 2;
|
gPipboyCurrentLine = 2;
|
||||||
|
@ -1218,7 +1404,7 @@ int pipboyWindowRenderHolodiskList(int a1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x498D34
|
// 0x498D34
|
||||||
int _qscmp(const void* a1, const void* a2)
|
static int _qscmp(const void* a1, const void* a2)
|
||||||
{
|
{
|
||||||
STRUCT_664350* v1 = (STRUCT_664350*)a1;
|
STRUCT_664350* v1 = (STRUCT_664350*)a1;
|
||||||
STRUCT_664350* v2 = (STRUCT_664350*)a2;
|
STRUCT_664350* v2 = (STRUCT_664350*)a2;
|
||||||
|
@ -1227,7 +1413,7 @@ int _qscmp(const void* a1, const void* a2)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x498D40
|
// 0x498D40
|
||||||
void pipboyWindowHandleAutomaps(int a1)
|
static void pipboyWindowHandleAutomaps(int a1)
|
||||||
{
|
{
|
||||||
if (a1 == 1024) {
|
if (a1 == 1024) {
|
||||||
pipboyWindowDestroyButtons();
|
pipboyWindowDestroyButtons();
|
||||||
|
@ -1285,7 +1471,7 @@ void pipboyWindowHandleAutomaps(int a1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x498F30
|
// 0x498F30
|
||||||
int _PrintAMelevList(int a1)
|
static int _PrintAMelevList(int a1)
|
||||||
{
|
{
|
||||||
AutomapHeader* automapHeader;
|
AutomapHeader* automapHeader;
|
||||||
if (automapGetHeader(&automapHeader) == -1) {
|
if (automapGetHeader(&automapHeader) == -1) {
|
||||||
|
@ -1367,7 +1553,7 @@ int _PrintAMelevList(int a1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x499150
|
// 0x499150
|
||||||
int _PrintAMList(int a1)
|
static int _PrintAMList(int a1)
|
||||||
{
|
{
|
||||||
AutomapHeader* automapHeader;
|
AutomapHeader* automapHeader;
|
||||||
if (automapGetHeader(&automapHeader) == -1) {
|
if (automapGetHeader(&automapHeader) == -1) {
|
||||||
|
@ -1451,7 +1637,7 @@ int _PrintAMList(int a1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x49932C
|
// 0x49932C
|
||||||
void pipboyHandleVideoArchive(int a1)
|
static void pipboyHandleVideoArchive(int a1)
|
||||||
{
|
{
|
||||||
if (a1 == 1024) {
|
if (a1 == 1024) {
|
||||||
pipboyWindowDestroyButtons();
|
pipboyWindowDestroyButtons();
|
||||||
|
@ -1486,7 +1672,7 @@ void pipboyHandleVideoArchive(int a1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x4993DC
|
// 0x4993DC
|
||||||
int pipboyRenderVideoArchive(int a1)
|
static int pipboyRenderVideoArchive(int a1)
|
||||||
{
|
{
|
||||||
const char* text;
|
const char* text;
|
||||||
int i;
|
int i;
|
||||||
|
@ -1547,7 +1733,7 @@ int pipboyRenderVideoArchive(int a1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x499518
|
// 0x499518
|
||||||
void pipboyHandleAlarmClock(int a1)
|
static void pipboyHandleAlarmClock(int a1)
|
||||||
{
|
{
|
||||||
if (a1 == 1024) {
|
if (a1 == 1024) {
|
||||||
if (_critter_can_obj_dude_rest()) {
|
if (_critter_can_obj_dude_rest()) {
|
||||||
|
@ -1618,7 +1804,7 @@ void pipboyHandleAlarmClock(int a1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x4996B4
|
// 0x4996B4
|
||||||
void pipboyWindowRenderRestOptions(int a1)
|
static void pipboyWindowRenderRestOptions(int a1)
|
||||||
{
|
{
|
||||||
const char* text;
|
const char* text;
|
||||||
|
|
||||||
|
@ -1661,7 +1847,7 @@ void pipboyWindowRenderRestOptions(int a1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x4997B8
|
// 0x4997B8
|
||||||
void pipboyDrawHitPoints()
|
static void pipboyDrawHitPoints()
|
||||||
{
|
{
|
||||||
int max_hp;
|
int max_hp;
|
||||||
int cur_hp;
|
int cur_hp;
|
||||||
|
@ -1685,7 +1871,7 @@ void pipboyDrawHitPoints()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x4998C0
|
// 0x4998C0
|
||||||
void pipboyWindowCreateButtons(int start, int count, bool a3)
|
static void pipboyWindowCreateButtons(int start, int count, bool a3)
|
||||||
{
|
{
|
||||||
fontSetCurrent(101);
|
fontSetCurrent(101);
|
||||||
|
|
||||||
|
@ -1714,7 +1900,7 @@ void pipboyWindowCreateButtons(int start, int count, bool a3)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x4999C0
|
// 0x4999C0
|
||||||
void pipboyWindowDestroyButtons()
|
static void pipboyWindowDestroyButtons()
|
||||||
{
|
{
|
||||||
if (gPipboyWindowButtonCount != 0) {
|
if (gPipboyWindowButtonCount != 0) {
|
||||||
// NOTE: There is a buffer overread bug. In original binary it leads to
|
// NOTE: There is a buffer overread bug. In original binary it leads to
|
||||||
|
@ -1743,7 +1929,7 @@ void pipboyWindowDestroyButtons()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x499A24
|
// 0x499A24
|
||||||
bool pipboyRest(int hours, int minutes, int duration)
|
static bool pipboyRest(int hours, int minutes, int duration)
|
||||||
{
|
{
|
||||||
gameMouseSetCursor(MOUSE_CURSOR_WAIT_WATCH);
|
gameMouseSetCursor(MOUSE_CURSOR_WAIT_WATCH);
|
||||||
|
|
||||||
|
@ -1946,7 +2132,7 @@ bool pipboyRest(int hours, int minutes, int duration)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x499FCC
|
// 0x499FCC
|
||||||
bool _Check4Health(int a1)
|
static bool _Check4Health(int a1)
|
||||||
{
|
{
|
||||||
_rest_time += a1;
|
_rest_time += a1;
|
||||||
|
|
||||||
|
@ -1961,7 +2147,7 @@ bool _Check4Health(int a1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: Inlined.
|
// NOTE: Inlined.
|
||||||
bool _AddHealth()
|
static bool _AddHealth()
|
||||||
{
|
{
|
||||||
_partyMemberRestingHeal(3);
|
_partyMemberRestingHeal(3);
|
||||||
|
|
||||||
|
@ -1971,7 +2157,7 @@ bool _AddHealth()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns [hours] and [minutes] needed to rest until [wakeUpHour].
|
// Returns [hours] and [minutes] needed to rest until [wakeUpHour].
|
||||||
void _ClacTime(int* hours, int* minutes, int wakeUpHour)
|
static void _ClacTime(int* hours, int* minutes, int wakeUpHour)
|
||||||
{
|
{
|
||||||
int gameTimeHour = gameTimeGetHour();
|
int gameTimeHour = gameTimeGetHour();
|
||||||
|
|
||||||
|
@ -2001,7 +2187,7 @@ void _ClacTime(int* hours, int* minutes, int wakeUpHour)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x49A0C8
|
// 0x49A0C8
|
||||||
int pipboyRenderScreensaver()
|
static int pipboyRenderScreensaver()
|
||||||
{
|
{
|
||||||
PipboyBomb bombs[PIPBOY_BOMB_COUNT];
|
PipboyBomb bombs[PIPBOY_BOMB_COUNT];
|
||||||
|
|
||||||
|
@ -2170,7 +2356,7 @@ int pipboyRenderScreensaver()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x49A5D4
|
// 0x49A5D4
|
||||||
int questInit()
|
static int questInit()
|
||||||
{
|
{
|
||||||
if (gQuestDescriptions != NULL) {
|
if (gQuestDescriptions != NULL) {
|
||||||
internal_free(gQuestDescriptions);
|
internal_free(gQuestDescriptions);
|
||||||
|
@ -2269,7 +2455,7 @@ err:
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x49A7E4
|
// 0x49A7E4
|
||||||
void questFree()
|
static void questFree()
|
||||||
{
|
{
|
||||||
if (gQuestDescriptions != NULL) {
|
if (gQuestDescriptions != NULL) {
|
||||||
internal_free(gQuestDescriptions);
|
internal_free(gQuestDescriptions);
|
||||||
|
@ -2282,7 +2468,7 @@ void questFree()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x49A818
|
// 0x49A818
|
||||||
int questDescriptionCompare(const void* a1, const void* a2)
|
static int questDescriptionCompare(const void* a1, const void* a2)
|
||||||
{
|
{
|
||||||
QuestDescription* v1 = (QuestDescription*)a1;
|
QuestDescription* v1 = (QuestDescription*)a1;
|
||||||
QuestDescription* v2 = (QuestDescription*)a2;
|
QuestDescription* v2 = (QuestDescription*)a2;
|
||||||
|
@ -2290,7 +2476,7 @@ int questDescriptionCompare(const void* a1, const void* a2)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x49A824
|
// 0x49A824
|
||||||
int holodiskInit()
|
static int holodiskInit()
|
||||||
{
|
{
|
||||||
if (gHolodiskDescriptions != NULL) {
|
if (gHolodiskDescriptions != NULL) {
|
||||||
internal_free(gHolodiskDescriptions);
|
internal_free(gHolodiskDescriptions);
|
||||||
|
@ -2363,7 +2549,7 @@ err:
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x49A968
|
// 0x49A968
|
||||||
void holodiskFree()
|
static void holodiskFree()
|
||||||
{
|
{
|
||||||
if (gHolodiskDescriptions != NULL) {
|
if (gHolodiskDescriptions != NULL) {
|
||||||
internal_free(gHolodiskDescriptions);
|
internal_free(gHolodiskDescriptions);
|
||||||
|
|
233
src/pipboy.h
233
src/pipboy.h
|
@ -1,245 +1,12 @@
|
||||||
#ifndef PIPBOY_H
|
#ifndef PIPBOY_H
|
||||||
#define PIPBOY_H
|
#define PIPBOY_H
|
||||||
|
|
||||||
#include "art.h"
|
|
||||||
#include "db.h"
|
#include "db.h"
|
||||||
#include "geometry.h"
|
|
||||||
#include "message.h"
|
|
||||||
|
|
||||||
#define PIPBOY_WINDOW_WIDTH (640)
|
|
||||||
#define PIPBOY_WINDOW_HEIGHT (480)
|
|
||||||
|
|
||||||
#define PIPBOY_WINDOW_DAY_X (20)
|
|
||||||
#define PIPBOY_WINDOW_DAY_Y (17)
|
|
||||||
|
|
||||||
#define PIPBOY_WINDOW_MONTH_X (46)
|
|
||||||
#define PIPBOY_WINDOW_MONTH_Y (18)
|
|
||||||
|
|
||||||
#define PIPBOY_WINDOW_YEAR_X (83)
|
|
||||||
#define PIPBOY_WINDOW_YEAR_Y (17)
|
|
||||||
|
|
||||||
#define PIPBOY_WINDOW_TIME_X (155)
|
|
||||||
#define PIPBOY_WINDOW_TIME_Y (17)
|
|
||||||
|
|
||||||
#define PIPBOY_HOLODISK_LINES_MAX (35)
|
|
||||||
|
|
||||||
#define PIPBOY_WINDOW_CONTENT_VIEW_X (254)
|
|
||||||
#define PIPBOY_WINDOW_CONTENT_VIEW_Y (46)
|
|
||||||
#define PIPBOY_WINDOW_CONTENT_VIEW_WIDTH (374)
|
|
||||||
#define PIPBOY_WINDOW_CONTENT_VIEW_HEIGHT (410)
|
|
||||||
|
|
||||||
#define PIPBOY_IDLE_TIMEOUT (120000)
|
|
||||||
|
|
||||||
#define PIPBOY_BOMB_COUNT (16)
|
|
||||||
|
|
||||||
typedef enum Holiday {
|
|
||||||
HOLIDAY_NEW_YEAR,
|
|
||||||
HOLIDAY_VALENTINES_DAY,
|
|
||||||
HOLIDAY_FOOLS_DAY,
|
|
||||||
HOLIDAY_SHIPPING_DAY,
|
|
||||||
HOLIDAY_INDEPENDENCE_DAY,
|
|
||||||
HOLIDAY_HALLOWEEN,
|
|
||||||
HOLIDAY_THANKSGIVING_DAY,
|
|
||||||
HOLIDAY_CRISTMAS,
|
|
||||||
HOLIDAY_COUNT,
|
|
||||||
} Holiday;
|
|
||||||
|
|
||||||
// Options used to render Pipboy texts.
|
|
||||||
typedef enum PipboyTextOptions {
|
|
||||||
// Specifies that text should be rendered in the center of the Pipboy
|
|
||||||
// monitor.
|
|
||||||
//
|
|
||||||
// This option is mutually exclusive with other alignment options.
|
|
||||||
PIPBOY_TEXT_ALIGNMENT_CENTER = 0x02,
|
|
||||||
|
|
||||||
// Specifies that text should be rendered in the beginning of the right
|
|
||||||
// column in two-column layout.
|
|
||||||
//
|
|
||||||
// This option is mutually exclusive with other alignment options.
|
|
||||||
PIPBOY_TEXT_ALIGNMENT_RIGHT_COLUMN = 0x04,
|
|
||||||
|
|
||||||
// Specifies that text should be rendered in the center of the left column.
|
|
||||||
//
|
|
||||||
// This option is mutually exclusive with other alignment options.
|
|
||||||
PIPBOY_TEXT_ALIGNMENT_LEFT_COLUMN_CENTER = 0x10,
|
|
||||||
|
|
||||||
// Specifies that text should be rendered in the center of the right
|
|
||||||
// column.
|
|
||||||
//
|
|
||||||
// This option is mutually exclusive with other alignment options.
|
|
||||||
PIPBOY_TEXT_ALIGNMENT_RIGHT_COLUMN_CENTER = 0x20,
|
|
||||||
|
|
||||||
// Specifies that text should rendered with underline.
|
|
||||||
PIPBOY_TEXT_STYLE_UNDERLINE = 0x08,
|
|
||||||
|
|
||||||
// Specifies that text should rendered with strike-through line.
|
|
||||||
PIPBOY_TEXT_STYLE_STRIKE_THROUGH = 0x40,
|
|
||||||
|
|
||||||
// Specifies that text should be rendered with no (minimal) indentation.
|
|
||||||
PIPBOY_TEXT_NO_INDENT = 0x80,
|
|
||||||
} PipboyTextOptions;
|
|
||||||
|
|
||||||
typedef enum PipboyRestDuration {
|
|
||||||
PIPBOY_REST_DURATION_TEN_MINUTES,
|
|
||||||
PIPBOY_REST_DURATION_THIRTY_MINUTES,
|
|
||||||
PIPBOY_REST_DURATION_ONE_HOUR,
|
|
||||||
PIPBOY_REST_DURATION_TWO_HOURS,
|
|
||||||
PIPBOY_REST_DURATION_THREE_HOURS,
|
|
||||||
PIPBOY_REST_DURATION_FOUR_HOURS,
|
|
||||||
PIPBOY_REST_DURATION_FIVE_HOURS,
|
|
||||||
PIPBOY_REST_DURATION_SIX_HOURS,
|
|
||||||
PIPBOY_REST_DURATION_UNTIL_MORNING,
|
|
||||||
PIPBOY_REST_DURATION_UNTIL_NOON,
|
|
||||||
PIPBOY_REST_DURATION_UNTIL_EVENING,
|
|
||||||
PIPBOY_REST_DURATION_UNTIL_MIDNIGHT,
|
|
||||||
PIPBOY_REST_DURATION_UNTIL_HEALED,
|
|
||||||
PIPBOY_REST_DURATION_UNTIL_PARTY_HEALED,
|
|
||||||
PIPBOY_REST_DURATION_COUNT,
|
|
||||||
PIPBOY_REST_DURATION_COUNT_WITHOUT_PARTY = PIPBOY_REST_DURATION_COUNT - 1,
|
|
||||||
} PipboyRestDuration;
|
|
||||||
|
|
||||||
typedef enum PipboyFrm {
|
|
||||||
PIPBOY_FRM_LITTLE_RED_BUTTON_UP,
|
|
||||||
PIPBOY_FRM_LITTLE_RED_BUTTON_DOWN,
|
|
||||||
PIPBOY_FRM_NUMBERS,
|
|
||||||
PIPBOY_FRM_BACKGROUND,
|
|
||||||
PIPBOY_FRM_NOTE,
|
|
||||||
PIPBOY_FRM_MONTHS,
|
|
||||||
PIPBOY_FRM_NOTE_NUMBERS,
|
|
||||||
PIPBOY_FRM_ALARM_DOWN,
|
|
||||||
PIPBOY_FRM_ALARM_UP,
|
|
||||||
PIPBOY_FRM_LOGO,
|
|
||||||
PIPBOY_FRM_BOMB,
|
|
||||||
PIPBOY_FRM_COUNT,
|
|
||||||
} PipboyFrm;
|
|
||||||
|
|
||||||
// Provides metadata information on quests.
|
|
||||||
//
|
|
||||||
// Loaded from `data/quest.txt`.
|
|
||||||
typedef struct QuestDescription {
|
|
||||||
int location;
|
|
||||||
int description;
|
|
||||||
int gvar;
|
|
||||||
int displayThreshold;
|
|
||||||
int completedThreshold;
|
|
||||||
} QuestDescription;
|
|
||||||
|
|
||||||
// Provides metadata information on holodisks.
|
|
||||||
//
|
|
||||||
// Loaded from `data/holodisk.txt`.
|
|
||||||
typedef struct HolodiskDescription {
|
|
||||||
int gvar;
|
|
||||||
int name;
|
|
||||||
int description;
|
|
||||||
} HolodiskDescription;
|
|
||||||
|
|
||||||
typedef struct HolidayDescription {
|
|
||||||
short month;
|
|
||||||
short day;
|
|
||||||
short textId;
|
|
||||||
} HolidayDescription;
|
|
||||||
|
|
||||||
typedef struct STRUCT_664350 {
|
|
||||||
char* name;
|
|
||||||
short field_4;
|
|
||||||
short field_6;
|
|
||||||
} STRUCT_664350;
|
|
||||||
|
|
||||||
typedef struct PipboyBomb {
|
|
||||||
int x;
|
|
||||||
int y;
|
|
||||||
float field_8;
|
|
||||||
float field_C;
|
|
||||||
unsigned char field_10;
|
|
||||||
} PipboyBomb;
|
|
||||||
|
|
||||||
typedef void PipboyRenderProc(int a1);
|
|
||||||
|
|
||||||
extern const Rect gPipboyWindowContentRect;
|
|
||||||
extern const int gPipboyFrmIds[PIPBOY_FRM_COUNT];
|
|
||||||
|
|
||||||
extern QuestDescription* gQuestDescriptions;
|
|
||||||
extern int gQuestsCount;
|
|
||||||
extern HolodiskDescription* gHolodiskDescriptions;
|
|
||||||
extern int gHolodisksCount;
|
|
||||||
extern int gPipboyRestOptionsCount;
|
|
||||||
extern bool gPipboyWindowIsoWasEnabled;
|
|
||||||
extern const HolidayDescription gHolidayDescriptions[HOLIDAY_COUNT];
|
|
||||||
extern PipboyRenderProc* _PipFnctn[5];
|
|
||||||
|
|
||||||
extern Size gPipboyFrmSizes[PIPBOY_FRM_COUNT];
|
|
||||||
extern MessageListItem gPipboyMessageListItem;
|
|
||||||
extern MessageList gPipboyMessageList;
|
|
||||||
extern STRUCT_664350 _sortlist[24];
|
|
||||||
extern MessageList gQuestsMessageList;
|
|
||||||
extern int gPipboyQuestLocationsCount;
|
|
||||||
extern unsigned char* gPipboyWindowBuffer;
|
|
||||||
extern unsigned char* gPipboyFrmData[PIPBOY_FRM_COUNT];
|
|
||||||
extern int gPipboyWindowHolodisksCount;
|
|
||||||
extern int gPipboyMouseY;
|
|
||||||
extern int gPipboyMouseX;
|
|
||||||
extern unsigned int gPipboyLastEventTimestamp;
|
|
||||||
extern int gPipboyHolodiskLastPage;
|
|
||||||
extern int _HotLines[22];
|
|
||||||
extern int _button;
|
|
||||||
extern int gPipboyPreviousMouseX;
|
|
||||||
extern int gPipboyPreviousMouseY;
|
|
||||||
extern int gPipboyWindow;
|
|
||||||
extern CacheEntry* gPipboyFrmHandles[PIPBOY_FRM_COUNT];
|
|
||||||
extern int _holodisk;
|
|
||||||
extern int gPipboyWindowButtonCount;
|
|
||||||
extern int gPipboyWindowOldFont;
|
|
||||||
extern bool _proc_bail_flag;
|
|
||||||
extern int _amlst_mode;
|
|
||||||
extern int gPipboyTab;
|
|
||||||
extern int _actcnt;
|
|
||||||
extern int gPipboyWindowButtonStart;
|
|
||||||
extern int gPipboyCurrentLine;
|
|
||||||
extern int _rest_time;
|
|
||||||
extern int _amcty_indx;
|
|
||||||
extern int _view_page;
|
|
||||||
extern int gPipboyLinesCount;
|
|
||||||
extern unsigned char _hot_back_line;
|
|
||||||
extern unsigned char _holo_flag;
|
|
||||||
extern unsigned char _stat_flag;
|
|
||||||
|
|
||||||
int pipboyOpen(bool forceRest);
|
int pipboyOpen(bool forceRest);
|
||||||
int pipboyWindowInit(bool forceRest);
|
|
||||||
void pipboyWindowFree();
|
|
||||||
void _pip_init_();
|
|
||||||
void pipboyInit();
|
void pipboyInit();
|
||||||
void pipboyReset();
|
void pipboyReset();
|
||||||
void pipboyDrawNumber(int value, int digits, int x, int y);
|
|
||||||
void pipboyDrawDate();
|
|
||||||
void pipboyDrawText(const char* text, int a2, int a3);
|
|
||||||
void pipboyDrawBackButton(int a1);
|
|
||||||
int _save_pipboy(File* stream);
|
|
||||||
int pipboySave(File* stream);
|
int pipboySave(File* stream);
|
||||||
int pipboyLoad(File* stream);
|
int pipboyLoad(File* stream);
|
||||||
void pipboyWindowHandleStatus(int a1);
|
|
||||||
void pipboyWindowRenderQuestLocationList(int a1);
|
|
||||||
void pipboyRenderHolodiskText();
|
|
||||||
int pipboyWindowRenderHolodiskList(int a1);
|
|
||||||
int _qscmp(const void* a1, const void* a2);
|
|
||||||
void pipboyWindowHandleAutomaps(int a1);
|
|
||||||
int _PrintAMelevList(int a1);
|
|
||||||
int _PrintAMList(int a1);
|
|
||||||
void pipboyHandleVideoArchive(int a1);
|
|
||||||
int pipboyRenderVideoArchive(int a1);
|
|
||||||
void pipboyHandleAlarmClock(int a1);
|
|
||||||
void pipboyWindowRenderRestOptions(int a1);
|
|
||||||
void pipboyDrawHitPoints();
|
|
||||||
void pipboyWindowCreateButtons(int a1, int a2, bool a3);
|
|
||||||
void pipboyWindowDestroyButtons();
|
|
||||||
bool pipboyRest(int hours, int minutes, int kind);
|
|
||||||
bool _Check4Health(int a1);
|
|
||||||
bool _AddHealth();
|
|
||||||
void _ClacTime(int* hours, int* minutes, int wakeUpHour);
|
|
||||||
int pipboyRenderScreensaver();
|
|
||||||
int questInit();
|
|
||||||
void questFree();
|
|
||||||
int questDescriptionCompare(const void* a1, const void* a2);
|
|
||||||
int holodiskInit();
|
|
||||||
void holodiskFree();
|
|
||||||
|
|
||||||
#endif /* PIPBOY_H */
|
#endif /* PIPBOY_H */
|
||||||
|
|
Loading…
Reference in New Issue