]> icculus.org git repositories - btb/d2x.git/blob - main/editor/kfuncs.c
imported missing editor files from d1x
[btb/d2x.git] / main / editor / kfuncs.c
1 /*
2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
11 COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
12 */
13 /*
14  * $Source: /cvs/cvsroot/d2x/main/editor/kfuncs.c,v $
15  * $Revision: 1.1 $
16  * $Author: btb $
17  * $Date: 2004-12-19 13:54:27 $
18  * 
19  * .
20  * 
21  * $Log: not supported by cvs2svn $
22  * Revision 1.1.1.1  1999/06/14 22:03:23  donut
23  * Import of d1x 1.37 source.
24  *
25  * Revision 2.1  1995/03/08  16:07:23  yuan
26  * Added segment sizing default functions.
27  * 
28  * Revision 2.0  1995/02/27  11:34:45  john
29  * Version 2.0! No anonymous unions, Watcom 10.0, with no need
30  * for bitmaps.tbl.
31  * 
32  * Revision 1.112  1995/01/12  12:10:31  yuan
33  * Added coop object capability.
34  * 
35  * Revision 1.111  1994/11/27  23:17:16  matt
36  * Made changes for new mprintf calling convention
37  * 
38  * Revision 1.110  1994/11/23  12:17:22  mike
39  * bind retmap functions.
40  * 
41  * Revision 1.109  1994/11/19  15:20:54  mike
42  * rip out unused code and data.
43  * 
44  * Revision 1.108  1994/11/17  11:39:02  matt
45  * Ripped out code to load old mines
46  * 
47  * Revision 1.107  1994/10/27  10:06:12  mike
48  * kill macro stuff.
49  * 
50  * Revision 1.106  1994/10/18  15:31:43  mike
51  * Bind mine correction function to test keypad, key=1.
52  * 
53  * Revision 1.105  1994/09/26  23:22:06  matt
54  * Added functions to keep player's starting position from getting messed up
55  * 
56  * Revision 1.104  1994/09/24  14:15:41  mike
57  * Custom colored object support.
58  * 
59  * Revision 1.103  1994/09/23  18:03:54  yuan
60  * Finished wall checking code.
61  * 
62  * Revision 1.102  1994/09/22  19:03:52  mike
63  * Test function test_shortpos on ctrl-keypad3
64  * 
65  * Revision 1.101  1994/09/20  14:35:56  mike
66  * Bind functions to keypad 2, 3.
67  * 
68  * Revision 1.100  1994/09/15  22:58:10  matt
69  * Made new objects be oriented to their segment
70  * Added keypad function to flip an object upside-down
71  * 
72  * Revision 1.99  1994/09/14  16:50:50  yuan
73  * Added load mine only function
74  * 
75  * Revision 1.98  1994/08/25  21:57:52  mike
76  * IS_CHILD stuff.
77  * 
78  * Revision 1.97  1994/08/16  18:10:52  yuan
79  * Maded C place you in the center of a segment.
80  * 
81  * Revision 1.96  1994/08/15  17:48:01  yuan
82  * Added external walls.
83  * 
84  * Revision 1.95  1994/08/13  17:32:38  mike
85  * test function.
86  * 
87  * Revision 1.94  1994/08/05  21:17:57  matt
88  * Allow two doors to be linked together
89  * 
90  * Revision 1.93  1994/08/05  18:18:52  matt
91  * Made object rotation have 4x resolution, and SHIFT+rotate do old resolution.
92  * 
93  * Revision 1.92  1994/08/03  10:31:06  mike
94  * Add texture map propagation without uv assignment.
95  * 
96  * Revision 1.91  1994/08/02  14:17:00  mike
97  * Clean up dialog boxes, add one for Matt.
98  * 
99  * Revision 1.90  1994/07/30  17:04:47  mike
100  * Bind key for max_depth on path testing.
101  * 
102  */
103
104
105 #ifdef RCS
106 static char rcsid[] = "$Id: kfuncs.c,v 1.1 2004-12-19 13:54:27 btb Exp $";
107 #endif
108
109 #include <stdlib.h>
110
111 #include "inferno.h"
112 #include "func.h"
113 #include "editor/kdefs.h"
114 #include "segment.h"
115 #include "editor/editor.h"
116 #include "error.h"
117 #include "slew.h"
118 #include "mono.h"
119 #include "gamesave.h"
120 #include "editor/eobject.h"
121 #include "editor/medwall.h"
122
123 // Test function prototypes (replace Test1, 2 and 3 with whatever function 
124 //                                                                              you wish to test.)
125 extern void test_create_path();
126 extern void test_create_all_paths();
127 extern void test_create_path_many();
128 extern void create_all_paths();
129 extern void test_create_all_anchors();
130 // extern void make_curside_bottom_side();
131 extern void move_object_to_mouse_click();
132 extern void test_create_n_segment_path();
133
134 extern void set_all_modes_to_hover(void);
135
136 extern void check_for_overlapping_segments(void);
137 extern void init_replacements();
138
139 extern void do_replacements(void);
140 extern void do_replacements_all(void);
141
142 int Test1() 
143 {
144 //      { int i;
145 //              for (i=Highest_segment_index+1; i<MAX_SEGMENTS; i++)
146 //                      Segments[i].segnum = -1;
147 //      }
148
149         mprintf((0, "Initializing replacement list.\n"));
150         init_replacements();
151
152         return 0;
153 }
154
155 int Test2() 
156 {
157 //      mprintf((0, "\nCalling check_for_overlapping_segments.\n"));
158 //      check_for_overlapping_segments();
159
160         mprintf((0, "Going to do texture replacements.\n"));
161         do_replacements();
162
163         return 0;
164 }
165
166 //extern fix fcd_test(void);
167 //extern void test_shortpos(void);
168
169 int Test3()
170 {
171         Int3(); //      Are you sure you want to do this?
172         //      This will replace all textures in your replacement list
173         //      in all mines.
174         //      If you don't want to do this, set eip to the return statement
175         //      and continue.
176
177         mprintf((0, "Going to do texture replacements.\n"));
178         do_replacements_all();
179
180         return 0;
181 }
182
183 FUNCTION med_functions[] = {
184
185 // Test functions
186 {   "med-test-1",                         0,    Test1 },
187 {   "med-test-2",                         0,    Test2 },
188 {   "med-test-3",                         0,    Test3 },
189
190 // In khelp.c
191 {   "med-help",                         0,      DoHelp },
192
193 // In kcurve.c
194 {   "med-curve-init",                   0,      InitCurve },
195 {   "med-curve-generate",               0,      GenerateCurve },
196 {   "med-curve-decrease-r4",            0,      DecreaseR4 },
197 {   "med-curve-increase-r4",            0,      IncreaseR4 },
198 {   "med-curve-decrease-r1",            0,      DecreaseR1 },
199 {   "med-curve-increase-r1",            0,      IncreaseR1 },
200 {   "med-curve-delete",                 0,      DeleteCurve },
201 {   "med-curve-set",                    0,      SetCurve },
202
203 // In kmine.c
204 {   "med-mine-save",                    0,      SaveMine },
205 //{   "med-mine-load",                    0,      LoadMine },
206 {   "med-mine-menu",                    0,      MineMenu },
207 {   "med-mine-create-new",              0,      CreateNewMine },
208 //{      "med-mine-load-old",                                    0,             LoadOldMine },                  
209 {   "med-situation-save",               0,      SaveSituation },
210 {   "med-situation-load",               0,      LoadSituation },
211 {        "med-restore-game-state",                               0,             RestoreGameState },
212 //{   "load-mine-only",                    0,      LoadMineOnly   },
213
214 // In kgame.c
215 {   "med-game-save",                    0,      SaveGameData },
216 {   "med-game-load",                    0,      LoadGameData },
217
218 // In kview.c
219 {   "med-view-zoom-out",                0,      ZoomOut },
220 {   "med-view-zoom-in",                 0,      ZoomIn },
221 {   "med-view-move-away",               0,      MoveAway },
222 {   "med-view-move-closer",             0,      MoveCloser },
223 {   "med-view-toggle-chase",            0,      ToggleChaseMode },
224
225 // In kbuild.c
226 {   "med-build-bridge",                 0,      CreateBridge },
227 {   "med-build-joint",                  0,      FormJoint },
228 {   "med-build-adj-joint",              0,      CreateAdjacentJoint },
229 {   "med-build-sloppy-adj-joint",       0,      CreateSloppyAdjacentJoint },
230 {   "med-build-sloppy-adj-joint-group", 0,      CreateSloppyAdjacentJointsGroup },
231 {   "med-build-adj-joints-segment",     0,      CreateAdjacentJointsSegment },
232 {   "med-build-adj-joints-all",         0,      CreateAdjacentJointsAll },
233
234 // In segment.c
235 {   "med-segment-bottom",                        0,      ToggleBottom }, //make_curside_bottom_side },
236 {   "med-segment-show-bottom",          0,      ToggleBottom },
237
238 // In ksegmove.c
239 {   "med-segmove-decrease-heading",     0,      DecreaseHeading },
240 {   "med-segmove-increase-heading",     0,      IncreaseHeading },
241 {   "med-segmove-decrease-pitch",       0,      DecreasePitch },
242 {   "med-segmove-increase-pitch",       0,      IncreasePitch },
243 {   "med-segmove-decrease-bank",        0,      DecreaseBank },
244 {   "med-segmove-increase-bank",        0,      IncreaseBank },
245
246 // In ksegsel.c
247 {   "med-segsel-next-segment",          0,      SelectCurrentSegForward },
248 {   "med-segsel-prev-segment",          0,      SelectCurrentSegBackward },
249 {   "med-segsel-next-side",             0,      SelectNextSide },
250 {   "med-segsel-prev-side",             0,      SelectPrevSide },
251 {   "med-segsel-set-marked",            0,      CopySegToMarked },
252 {   "med-segsel-bottom",                0,      SelectBottom },
253 {   "med-segsel-front",                 0,      SelectFront },
254 {   "med-segsel-top",                   0,      SelectTop },
255 {   "med-segsel-back",                  0,      SelectBack },
256 {   "med-segsel-left",                  0,      SelectLeft },
257 {   "med-segsel-right",                 0,      SelectRight },
258
259 // In ksegsize.c
260 {   "med-segsize-increase-length",      0,      IncreaseSegLength },
261 {   "med-segsize-decrease-length",      0,      DecreaseSegLength },
262 {   "med-segsize-decrease-width",       0,      DecreaseSegWidth },
263 {   "med-segsize-increase-width",       0,      IncreaseSegWidth },
264 {   "med-segsize-increase-height",      0,      IncreaseSegHeight },
265 {   "med-segsize-decrease-height",      0,      DecreaseSegHeight },
266
267 {   "med-segsize-increase-length-big",  0,      IncreaseSegLengthBig },
268 {   "med-segsize-decrease-length-big",  0,      DecreaseSegLengthBig },
269 {   "med-segsize-decrease-width-big",   0,      DecreaseSegWidthBig },
270 {   "med-segsize-increase-width-big",   0,      IncreaseSegWidthBig },
271 {   "med-segsize-increase-height-big",  0,      IncreaseSegHeightBig },
272 {   "med-segsize-decrease-height-big",  0,      DecreaseSegHeightBig },
273 {   "med-segsize-toggle-mode",                           0,      ToggleSegSizeMode },
274 {   "med-segsize-perturb-curside",               0,      PerturbCurside },
275 {   "med-segsize-perturb-curside-big",   0,      PerturbCursideBig },
276 {   "med-segsize-increase-length-default",  0,  IncreaseSegLengthDefault },
277 {   "med-segsize-decrease-length-default",  0,  DecreaseSegLengthDefault },
278 {   "med-segsize-increase-width-default",  0,   IncreaseSegWidthDefault },
279 {   "med-segsize-decrease-width-default",  0,   DecreaseSegWidthDefault },
280 {   "med-segsize-increase-height-default",  0,   IncreaseSegHeightDefault },
281 {   "med-segsize-decrease-height-default",  0,   DecreaseSegHeightDefault },
282
283 //  In ktmap.c
284 {   "med-tmap-assign",                  0,      AssignTexture },
285 {   "med-tmap-assign2",                 0,      AssignTexture2 },
286 {   "med-tmap-clear2",                  0,      ClearTexture2 },
287 {   "med-tmap-propogate",               0,      PropagateTextures },
288 {   "med-tmap-propogate-move",          0,      PropagateTexturesMove },
289 {   "med-tmap-propogate-move-uvs",      0,      PropagateTexturesMoveUVs },
290 {   "med-tmap-propogate-move-uvs",      0,      PropagateTexturesMoveUVs },
291 {   "med-tmap-propogate-uvs",           0,      PropagateTexturesUVs },
292 {   "med-tmap-propogate-selected",      0,      PropagateTexturesSelected },
293
294 //  In wall.c
295 {   "med-wall-add-blastable",           0,      wall_add_blastable },
296 {   "med-wall-add-door",                         0,      wall_add_door },
297 {   "med-wall-add-closed",                       0,             wall_add_closed_wall },
298 {   "med-wall-add-external",             0,             wall_add_external_wall },
299 {   "med-wall-add-illusion",           0,      wall_add_illusion },
300 {   "med-wall-restore-all",                              0,      wall_restore_all },
301 {   "med-wall-remove",                           0,      wall_remove },
302 {   "do-wall-dialog",                                            0,      do_wall_dialog },
303 {   "med-link-doors",                                            0,             wall_link_doors },
304 {   "med-unlink-door",                                           0,             wall_unlink_door },
305 {   "check-walls",                                                       0,             check_walls },
306 {   "delete-all-walls",                                          0,             delete_all_walls },
307
308 // In centers.c
309 {   "do-centers-dialog",                                                 0,      do_centers_dialog },
310
311 //  In switch.c
312 //{   "med-trigger-add-damage",           0,      trigger_add_damage },
313 //{   "med-trigger-add-exit",             0,      trigger_add_exit },
314 //{   "med-trigger-control",                             0,      trigger_control },
315 //{   "med-trigger-remove",                       0,      trigger_remove },
316 //{   "med-bind-wall-to-control",         0,      bind_wall_to_control_trigger },
317 {   "do-trigger-dialog",                                         0,      do_trigger_dialog },
318
319 //--//// In macro.c
320 //--//{   "med-macro-menu",                   0,      MacroMenu },
321 //--//{   "med-macro-play-fast",              0,      MacroPlayFast },
322 //--//{   "med-macro-play-normal",            0,      MacroPlayNormal },
323 //--//{   "med-macro-record-all",             0,      MacroRecordAll },
324 //--//{   "med-macro-record-keys",            0,      MacroRecordKeys },
325 //--//{   "med-macro-save",                   0,      MacroSave },
326 //--//{   "med-macro-load",                   0,      MacroLoad },
327
328 // In editor.c
329 {   "med-update",                       0,      medlisp_update_screen },
330 {   "med-segment-add",                  0,      AttachSegment },
331 {   "med-segment-delete",               0,      medlisp_delete_segment },
332 {   "med-segment-scale",                3,      medlisp_scale_segment },
333 {   "med-segment-rotate",               3,      medlisp_rotate_segment },
334 {   "med-dos-shell",                    0,      DosShell },
335 //{   "med-lisp-call",                    0,      CallLisp },
336 {   "med-editor-exit",                  0,      ExitEditor },
337 {   "med-segment-exchange",             0,      ExchangeMarkandCurseg },
338 {   "med-segment-mark",                 0,      CopySegToMarked },
339 {        "med-about",                                                            0,      ShowAbout },
340 {        "med-mark-start",                                               0,             MarkStart },
341 {        "med-mark-end",                                                         0,             MarkEnd },
342
343 //      In group.c
344 {        "med-group-load",                                               0,             LoadGroup },
345 {        "med-group-save",                                               0,             SaveGroup },
346 {   "med-move-group",                   0,      MoveGroup },
347 {   "med-copy-group",                   0,      CopyGroup },
348 {        "med-rotate-group",                                             0,             RotateGroup },
349 {   "med-segment-add-new",              0,      AttachSegmentNew },
350 {        "med-mark-groupseg",                                    0,             MarkGroupSegment },
351 {        "med-next-group",                                               0,             NextGroup },
352 {        "med-prev-group",                                               0,             PrevGroup },
353 {        "med-delete-group",                                             0,      DeleteGroup },
354 {        "med-create-group",                                             0,             CreateGroup },
355 {        "med-ungroup-segment",                                  0,             UngroupSegment },
356 {        "med-group-segment",                                    0,             GroupSegment },
357 {        "med-degroup-group",                                    0,             Degroup },
358 {        "med-subtract-from-group",                      0,             SubtractFromGroup },
359
360 //  In autosave.c
361 {   "med-autosave-undo",                0,      UndoCommand },
362 {        "med-autosave-toggle",                                  0,             ToggleAutosave },
363
364 //      In texture.c
365 {       "med-tass-flip-x",                                               0,     TexFlipX },
366 {       "med-tass-flip-y",                                               0,     TexFlipY },
367 {       "med-tass-slide-up",                                             0,     TexSlideUp },
368 {       "med-tass-slide-left",                                   0,     TexSlideLeft },
369 {       "med-tass-set-default",                                  0,     TexSetDefault },
370 {       "med-tass-slide-right",                                  0,     TexSlideRight },
371 {       "med-tass-rotate-left",                                  0,     TexRotateLeft },
372 {       "med-tass-slide-down",                                   0,     TexSlideDown },
373 {       "med-tass-stretch-down",                                 0,     TexStretchDown },
374 {       "med-tass-stretch-up",                                   0,     TexStretchUp },
375 {       "med-tass-rotate-right",                                 0,     TexRotateRight },
376 {       "med-tass-select-active-edge",           0,     TexSelectActiveEdge },
377 {       "med-tass-rotate-90-degrees",                    0,     TexRotate90Degrees },
378 {  "med-tass-increase-tiling",          0,   TexIncreaseTiling },
379 {  "med-tass-decrease-tiling",          0,   TexDecreaseTiling },
380 {       "med-tass-slide-up-big",                                 0,     TexSlideUpBig },
381 {       "med-tass-slide-left-big",                               0,     TexSlideLeftBig },
382 {       "med-tass-slide-right-big",                      0,     TexSlideRightBig },
383 {       "med-tass-rotate-left-big",                      0,     TexRotateLeftBig },
384 {       "med-tass-slide-down-big",                               0,     TexSlideDownBig },
385 {       "med-tass-rotate-right-big",                     0,     TexRotateRightBig },
386
387 //      In eobject.c
388 {       "med-obj-set-player",                                    0,     SetPlayerPosition },
389 {       "med-obj-place-object",                                  0,     ObjectPlaceObject },
390 {       "med-obj-place-object-tmap",                     0,     ObjectPlaceObjectTmap },
391 {       "med-obj-move-nearer",                                   0,     ObjectMoveNearer },
392 {       "med-obj-move-further",                                  0,     ObjectMoveFurther },
393 {       "med-obj-delete-object",                                 0,     ObjectDelete },
394 {  "med-obj-move-forward",                                       0,     ObjectMoveForward },
395 {  "med-obj-move-left",                                          0,     ObjectMoveLeft },
396 {  "med-obj-set-default",                                        0,     ObjectSetDefault },
397 {  "med-obj-move-right",                                         0,     ObjectMoveRight },
398 {  "med-obj-move-back",                                          0,     ObjectMoveBack },
399 {  "med-obj-move-down",                                          0,     ObjectMoveDown },
400 {  "med-obj-move-up",                                            0,     ObjectMoveUp },
401 {  "med-obj-select-next-in-segment",     0,     ObjectSelectNextinSegment },
402 {  "med-obj-decrease-bank",                              0,     ObjectDecreaseBank },
403 {  "med-obj-increase-bank",                              0,     ObjectIncreaseBank },
404 {  "med-obj-decrease-pitch",                             0,     ObjectDecreasePitch },
405 {  "med-obj-increase-pitch",                             0,     ObjectIncreasePitch },
406 {  "med-obj-decrease-heading",                   0,     ObjectDecreaseHeading },
407 {  "med-obj-increase-heading",                   0,     ObjectIncreaseHeading },
408 {  "med-obj-decrease-bank-big",                  0,     ObjectDecreaseBankBig },
409 {  "med-obj-increase-bank-big",                  0,     ObjectIncreaseBankBig },
410 {  "med-obj-decrease-pitch-big",                         0,     ObjectDecreasePitchBig },
411 {  "med-obj-increase-pitch-big",                         0,     ObjectIncreasePitchBig },
412 {  "med-obj-decrease-heading-big",               0,     ObjectDecreaseHeadingBig },
413 {  "med-obj-increase-heading-big",               0,     ObjectIncreaseHeadingBig },
414 {  "med-obj-reset",                                                      0,     ObjectResetObject },
415 {  "med-obj-flip",                                                       0,     ObjectFlipObject },
416 {       "med-obj-make-coop",                                     0,     ObjectMakeCoop },
417 //{     "med-obj-place-hostage",                                 0,     ObjectPlaceHostage },
418
419 // In objpage.c
420 {       "med-obj-select-next-type",                      0,     objpage_goto_next_object },
421
422
423 //      In elight.c
424 {       "med-light-select-next-vertex",          0,     LightSelectNextVertex },
425 {       "med-light-select-next-edge",                    0,     LightSelectNextEdge },
426 {       "med-light-copy-intensity-side",                 0,     LightCopyIntensity },
427 {       "med-light-copy-intensity-segment",      0,     LightCopyIntensitySegment },
428 {       "med-light-decrease-light-vertex",       0,     LightDecreaseLightVertex },
429 {       "med-light-increase-light-vertex",       0,     LightIncreaseLightVertex },
430 {       "med-light-decrease-light-side",                 0,     LightDecreaseLightSide },
431 {       "med-light-increase-light-side",                 0,     LightIncreaseLightSide },
432 {       "med-light-decrease-light-segment",      0,     LightDecreaseLightSegment },
433 {       "med-light-increase-light-segment",      0,     LightIncreaseLightSegment },
434 {       "med-light-set-maximum",                                 0,     LightSetMaximum },
435 {       "med-light-set-default",                                 0,     LightSetDefault },
436 {       "med-light-assign-default-all",          0,     LightSetDefaultAll },
437 {       "med-light-ambient-lighting",                    0,     LightAmbientLighting },
438
439 // In seguvs.c                                                                                                                                          
440 {       "med-seguvs-fix-bogus-uvs-on-side",      0,     fix_bogus_uvs_on_side},
441 {       "med-seguvs-fix-bogus-uvs-all",          0,     fix_bogus_uvs_all},
442 {       "med-seguvs-smooth-lighting-all",        0,   set_average_light_on_all},
443 {       "med-seguvs-smooth-lighting-all-quick",  0,   set_average_light_on_all_quick},
444 {       "med-seguvs-smooth-lighting",                    0,   set_average_light_on_curside},
445
446 // Miscellaneous, please neaten and catagorize me!
447
448 {   "med-increase-draw-depth",          0,        IncreaseDrawDepth },
449 {   "med-decrease-draw-depth",          0,        DecreaseDrawDepth },
450 {   "med-goto-game",                    0,        GotoGame },
451 {   "med-goto-game-screen",             0,        GotoGameScreen },
452 {   "med-drop-into-debugger",           0,        DropIntoDebugger },
453 // {   "med-sync-large-view",              0,        SyncLargeView },
454 {   "med-create-default-new-segment",   0,        CreateDefaultNewSegment },
455 {   "med-create-default-new-segment-and-attach",   0,        CreateDefaultNewSegmentandAttach },
456 {   "med-clear-selected-list",          0,        ClearSelectedList },
457 {   "med-clear-found-list",             0,        ClearFoundList },
458 {   "med-sort-selected-list",           0,        SortSelectedList },
459 {   "med-set-player-from-curseg",       0,        SetPlayerFromCursegAndRotate },
460 {   "med-set-player-from-curseg-minus-one", 0,        SetPlayerFromCursegMinusOne },
461 {   "med-find-concave-segs",            0,        FindConcaveSegs },
462 {   "med-select-next-found-seg",        0,        SelectNextFoundSeg },
463 {   "med-select-prev-found-seg",        0,        SelectPreviousFoundSeg },
464 {   "med-stop-slew",                    0,        slew_stop },
465 //{   "med-reset-orientation",            0,        do_reset_orient },
466 {   "med-game-zoom-out",                0,        GameZoomOut },
467 {   "med-game-zoom-in",                 0,        GameZoomIn },
468 {        "med-keypad-goto-prev",                                 0,        med_keypad_goto_prev },
469 {        "med-keypad-goto-next",                                 0,        med_keypad_goto_next },
470 {        "med-keypad-goto",                              1,        med_keypad_goto },
471
472 // John's temporary function page stuff
473 // {   "med-set-function-page",            1,        medtmp_set_page },
474
475 // In fuelcen.c
476 {       "med-fuelcen-create",                                   0,      fuelcen_create_from_curseg },
477 {       "med-repaircen-create",                                 0,      repaircen_create_from_curseg },
478 {       "med-controlcen-create",                                        0,  controlcen_create_from_curseg },
479 {       "med-robotmaker-create",                                        0,  robotmaker_create_from_curseg },
480 {       "med-fuelcen-reset-all",                                        0,  fuelcen_reset_all },
481 {       "med-fuelcen-delete",                                   0,              fuelcen_delete_from_curseg },
482
483 // In robot.c
484 {       "do-robot-dialog",                                                      0, do_robot_dialog },
485 {       "do-object-dialog",                                                     0, do_object_dialog },
486 {       "do-hostage-dialog",                                                    0, do_hostage_dialog },
487
488 // In gamesavec
489 {       "rename-level",                                                 0, get_level_name },
490
491 // The terminating marker
492 {   NULL, 0, NULL } };
493
494 void init_med_functions()
495 {
496         func_init(med_functions, (sizeof(med_functions)/sizeof(FUNCTION))-1 );
497 }
498