1 #ifndef __EMAIL_H 2 #define __EMAIL_H 3 4 #include "Types.h" 5 6 #include <string_theory/string> 7 8 9 #define IMP_EMAIL_INTRO 0 10 #define IMP_EMAIL_INTRO_LENGTH 10 11 #define ENRICO_CONGRATS (IMP_EMAIL_INTRO + IMP_EMAIL_INTRO_LENGTH) 12 #define ENRICO_CONGRATS_LENGTH 3 13 #define IMP_EMAIL_AGAIN (ENRICO_CONGRATS + ENRICO_CONGRATS_LENGTH) 14 #define IMP_EMAIL_AGAIN_LENGTH 6 15 #define MERC_INTRO (IMP_EMAIL_AGAIN + IMP_EMAIL_AGAIN_LENGTH) 16 #define MERC_INTRO_LENGTH 5 17 #define MERC_NEW_SITE_ADDRESS ( MERC_INTRO + MERC_INTRO_LENGTH ) 18 #define MERC_NEW_SITE_ADDRESS_LENGTH 2 19 #define AIM_MEDICAL_DEPOSIT_REFUND ( MERC_NEW_SITE_ADDRESS + MERC_NEW_SITE_ADDRESS_LENGTH ) 20 #define AIM_MEDICAL_DEPOSIT_REFUND_LENGTH 3 21 #define IMP_EMAIL_PROFILE_RESULTS ( AIM_MEDICAL_DEPOSIT_REFUND + AIM_MEDICAL_DEPOSIT_REFUND_LENGTH ) 22 #define IMP_EMAIL_PROFILE_RESULTS_LENGTH 1 23 #define MERC_WARNING ( IMP_EMAIL_PROFILE_RESULTS_LENGTH + IMP_EMAIL_PROFILE_RESULTS ) 24 #define MERC_WARNING_LENGTH 2 25 #define MERC_INVALID ( MERC_WARNING + MERC_WARNING_LENGTH ) 26 #define MERC_INVALID_LENGTH 2 27 #define NEW_MERCS_AT_MERC ( MERC_INVALID + MERC_INVALID_LENGTH ) 28 #define NEW_MERCS_AT_MERC_LENGTH 2 29 #define MERC_FIRST_WARNING ( NEW_MERCS_AT_MERC + NEW_MERCS_AT_MERC_LENGTH ) 30 #define MERC_FIRST_WARNING_LENGTH 2 31 // merc up a level emails 32 #define MERC_UP_LEVEL_BIFF ( MERC_FIRST_WARNING + MERC_FIRST_WARNING_LENGTH ) 33 #define MERC_UP_LEVEL_LENGTH_BIFF 2 34 #define MERC_UP_LEVEL_HAYWIRE ( MERC_UP_LEVEL_LENGTH_BIFF + MERC_UP_LEVEL_BIFF ) 35 #define MERC_UP_LEVEL_LENGTH_HAYWIRE 2 36 #define MERC_UP_LEVEL_GASKET ( MERC_UP_LEVEL_LENGTH_HAYWIRE + MERC_UP_LEVEL_HAYWIRE ) 37 #define MERC_UP_LEVEL_LENGTH_GASKET 2 38 #define MERC_UP_LEVEL_RAZOR ( MERC_UP_LEVEL_LENGTH_GASKET + MERC_UP_LEVEL_GASKET ) 39 #define MERC_UP_LEVEL_LENGTH_RAZOR 2 40 #define MERC_UP_LEVEL_FLO ( MERC_UP_LEVEL_LENGTH_RAZOR + MERC_UP_LEVEL_RAZOR ) 41 #define MERC_UP_LEVEL_LENGTH_FLO 2 42 #define MERC_UP_LEVEL_GUMPY ( MERC_UP_LEVEL_LENGTH_FLO + MERC_UP_LEVEL_FLO ) 43 #define MERC_UP_LEVEL_LENGTH_GUMPY 2 44 #define MERC_UP_LEVEL_LARRY ( MERC_UP_LEVEL_LENGTH_GUMPY + MERC_UP_LEVEL_GUMPY ) 45 #define MERC_UP_LEVEL_LENGTH_LARRY 2 46 #define MERC_UP_LEVEL_COUGAR ( MERC_UP_LEVEL_LENGTH_LARRY + MERC_UP_LEVEL_LARRY ) 47 #define MERC_UP_LEVEL_LENGTH_COUGAR 2 48 #define MERC_UP_LEVEL_NUMB ( MERC_UP_LEVEL_LENGTH_COUGAR + MERC_UP_LEVEL_COUGAR ) 49 #define MERC_UP_LEVEL_LENGTH_NUMB 2 50 #define MERC_UP_LEVEL_BUBBA ( MERC_UP_LEVEL_LENGTH_NUMB + MERC_UP_LEVEL_NUMB ) 51 #define MERC_UP_LEVEL_LENGTH_BUBBA 2 52 // merc left-me-a-message-and-now-I'm-back emails 53 #define AIM_REPLY_BARRY ( MERC_UP_LEVEL_LENGTH_BUBBA + MERC_UP_LEVEL_BUBBA ) 54 #define AIM_REPLY_LENGTH_BARRY 2 55 #define AIM_REPLY_MELTDOWN (AIM_REPLY_BARRY + ( 39 * AIM_REPLY_LENGTH_BARRY )) 56 #define AIM_REPLY_LENGTH_MELTDOWN AIM_REPLY_LENGTH_BARRY 57 58 // old EXISTING emails when player starts game. They must look "read" 59 #define OLD_ENRICO_1 ( AIM_REPLY_LENGTH_MELTDOWN + AIM_REPLY_MELTDOWN ) 60 #define OLD_ENRICO_1_LENGTH 3 61 #define OLD_ENRICO_2 ( OLD_ENRICO_1 + OLD_ENRICO_1_LENGTH ) 62 #define OLD_ENRICO_2_LENGTH 3 63 #define RIS_REPORT ( OLD_ENRICO_2 + OLD_ENRICO_2_LENGTH ) 64 #define RIS_REPORT_LENGTH 2 65 #define OLD_ENRICO_3 ( RIS_REPORT + RIS_REPORT_LENGTH ) 66 #define OLD_ENRICO_3_LENGTH 3 67 68 // emails that occur from Enrico once player accomplishes things 69 #define ENRICO_MIGUEL ( OLD_ENRICO_3 + OLD_ENRICO_3_LENGTH ) 70 #define ENRICO_MIGUEL_LENGTH 3 71 #define ENRICO_PROG_20 ( ENRICO_MIGUEL + ENRICO_MIGUEL_LENGTH ) 72 #define ENRICO_PROG_20_LENGTH 3 73 #define ENRICO_PROG_55 ( ENRICO_PROG_20 + ENRICO_PROG_20_LENGTH ) 74 #define ENRICO_PROG_55_LENGTH 3 75 #define ENRICO_PROG_80 ( ENRICO_PROG_55 + ENRICO_PROG_55_LENGTH ) 76 #define ENRICO_PROG_80_LENGTH 3 77 #define ENRICO_SETBACK ( ENRICO_PROG_80 + ENRICO_PROG_80_LENGTH ) 78 #define ENRICO_SETBACK_LENGTH 3 79 #define ENRICO_SETBACK_2 ( ENRICO_SETBACK + ENRICO_SETBACK_LENGTH ) 80 #define ENRICO_SETBACK_2_LENGTH 3 81 #define ENRICO_CREATURES ( ENRICO_SETBACK_2 + ENRICO_SETBACK_2_LENGTH ) 82 #define ENRICO_CREATURES_LENGTH 3 83 84 // insurance company emails 85 #define INSUR_PAYMENT ( ENRICO_CREATURES + ENRICO_CREATURES_LENGTH ) 86 #define INSUR_PAYMENT_LENGTH 3 87 #define INSUR_SUSPIC ( INSUR_PAYMENT + INSUR_PAYMENT_LENGTH ) 88 #define INSUR_SUSPIC_LENGTH 3 89 #define INSUR_INVEST_OVER ( INSUR_SUSPIC + INSUR_SUSPIC_LENGTH ) 90 #define INSUR_INVEST_OVER_LENGTH 3 91 #define INSUR_SUSPIC_2 ( INSUR_INVEST_OVER + INSUR_INVEST_OVER_LENGTH ) 92 #define INSUR_SUSPIC_2_LENGTH 3 93 94 #define BOBBYR_NOW_OPEN ( INSUR_SUSPIC_2 + INSUR_SUSPIC_2_LENGTH ) 95 #define BOBBYR_NOW_OPEN_LENGTH 3 96 97 #define KING_PIN_LETTER ( BOBBYR_NOW_OPEN + BOBBYR_NOW_OPEN_LENGTH ) 98 #define KING_PIN_LETTER_LENGTH 4 99 100 #define LACK_PLAYER_PROGRESS_1 ( KING_PIN_LETTER + KING_PIN_LETTER_LENGTH ) 101 #define LACK_PLAYER_PROGRESS_1_LENGTH 3 102 103 #define LACK_PLAYER_PROGRESS_2 ( LACK_PLAYER_PROGRESS_1 + LACK_PLAYER_PROGRESS_1_LENGTH ) 104 #define LACK_PLAYER_PROGRESS_2_LENGTH 3 105 106 #define LACK_PLAYER_PROGRESS_3 ( LACK_PLAYER_PROGRESS_2 + LACK_PLAYER_PROGRESS_2_LENGTH ) 107 #define LACK_PLAYER_PROGRESS_3_LENGTH 3 108 109 //A package from bobby r has arrived in Drassen 110 #define BOBBYR_SHIPMENT_ARRIVED ( LACK_PLAYER_PROGRESS_3 + LACK_PLAYER_PROGRESS_3_LENGTH ) 111 #define BOBBYR_SHIPMENT_ARRIVED_LENGTH 4 112 113 // John Kulba has left the gifts for theplayers in drassen 114 #define JOHN_KULBA_GIFT_IN_DRASSEN ( BOBBYR_SHIPMENT_ARRIVED + BOBBYR_SHIPMENT_ARRIVED_LENGTH ) 115 #define JOHN_KULBA_GIFT_IN_DRASSEN_LENGTH 4 116 117 //when a merc dies on ANOTHER assignment ( ie not with the player ) 118 #define MERC_DIED_ON_OTHER_ASSIGNMENT ( JOHN_KULBA_GIFT_IN_DRASSEN + JOHN_KULBA_GIFT_IN_DRASSEN_LENGTH ) 119 #define MERC_DIED_ON_OTHER_ASSIGNMENT_LENGTH 5 120 121 #define INSUR_1HOUR_FRAUD ( MERC_DIED_ON_OTHER_ASSIGNMENT + MERC_DIED_ON_OTHER_ASSIGNMENT_LENGTH ) 122 #define INSUR_1HOUR_FRAUD_LENGTH 3 123 124 //when a merc is fired, and is injured 125 #define AIM_MEDICAL_DEPOSIT_PARTIAL_REFUND ( INSUR_1HOUR_FRAUD + INSUR_1HOUR_FRAUD_LENGTH ) 126 #define AIM_MEDICAL_DEPOSIT_PARTIAL_REFUND_LENGTH 3 127 128 //when a merc is fired, and is dead 129 #define AIM_MEDICAL_DEPOSIT_NO_REFUND ( AIM_MEDICAL_DEPOSIT_PARTIAL_REFUND + AIM_MEDICAL_DEPOSIT_PARTIAL_REFUND_LENGTH ) 130 #define AIM_MEDICAL_DEPOSIT_NO_REFUND_LENGTH 3 131 132 #define BOBBY_R_MEDUNA_SHIPMENT ( AIM_MEDICAL_DEPOSIT_NO_REFUND + AIM_MEDICAL_DEPOSIT_NO_REFUND_LENGTH ) 133 #define BOBBY_R_MEDUNA_SHIPMENT_LENGTH 4 134 135 136 struct Email 137 { 138 ST::string pSubject; 139 UINT16 usOffset; 140 UINT16 usLength; 141 UINT8 ubSender; 142 UINT32 iDate; 143 INT32 iFirstData; 144 UINT32 uiSecondData; 145 BOOLEAN fRead; 146 147 Email* Next; 148 Email* Prev; 149 }; 150 151 152 enum { 153 MAIL_ENRICO=0, 154 CHAR_PROFILE_SITE, 155 GAME_HELP, 156 IMP_PROFILE_RESULTS, 157 SPECK_FROM_MERC, 158 RIS_EMAIL, 159 BARRY_MAIL, 160 MELTDOWN_MAIL = BARRY_MAIL+ 39, 161 INSURANCE_COMPANY, 162 BOBBY_R, 163 KING_PIN, 164 JOHN_KULBA, 165 AIM_SITE, 166 }; 167 168 extern BOOLEAN fUnReadMailFlag; 169 extern BOOLEAN fNewMailFlag; 170 extern BOOLEAN fOldNewMailFlag; 171 extern BOOLEAN fDisplayMessageFlag; 172 extern BOOLEAN fReDrawNewMailFlag; 173 extern BOOLEAN fOpenMostRecentUnReadFlag; 174 extern Email* pEmailList; 175 extern Email* MailToDelete; 176 extern SGPVObject* guiEmailWarning; 177 178 179 void GameInitEmail(void); 180 void EnterEmail(void); 181 void ExitEmail(void); 182 void HandleEmail(void); 183 void RenderEmail(void); 184 185 186 // message manipulation 187 void LookForUnread(void); 188 void AddEmailMessage(INT32 iMessageOffset, INT32 iMessageLength, INT32 iDate, UINT8 ubSender, BOOLEAN fAlreadyRead, INT32 uiFirstData, UINT32 uiSecondData); 189 void AddEmail(INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate); 190 void AddPreReadEmail(INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate); 191 void DisplayNewMailBox(void); 192 void CreateDestroyNewMailButton(void); 193 void CreateDestroyDeleteNoticeMailButton(void); 194 void ReDrawNewMailBox( void ); 195 void ShutDownEmailList(void); 196 void AddEmailWithSpecialData(INT32 iMessageOffset, INT32 iMessageLength, UINT8 ubSender, INT32 iDate, INT32 iFirstData, UINT32 uiSecondData ); 197 198 #endif 199