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