Files
source/Laptop/email.h
T

325 lines
11 KiB
C

#ifndef __EMAIL_H
#define __EMAIL_H
#include "types.h"
// defines
#define MAX_EMAIL_LINES 10 //max number of lines can be shown in a message
#define MAX_MESSAGES_PAGE 18 // max number of messages per page
#define IMP_EMAIL_INTRO 0
#define IMP_EMAIL_INTRO_LENGTH 10
#define ENRICO_CONGRATS (IMP_EMAIL_INTRO + IMP_EMAIL_INTRO_LENGTH)
#define ENRICO_CONGRATS_LENGTH 3
#define IMP_EMAIL_AGAIN (ENRICO_CONGRATS + ENRICO_CONGRATS_LENGTH)
#define IMP_EMAIL_AGAIN_LENGTH 6
#define MERC_INTRO (IMP_EMAIL_AGAIN + IMP_EMAIL_AGAIN_LENGTH)
#define MERC_INTRO_LENGTH 5
#define MERC_NEW_SITE_ADDRESS ( MERC_INTRO + MERC_INTRO_LENGTH )
#define MERC_NEW_SITE_ADDRESS_LENGTH 2
#define AIM_MEDICAL_DEPOSIT_REFUND ( MERC_NEW_SITE_ADDRESS + MERC_NEW_SITE_ADDRESS_LENGTH )
#define AIM_MEDICAL_DEPOSIT_REFUND_LENGTH 3
#define IMP_EMAIL_PROFILE_RESULTS ( AIM_MEDICAL_DEPOSIT_REFUND + AIM_MEDICAL_DEPOSIT_REFUND_LENGTH )
#define IMP_EMAIL_PROFILE_RESULTS_LENGTH 1
#define MERC_WARNING ( IMP_EMAIL_PROFILE_RESULTS_LENGTH + IMP_EMAIL_PROFILE_RESULTS )
#define MERC_WARNING_LENGTH 2
#define MERC_INVALID ( MERC_WARNING + MERC_WARNING_LENGTH )
#define MERC_INVALID_LENGTH 2
#define NEW_MERCS_AT_MERC ( MERC_INVALID + MERC_INVALID_LENGTH )
#define NEW_MERCS_AT_MERC_LENGTH 2
#define MERC_FIRST_WARNING ( NEW_MERCS_AT_MERC + NEW_MERCS_AT_MERC_LENGTH )
#define MERC_FIRST_WARNING_LENGTH 2
// merc up a level emails
#define MERC_UP_LEVEL_BIFF ( MERC_FIRST_WARNING + MERC_FIRST_WARNING_LENGTH )
#define MERC_UP_LEVEL_LENGTH_BIFF 2
#define MERC_UP_LEVEL_HAYWIRE ( MERC_UP_LEVEL_LENGTH_BIFF + MERC_UP_LEVEL_BIFF )
#define MERC_UP_LEVEL_LENGTH_HAYWIRE 2
#define MERC_UP_LEVEL_GASKET ( MERC_UP_LEVEL_LENGTH_HAYWIRE + MERC_UP_LEVEL_HAYWIRE )
#define MERC_UP_LEVEL_LENGTH_GASKET 2
#define MERC_UP_LEVEL_RAZOR ( MERC_UP_LEVEL_LENGTH_GASKET + MERC_UP_LEVEL_GASKET )
#define MERC_UP_LEVEL_LENGTH_RAZOR 2
#define MERC_UP_LEVEL_FLO ( MERC_UP_LEVEL_LENGTH_RAZOR + MERC_UP_LEVEL_RAZOR )
#define MERC_UP_LEVEL_LENGTH_FLO 2
#define MERC_UP_LEVEL_GUMPY ( MERC_UP_LEVEL_LENGTH_FLO + MERC_UP_LEVEL_FLO )
#define MERC_UP_LEVEL_LENGTH_GUMPY 2
#define MERC_UP_LEVEL_LARRY ( MERC_UP_LEVEL_LENGTH_GUMPY + MERC_UP_LEVEL_GUMPY )
#define MERC_UP_LEVEL_LENGTH_LARRY 2
#define MERC_UP_LEVEL_COUGAR ( MERC_UP_LEVEL_LENGTH_LARRY + MERC_UP_LEVEL_LARRY )
#define MERC_UP_LEVEL_LENGTH_COUGAR 2
#define MERC_UP_LEVEL_NUMB ( MERC_UP_LEVEL_LENGTH_COUGAR + MERC_UP_LEVEL_COUGAR )
#define MERC_UP_LEVEL_LENGTH_NUMB 2
#define MERC_UP_LEVEL_BUBBA ( MERC_UP_LEVEL_LENGTH_NUMB + MERC_UP_LEVEL_NUMB )
#define MERC_UP_LEVEL_LENGTH_BUBBA 2
// merc left-me-a-message-and-now-I'm-back emails
#define AIM_REPLY_BARRY ( MERC_UP_LEVEL_LENGTH_BUBBA + MERC_UP_LEVEL_BUBBA )
#define AIM_REPLY_LENGTH_BARRY 2
#define AIM_REPLY_MELTDOWN (AIM_REPLY_BARRY + ( 39 * AIM_REPLY_LENGTH_BARRY ))
#define AIM_REPLY_LENGTH_MELTDOWN AIM_REPLY_LENGTH_BARRY
// old EXISTING emails when player starts game. They must look "read"
#define OLD_ENRICO_1 ( AIM_REPLY_LENGTH_MELTDOWN + AIM_REPLY_MELTDOWN )
#define OLD_ENRICO_1_LENGTH 3
#define OLD_ENRICO_2 ( OLD_ENRICO_1 + OLD_ENRICO_1_LENGTH )
#define OLD_ENRICO_2_LENGTH 3
#define RIS_REPORT ( OLD_ENRICO_2 + OLD_ENRICO_2_LENGTH )
#define RIS_REPORT_LENGTH 2
#define OLD_ENRICO_3 ( RIS_REPORT + RIS_REPORT_LENGTH )
#define OLD_ENRICO_3_LENGTH 3
// emails that occur from Enrico once player accomplishes things
#define ENRICO_MIGUEL ( OLD_ENRICO_3 + OLD_ENRICO_3_LENGTH )
#define ENRICO_MIGUEL_LENGTH 3
#define ENRICO_PROG_20 ( ENRICO_MIGUEL + ENRICO_MIGUEL_LENGTH )
#define ENRICO_PROG_20_LENGTH 3
#define ENRICO_PROG_55 ( ENRICO_PROG_20 + ENRICO_PROG_20_LENGTH )
#define ENRICO_PROG_55_LENGTH 3
#define ENRICO_PROG_80 ( ENRICO_PROG_55 + ENRICO_PROG_55_LENGTH )
#define ENRICO_PROG_80_LENGTH 3
#define ENRICO_SETBACK ( ENRICO_PROG_80 + ENRICO_PROG_80_LENGTH )
#define ENRICO_SETBACK_LENGTH 3
#define ENRICO_SETBACK_2 ( ENRICO_SETBACK + ENRICO_SETBACK_LENGTH )
#define ENRICO_SETBACK_2_LENGTH 3
#define ENRICO_CREATURES ( ENRICO_SETBACK_2 + ENRICO_SETBACK_2_LENGTH )
#define ENRICO_CREATURES_LENGTH 3
// insurance company emails
#define INSUR_PAYMENT ( ENRICO_CREATURES + ENRICO_CREATURES_LENGTH )
#define INSUR_PAYMENT_LENGTH 3
#define INSUR_SUSPIC ( INSUR_PAYMENT + INSUR_PAYMENT_LENGTH )
#define INSUR_SUSPIC_LENGTH 3
#define INSUR_INVEST_OVER ( INSUR_SUSPIC + INSUR_SUSPIC_LENGTH )
#define INSUR_INVEST_OVER_LENGTH 3
#define INSUR_SUSPIC_2 ( INSUR_INVEST_OVER + INSUR_INVEST_OVER_LENGTH )
#define INSUR_SUSPIC_2_LENGTH 3
#define BOBBYR_NOW_OPEN ( INSUR_SUSPIC_2 + INSUR_SUSPIC_2_LENGTH )
#define BOBBYR_NOW_OPEN_LENGTH 3
#define KING_PIN_LETTER ( BOBBYR_NOW_OPEN + BOBBYR_NOW_OPEN_LENGTH )
#define KING_PIN_LETTER_LENGTH 4
#define LACK_PLAYER_PROGRESS_1 ( KING_PIN_LETTER + KING_PIN_LETTER_LENGTH )
#define LACK_PLAYER_PROGRESS_1_LENGTH 3
#define LACK_PLAYER_PROGRESS_2 ( LACK_PLAYER_PROGRESS_1 + LACK_PLAYER_PROGRESS_1_LENGTH )
#define LACK_PLAYER_PROGRESS_2_LENGTH 3
#define LACK_PLAYER_PROGRESS_3 ( LACK_PLAYER_PROGRESS_2 + LACK_PLAYER_PROGRESS_2_LENGTH )
#define LACK_PLAYER_PROGRESS_3_LENGTH 3
//A package from bobby r has arrived in Drassen
#define BOBBYR_SHIPMENT_ARRIVED ( LACK_PLAYER_PROGRESS_3 + LACK_PLAYER_PROGRESS_3_LENGTH )
#define BOBBYR_SHIPMENT_ARRIVED_LENGTH 4
// John Kulba has left the gifts for theplayers in drassen
#define JOHN_KULBA_GIFT_IN_DRASSEN ( BOBBYR_SHIPMENT_ARRIVED + BOBBYR_SHIPMENT_ARRIVED_LENGTH )
#define JOHN_KULBA_GIFT_IN_DRASSEN_LENGTH 4
//when a merc dies on ANOTHER assignment ( ie not with the player )
#define MERC_DIED_ON_OTHER_ASSIGNMENT ( JOHN_KULBA_GIFT_IN_DRASSEN + JOHN_KULBA_GIFT_IN_DRASSEN_LENGTH )
#define MERC_DIED_ON_OTHER_ASSIGNMENT_LENGTH 5
#define INSUR_1HOUR_FRAUD ( MERC_DIED_ON_OTHER_ASSIGNMENT + MERC_DIED_ON_OTHER_ASSIGNMENT_LENGTH )
#define INSUR_1HOUR_FRAUD_LENGTH 3
//when a merc is fired, and is injured
#define AIM_MEDICAL_DEPOSIT_PARTIAL_REFUND ( INSUR_1HOUR_FRAUD + INSUR_1HOUR_FRAUD_LENGTH )
#define AIM_MEDICAL_DEPOSIT_PARTIAL_REFUND_LENGTH 3
//when a merc is fired, and is dead
#define AIM_MEDICAL_DEPOSIT_NO_REFUND ( AIM_MEDICAL_DEPOSIT_PARTIAL_REFUND + AIM_MEDICAL_DEPOSIT_PARTIAL_REFUND_LENGTH )
#define AIM_MEDICAL_DEPOSIT_NO_REFUND_LENGTH 3
#define BOBBY_R_MEDUNA_SHIPMENT ( AIM_MEDICAL_DEPOSIT_NO_REFUND + AIM_MEDICAL_DEPOSIT_NO_REFUND_LENGTH )
#define BOBBY_R_MEDUNA_SHIPMENT_LENGTH 4
// WANNE: New 1.13 MERC merc mail text for level up that Speck sends
//#define MERC_UP_LEVEL_GASTON (BOBBY_R_MEDUNA_SHIPMENT + BOBBY_R_MEDUNA_SHIPMENT_LENGTH)
//#define MERC_UP_LEVEL_GASTON_LENGTH 2
//#define MERC_UP_LEVEL_STOGIE (MERC_UP_LEVEL_GASTON + MERC_UP_LEVEL_GASTON_LENGTH)
//#define MERC_UP_LEVEL_STOGIE_LENGTH 2
//#define MERC_UP_LEVEL_TEX (MERC_UP_LEVEL_STOGIE + MERC_UP_LEVEL_STOGIE_LENGTH)
//#define MERC_UP_LEVEL_TEX_LENGTH 2
//#define MERC_UP_LEVEL_BIGGENS (MERC_UP_LEVEL_TEX + MERC_UP_LEVEL_TEX_LENGTH)
//#define MERC_UP_LEVEL_BIGGENS_LENGTH 2
#define MERC_UP_LEVEL_GASTON 165
#define MERC_UP_LEVEL_STOGIE 166
#define MERC_UP_LEVEL_TEX 167
#define MERC_UP_LEVEL_BIGGENS 168
struct message{
STR16 pString;
struct message *Next;
struct message *Prev;
};
typedef struct message EmailMessage;
typedef EmailMessage *MessagePtr;
struct email
{
STR16 pSubject;
UINT16 usOffset;
UINT16 usLength;
UINT8 ubSender;
UINT32 iDate;
INT32 iId;
INT32 iFirstData;
UINT32 uiSecondData;
BOOLEAN fRead;
BOOLEAN fNew;
INT32 iThirdData;
INT32 iFourthData;
UINT32 uiFifthData;
UINT32 uiSixData;
// WANNE: A reference to the IMP position in the gMercProfiles array.
// So we know which analyse email belongs to the imp
INT32 iCurrentIMPPosition;
struct email *Next;
struct email *Prev;
};
typedef struct email Email;
typedef Email *EmailPtr;
// This used when saving the emails to disk.
typedef struct
{
UINT16 usOffset;
UINT16 usLength;
UINT8 ubSender;
UINT32 iDate;
INT32 iId;
INT32 iFirstData;
UINT32 uiSecondData;
INT32 iThirdData;
INT32 iFourthData;
UINT32 uiFifthData;
UINT32 uiSixData;
BOOLEAN fRead;
BOOLEAN fNew;
INT32 iCurrentIMPPosition;
} SavedEmailStruct;
struct pagemessages{
INT32 iIds[MAX_MESSAGES_PAGE];
INT32 iPageId;
struct pagemessages *Next;
struct pagemessages *Prev;
};
typedef struct pagemessages Page;
typedef Page *PagePtr;
struct messagerecord{
// CHAR16 pRecord[ 320 ];
CHAR16 pRecord[ 640 ];
struct messagerecord *Next;
};
typedef struct messagerecord Record;
typedef Record *RecordPtr;
typedef struct
{
RecordPtr pFirstRecord;
RecordPtr pLastRecord;
INT32 iPageNumber;
} EmailPageInfoStruct;
enum {
SENDER=0,
RECEIVED,
SUBJECT,
READ,
};
enum {
MAIL_ENRICO=0,
CHAR_PROFILE_SITE,
GAME_HELP,
IMP_PROFILE_RESULTS,
SPECK_FROM_MERC,
RIS_EMAIL,
BARRY_MAIL,
MELTDOWN_MAIL = BARRY_MAIL+ 39,
INSURANCE_COMPANY,
BOBBY_R,
KING_PIN,
JOHN_KULBA,
AIM_SITE,
};
// the length of the subject in char
#define EMAIL_SUBJECT_LENGTH 128
extern BOOLEAN fUnReadMailFlag;
extern BOOLEAN fNewMailFlag;
extern BOOLEAN fOldUnreadFlag;
extern BOOLEAN fOldNewMailFlag;
extern BOOLEAN fDeleteMailFlag;
extern BOOLEAN fDisplayMessageFlag;
extern BOOLEAN fReDrawNewMailFlag;
extern BOOLEAN fOpenMostRecentUnReadFlag;
extern EmailPtr pEmailList;
extern UINT32 guiEmailWarning;
void GameInitEmail();
BOOLEAN EnterEmail();
void ExitEmail();
void HandleEmail();
void RenderEmail();
#define CHECK_X iScreenWidthOffset + 15
#define CHECK_Y iScreenHeightOffset + 13
#define VIEWER_X iScreenWidthOffset + 155
#define VIEWER_Y iScreenHeightOffset + 70 + 21
#define MAIL_STRING_SIZE 640
// message manipulation
void AddEmailMessage(INT32 iMessageOffset, INT32 iMessageLength,STR16 pSubject, INT32 iDate, UINT8 ubSender, BOOLEAN fAlreadyRead, INT32 uiFirstData, UINT32 uiSecondData, INT32 iCurrentIMPPosition );
void RemoveEmailMessage(INT32 iId);
EmailPtr GetEmailMessage(INT32 iId);
void LookForUnread();
void AddEmail(INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, INT32 iCurrentIMPPosition);
void AddPreReadEmail(INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate);
BOOLEAN DisplayNewMailBox();
void CreateDestroyNewMailButton();
void CreateDestroyDeleteNoticeMailButton();
void AddDeleteRegionsToMessageRegion(INT32 iViewerY);
void DisplayEmailHeaders( void );
void ReDrawNewMailBox( void );
void ReDisplayBoxes( void );
void ShutDownEmailList();
void AddMessageToPages(INT32 iMessageId);
void AddEmailWithSpecialData(INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, INT32 iFirstData, UINT32 uiSecondData );
#ifdef JA2BETAVERSION
void AddAllEmails();
#endif
#endif