1 /* ScummVM - Graphic Adventure Engine
2 *
3 * ScummVM is the legal property of its developers, whose names
4 * are too numerous to list here. Please refer to the COPYRIGHT
5 * file distributed with this source distribution.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 *
21 */
22
23 #include "ags/engine/ac/dialog.h"
24 #include "ags/shared/ac/dialog_topic.h"
25 #include "ags/engine/ac/dialog_options_rendering.h"
26 #include "ags/shared/ac/game_struct_defines.h"
27 #include "ags/engine/debugging/debug_log.h"
28 #include "ags/engine/script/runtime_script_value.h"
29 #include "ags/engine/ac/dynobj/cc_dialog.h"
30 #include "ags/shared/debugging/out.h"
31 #include "ags/engine/script/script_api.h"
32 #include "ags/engine/script/script_runtime.h"
33 #include "ags/globals.h"
34
35 namespace AGS3 {
36
37 // ** SCRIPT DIALOGOPTIONSRENDERING OBJECT
38
DialogOptionsRendering_Update(ScriptDialogOptionsRendering * dlgOptRender)39 void DialogOptionsRendering_Update(ScriptDialogOptionsRendering *dlgOptRender) {
40 dlgOptRender->needRepaint = true;
41 }
42
DialogOptionsRendering_RunActiveOption(ScriptDialogOptionsRendering * dlgOptRender)43 bool DialogOptionsRendering_RunActiveOption(ScriptDialogOptionsRendering *dlgOptRender) {
44 dlgOptRender->chosenOptionID = dlgOptRender->activeOptionID;
45 return dlgOptRender->chosenOptionID >= 0;
46 }
47
DialogOptionsRendering_GetX(ScriptDialogOptionsRendering * dlgOptRender)48 int DialogOptionsRendering_GetX(ScriptDialogOptionsRendering *dlgOptRender) {
49 return dlgOptRender->x;
50 }
51
DialogOptionsRendering_SetX(ScriptDialogOptionsRendering * dlgOptRender,int newX)52 void DialogOptionsRendering_SetX(ScriptDialogOptionsRendering *dlgOptRender, int newX) {
53 dlgOptRender->x = newX;
54 }
55
DialogOptionsRendering_GetY(ScriptDialogOptionsRendering * dlgOptRender)56 int DialogOptionsRendering_GetY(ScriptDialogOptionsRendering *dlgOptRender) {
57 return dlgOptRender->y;
58 }
59
DialogOptionsRendering_SetY(ScriptDialogOptionsRendering * dlgOptRender,int newY)60 void DialogOptionsRendering_SetY(ScriptDialogOptionsRendering *dlgOptRender, int newY) {
61 dlgOptRender->y = newY;
62 }
63
DialogOptionsRendering_GetWidth(ScriptDialogOptionsRendering * dlgOptRender)64 int DialogOptionsRendering_GetWidth(ScriptDialogOptionsRendering *dlgOptRender) {
65 return dlgOptRender->width;
66 }
67
DialogOptionsRendering_SetWidth(ScriptDialogOptionsRendering * dlgOptRender,int newWidth)68 void DialogOptionsRendering_SetWidth(ScriptDialogOptionsRendering *dlgOptRender, int newWidth) {
69 dlgOptRender->width = newWidth;
70 }
71
DialogOptionsRendering_GetHeight(ScriptDialogOptionsRendering * dlgOptRender)72 int DialogOptionsRendering_GetHeight(ScriptDialogOptionsRendering *dlgOptRender) {
73 return dlgOptRender->height;
74 }
75
DialogOptionsRendering_SetHeight(ScriptDialogOptionsRendering * dlgOptRender,int newHeight)76 void DialogOptionsRendering_SetHeight(ScriptDialogOptionsRendering *dlgOptRender, int newHeight) {
77 dlgOptRender->height = newHeight;
78 }
79
DialogOptionsRendering_GetHasAlphaChannel(ScriptDialogOptionsRendering * dlgOptRender)80 int DialogOptionsRendering_GetHasAlphaChannel(ScriptDialogOptionsRendering *dlgOptRender) {
81 return dlgOptRender->hasAlphaChannel;
82 }
83
DialogOptionsRendering_SetHasAlphaChannel(ScriptDialogOptionsRendering * dlgOptRender,bool hasAlphaChannel)84 void DialogOptionsRendering_SetHasAlphaChannel(ScriptDialogOptionsRendering *dlgOptRender, bool hasAlphaChannel) {
85 dlgOptRender->hasAlphaChannel = hasAlphaChannel;
86 }
87
DialogOptionsRendering_GetParserTextboxX(ScriptDialogOptionsRendering * dlgOptRender)88 int DialogOptionsRendering_GetParserTextboxX(ScriptDialogOptionsRendering *dlgOptRender) {
89 return dlgOptRender->parserTextboxX;
90 }
91
DialogOptionsRendering_SetParserTextboxX(ScriptDialogOptionsRendering * dlgOptRender,int newX)92 void DialogOptionsRendering_SetParserTextboxX(ScriptDialogOptionsRendering *dlgOptRender, int newX) {
93 dlgOptRender->parserTextboxX = newX;
94 }
95
DialogOptionsRendering_GetParserTextboxY(ScriptDialogOptionsRendering * dlgOptRender)96 int DialogOptionsRendering_GetParserTextboxY(ScriptDialogOptionsRendering *dlgOptRender) {
97 return dlgOptRender->parserTextboxY;
98 }
99
DialogOptionsRendering_SetParserTextboxY(ScriptDialogOptionsRendering * dlgOptRender,int newY)100 void DialogOptionsRendering_SetParserTextboxY(ScriptDialogOptionsRendering *dlgOptRender, int newY) {
101 dlgOptRender->parserTextboxY = newY;
102 }
103
DialogOptionsRendering_GetParserTextboxWidth(ScriptDialogOptionsRendering * dlgOptRender)104 int DialogOptionsRendering_GetParserTextboxWidth(ScriptDialogOptionsRendering *dlgOptRender) {
105 return dlgOptRender->parserTextboxWidth;
106 }
107
DialogOptionsRendering_SetParserTextboxWidth(ScriptDialogOptionsRendering * dlgOptRender,int newWidth)108 void DialogOptionsRendering_SetParserTextboxWidth(ScriptDialogOptionsRendering *dlgOptRender, int newWidth) {
109 dlgOptRender->parserTextboxWidth = newWidth;
110 }
111
DialogOptionsRendering_GetDialogToRender(ScriptDialogOptionsRendering * dlgOptRender)112 ScriptDialog *DialogOptionsRendering_GetDialogToRender(ScriptDialogOptionsRendering *dlgOptRender) {
113 return &_G(scrDialog)[dlgOptRender->dialogID];
114 }
115
DialogOptionsRendering_GetSurface(ScriptDialogOptionsRendering * dlgOptRender)116 ScriptDrawingSurface *DialogOptionsRendering_GetSurface(ScriptDialogOptionsRendering *dlgOptRender) {
117 dlgOptRender->surfaceAccessed = true;
118 return dlgOptRender->surfaceToRenderTo;
119 }
120
DialogOptionsRendering_GetActiveOptionID(ScriptDialogOptionsRendering * dlgOptRender)121 int DialogOptionsRendering_GetActiveOptionID(ScriptDialogOptionsRendering *dlgOptRender) {
122 return dlgOptRender->activeOptionID + 1;
123 }
124
DialogOptionsRendering_SetActiveOptionID(ScriptDialogOptionsRendering * dlgOptRender,int activeOptionID)125 void DialogOptionsRendering_SetActiveOptionID(ScriptDialogOptionsRendering *dlgOptRender, int activeOptionID) {
126 int optionCount = _G(dialog)[_G(scrDialog)[dlgOptRender->dialogID].id].numoptions;
127 if ((activeOptionID < 0) || (activeOptionID > optionCount))
128 quitprintf("DialogOptionsRenderingInfo.ActiveOptionID: invalid ID specified for this dialog (specified %d, valid range: 1..%d)", activeOptionID, optionCount);
129
130 if (dlgOptRender->activeOptionID != activeOptionID - 1) {
131 dlgOptRender->activeOptionID = activeOptionID - 1;
132 dlgOptRender->needRepaint = true;
133 }
134 }
135
136 //=============================================================================
137 //
138 // Script API Functions
139 //
140 //=============================================================================
141
Sc_DialogOptionsRendering_Update(void * self,const RuntimeScriptValue * params,int32_t param_count)142 RuntimeScriptValue Sc_DialogOptionsRendering_Update(void *self, const RuntimeScriptValue *params, int32_t param_count) {
143 API_OBJCALL_VOID(ScriptDialogOptionsRendering, DialogOptionsRendering_Update);
144 }
145
Sc_DialogOptionsRendering_RunActiveOption(void * self,const RuntimeScriptValue * params,int32_t param_count)146 RuntimeScriptValue Sc_DialogOptionsRendering_RunActiveOption(void *self, const RuntimeScriptValue *params, int32_t param_count) {
147 API_OBJCALL_BOOL(ScriptDialogOptionsRendering, DialogOptionsRendering_RunActiveOption);
148 }
149
150 // int (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetActiveOptionID(void * self,const RuntimeScriptValue * params,int32_t param_count)151 RuntimeScriptValue Sc_DialogOptionsRendering_GetActiveOptionID(void *self, const RuntimeScriptValue *params, int32_t param_count) {
152 API_OBJCALL_INT(ScriptDialogOptionsRendering, DialogOptionsRendering_GetActiveOptionID);
153 }
154
155 // void (ScriptDialogOptionsRendering *dlgOptRender, int activeOptionID)
Sc_DialogOptionsRendering_SetActiveOptionID(void * self,const RuntimeScriptValue * params,int32_t param_count)156 RuntimeScriptValue Sc_DialogOptionsRendering_SetActiveOptionID(void *self, const RuntimeScriptValue *params, int32_t param_count) {
157 API_OBJCALL_VOID_PINT(ScriptDialogOptionsRendering, DialogOptionsRendering_SetActiveOptionID);
158 }
159
160 // ScriptDialog* (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetDialogToRender(void * self,const RuntimeScriptValue * params,int32_t param_count)161 RuntimeScriptValue Sc_DialogOptionsRendering_GetDialogToRender(void *self, const RuntimeScriptValue *params, int32_t param_count) {
162 API_OBJCALL_OBJ(ScriptDialogOptionsRendering, ScriptDialog, _GP(ccDynamicDialog), DialogOptionsRendering_GetDialogToRender);
163 }
164
165 // int (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetHeight(void * self,const RuntimeScriptValue * params,int32_t param_count)166 RuntimeScriptValue Sc_DialogOptionsRendering_GetHeight(void *self, const RuntimeScriptValue *params, int32_t param_count) {
167 API_OBJCALL_INT(ScriptDialogOptionsRendering, DialogOptionsRendering_GetHeight);
168 }
169
170 // void (ScriptDialogOptionsRendering *dlgOptRender, int newHeight)
Sc_DialogOptionsRendering_SetHeight(void * self,const RuntimeScriptValue * params,int32_t param_count)171 RuntimeScriptValue Sc_DialogOptionsRendering_SetHeight(void *self, const RuntimeScriptValue *params, int32_t param_count) {
172 API_OBJCALL_VOID_PINT(ScriptDialogOptionsRendering, DialogOptionsRendering_SetHeight);
173 }
174
175 // int (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetParserTextboxX(void * self,const RuntimeScriptValue * params,int32_t param_count)176 RuntimeScriptValue Sc_DialogOptionsRendering_GetParserTextboxX(void *self, const RuntimeScriptValue *params, int32_t param_count) {
177 API_OBJCALL_INT(ScriptDialogOptionsRendering, DialogOptionsRendering_GetParserTextboxX);
178 }
179
180 // void (ScriptDialogOptionsRendering *dlgOptRender, int newX)
Sc_DialogOptionsRendering_SetParserTextboxX(void * self,const RuntimeScriptValue * params,int32_t param_count)181 RuntimeScriptValue Sc_DialogOptionsRendering_SetParserTextboxX(void *self, const RuntimeScriptValue *params, int32_t param_count) {
182 API_OBJCALL_VOID_PINT(ScriptDialogOptionsRendering, DialogOptionsRendering_SetParserTextboxX);
183 }
184
185 // int (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetParserTextboxY(void * self,const RuntimeScriptValue * params,int32_t param_count)186 RuntimeScriptValue Sc_DialogOptionsRendering_GetParserTextboxY(void *self, const RuntimeScriptValue *params, int32_t param_count) {
187 API_OBJCALL_INT(ScriptDialogOptionsRendering, DialogOptionsRendering_GetParserTextboxY);
188 }
189
190 // void (ScriptDialogOptionsRendering *dlgOptRender, int newY)
Sc_DialogOptionsRendering_SetParserTextboxY(void * self,const RuntimeScriptValue * params,int32_t param_count)191 RuntimeScriptValue Sc_DialogOptionsRendering_SetParserTextboxY(void *self, const RuntimeScriptValue *params, int32_t param_count) {
192 API_OBJCALL_VOID_PINT(ScriptDialogOptionsRendering, DialogOptionsRendering_SetParserTextboxY);
193 }
194
195 // int (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetParserTextboxWidth(void * self,const RuntimeScriptValue * params,int32_t param_count)196 RuntimeScriptValue Sc_DialogOptionsRendering_GetParserTextboxWidth(void *self, const RuntimeScriptValue *params, int32_t param_count) {
197 API_OBJCALL_INT(ScriptDialogOptionsRendering, DialogOptionsRendering_GetParserTextboxWidth);
198 }
199
200 // void (ScriptDialogOptionsRendering *dlgOptRender, int newWidth)
Sc_DialogOptionsRendering_SetParserTextboxWidth(void * self,const RuntimeScriptValue * params,int32_t param_count)201 RuntimeScriptValue Sc_DialogOptionsRendering_SetParserTextboxWidth(void *self, const RuntimeScriptValue *params, int32_t param_count) {
202 API_OBJCALL_VOID_PINT(ScriptDialogOptionsRendering, DialogOptionsRendering_SetParserTextboxWidth);
203 }
204
205 // ScriptDrawingSurface* (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetSurface(void * self,const RuntimeScriptValue * params,int32_t param_count)206 RuntimeScriptValue Sc_DialogOptionsRendering_GetSurface(void *self, const RuntimeScriptValue *params, int32_t param_count) {
207 API_OBJCALL_OBJAUTO(ScriptDialogOptionsRendering, ScriptDrawingSurface, DialogOptionsRendering_GetSurface);
208 }
209
210 // int (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetWidth(void * self,const RuntimeScriptValue * params,int32_t param_count)211 RuntimeScriptValue Sc_DialogOptionsRendering_GetWidth(void *self, const RuntimeScriptValue *params, int32_t param_count) {
212 API_OBJCALL_INT(ScriptDialogOptionsRendering, DialogOptionsRendering_GetWidth);
213 }
214
215 // void (ScriptDialogOptionsRendering *dlgOptRender, int newWidth)
Sc_DialogOptionsRendering_SetWidth(void * self,const RuntimeScriptValue * params,int32_t param_count)216 RuntimeScriptValue Sc_DialogOptionsRendering_SetWidth(void *self, const RuntimeScriptValue *params, int32_t param_count) {
217 API_OBJCALL_VOID_PINT(ScriptDialogOptionsRendering, DialogOptionsRendering_SetWidth);
218 }
219
220 // int (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetX(void * self,const RuntimeScriptValue * params,int32_t param_count)221 RuntimeScriptValue Sc_DialogOptionsRendering_GetX(void *self, const RuntimeScriptValue *params, int32_t param_count) {
222 API_OBJCALL_INT(ScriptDialogOptionsRendering, DialogOptionsRendering_GetX);
223 }
224
225 // void (ScriptDialogOptionsRendering *dlgOptRender, int newX)
Sc_DialogOptionsRendering_SetX(void * self,const RuntimeScriptValue * params,int32_t param_count)226 RuntimeScriptValue Sc_DialogOptionsRendering_SetX(void *self, const RuntimeScriptValue *params, int32_t param_count) {
227 API_OBJCALL_VOID_PINT(ScriptDialogOptionsRendering, DialogOptionsRendering_SetX);
228 }
229
230 // int (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetY(void * self,const RuntimeScriptValue * params,int32_t param_count)231 RuntimeScriptValue Sc_DialogOptionsRendering_GetY(void *self, const RuntimeScriptValue *params, int32_t param_count) {
232 API_OBJCALL_INT(ScriptDialogOptionsRendering, DialogOptionsRendering_GetY);
233 }
234
235 // void (ScriptDialogOptionsRendering *dlgOptRender, int newY)
Sc_DialogOptionsRendering_SetY(void * self,const RuntimeScriptValue * params,int32_t param_count)236 RuntimeScriptValue Sc_DialogOptionsRendering_SetY(void *self, const RuntimeScriptValue *params, int32_t param_count) {
237 API_OBJCALL_VOID_PINT(ScriptDialogOptionsRendering, DialogOptionsRendering_SetY);
238 }
239
Sc_DialogOptionsRendering_GetHasAlphaChannel(void * self,const RuntimeScriptValue * params,int32_t param_count)240 RuntimeScriptValue Sc_DialogOptionsRendering_GetHasAlphaChannel(void *self, const RuntimeScriptValue *params, int32_t param_count) {
241 API_OBJCALL_INT(ScriptDialogOptionsRendering, DialogOptionsRendering_GetHasAlphaChannel);
242 }
243
Sc_DialogOptionsRendering_SetHasAlphaChannel(void * self,const RuntimeScriptValue * params,int32_t param_count)244 RuntimeScriptValue Sc_DialogOptionsRendering_SetHasAlphaChannel(void *self, const RuntimeScriptValue *params, int32_t param_count) {
245 API_OBJCALL_VOID_PBOOL(ScriptDialogOptionsRendering, DialogOptionsRendering_SetHasAlphaChannel);
246 }
247
248
RegisterDialogOptionsRenderingAPI()249 void RegisterDialogOptionsRenderingAPI() {
250 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::Update^0", Sc_DialogOptionsRendering_Update);
251 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::RunActiveOption^0", Sc_DialogOptionsRendering_RunActiveOption);
252 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_ActiveOptionID", Sc_DialogOptionsRendering_GetActiveOptionID);
253 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::set_ActiveOptionID", Sc_DialogOptionsRendering_SetActiveOptionID);
254 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_DialogToRender", Sc_DialogOptionsRendering_GetDialogToRender);
255 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_Height", Sc_DialogOptionsRendering_GetHeight);
256 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::set_Height", Sc_DialogOptionsRendering_SetHeight);
257 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_ParserTextBoxX", Sc_DialogOptionsRendering_GetParserTextboxX);
258 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::set_ParserTextBoxX", Sc_DialogOptionsRendering_SetParserTextboxX);
259 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_ParserTextBoxY", Sc_DialogOptionsRendering_GetParserTextboxY);
260 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::set_ParserTextBoxY", Sc_DialogOptionsRendering_SetParserTextboxY);
261 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_ParserTextBoxWidth", Sc_DialogOptionsRendering_GetParserTextboxWidth);
262 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::set_ParserTextBoxWidth", Sc_DialogOptionsRendering_SetParserTextboxWidth);
263 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_Surface", Sc_DialogOptionsRendering_GetSurface);
264 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_Width", Sc_DialogOptionsRendering_GetWidth);
265 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::set_Width", Sc_DialogOptionsRendering_SetWidth);
266 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_X", Sc_DialogOptionsRendering_GetX);
267 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::set_X", Sc_DialogOptionsRendering_SetX);
268 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_Y", Sc_DialogOptionsRendering_GetY);
269 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::set_Y", Sc_DialogOptionsRendering_SetY);
270 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_HasAlphaChannel", Sc_DialogOptionsRendering_GetHasAlphaChannel);
271 ccAddExternalObjectFunction("DialogOptionsRenderingInfo::set_HasAlphaChannel", Sc_DialogOptionsRendering_SetHasAlphaChannel);
272 }
273
274 } // namespace AGS3
275