Files
source/Laptop/email.h
T
2026-01-03 17:27:43 +02:00

802 lines
27 KiB
C++

#ifndef __EMAIL_H
#define __EMAIL_H
#include "types.h"
#include "soldier profile type.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
//---ja25 ub
#ifdef JA2UB
#define EMAIL_INSURANCE_L1 170
#define EMAIL_INSURANCE_L2 211
#define EMAIL_INSURANCE_L3 170
#define EMAIL_INSURANCE_L4 173
#define EMAIL_INSURANCE_L5 179
#define EMAIL_INSURANCE_L6 176
#define EMAIL_BOBBY_R_L1 198
#define EMAIL_AIM_L1 206
#define EMAIL_AIM_L2 27
#define EMAIL_AIM_L3 217
#define EMAIL_AIM_L4 214
//JA25: New emails
// email # 1
#define EMAIL_STARTGAME 0
#define EMAIL_STARTGAME_LENGTH 8
// email # 2
#define EMAIL_PILOTMISSING (EMAIL_STARTGAME + EMAIL_STARTGAME_LENGTH)
#define EMAIL_PILOTMISSING_LENGTH 2
// email # 3
#define EMAIL_MAKECONTACT (EMAIL_PILOTMISSING + EMAIL_PILOTMISSING_LENGTH)
#define EMAIL_MAKECONTACT_LENGTH 3
// email # 4
#define EMAIL_MANUEL (EMAIL_MAKECONTACT + EMAIL_MAKECONTACT_LENGTH)
#define EMAIL_MANUEL_LENGTH 4
// # email # 5 - only if Miguel is alive!
#define EMAIL_MIGUELHELLO (EMAIL_MANUEL + EMAIL_MANUEL_LENGTH)
#define EMAIL_MIGUELHELLO_LENGTH 3
// email # 6 - player not advancing fast enough
#define EMAIL_CONCERNED (EMAIL_MIGUELHELLO + EMAIL_MIGUELHELLO_LENGTH)
#define EMAIL_CONCERNED_LENGTH 2
// email # 7 - player still not advancing fast enough
#define EMAIL_URGENT (EMAIL_CONCERNED + EMAIL_CONCERNED_LENGTH)
#define EMAIL_URGENT_LENGTH 3
// email # 8a - from Miguel
#define EMAIL_MIGUELSORRY (EMAIL_URGENT + EMAIL_URGENT_LENGTH)
#define EMAIL_MIGUELSORRY_LENGTH 3
// email # 8b - from Miguel, mentioning Manuel
#define EMAIL_MIGUELMANUEL (EMAIL_MIGUELSORRY + EMAIL_MIGUELSORRY_LENGTH)
#define EMAIL_MIGUELMANUEL_LENGTH 4
// email # 9 - Miguel sick
#define EMAIL_MIGUELSICK (EMAIL_MIGUELMANUEL + EMAIL_MIGUELMANUEL_LENGTH)
#define EMAIL_MIGUELSICK_LENGTH 3
// email # 10a
#define EMAIL_UNDERSTANDING (EMAIL_MIGUELSICK + EMAIL_MIGUELSICK_LENGTH)
#define EMAIL_UNDERSTANDING_LENGTH 3
// email # 10b - if we need extra cash
#define EMAIL_EXTRACASH (EMAIL_UNDERSTANDING + EMAIL_UNDERSTANDING_LENGTH)
#define EMAIL_EXTRACASH_LENGTH 4
// email # 11
#define EMAIL_PILOTFOUND (EMAIL_EXTRACASH + EMAIL_EXTRACASH_LENGTH)
#define EMAIL_PILOTFOUND_LENGTH 2
// email # 12a - Miguel dead, Manuel never recruited
#define EMAIL_CONGRATS (EMAIL_PILOTFOUND + EMAIL_PILOTFOUND_LENGTH)
#define EMAIL_CONGRATS_LENGTH 4
// email # 12b - Miguel alive, Manuel never recruited
#define EMAIL_CONGRATSICK (EMAIL_CONGRATS + EMAIL_CONGRATS_LENGTH)
#define EMAIL_CONGRATSICK_LENGTH 5
// email # 12c - Miguel alive, Manuel dead
#define EMAIL_CONGRATMIGMANUELDEAD (EMAIL_CONGRATSICK + EMAIL_CONGRATSICK_LENGTH)
#define EMAIL_CONGRATMIGMANUELDEAD_LENGTH 6
// email # 12d - Miguel alive, Manuel recruited and alive
#define EMAIL_CONGRATMIGMANUELALIVE (EMAIL_CONGRATMIGMANUELDEAD + EMAIL_CONGRATMIGMANUELDEAD_LENGTH)
#define EMAIL_CONGRATMIGMANUELALIVE_LENGTH 6
// email # 12e - Miguel dead, Manuel dead
#define EMAIL_CONGRATMANUELDEAD (EMAIL_CONGRATMIGMANUELALIVE + EMAIL_CONGRATMIGMANUELALIVE_LENGTH)
#define EMAIL_CONGRATMANUELDEAD_LENGTH 5
// email # 12f - Miguel dead, Manuel recruited and alive
#define EMAIL_CONGRATMANUELALIVE (EMAIL_CONGRATMANUELDEAD + EMAIL_CONGRATMANUELDEAD_LENGTH)
#define EMAIL_CONGRATMANUELALIVE_LENGTH 5
// email # 13 - original AIM email
#define EMAIL_AIMDISCOUNT (EMAIL_CONGRATMANUELALIVE + EMAIL_CONGRATMANUELALIVE_LENGTH)
#define EMAIL_AIMDISCOUNT_LENGTH 7
#define MANUEL_AT_HOME_NOT_USED ( EMAIL_AIMDISCOUNT + EMAIL_AIMDISCOUNT_LENGTH )
#define MANUEL_AT_HOME_NOT_USED_LENGTH 1
//Email #14 Initial IMP email
#define IMP_EMAIL_INTRO (MANUEL_AT_HOME_NOT_USED + MANUEL_AT_HOME_NOT_USED_LENGTH )
#define IMP_EMAIL_INTRO_LENGTH 10
//Email #15 Imp follow up
#define IMP_EMAIL_AGAIN (IMP_EMAIL_INTRO + IMP_EMAIL_INTRO_LENGTH)
#define IMP_EMAIL_AGAIN_LENGTH 5
// Email #16 - ?? merc left-me-a-message-and-now-I'm-back emails
#define AIM_REPLY_BARRY ( IMP_EMAIL_AGAIN + IMP_EMAIL_AGAIN_LENGTH )
#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
#define AIM_REFUND ( AIM_REPLY_MELTDOWN + AIM_REPLY_LENGTH_MELTDOWN )
#define AIM_REFUND_LENGTH 3
#define MERC_REFUND ( AIM_REFUND + AIM_REFUND_LENGTH )
#define MERC_REFUND_LENGTH 3
#define EMAIL_AIM_PROMOTION_1 ( MERC_REFUND + MERC_REFUND_LENGTH )
#define EMAIL_AIM_PROMOTION_1_LENGTH 4
#define EMAIL_MERC_PROMOTION_1 ( EMAIL_AIM_PROMOTION_1 + EMAIL_AIM_PROMOTION_1_LENGTH )
#define EMAIL_MERC_PROMOTION_1_LENGTH 5
#define EMAIL_AIM_PROMOTION_2 ( EMAIL_MERC_PROMOTION_1 + EMAIL_MERC_PROMOTION_1_LENGTH )
#define EMAIL_AIM_PROMOTION_2_LENGTH 5
#define IMP_EMAIL_PROFILE_RESULTS ( EMAIL_AIM_PROMOTION_2 + EMAIL_AIM_PROMOTION_2_LENGTH )
#define IMP_EMAIL_PROFILE_RESULTS_LENGTH 1
#define IMP_EMAIL_INTRO2 0
#define IMP_EMAIL_INTRO_LENGTH2 10
#define ENRICO_CONGRATS2 (IMP_EMAIL_INTRO2 + IMP_EMAIL_INTRO_LENGTH2)
#define ENRICO_CONGRATS_LENGTH2 3
#define IMP_EMAIL_AGAIN2 (ENRICO_CONGRATS2 + ENRICO_CONGRATS_LENGTH2)
#define IMP_EMAIL_AGAIN_LENGTH2 6
#define MERC_INTRO2 (IMP_EMAIL_AGAIN2 + IMP_EMAIL_AGAIN_LENGTH2)
#define MERC_INTRO_LENGTH2 5
#define MERC_NEW_SITE_ADDRESS2 ( MERC_INTRO2 + MERC_INTRO_LENGTH2 )
#define MERC_NEW_SITE_ADDRESS_LENGTH2 2
#define AIM_MEDICAL_DEPOSIT_REFUND2 ( MERC_NEW_SITE_ADDRESS2 + MERC_NEW_SITE_ADDRESS_LENGTH2 )
#define AIM_MEDICAL_DEPOSIT_REFUND_LENGTH2 3
#define IMP_EMAIL_PROFILE_RESULTS2 ( AIM_MEDICAL_DEPOSIT_REFUND2 + AIM_MEDICAL_DEPOSIT_REFUND_LENGTH2 )
#define IMP_EMAIL_PROFILE_RESULTS_LENGTH2 1
#define MERC_WARNING2 ( IMP_EMAIL_PROFILE_RESULTS_LENGTH2 + IMP_EMAIL_PROFILE_RESULTS2 )
#define MERC_WARNING_LENGTH2 2
#define MERC_INVALID2 ( MERC_WARNING2 + MERC_WARNING_LENGTH2 )
#define MERC_INVALID_LENGTH2 2
#define NEW_MERCS_AT_MERC ( MERC_INVALID2 + MERC_INVALID_LENGTH2 )
#define NEW_MERCS_AT_MERC_LENGTH 2
//Jagged Alliance 2
// insurance company emails
#define INSUR_PAYMENT 200
#define INSUR_PAYMENT_LENGTH 3
#define INSUR_SUSPIC 201
#define INSUR_SUSPIC_LENGTH 3
#define INSUR_INVEST_OVER 202
#define INSUR_INVEST_OVER_LENGTH 3
#define INSUR_SUSPIC_2 203
#define INSUR_SUSPIC_2_LENGTH 3
#define BOBBYR_NOW_OPEN 204
#define BOBBYR_NOW_OPEN_LENGTH 3
#define KING_PIN_LETTER 205
#define KING_PIN_LETTER_LENGTH 4
#define LACK_PLAYER_PROGRESS_1 206
#define LACK_PLAYER_PROGRESS_1_LENGTH 3
#define LACK_PLAYER_PROGRESS_2 207
#define LACK_PLAYER_PROGRESS_2_LENGTH 3
#define LACK_PLAYER_PROGRESS_3 208
#define LACK_PLAYER_PROGRESS_3_LENGTH 3
//A package from bobby r has arrived in Drassen
#define BOBBYR_SHIPMENT_ARRIVED 199
#define BOBBYR_SHIPMENT_ARRIVED_LENGTH 4
// John Kulba has left the gifts for theplayers in drassen
#define JOHN_KULBA_GIFT_IN_DRASSEN 209
#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 210
#define MERC_DIED_ON_OTHER_ASSIGNMENT_LENGTH 5
#define INSUR_1HOUR_FRAUD 211
#define INSUR_1HOUR_FRAUD_LENGTH 3
//when a merc is fired, and is injured
#define AIM_MEDICAL_DEPOSIT_PARTIAL_REFUND 212
#define AIM_MEDICAL_DEPOSIT_PARTIAL_REFUND_LENGTH 3
//when a merc is fired, and is dead
#define AIM_MEDICAL_DEPOSIT_NO_REFUND 213
#define AIM_MEDICAL_DEPOSIT_NO_REFUND_LENGTH 3
#define BOBBY_R_MEDUNA_SHIPMENT 214
#define BOBBY_R_MEDUNA_SHIPMENT_LENGTH 4
#define AIM_MEDICAL_DEPOSIT_REFUND 215
#define AIM_MEDICAL_DEPOSIT_REFUND_LENGTH 3
#else
#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
// anv: Kulba's odyssey
#define JOHN_KULBA_MISSED_FLIGHT_1 ( BOBBY_R_MEDUNA_SHIPMENT + BOBBY_R_MEDUNA_SHIPMENT_LENGTH )
#define JOHN_KULBA_MISSED_FLIGHT_1_LENGTH 3
#define JOHN_KULBA_MISSED_FLIGHT_2 ( JOHN_KULBA_MISSED_FLIGHT_1 + JOHN_KULBA_MISSED_FLIGHT_1_LENGTH )
#define JOHN_KULBA_MISSED_FLIGHT_2_LENGTH 3
#define JOHN_KULBA_MISSED_FLIGHT_3 ( JOHN_KULBA_MISSED_FLIGHT_2 + JOHN_KULBA_MISSED_FLIGHT_2_LENGTH )
#define JOHN_KULBA_MISSED_FLIGHT_3_LENGTH 3
#define PMC_INTRO (JOHN_KULBA_MISSED_FLIGHT_3 + JOHN_KULBA_MISSED_FLIGHT_3_LENGTH)
#define PMC_INTRO_LENGTH 3
#define KINGPIN_BOUNTY_INITIAL (PMC_INTRO + PMC_INTRO_LENGTH)
#define KINGPIN_BOUNTY_INITIAL_LENGTH 6
#define KINGPIN_BOUNTY_KINGPIN_REWARD (KINGPIN_BOUNTY_INITIAL + KINGPIN_BOUNTY_INITIAL_LENGTH)
#define KINGPIN_BOUNTY_KINGPIN_REWARD_LENGTH 4
#define KINGPIN_BOUNTY_ANGEL_THANKS (KINGPIN_BOUNTY_KINGPIN_REWARD + KINGPIN_BOUNTY_KINGPIN_REWARD_LENGTH)
#define KINGPIN_BOUNTY_ANGEL_THANKS_LENGTH 4
#define KINGPIN_BOUNTY_BH_GOTTARGET (KINGPIN_BOUNTY_ANGEL_THANKS + KINGPIN_BOUNTY_ANGEL_THANKS_LENGTH)
#define KINGPIN_BOUNTY_BH_GOTTARGET_LENGTH 4
#define KINGPIN_BOUNTY_TARGET_GOTAWAY (KINGPIN_BOUNTY_BH_GOTTARGET + KINGPIN_BOUNTY_BH_GOTTARGET_LENGTH)
#define KINGPIN_BOUNTY_TARGET_GOTAWAY_LENGTH 4
#define MILITIAROSTER_INTRO (KINGPIN_BOUNTY_TARGET_GOTAWAY + KINGPIN_BOUNTY_TARGET_GOTAWAY_LENGTH)
#define MILITIAROSTER_INTRO_LENGTH 4
#define INTEL_ENRICO_INTRO (MILITIAROSTER_INTRO + MILITIAROSTER_INTRO_LENGTH)
#define INTEL_ENRICO_INTRO_LENGTH 5
#define INSUR_CHEAT_FRAUD ( INTEL_ENRICO_INTRO + INTEL_ENRICO_INTRO_LENGTH )
#define INSUR_CHEAT_FRAUD_LENGTH 3
#endif
// 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;
UINT8 EmailVersion;
UINT32 EmailType;
// WANNE.MAIL: Fix
INT16 iCurrentShipmentDestinationID;
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;
// WANNE.MAIL: Fix
INT16 iCurrentShipmentDestinationID;
} 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,
#ifdef JA2UB
MAIL_MIGUEL,
#endif
PMC,
ANGEL_DASILVA,
};
// 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 iFirstData, UINT32 uiSecondData, INT32 iThirdData, INT32 iFourthData, UINT32 uiFifthData, UINT32 uiSixData, INT32 iCurrentIMPPosition, INT16 iCurrentShipmentDestinationID, UINT8 EmailType, UINT32 EmailAIM );
void RemoveEmailMessage(INT32 iId);
EmailPtr GetEmailMessage(INT32 iId);
void LookForUnread();
// WANNE: For the new WF merc, when they available again
void AddEmailWFMercAvailable(INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, INT32 iCurrentIMPPosition, UINT8 EmailType);
void AddPreReadEmail(INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, UINT8 EmailType );
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);
#ifdef JA2BETAVERSION
void AddAllEmails();
#endif
typedef struct
{
UINT8 Sender;
CHAR16 Subject[EMAIL_SUBJECT_LENGTH];
std::vector<std::wstring> Messages;
} EMAIL_XML;
extern std::vector<EMAIL_XML> gEmails;
typedef struct
{
UINT8 uiIndex;
CHAR16 szMessage[MAIL_STRING_SIZE];
CHAR16 szSubject[EMAIL_SUBJECT_LENGTH];
} EMAIL_MERC_AVAILABLE_VALUES;
typedef struct
{
UINT8 uiIndex;
CHAR16 szMessage[MAIL_STRING_SIZE];
CHAR16 szSubject[EMAIL_SUBJECT_LENGTH];
} EMAIL_MERC_LEVEL_UP_VALUES;
typedef struct
{
UINT8 uiIndex;
CHAR16 szMessage[MAIL_STRING_SIZE];
CHAR16 szSubject[EMAIL_SUBJECT_LENGTH];
} EMAIL_MERC_INSURANCE_VALUES;
#define EMAIL_INDEX 500
typedef struct
{
UINT8 uiIndex;
CHAR16 szMessage[MAIL_STRING_SIZE][30];
CHAR16 szSubject[EMAIL_SUBJECT_LENGTH];
} EMAIL_OTHER_VALUES;
typedef struct
{
UINT8 uiIndex;
UINT32 EmailType;
UINT8 EmailVersion;
} EMAIL_TYPE;
#define EMAIL_VAL 4000
extern EMAIL_TYPE gEmailT[EMAIL_VAL];
enum {
//------------------------------
//Read Email.edt
// read message from Email.edt
TYPE_EMAIL_EMAIL_EDT = 0,
// read message from Email.edt and nickname (sender) read from MercProfiles.xml
TYPE_EMAIL_EMAIL_EDT_NAME_MERC,
//-------------------------------
//Read *.xml
//Read message from Email\EmailMercAvailable.xml.XML and nickname (sender) read from MercProfiles.xml
TYPE_EMAIL_AIM_AVAILABLE,
//Read message from Email\EmailMercLevelUp.xml.XML and nickname (sender) read from MercProfiles.xml
TYPE_EMAIL_MERC_LEVEL_UP,
//Read from others *.XMLs
TYPE_EMAIL_BOBBY_R,
//Read from JA2 Email.edt
TYPE_EMAIL_BOBBY_R_EMAIL_JA2_EDT,
TYPE_EMAIL_INSURANCE_COMPANY_EMAIL_JA2_EDT,
TYPE_EMAIL_DEAD_MERC_AIM_SITE_EMAIL_JA2_EDT,
//Read from others *.XMLs
TYPE_EMAIL_ENRICO,
TYPE_EMAIL_CHAR_PROFILE_SITE,
TYPE_EMAIL_GAME_HELP,
TYPE_EMAIL_IMP_PROFILE_RESULTS,
TYPE_EMAIL_SPECK_FROM_MERC,
TYPE_EMAIL_RIS_EMAIL,
TYPE_EMAIL_INSURANCE_COMPANY,
TYPE_EMAIL_KING_PIN,
TYPE_EMAIL_JOHN_KULBA,
TYPE_EMAIL_AIM_SITE,
//Read message from Email\Emails.xml and sender read from Email\EmailSenderNameList.xml
TYPE_EMAIL_XML,
};
enum {
TYPE_E_NONE = 0,
TYPE_E_AIM_L1 = 1, //206
TYPE_E_AIM_L2 = 2, //27
TYPE_E_AIM_L3 = 3, //217
TYPE_E_AIM_L4 = 4, //214
TYPE_E_INSURANCE_L1 = 5, //170
TYPE_E_INSURANCE_L2 = 6, //211
TYPE_E_INSURANCE_L3 = 7, //170
TYPE_E_INSURANCE_L4 = 8, //173
TYPE_E_INSURANCE_L5 = 9, //179
TYPE_E_INSURANCE_L6 = 10, //176
TYPE_EMAIL_BOBBY_R_L1 = 11,
};
enum {
XML_NOEMAIL = -1,
XML_ENRICO_INQUIRY = 0,
XML_ENRICO_FOLLOWUP,
XML_ENRICO_CONFIRMED,
XML_ENRICO_GOODLUCK,
XML_ENRICO_GREATNEWS,
XML_ENRICO_PROGRESS,
XML_ENRICO_GOODWORK,
XML_ENRICO_FINALPUSH,
XML_ENRICO_SETBACK,
XML_ENRICO_BADNEWS,
XML_ENRICO_CREPITUS,
XML_ENRICO_CONCERNED,
XML_ENRICO_WORRIED,
XML_ENRICO_DISAPPOINTED,
XML_ENRICO_MILITIA_WEBSITE,
XML_ENRICO_INTEL,
XML_IMP_INTRO,
XML_IMP_INTROAGAIN,
XML_SPECK_INTRO,
XML_SPECK_NEWSITE,
XML_SPECK_NOTICE,
XML_SPECK_NEWPERSONNEL,
XML_SPECK_PLEASEPAY,
XML_SPECK_DELINQUENT,
XML_RISREPORT,
XML_INSURANCE_APPROVED,
XML_INSURANCE_SUSPICIOUS,
XML_INSURANCE_COMPLETED,
XML_INSURANCE_INVESTIGATION,
XML_INSURANCE_REFUSED,
XML_INSURANCE_POLICYVIOLATION,
XML_BR_VISITEDSITE,
XML_BR_SHIPMENTARRIVAL,
XML_BR_MEDUNA,
XML_KINGPIN_STOLEMONEY,
XML_KINGPIN_JOBOPPORTUNITY,
XML_KINGPIN_WELLDONE,
XML_KINGPIN_FAILURE,
XML_KINGPIN_FAILUREOBSTACLES,
XML_JOHNKULBA_SENTGUNS,
XML_JOHNKULBA_MISSEDTRANSFERFLIGHT,
XML_JOHNKULBA_CRASHLANDEDHELI,
XML_JOHNKULBA_AMBUSHEDBYCATS,
XML_AIM_NOTICE_OF_DEATH,
XML_AIM_REFUND,
XML_AIM_PARTIALREFUND,
XML_AIM_NOREFUND,
XML_KERBERUS_OFFER,
XML_DASILVA_THANKYOU,
XML_JA2UB_ENRICO_HELP,
XML_JA2UB_ENRICO_INQUIRY,
XML_JA2UB_ENRICO_STILLNOWORD,
XML_JA2UB_ENRICO_GOODNEWS,
XML_JA2UB_ENRICO_CONCERNED,
XML_JA2UB_ENRICO_URGENT,
XML_JA2UB_ENRICO_RECEIVEDEMAIL,
XML_JA2UB_ENRICO_RECEIVEDEMAILMONEY,
XML_JA2UB_ENRICO_PILOTFOUND,
XML_JA2UB_ENRICO_CONGRATS,
XML_JA2UB_ENRICO_CONGRATS_MIGUELSICK,
XML_JA2UB_ENRICO_CONGRATS_MIGUELSICK_MANUELDEAD,
XML_JA2UB_ENRICO_CONGRATS_MIGUELSICK_MANUELALIVE,
XML_JA2UB_ENRICO_CONGRATS_MANUELDEAD,
XML_JA2UB_ENRICO_CONGRATS_MANUELALIVE,
XML_JA2UB_IMP_INTRO,
XML_JA2UB_IMP_INTROAGAIN,
XML_JA2UB_MIGUEL_HELLO,
XML_JA2UB_MIGUEL_SORRY,
XML_JA2UB_MIGUEL_SORRY_HIREDMANUEL,
XML_JA2UB_MIGUEL_SICK,
XML_JA2UB_MIGUEL_CIGARETTES,
XML_JA2UB_AIM_SPECIALOFFER,
XML_JA2UB_AIM_BONUSOFFER,
XML_JA2UB_AIM_SPECIALBONUSOFFER,
XML_JA2UB_AIM_DISMISSALREFUND,
XML_JA2UB_SPECK_EVENBETTEROFFER,
XML_JA2UB_SPECK_DISMISSALREFUND
};
void AddEmail(INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, INT32 iCurrentIMPPosition, INT16 iCurrentShipmentDestinationID, UINT8 EmailType, UINT16 EnumEmailXML = XML_NOEMAIL);
void AddEmailWithSpecialData(INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, INT32 iFirstData, UINT32 uiSecondData, UINT8 EmailType, UINT32 EmailAIM, UINT16 EnumEmailXML = XML_NOEMAIL);
extern EMAIL_MERC_AVAILABLE_VALUES EmailMercAvailableText[NUM_PROFILES];
extern EMAIL_MERC_LEVEL_UP_VALUES EmailMercLevelUpText[NUM_PROFILES];
extern BOOLEAN ReadXMLEmail;
extern void AddEmailTypeXML( INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, INT32 iCurrentIMPPosition, UINT8 EmailType );
extern void AddPreReadEmailTypeXML( INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, UINT8 EmailType );
extern void AddEmailFromXML(INT32 iMessageOffset, INT32 iDate, INT32 iCurrentIMPPosition, INT16 iCurrentShipmentDestinationID, BOOLEAN alreadyRead, INT32 iFirstData, UINT32 uiSecondData, INT32 iThirdData, INT32 iFourthData, UINT32 uiFifthData, UINT32 uiSixData);
extern void AddEmailWithSpecialDataXML(INT32 iMessageOffset, INT32 iDate, INT32 iCurrentIMPPosition, INT16 iCurrentShipmentDestinationID, BOOLEAN alreadyRead, INT32 iFirstData, UINT32 uiSecondData, INT32 iThirdData, INT32 iFourthData, UINT32 uiFifthData, UINT32 uiSixData);
extern BOOLEAN SaveNewEmailDataToSaveGameFile( HWFILE hFile );
extern BOOLEAN LoadNewEmailDataFromLoadGameFile( HWFILE hFile );
#ifdef JA2UB
extern void AddBobbyREmailJA2(INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, INT32 iCurrentIMPPosition, INT16 iCurrentShipmentDestinationID, UINT8 EmailType );
#endif
#endif