1 #include "3dc.h"
2 #include "inline.h"
3 #include "module.h"
4 #include "stratdef.h"
5 #include "bh_types.h"
6 #include "bh_mission.h"
7 #include "ourasert.h"
8 
9 extern void MissionObjectiveTriggered(void* mission_objective);
10 extern void MakeMissionVisible(void* mission_objective);
11 extern void MakeMissionPossible(void* mission_objective);
12 extern void	StartTriggerPlotFMV(int number);
13 
MissionCompleteBehaveInit(void * bhdata,STRATEGYBLOCK * sbptr)14 void * MissionCompleteBehaveInit(void* bhdata,STRATEGYBLOCK* sbptr)
15 {
16 	MISSION_COMPLETE_BEHAV_BLOCK* m_bhv;
17 	MISSION_COMPLETE_TOOLS_TEMPLATE* mc_tt;
18 
19  	GLOBALASSERT(sbptr);
20 
21 	m_bhv=(MISSION_COMPLETE_BEHAV_BLOCK*)AllocateMem(sizeof(MISSION_COMPLETE_BEHAV_BLOCK));
22 	if(!m_bhv)
23 	{
24 		memoryInitialisationFailure = 1;
25 		return ((void *)NULL);
26 	}
27 	mc_tt= (MISSION_COMPLETE_TOOLS_TEMPLATE*) bhdata;
28 
29 	m_bhv->bhvr_type=I_BehaviourMissionComplete;
30 	sbptr->shapeIndex = 0;
31 	COPY_NAME(sbptr->SBname, mc_tt->nameID);
32 
33 
34 	m_bhv->mission_objective_ptr=mc_tt->mission_objective_ptr;
35 
36 	return((void*)m_bhv);
37 }
38 
39 #define MissionTrigger_MakeVisible 0x00000001
40 #define MissionTrigger_MakePossible 0x00000002
41 #define MissionTrigger_DontComplete 0x00000004
42 
SendRequestToMissionStrategy(STRATEGYBLOCK * sbptr,BOOL state,int extended_data)43 void SendRequestToMissionStrategy(STRATEGYBLOCK* sbptr,BOOL state,int extended_data)
44 {
45 	MISSION_COMPLETE_BEHAV_BLOCK *mc_bhv;
46 	GLOBALASSERT(sbptr);
47 	GLOBALASSERT(sbptr->SBdataptr);
48 	mc_bhv = (MISSION_COMPLETE_BEHAV_BLOCK*)sbptr->SBdataptr;
49 	GLOBALASSERT((mc_bhv->bhvr_type == I_BehaviourMissionComplete));
50 
51 	if(!state) return;
52 
53 	if(extended_data & MissionTrigger_MakeVisible)
54 	{
55 		MakeMissionVisible(mc_bhv->mission_objective_ptr);
56 	}
57 	if(extended_data & MissionTrigger_MakePossible)
58 	{
59 		MakeMissionPossible(mc_bhv->mission_objective_ptr);
60 	}
61 	if(!(extended_data & MissionTrigger_DontComplete))
62 	{
63 		MissionObjectiveTriggered(mc_bhv->mission_objective_ptr);
64 	}
65 
66 }
67 
68 
69 
70 
MessageBehaveInit(void * bhdata,STRATEGYBLOCK * sbptr)71 void * MessageBehaveInit(void* bhdata,STRATEGYBLOCK* sbptr)
72 {
73 	MESSAGE_BEHAV_BLOCK* m_bhv;
74 	MESSAGE_TOOLS_TEMPLATE* m_tt;
75 
76  	GLOBALASSERT(sbptr);
77 
78 	m_bhv=(MESSAGE_BEHAV_BLOCK*)AllocateMem(sizeof(MESSAGE_BEHAV_BLOCK));
79 	if(!m_bhv)
80 	{
81 		memoryInitialisationFailure = 1;
82 		return ((void *)NULL);
83 	}
84 	m_tt= (MESSAGE_TOOLS_TEMPLATE*) bhdata;
85 
86 	m_bhv->bhvr_type=I_BehaviourMessage;
87 	sbptr->shapeIndex = 0;
88 	COPY_NAME(sbptr->SBname, m_tt->nameID);
89 
90 
91 	m_bhv->string_no=m_tt->string_no;
92 	m_bhv->active=m_tt->active;
93 
94 	return((void*)m_bhv);
95 }
96 
97 #define TextMessageRequest_Activate 1
98 #define TextMessageRequest_ActivateAndDisplay 2
99 
SendRequestToMessageStrategy(STRATEGYBLOCK * sbptr,BOOL state,int extended_data)100 void SendRequestToMessageStrategy(STRATEGYBLOCK* sbptr,BOOL state,int extended_data)
101 {
102 	MESSAGE_BEHAV_BLOCK *m_bhv;
103 	GLOBALASSERT(sbptr);
104 	GLOBALASSERT(sbptr->SBdataptr);
105 	m_bhv = (MESSAGE_BEHAV_BLOCK*)sbptr->SBdataptr;
106 	GLOBALASSERT((m_bhv->bhvr_type == I_BehaviourMessage));
107 
108 
109 	switch(extended_data)
110 	{
111 		case TextMessageRequest_Activate :
112 			m_bhv->active=state;
113 			break;
114 
115 		case TextMessageRequest_ActivateAndDisplay :
116 			m_bhv->active=state;
117 
118 			if(m_bhv->active)
119 			{
120 				PrintStringTableEntryInConsole(m_bhv->string_no);
121 				StartTriggerPlotFMV(m_bhv->string_no);
122 			}
123 			break;
124 
125 		default :
126 			if(m_bhv->active && state)
127 			{
128 				PrintStringTableEntryInConsole(m_bhv->string_no);
129 				StartTriggerPlotFMV(m_bhv->string_no);
130 			}
131 	}
132 }
133 
134 
135 /*--------------------**
136 ** Loading and Saving **
137 **--------------------*/
138 #include "savegame.h"
139 
140 typedef struct message_save_block
141 {
142 	SAVE_BLOCK_STRATEGY_HEADER header;
143 
144 	BOOL active;
145 
146 }MESSAGE_SAVE_BLOCK;
147 
148 
LoadStrategy_Message(SAVE_BLOCK_STRATEGY_HEADER * header)149 void LoadStrategy_Message(SAVE_BLOCK_STRATEGY_HEADER* header)
150 {
151 	STRATEGYBLOCK* sbPtr;
152 	MESSAGE_BEHAV_BLOCK* m_bhv;
153 	MESSAGE_SAVE_BLOCK* block = (MESSAGE_SAVE_BLOCK*) header;
154 
155 	//check the size of the save block
156 	if(header->size!=sizeof(*block)) return;
157 
158 	//find the existing strategy block
159 	sbPtr = FindSBWithName(header->SBname);
160 	if(!sbPtr) return;
161 
162 	//make sure the strategy found is of the right type
163 	if(sbPtr->I_SBtype != I_BehaviourMessage) return;
164 
165 	m_bhv = (MESSAGE_BEHAV_BLOCK *)sbPtr->SBdataptr;
166 
167 	//start copying stuff
168 
169 	m_bhv->active = block->active;
170 }
171 
SaveStrategy_Message(STRATEGYBLOCK * sbPtr)172 void SaveStrategy_Message(STRATEGYBLOCK* sbPtr)
173 {
174 	MESSAGE_BEHAV_BLOCK* m_bhv;
175 	MESSAGE_SAVE_BLOCK* block;
176 
177 	m_bhv = (MESSAGE_BEHAV_BLOCK *)sbPtr->SBdataptr;
178 
179 	GET_STRATEGY_SAVE_BLOCK(block,sbPtr);
180 
181 	//start copying stuff
182 	block->active = m_bhv->active;
183 }
184 
185 
186 
187 /*------------------------------**
188 ** Loading/Saving mission state **
189 **------------------------------*/
190 extern int GetMissionStateForSave(void* mission_objective);
191 extern void SetMissionStateFromLoad(void* mission_objective,int state);
192 
193 
194 typedef struct mission_complete_save_block
195 {
196 	SAVE_BLOCK_STRATEGY_HEADER header;
197 
198 	int state;
199 
200 }MISSION_COMPLETE_SAVE_BLOCK;
201 
202 
LoadStrategy_MissionComplete(SAVE_BLOCK_STRATEGY_HEADER * header)203 void LoadStrategy_MissionComplete(SAVE_BLOCK_STRATEGY_HEADER* header)
204 {
205 	STRATEGYBLOCK* sbPtr;
206 	MISSION_COMPLETE_BEHAV_BLOCK* m_bhv;
207 	MISSION_COMPLETE_SAVE_BLOCK* block = (MISSION_COMPLETE_SAVE_BLOCK*) header;
208 
209 	//check the size of the save block
210 	if(header->size!=sizeof(*block)) return;
211 
212 	//find the existing strategy block
213 	sbPtr = FindSBWithName(header->SBname);
214 	if(!sbPtr) return;
215 
216 	//make sure the strategy found is of the right type
217 	if(sbPtr->I_SBtype != I_BehaviourMissionComplete) return;
218 
219 	m_bhv = (MISSION_COMPLETE_BEHAV_BLOCK *)sbPtr->SBdataptr;
220 
221 	//start copying stuff
222    	SetMissionStateFromLoad(m_bhv->mission_objective_ptr , block->state);
223 }
224 
SaveStrategy_MissionComplete(STRATEGYBLOCK * sbPtr)225 void SaveStrategy_MissionComplete(STRATEGYBLOCK* sbPtr)
226 {
227 	MISSION_COMPLETE_BEHAV_BLOCK* m_bhv;
228 	MISSION_COMPLETE_SAVE_BLOCK* block;
229 
230 	m_bhv = (MISSION_COMPLETE_BEHAV_BLOCK *)sbPtr->SBdataptr;
231 
232 	GET_STRATEGY_SAVE_BLOCK(block,sbPtr);
233 
234 	//start copying stuff
235 	block->state = GetMissionStateForSave(m_bhv->mission_objective_ptr);
236 
237 }
238