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