[go: up one dir, main page]

Menu

[904618]: / src / dstrings.c  Maximize  Restore  History

Download this file

984 lines (891 with data), 53.1 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
// -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*-
// ----------------------------------------------------------------------------
// :oCCCCOCoc.
// .cCO8OOOOOOOOO8Oo:
// .oOO8OOOOOOOOOOOOOOOCc
// cO8888: .:oOOOOC. TM
// :888888: :CCCc .oOOOOC. ### ### #########
// C888888: .ooo: .C######## ##### ##### ###### ###### ##########
// O888888: .oO### ### ##### ##### ######## ######## #### ###
// C888888: :8O. .C########## ### #### ### ## ## ## ## #### ###
// :8@@@@8: :888c o### ### #### ### ######## ######## ##########
// :8@@@@C C@@@@ oo######## ### ## ### ###### ###### #########
// cO@@@@@@@@@@@@@@@@@Oc0
// :oO8@@@@@@@@@@Oo.
// .oCOOOOOCc. http://remood.org/
// ----------------------------------------------------------------------------
// Copyright (C) 1993-1996 by id Software, Inc.
// Copyright (C) 1998-2000 by DooM Legacy Team.
// Copyright (C) 2008-2013 GhostlyDeath <ghostlydeath@remood.org>
// <ghostlydeath@gmail.com>
// ----------------------------------------------------------------------------
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// ----------------------------------------------------------------------------
// DESCRIPTION:
// Globally defined strings.
#include "dstrings.h"
#include "z_zone.h"
/* UnicodeStrings -- Game strings */
StringGroupEX_t UnicodeStrings[NUMUNICODESTRINGS] =
{
/****** MENUS ******/
{"MENU_NULLSPACE", ""},
{"MENUNEWGAME_TITLE", "New Game"},
{"MENUNEWGAME_CLASSIC", "Classic..."},
{"MENUNEWGAME_CREATEGAME", "Create Game..."},
{ "MENUNEWGAME_UNLISTEDIP", "Connect to Unlisted Server..."},
{ "MENUUNLISTED_CONNECT", "Connect!"},
{ "MENUUNLISTED_ADDRESS", "Remote Address:"},
{ "MENUGAMEVAR_CATNONE", ""},
{ "MENUGENERAL_HELLOWORLD", "Hello World!"},
{ "MENUGENERAL_NEWGAMETYPE", "Connection Type"},
{ "MENUGENERAL_NEWGAMEISLOCAL", "Local System"},
{ "MENUGENERAL_NEWGAMELEVEL", "Level"},
{ "MENUGENERAL_SOLOGAME", "Single Player"},
{ "MENUGENERAL_MAINMENU", "Main Menu"},
{ "MENUGENERAL_QUIT", "Quit"},
{ "MENUGENERAL_CLASSICSTART", "Start Classic Game"},
{ "MENUGENERAL_SKILLLEVEL", "Choose Skill Level"},
{ "MENUGENERAL_SELECTEPIS", "Select Episode"},
{ "MENUGENERAL_SELECTPROFILE", "Select Profile"},
{ "MENUGENERAL_SELECTTHISPROF", "Use This Profile"},
{ "MENUGENERAL_CREATEPROF", "Create Profile"},
{ "MENUGENERAL_CURRENTPROF", "Current Profile"},
{ "MENUGENERAL_OPTIONS", "Options"},
{ "MENUGENERAL_SERVERVARS", "Internet/LAN Server Settings"},
{ "MENUGENERAL_CONSOLEVARS", "Console Settings"},
{ "MENUGENERAL_INTERFACEVARS", "System Interface Settings"},
{ "MENUGENERAL_MENUVARS", "Menu Settings"},
{ "MENUGENERAL_RENDERERVARS", "Renderer Settings"},
{ "MENUGENERAL_SCREENVARS", "Video and Screen Settings"},
{ "MENUGENERAL_SOUNDVARS", "Sound and Music Settings"},
{ "MENUGENERAL_CONBACKCOLOR", "Background Color"},
{ "MENUGENERAL_CONFONT", "Font"},
{ "MENUGENERAL_CONFORECOLOR", "Foreground Color"},
{ "MENUGENERAL_CONMONOSPACE", "Monospace Characters"},
{ "MENUGENERAL_CONPAUSEGAME", "Pause When Active"},
{ "MENUGENERAL_CONSCALE", "Scale"},
{ "MENUGENERAL_CONSCREENHEIGHT", "Height of Console"},
{ "MENUGENERAL_IENABLEJOYSTICK", "Enable Joysticks"},
{ "MENUGENERAL_IENABLEMOUSE", "Enable Mouse"},
{ "MENUGENERAL_IOSSMIDIDEV", "OSS MIDI Device Pathname"},
{ "MENUGENERAL_MENUCOMPACT", "Compact Menus"},
{ "MENUGENERAL_MENUFONT", "Font"},
{ "MENUGENERAL_MENUHEADERCOLOR", "Header Color"},
{ "MENUGENERAL_MENUITEMCOLOR", "Item Color"},
{ "MENUGENERAL_MENUVALCOLOR", "Value Color"},
{ "MENUGENERAL_RCUTWALLDETAIL", "Reduce Texture Detail"},
{ "MENUGENERAL_RDRAWSPLATS", "Draw Splats"},
{ "MENUGENERAL_RFAKESSPAL", "Fake Split-Screen Palette"},
{ "MENUGENERAL_RMAXSPLATS", "Max Splats"},
{ "MENUGENERAL_RRENDERER", "Renderer"},
{ "MENUGENERAL_RTRANSPARENCY", "Enable Transparency"},
{ "MENUGENERAL_RVIEWSIZE", "View Size"},
{ "MENUGENERAL_SCRFULLSCREEN", "Fullscreen"},
{ "MENUGENERAL_SCRHEIGHT", "Screen Height"},
{ "MENUGENERAL_SCRWIDTH", "Screen Width"},
{ "MENUGENERAL_SNDBUFFERSIZE", "Buffer Size"},
{ "MENUGENERAL_SNDCHANNELS", "Channels"},
{ "MENUGENERAL_SNDDENSITY", "Bit Depth"},
{ "MENUGENERAL_SNDMUSICVOLUME", "Music Volume"},
{ "MENUGENERAL_SNDQUALITY", "Frequency"},
{ "MENUGENERAL_SNDRANDOMPITCH", "Random Pitching"},
{ "MENUGENERAL_SNDRESERVEDCHANNELS", "Reserved Channels"},
{ "MENUGENERAL_SNDSOUNDVOLUME", "Sound Volume"},
{ "MENUGENERAL_SNDSPEAKERSETUP", "Speaker Setup"},
{ "MENUGENERAL_SVCONNECTPASSWORD", "Connect Password"},
{ "MENUGENERAL_SVEMAIL", "E-Mail Address"},
{ "MENUGENERAL_SVIRC", "IRC Channel"},
{ "MENUGENERAL_SVJOINPASSWORD", "Join Password"},
{ "MENUGENERAL_SVMAXCATCHUP", "Catch-Up Threshold"},
{ "MENUGENERAL_SVMAXCLIENTS", "Max Clients"},
{ "MENUGENERAL_SVMAXDEMOCATCHUP", "Demo Catch-Up Threshold"},
{ "MENUGENERAL_SVMOTD", "Message of the Day"},
{ "MENUGENERAL_SVNAME", "Name"},
{ "MENUGENERAL_SVREADYBY", "Connection Sync Threshold"},
{ "MENUGENERAL_SVURL", "Website URL"},
{ "MENUGENERAL_SVWADURL", "WAD Download URL"},
{ "MENUGENERAL_VIDDRAWFPS", "Draw Frames per Second"},
{ "MENUGENERAL_VIDSCREENLINK", "Screen Link"},
{ "MENUQUIT_DISCONNECT", "Disconnect"},
{ "MENUQUIT_PDISCONNECT", "Disconnect, Keep Playing"},
{ "MENUQUIT_STOPWATCHING", "Stop Watching Demo"},
{ "MENUQUIT_STOPRECORDING", "Stop Recording Demo"},
{ "MENUQUIT_LOGOFF", "Log Off"},
{ "MENUQUIT_EXITREMOOD", "Exit ReMooD"},
{ "MENUCREATEGAME_IWADTITLE", "IWAD"},
{ "MENUCREATEGAME_STARTGAME", "Start Game!"},
{ "MENUOPTION_MANAGEPROF", "Manage Profiles"},
{ "MENUOPTION_CREATEPROF", "Create Profile..."},
{ "UIGENERAL_DONTCARE", "Don't Care!"},
{ "UIGENERAL_YES", "Yes"},
{ "UIGENERAL_NO", "No"},
/*** INTERMISSION ***/
/*** CONSOLE VARIABLE HINTS ***/
{ "CVHINT_CONSCREENHEIGHT", "Height of the console."},
{ "CVHINT_CONBACKCOLOR", "Background color of the console."},
{ "CVHINT_CONFORECOLOR", "Foreground color of the console."},
{ "CVHINT_CONFONT", "Font to draw the console with."},
{ "CVHINT_CONMONOSPACE", "Draw the console font as monospaced."},
{ "CVHINT_CONSCALE", "Scales the text of the console (high resolution)."},
{ "CVHINT_CONTESTSTRING", "Variable to test strings (escape/unescape)."},
{ "CVHINT_CONPAUSEGAME", "Pause the game when the console is open."},
{ "CVHINT_MENUFONT", "Font used to draw menu items."},
{ "CVHINT_MENUITEMCOLOR", "Color used to draw menu items."},
{ "CVHINT_MENUVALSCOLOR", "Color used to draw menu values."},
{ "CVHINT_MENUHEADERCOLOR", "Color used to draw item headers."},
{ "CVHINT_SVNAME", "The visible name of the server."},
{ "CVHINT_SVURL", "The web site for this server."},
{ "CVHINT_SVIRC", "The IRC Channel for this server."},
{ "CVHINT_SVMOTD", "The message displayed to clients when joining."},
{ "CVHINT_SVCONNECTPASSWORD", "The password needed to connect to a server."},
{ "CVHINT_SVJOINPASSWORD", "The password needed to join the game."},
{ "CVHINT_SVMAXCLIENTS", "The maximum amount of clients that may join the game."},
{ "CVHINT_SVJOINWINDOW", "Amount of time in seconds between each join window interval."},
{ "CVHINT_SVLAGSTAT", "Amount of time in minutes between each lag check for a client."},
{ "CVHINT_SVREADYBY", "Amount of time in seconds before a client is disconnected for lagging out."},
{ "CVHINT_SVMAXCATCHUP", "Maximum amount of time to catchup when playing as the server, after this threshold catchup stops and waiting for players appears."},
{ "CVHINT_SVMAXDEMOCATCHUP", "Maximum amount of time to catchup when playing a demo, after this threshold catchup stops."},
{ "CVHINT_SVLAGTHRESHEXPIRE", "Time in seconds before the lag threshold expires."},
{ "CVHINT_CLMAXPTRIES", "Maximum amount of client attempts to obtain a client from the server."},
{ "CVHINT_CLMAXPTRYTIME", "Time to wait between client requests."},
{ "CVHINT_CLREQTICDELAY", "Amount in time to tics to wait when requesting more tics if none are available."},
{ "CVHINT_RCUTWALLDETAIL", "Lower the detail of wall textures to reduce memory usage at the cost of quality."},
{ "CVHINT_RCUTWALLDETAIL", "Lower the detail of wall textures to reduce memory usage at the cost of quality."},
{ "CVHINT_RFAKESSPAL", "Fake the palette changing when using split-screen."},
{ "CVHINT_RRENDERER", "Which renderer platform to utilize."},
{ "CVHINT_RVIEWSIZE", "The size of the screen to draw."},
{ "CVHINT_RTRANSPARENCY", "Enables drawing of transparent images."},
{ "CVHINT_RDRAWSPLATS", "Enables drawing of splats on walls and floors."},
{ "CVHINT_RMAXSPLATS", "Maximum amount of splats that can exist at one time."},
{ "CVHINT_SCRFULLSCREEN", "Use fullscreen video mode."},
{ "CVHINT_SCRWIDTH", "Width of the screen to use."},
{ "CVHINT_SCRHEIGHT", "Height of the screen to use."},
{ "CVHINT_SCRDEPTH", "Depth of the screen to use."},
{ "CVHINT_VIDSCREENLINK", "Special effect to perform when linking together screens."},
{ "CVHINT_VIDDRAWFPS", "Draw frames per second on the screen."},
{ "CVHINT_IENABLEMOUSE", "Enable mouse input."},
{ "CVHINT_INOFAKEDOUBLEBUFFER", "Do not fake double buffering (will cause tearing if your hardware is not capable of double buffering)."},
{ "CVHINT_IENABLEJOYSTICK", "Enable joystick input."},
{ "CVHINT_IOSSMIDIDEV", "OSS device to use when playing MIDI music. (Pathname to MIDI device such as /dev/midi)"},
{ "CVHINT_IALSAMIDIDEV", "ALSA device to use when playing MIDI music. (Client:Port to MIDI device such as 128:0)"},
{ "CVHINT_IWINMIDIDEV", "Win32 device to use when playing MIDI music. (Name or number of device such as 0 or \"midimapper\")"},
{ "CVHINT_SNDSPEAKERSETUP", "Number of speakers to use."},
{ "CVHINT_SNDQUALITY", "Quality of sound to be outputted."},
{ "CVHINT_SNDDENSITY", "Density of the sound to use, the higher the better."},
{ "CVHINT_SNDBUFFERSIZE", "Size of the sound buffer in size."},
{ "CVHINT_SNDRANDOMPITCH", "Randomly Pitch Sounds."},
{ "CVHINT_SNDPCSPEAKER", "Simulate Doom PC Speaker Effects."},
{ "CVHINT_SNDCHANNELS", "Number of sound channels to play."},
{ "CVHINT_SNDRESERVEDCHANNELS", "Number of channels to keep in reserve."},
{ "CVHINT_SNDSOUNDVOLUME", "The volume at which sounds play at."},
{ "CVHINT_SNDMUSICVOLUME", "The volume at which music plays at."},
/*** NETWORK STUFF ***/
{ "NET_LEVELNOTFOUND", "Level not found."},
{ "NET_CLIENTCONNECTED", "Client $1{z has connected."},
{ "NET_PORTCONNECTED", "Player $1{z attached controller."},
{ "NET_PORTDISCONNECTED", "Player $1{z detached controller."},
{ "NET_PLAYERJOINED", "Player $1{z has joined the game."},
{ "NET_CLIENTGONE", "Client $1{z has disconnected ($2)."},
{ "NET_NOREASON", "No reason."},
{ "WFGS_TITLE", "Waiting For Game To Start"},
{ "WFGS_PLAYERNAME", "Player Name"},
{ "WFGS_PING", "Ping"},
{ "WFGS_DEMOPLAYER", "Demo"},
{ "WFGS_HOST", "Host"},
{ "WFGS_BOT", "Bot"},
{ "WFJW_TITLE", "Connecting to Server"},
{ "NET_SERVERDISCON", "Server Disconnected"},
{ "NET_KICKED", "Kicked"},
/*** DEPRECATED STRINGS ***/
{ "DEP_GOTARMOR", "Picked up the armor."},
{ "DEP_GOTMEGA", "Picked up the MegaArmor!"},
{ "DEP_GOTHTHBONUS", "Picked up a health bonus."},
{ "DEP_GOTARMBONUS", "Picked up an armor bonus."},
{ "DEP_GOTSTIM", "Picked up a stimpack."},
{ "DEP_GOTMEDIKIT", "Picked up a medikit."},
{ "DEP_GOTSUPER", "Supercharge!"},
{ "DEP_GOTBLUECARD", "Picked up a blue keycard."},
{ "DEP_GOTYELWCARD", "Picked up a yellow keycard."},
{ "DEP_GOTREDCARD", "Picked up a red keycard."},
{ "DEP_GOTBLUESKUL", "Picked up a blue skull key."},
{ "DEP_GOTYELWSKUL", "Picked up a yellow skull key."},
{ "DEP_GOTMSPHERE", "MegaSphere!"},
{ "DEP_GOTCLIP", "Picked up a clip."},
{ "DEP_GOTCLIPBOX", "Picked up a box of bullets."},
{ "DEP_GOTROCKET", "Picked up a rocket."},
{ "DEP_GOTROCKBOX", "Picked up a box of rockets."},
{ "DEP_GOTCELL", "Picked up an energy cell."},
{ "DEP_GOTCELLBOX", "Picked up an energy cell pack."},
{ "DEP_GOTSHELLS", "Picked up 4 shotgun shells."},
{ "DEP_GOTSHELLBOX", "Picked up a box of shotgun shells."},
{ "DEP_GOTBACKPACK", "Picked up a backpack full of ammo!"},
{ "DEP_GOTBFG9000", "You got the BFG9000! Oh, yes."},
{ "DEP_GOTCHAINGUN", "You got the chaingun!"},
{ "DEP_GOTCHAINSAW", "A chainsaw! Find some meat!"},
{ "DEP_GOTLAUNCHER", "You got the rocket launcher!"},
{ "DEP_GOTPLASMA", "You got the plasma gun!"},
{ "DEP_GOTSHOTGUN", "You got the shotgun!"},
{ "DEP_GOTSHOTGUN2", "You got the super shotgun!"},
{ "DEP_PD_BLUEK", "You need a blue key to open this door"},
{ "DEP_PD_REDK", "You need a red key to open this door"},
{ "DEP_PD_YELLOWK", "You need a yellow key to open this door"},
{ "DEP_QUITMSG", "are you sure you want to\nquit this great game?"},
{ "DEP_QUIT2MSG", "you want to quit?\nthen, thou hast lost an eighth!"},
{ "DEP_QUIT2MSG6", "you're lucky i don't smack\nyou for thinking about leaving."},
/*** OTHER GAME STUFF ***/
{ "FOUNDSECRET", "You found a secret area!"},
{ "NETPLAYERRENAMED", "$1 renamed to $2."},
{ "GAMEPAUSED", "$1 paused the game."},
{ "GAMEUNPAUSED", "$1 resumed the game."},
/*** ITEMS ***/
{ "ITEM_GOTPRESSRELEASEBFG", "You got the press release BFG9000!"},
/*** DEMO STUFF ***/
{ "BADDEMO_LEVELNOTFOUND", "The level named \"$1\" was not found."},
{ "BADDEMO_SAVEGAMENOTSUPPORTED", "Saving games is not supported."},
{ "BADDEMO_NETVARNOTSUPPORTED", "The variable $1 is not supported."},
{ "BADDEMO_UNKNOWNXDCMD", "Unknown extra command $1."},
{ "BADDEMO_UNKNOWNFACTORY", "Unknown demo factory."},
{ "BADDEMO_NONHOSTDEMO", "Demo possibly not recorded by the host, if so then the demo will most likely fail to play back at all."},
{ "BADDEMO_ILLEGALHEADER", "Demo contains an illegal header."},
{ "BADDEMO_UNHANDLEDDATA", "Unhandled data labeled \"$1\"."},
{ "BADDEMO_OLDREMOODFORMAT", "Ancient ReMooD Demos not supported!"},
{ "BADDEMO_TICDECODEPROBLEM", "Tic decoding error."},
/*** D_PROF.C ***/
{ "DPROFC_ALREADYEXIST", "Profile \"$1\" already exists!"},
{ "DPROFC_FAILEDCREATE", "Failed to create profile."},
{ "DPROFC_CONTROLUSAGE", "Usage: $1 control <Name> <Action> <Id> <Key>"},
{ "DPROFC_MAXISUSAGE", "Usage: $1 maxis <Name> <Group> <Axis> <Action>"},
{ "DPROFC_NOTFOUND", "Profile $1 not found."},
{ "DPROFC_NOTCONTROLNAME", "$1 is not a valid control."},
{ "DPROFC_VALUEUSAGE", "Usage: $1 value <Option> <Value>"},
{ "DPROFC_INDEXOUTOFRANGE", "Index $1 out of range."},
/*** D_NET.C ***/
{ "DNETC_CONNECTUSAGE", "Usage: $1 <hostname> (password)"},
{ "DNETC_ADDPLAYERUSAGE", "Usage: $1 <profile> (screen) (joystick id)"},
{ "DNETC_PLAYERLISTENT", "$1 $2 $3{z"},
{ "DNETC_BINDFAIL", "Failed to bind to \"$1\"."},
{ "DNETC_SERVERCHANGENAME", "Server changed name to \"$1\"."},
{ "DNETC_HOSTNORESOLVE", "Host \"$1\" does not resolve."},
{ "DNETC_HOSTRESFOUR", "Host \"$1\" resolves to $2.$3.$4.$5 (v4)."},
{ "DNETC_HOSTRESSIX", "Host \"$1\" resolves to $2$3:$4:$5:$6:$7%$8 (v6)."},
{ "DNETC_INVALIDTIC", "Attempted to gather tic $1 but it was not found."},
/*** D_TRANS.C ***/
{ "DNETC_PARTIALDISC", "Partial Disconnect ($1{z)."},
{ "DTRANSC_GETWAD", "Will download WAD \"$1\"."},
{ "DTRANSC_BLACKLIST", "WAD \"$1\" is on blacklist, not downloading.\n"},
/*** D_NETDRAW.C ***/
{ "DNETDRAWC_PDWARN", "Server Not Responding"},
/*** D_RMOD.C ***/
{ "DRMOD_NAMESPACENOTINWAD", "Namespace \"$2\" not in WAD \"$1\"."},
{ "DRMOD_DATASTREAMERR", "Failed to open datastream for \"$1\" in WAD \"$1\"."},
{ "DRMOD_PARSEERROR", "Parse error in \"$3\" ($1), at $2:$9->$4:$5 ($7) ($6 [$8])."},
/*** COMMAND.C ***/
{ "COMMANDC_WOULDHASHCOLLIDE", "Variable \"$1\" hash collides with \"$2\"."},
/*** ST_STUFF.C ***/
{ "STSTUFFC_SCOREBOARD", "Scoreboard"},
/*** T_VM.C **/
{ "TVMC_COMPILING", "Compiling \"$1\"..."},
{ "TVMC_ERROR", "Compile error on line $1 ($2)."},
{ "TVMC_SUCCESS", "Successfuly compiled \"$1\"."},
{ "TVMC_GLOBALSCRIPTNUM", "WARNING: Script with ID $1 in global namespace, this is not recommended."},
/*** B_GHOST.C ***/
{ "BGHOSTC_BASEINIT", "Registering bot registration..."},
/*** D_MAIN.C ***/
{ "DMAINC_JOYINSTRUCT", "Hold joystick towards\ndirection to control."},
{ "DMAINC_PLAYER1", "{x70P1"},
{ "DMAINC_PLAYER2", "{x71P2"},
{ "DMAINC_PLAYER3", "{x72P3"},
{ "DMAINC_PLAYER4", "{x73P4"},
/*** IP_*.c ***/
{ "DXP_CONNECTING", "{zConnecting to {9$1{z..."},
{ "DXP_CLCONNECT", "{z{9$1{z has connected!"},
{ "DXP_DISCONNED", "{zDisconnected, reason: \"{9$1{z\"."},
{ "DXP_WADHEADER", "{zWADs used by server:"},
{ "DXP_WADENTRY", "{z [{4$3{z] {9$1 {z({3$2{z)"},
{ "DXP_BADWADEXT", "{zWAD {9$1{z/{3$2{z has an invalid extension, due to security measures."},
{ "DXP_CLIENTREADYWAIT", "{z{9$1{z is waiting for next join window."},
{ "DXP_WAITINGFORCONN", "{zWaiting for connection..."},
{ "DXP_SENDFILE", "{zSending file \"{3$1{z\" to {9$2{z."},
{ "DXP_RECVFILE", "{zReceiving file \"{3$1{z\" into {9$2{z."},
{ "DXP_BADSAVELOAD", "{zFailed to load savegame \"{3$1{z\"."},
{ "DXP_PLAYERISPLAYING", "{9$1{z ({9$2{z) is now playing."},
/*** W_WAD.C ***/
{ "WWADC_WADSTILLLINKED", "WAD \"$1\" is still linked in."},
{ "WWADC_CHECKINGTHESUM", "Found \"$1\", confirming checksum."},
/*** INFO.C ***/
{ "INFOC_NODEH", "WAD \"$1\" contains no DEHACKED lump."},
{ "INFOC_NOTADEH", "WAD \"$1\" contains illegal DEHACKED lump."},
{ "INFOC_BINARYDEH", "WAD \"$1\" contains unsupported binary DEHACKED lump."},
{ "INFOC_OLDPFDEH", "WAD \"$1\" contains old DEHACKED lump, which may fail."},
{ "INFOC_DEHNOSPRMAP", "No sprite mappings, DEHACKED not operational."},
/*** D_BLOCK.C ***/
{ "DBLOCKC_ZLIBINFLATEERR", "ZLib inflation error $1."},
/*** D_NWLINE.C ***/
{ "DNWLINE_LOCKEDDOOR", "This door is locked."},
/*** P_SPEC.C ***/
{ "PSPECC_TIMELIMITREACHED", "Time limit reached."},
{ "PSPECC_FIVEMINLEFT", "5 minutes left!"},
{ "PSPECC_ONEMINLEFT", "1 minute left!"},
{ "PSPECC_THIRTYSECLEFT", "30 seconds left!"},
{ "PSPECC_TENSECLEFT", "10 seconds left!"},
{ "PSPECC_FIVESECLEFT", "5 seconds left!"},
{ "PSPECC_FOURSECLEFT", "4 seconds left!"},
{ "PSPECC_THREESECLEFT", "3 seconds left!"},
{ "PSPECC_TWOSECLEFT", "2 seconds left!"},
{ "PSPECC_ONESECLEFT", "1 second left!"},
{ "PSPECC_PLDEFECTED", "{z$1{z changed to team $2"},
/*** P_INTER.c ***/
{ "PINTERC_FRAGLIMITREACHED", "Frag limit reached."},
/*** P_SAVEG.C ***/
{ "PSAVEGC_ENDOFSTREAM", "End of stream reached too early."},
{ "PSAVEGC_WRONGHEADER", "Incorrect header."},
{ "PSAVEGC_UNKNOWNLEVEL", "The level the game was saved on is not currently known."},
{ "PSAVEGC_LEVELLOADFAIL", "The level failed to load correctly."},
{ "PSAVEGC_ILLEGALTHINKER", "An illegal thinker exists."},
{ "PSAVEGC_UNHANDLEDTHINKER", "A valid thinker is not currently handled."},
{ "PSAVEGC_ILLEGALHOST", "Port referes to an illegal host."},
/*** I_UTLNET.C ***/
{ "IUTLNET_BADUNIXBIND", "Socket bind failed: $2 ($1)"},
/*** G_GAME.C ***/
{ "GGAMEC_CHATALL", "$1{1<{z$2{1> {z"},
{ "GGAMEC_CHATTEAM", "$1{x7$3<{z$2{z{x7$3 to team> {z"},
{ "GGAMEC_CHATSPEC", "$1{a<{z$2{z{a to spec> {z"},
{ "GGAMEC_CHATINDIV", "$1{3<{z$2{z{3 to $3{z{3> {z"},
{ "GGAMEC_CHATPRIV", "$1{2<{z$2{z{a to you> {z"},
/*** P_DEMCMP.C ***/
{ "M_PGS_NOTHINGHERE", "Nothing"},
{ "D_PGS_NOTHINGHERE", "Nothing is here"},
{ "M_PGS_COENABLEBLOODSPLATS", "Enable Blood Splats"},
{ "D_PGS_COENABLEBLOODSPLATS", "Enables blood spats on walls. [Legacy >= 1.29]"},
{ "M_PGS_CORANDOMLASTLOOK", "Randomize Monster Last Look"},
{ "D_PGS_CORANDOMLASTLOOK", "Randomize monster's last look (player to target). [Legacy >= 1.29]"},
{ "M_PGS_COUNSHIFTVILERAISE", "Unshift Arch-Vile Resurrection"},
{ "D_PGS_COUNSHIFTVILERAISE", "Multiply the corpse height by 4 on resurrects. [Legacy < 1.29]"},
{ "M_PGS_COMODIFYCORPSE", "Modify Corpse (Solid Corpses)"},
{ "D_PGS_COMODIFYCORPSE", "Enables correct corpse modification for solid corpses. [Legacy >= 1.31]"},
{ "M_PGS_CONOSMOKETRAILS", "No Smoke Trails"},
{ "D_PGS_CONOSMOKETRAILS", "Disable smoke trails on rockets and lost souls [Legacy < 1.11]"},
{ "M_PGS_COUSEREALSMOKE", "Use Real Smoke For Trails"},
{ "D_PGS_COUSEREALSMOKE", "Use actual smoke rather than tracers for trails. [Legacy >= 1.25]"},
{ "M_PGS_COOLDCUTCORPSERADIUS", "Cut Corpse Radius (Solid Corpse)"},
{ "D_PGS_COOLDCUTCORPSERADIUS", "Reduce corpse radius, when co_modifycorpse is off. [Legacy >= 1.12]"},
{ "M_PGS_COSPAWNDROPSONMOFLOORZ", "Spawn Drops on Fake-Floor"},
{ "D_PGS_COSPAWNDROPSONMOFLOORZ", "Item drops on the fake floor not on the sector floor. [Legacy >= 1.32]"},
{ "M_PGS_CODISABLETEAMPLAY", "Disable Team Play"},
{ "D_PGS_CODISABLETEAMPLAY", "Disable support for team play. [Legacy < 1.25]"},
{ "M_PGS_COSLOWINWATER", "Move Slower In Water"},
{ "D_PGS_COSLOWINWATER", "Move slower when underwater (in 3D Water). [Legacy >= 1.28]"},
{ "M_PGS_COSLIDEOFFMOFLOOR", "Dead Things Slide Off Fake Floors"},
{ "D_PGS_COSLIDEOFFMOFLOOR", "Slide off the near floor not the real one (3D floors). [Legacy >= 1.32]"},
{ "M_PGS_COOLDFRICTIONMOVE", "Old Friction Movement"},
{ "D_PGS_COOLDFRICTIONMOVE", "Use old friction when moving. [Legacy < 1.32]"},
{ "M_PGS_COOUCHONCEILING", "Go Ouch When Hitting Ceiling"},
{ "D_PGS_COOUCHONCEILING", "Go ouch when hitting the ceiling. [Legacy >= 1.12]"},
{ "M_PGS_COENABLESPLASHES", "Enable Water Splashes"},
{ "D_PGS_COENABLESPLASHES", "Enable splashes on the water. [Legacy >= 1.25]"},
{ "M_PGS_COENABLEFLOORSMOKE", "Enable Floor Damage Smoke"},
{ "D_PGS_COENABLEFLOORSMOKE", "Enable smoke when on a damaging floor. [Legacy >= 1.25]"},
{ "M_PGS_COENABLESMOKE", "Enable Smoke"},
{ "D_PGS_COENABLESMOKE", "Enable smoke. [Legacy >= 1.25]"},
{ "M_PGS_CODAMAGEONLAND", "Instant-Damage On Special Floors"},
{ "D_PGS_CODAMAGEONLAND", "Damage when landing on a damaging floor. [Legacy >= 1.25]"},
{ "M_PGS_COABSOLUTEANGLE", "Use Absolute Angles"},
{ "D_PGS_COABSOLUTEANGLE", "Use absolute angle rather than relative angle. [Legacy >= 1.25]"},
{ "M_PGS_COOLDJUMPOVER", "Old Jump Over"},
{ "D_PGS_COOLDJUMPOVER", "Use old jump over code. [Legacy < 1.28]"},
{ "M_PGS_COENABLESPLATS", "Enable Splats"},
{ "D_PGS_COENABLESPLATS", "Enable splats. [Legacy >= 1.28]"},
{ "M_PGS_COOLDFLATPUSHERCODE", "Old Pusher/Puller Code"},
{ "D_PGS_COOLDFLATPUSHERCODE", "Use pusher/puller code that cannot handle 3D Floors. [Legacy <= 1.40]"},
{ "M_PGS_COSPAWNPLAYERSEARLY", "Spawn Players Earlier"},
{ "D_PGS_COSPAWNPLAYERSEARLY", "Spawn players while the map is loading. [Legacy >= 1.28]"},
{ "M_PGS_COENABLEUPDOWNSHOOT", "Enable Up/Down Aim"},
{ "D_PGS_COENABLEUPDOWNSHOOT", "Enable shooting up/down when not aiming at something. [Legacy >= 1.28]"},
{ "M_PGS_CONOUNDERWATERCHECK", "No Underwater Check"},
{ "D_PGS_CONOUNDERWATERCHECK", "Do not check for an object being underwater. [Legacy < 1.28]"},
{ "M_PGS_COSPLASHTRANSWATER", "Water Transition Splash"},
{ "D_PGS_COSPLASHTRANSWATER", "Causes splashes when transitioning from/to water [Legacy >= 1.32]"},
{ "M_PGS_COUSEOLDZCHECK", "Old Z Check"},
{ "D_PGS_COUSEOLDZCHECK", "Use old Z checking code rather than Heretic's. [Legacy < 1.31]"},
{ "M_PGS_COCHECKXYMOVE", "Check X/Y Movement"},
{ "D_PGS_COCHECKXYMOVE", "Check X/Y Movement (When co_useoldzcheck is enabled). [Legacy >= 1.12]"},
{ "M_PGS_COWATERZFRICTION", "Water Z Friction"},
{ "D_PGS_COWATERZFRICTION", "Apply Z friction movement when underwater. [Legacy >= 1.28]"},
{ "M_PGS_CORANDOMLASTLOOKSPAWN", "Randomize Last Look (Spawn)"},
{ "D_PGS_CORANDOMLASTLOOKSPAWN", "Choose random player when object spawns. [Legacy < 1.29]"},
{"M_PGS_COALWAYSRETURNDEADSPMISSILE", "Return Dead Missiles"},
{"D_PGS_COALWAYSRETURNDEADSPMISSILE", "Always return the missile spawned even if it dies. [Legacy < 1.31]"},
{ "M_PGS_COUSEMOUSEAIMING", "Allow Mouse To Aim"},
{ "D_PGS_COUSEMOUSEAIMING", "Use mouse aiming when not aimed at another object. [Legacy >= 1.28]"},
{ "M_PGS_COFIXPLAYERMISSILEANGLE", "Fix Player Missiles"},
{ "D_PGS_COFIXPLAYERMISSILEANGLE", "Fix player missiles being fired and make them more accurate. [Legacy >= 1.28]"},
{ "M_PGS_COREMOVEMOINSKYZ", "Remove Missiles In Sky"},
{ "D_PGS_COREMOVEMOINSKYZ", "When Z movement is performed in a sky, do not explode. [Legacy >= 1.29]"},
{ "M_PGS_COFORCEAUTOAIM", "Force Auto-Aim"},
{ "D_PGS_COFORCEAUTOAIM", "Always force auto-aim. [Legacy <= 1.11]"},
{ "M_PGS_COFORCEBERSERKSWITCH", "Force Berserk Switch"},
{ "D_PGS_COFORCEBERSERKSWITCH", "Force switching to berserk-enabled weapons in slots. [Legacy < 1.28]"},
{ "M_PGS_CODOUBLEPICKUPCHECK", "Double-Check Pickup"},
{ "D_PGS_CODOUBLEPICKUPCHECK", "Double check for pickups rather than just once. [Legacy >= 1.32]"},
{"M_PGS_CODISABLEMISSILEIMPACTCHECK", "No Missile Impact Check"},
{"D_PGS_CODISABLEMISSILEIMPACTCHECK", "Disable the checking of missile impacts. [Legacy < 1.32]"},
{ "M_PGS_COMISSILESPLATONWALL", "Enable Missile Splats on Walls"},
{ "D_PGS_COMISSILESPLATONWALL", "When missiles hit walls, they splat it. [Legacy >= 1.29]"},
{ "M_PGS_CONEWBLOODHITSCANCODE", "Blood Splat Tracers"},
{ "D_PGS_CONEWBLOODHITSCANCODE", "Use newer blood spawning code when tracing hitscans. [Legacy >= 1.25]"},
{ "M_PGS_CONEWAIMINGCODE", "New Aiming Code"},
{ "D_PGS_CONEWAIMINGCODE", "Use newer aiming code in P_AimLineAttack(). [Legacy >= 1.28]"},
{ "M_PGS_COMISSILESPECHIT", "Missiles Trigger Special Line Hits"},
{ "D_PGS_COMISSILESPECHIT", "Missiles can trigger special line hits. [Legacy >= 1.32]"},
{ "M_PGS_COHITSCANSSLIDEONFLATS", "Hitscans Slide On Floor"},
{ "D_PGS_COHITSCANSSLIDEONFLATS", "Hitscans slide on flats. [Legacy < 1.12]"},
{ "M_PGS_CONONSOLIDPASSTHRUOLD", "No Solid Pass-Thru A"},
{ "D_PGS_CONONSOLIDPASSTHRUOLD", "Non-solid objects pass through others (Old trigger). [Legacy < 1.12]"},
{ "M_PGS_CONONSOLIDPASSTHRUNEW", "No Solid Pass-Thru B"},
{ "D_PGS_CONONSOLIDPASSTHRUNEW", "Non-solid objects pass through others (New trigger). [Legacy >= 1.32]"},
{ "M_PGS_COJUMPCHECK", "Check For Jump Over"},
{ "D_PGS_COJUMPCHECK", "Allow jump over to take effect. [Legacy >= 1.12]"},
{ "M_PGS_COLINEARMAPTRAVERSE", "Linear Map Traverse"},
{ "D_PGS_COLINEARMAPTRAVERSE", "Loads a new map rather than starting from fresh. [Legacy < 1.29]"},
{ "M_PGS_COONLYTWENTYDMSPOTS", "Limit to 20 DM Starts"},
{ "D_PGS_COONLYTWENTYDMSPOTS", "Support only 20 DM starts rather than 64. [Legacy < 1.23]"},
{ "M_PGS_COALLOWSTUCKSPAWNS", "Allow stuck DM spawns"},
{ "D_PGS_COALLOWSTUCKSPAWNS", "Allow players getting stuck in others in DM spots. [Legacy < 1.13]"},
{ "M_PGS_COUSEOLDBLOOD", "Use Old Doom Blood"},
{ "D_PGS_COUSEOLDBLOOD", "Uses standard Doom blood rather than Legacy blood. [Legacy < 130]"},
{ "M_PGS_FUNMONSTERFFA", "Monster Free For All"},
{ "D_PGS_FUNMONSTERFFA", "Monsters enter a Free For All and attack anything in sight."},
{ "M_PGS_FUNINFIGHTING", "Monsters Infight"},
{ "D_PGS_FUNINFIGHTING", "Monsters attack monsters of the same race."},
{ "M_PGS_COCORRECTVILETARGET", "Correct Position Of Vile Vire"},
{ "D_PGS_COCORRECTVILETARGET", "Correct the position of the Arch-Vile target fire. [ReMooD >= 1.0a]"},
{ "M_PGS_FUNMONSTERSMISSMORE", "Monsters Miss More"},
{ "D_PGS_FUNMONSTERSMISSMORE", "Monsters miss their target more."},
{ "M_PGS_COMORECRUSHERBLOOD", "More Crusher Blood"},
{ "D_PGS_COMORECRUSHERBLOOD", "Make crushers spew more blood. [Legacy < 1.32]"},
{ "M_PGS_CORANDOMBLOODDIR", "Random Blood Direction"},
{ "D_PGS_CORANDOMBLOODDIR", "Spew blood in a random direction. [Legacy >= 1.28]"},
{ "M_PGS_COINFINITEROCKETZ", "Infinite Rocket Z Range"},
{ "D_PGS_COINFINITEROCKETZ", "Rocket damage distance on Z is infinite. [Legacy < 1.12]"},
{ "M_PGS_COALLOWROCKETJUMPING", "Allow Rocket Jumping"},
{ "D_PGS_COALLOWROCKETJUMPING", "Allow support for rocket jumping. [Legacy >= 1.29]"},
{ "M_PGS_COROCKETZTHRUST", "Rocket Z Thrust"},
{ "D_PGS_COROCKETZTHRUST", "Allow thrusting on the Z plane from rockets. [Legacy >= 1.24]"},
{ "M_PGS_COLIMITMONSTERZMATTACK", "Limit Monster Z Melee Range"},
{ "D_PGS_COLIMITMONSTERZMATTACK", "Limits Z Melee Attack range (stops melee from cliffs). [Legacy > 1.11]"},
{ "M_PGS_HEREMONSTERTHRESH", "Heretic Monster Threshold"},
{ "D_PGS_HEREMONSTERTHRESH", "Use Heretic Threshold Logic. [Heretic]"},
{ "M_PGS_COVOODOODOLLS", "Enable Voodoo Dolls"},
{ "D_PGS_COVOODOODOLLS", "Enable spawning of Voodoo Dolls. [Legacy < 1.28]"},
{ "M_PGS_COEXTRATRAILPUFF", "Extra Smoke Trails"},
{ "D_PGS_COEXTRATRAILPUFF", "Add extra puff for smoke. [Legacy < 1.25]"},
{ "M_PGS_COLOSTSOULTRAILS", "Lost Soul Trails"},
{ "D_PGS_COLOSTSOULTRAILS", "Lost souls emit smoke. [Legacy >= 1.25]"},
{ "M_PGS_COTRANSTWOSIDED", "Transparent 2D Walls"},
{ "D_PGS_COTRANSTWOSIDED", "Transparent two sided walls. [Legacy = 1.11]"},
{ "M_PGS_COENABLEBLOODTIME", "Enable Blood Time"},
{ "D_PGS_COENABLEBLOODTIME", "Enables setting blood time. [Legacy >= 1.23]"},
{ "M_PGS_PLENABLEJUMPING", "Enable Jumping"},
{ "D_PGS_PLENABLEJUMPING", "Enables Jumping Support [Legacy >= 1.12]"},
{ "M_PGS_COMOUSEAIM", "Enable Mouse Aiming"},
{ "D_PGS_COMOUSEAIM", "Enable mouse aiming [Legacy > 1.11]"},
{ "M_PGS_MONRESPAWNMONSTERS", "Respawn Monsters"},
{ "D_PGS_MONRESPAWNMONSTERS", "Monsters come back to life after a short delay."},
{ "M_PGS_FUNNOTARGETPLAYER", "No Player Targetting"},
{ "D_PGS_FUNNOTARGETPLAYER", "Monsters are incapable of targetting players."},
{ "M_PGS_MONARCHVILEANYRESPAWN", "Arch-Viles Respawn Anything"},
{ "D_PGS_MONARCHVILEANYRESPAWN", "Arch-Viles can ressurect anything regardless if it can be or not."},
{ "M_PGS_COOLDCHECKPOSITION", "Old Position Checking"},
{ "D_PGS_COOLDCHECKPOSITION", "Use old P_CheckPosition() Code. [Legacy < 1.42]"},
{ "M_PGS_COLESSSPAWNSTICKING", "Less Spawn Spot Sticking"},
{ "D_PGS_COLESSSPAWNSTICKING", "Make players getting stuck inside other players less likely to occur. [ReMooD >= 1.0a]"},
{ "M_PGS_PLSPAWNTELEFRAG", "Tele-Frag When Spawning"},
{ "D_PGS_PLSPAWNTELEFRAG", "Tele-frag when a player respawns (to empty the spot). [ReMooD >= 1.0a]"},
{ "M_PGS_GAMEONEHITKILLS", "One Hit Kills"},
{ "D_PGS_GAMEONEHITKILLS", "Any recieved damage kills."},
{ "M_PGS_COBETTERPLCORPSEREMOVAL", "Better Body Management"},
{ "D_PGS_COBETTERPLCORPSEREMOVAL", "Better management of player bodies so they do not litter everywhere. [ReMooD >= 1.0a]"},
{ "M_PGS_PLSPAWNCLUSTERING", "Spawn Spot Clustering"},
{ "D_PGS_PLSPAWNCLUSTERING", "Adds extra spawn spots near other spawn spots for more players. [ReMooD >= 1.0a]"},
{ "M_PGS_COIMPROVEDMOBJONMOBJ", "Improved Object on Object"},
{ "D_PGS_COIMPROVEDMOBJONMOBJ", "Improves handling of objects on top of other objects. [ReMooD >= 1.0a]"},
{ "M_PGS_COIMPROVEPATHTRAVERSE", "Improve Traversing Move"},
{ "D_PGS_COIMPROVEPATHTRAVERSE", "Smooth out position moving. [ReMooD >= 1.0a]"},
{ "M_PGS_PLJUMPGRAVITY", "Jump Gravity"},
{ "D_PGS_PLJUMPGRAVITY", "This is the amount of pushing force used when jumping."},
{ "M_PGS_FUNNOLOCKEDDOORS", "No Locked Doors"},
{ "D_PGS_FUNNOLOCKEDDOORS", "All doors are unlocked and do not need keys."},
{ "M_PGS_GAMEAIRFRICTION", "Friction In Air"},
{ "D_PGS_GAMEAIRFRICTION", "This modifies the amount of friction in the air, the higher the easier it is to move."},
{ "M_PGS_GAMEWATERFRICTION", "Friction In Water"},
{ "D_PGS_GAMEWATERFRICTION", "This modifies the amount of friction in water, the higher the easier it is to move."},
{ "M_PGS_GAMEMIDWATERFRICTION", "Friction In Mid-Water"},
{ "D_PGS_GAMEMIDWATERFRICTION", "This modifies the amount of friction in water when not touching the ground, the higher the easier it is to move."},
{ "M_PGS_GAMEALLOWLEVELEXIT", "Allow Level Exiting"},
{ "D_PGS_GAMEALLOWLEVELEXIT", "Allows players or monsters to exit the level."},
{ "M_PGS_GAMEALLOWROCKETJUMP", "Allow Rocket Jumping"},
{ "D_PGS_GAMEALLOWROCKETJUMP", "Enables the use of rocket jumping."},
{ "M_PGS_PLALLOWAUTOAIM", "Allow Auto-Aiming"},
{ "D_PGS_PLALLOWAUTOAIM", "Allows players to aim vertically automatically."},
{ "M_PGS_PLFORCEWEAPONSWITCH", "Force Weapon Switch"},
{ "D_PGS_PLFORCEWEAPONSWITCH", "Forces weapon switches on pickup. [Doom <= 1.09]"},
{ "M_PGS_PLDROPWEAPONS", "Drop Weapons on Death"},
{ "D_PGS_PLDROPWEAPONS", "Drops the player's weapon when they are killed."},
{ "M_PGS_PLINFINITEAMMO", "Infinite Ammo"},
{ "D_PGS_PLINFINITEAMMO", "Ammo is never depleted and lasts forever."},
{ "M_PGS_GAMEHERETICGIBBING", "Heretic Gibbing"},
{ "D_PGS_GAMEHERETICGIBBING", "Objects that can be gibbed are much easier to gib."},
{ "M_PGS_MONPREDICTMISSILES", "Predict Missiles"},
{ "D_PGS_MONPREDICTMISSILES", "Monsters predict missile targets and aim accordingly."},
{ "M_PGS_MONRESPAWNMONSTERSTIME", "Monster Respawn Delay"},
{ "D_PGS_MONRESPAWNMONSTERSTIME", "Time in seconds before monsters are respawned."},
{ "M_PGS_PLSPAWNWITHMAXGUNS", "Spawn With Non-Super Weapons"},
{ "D_PGS_PLSPAWNWITHMAXGUNS", "When a player is spawned, they have all non-super weapons."},
{ "M_PGS_PLSPAWNWITHSUPERGUNS", "Spawn With Super Weapons"},
{ "D_PGS_PLSPAWNWITHSUPERGUNS", "When a player is spawned, they have all super weapons."},
{ "M_PGS_PLSPAWNWITHMAXSTATS", "Spawn With Max Stats"},
{ "D_PGS_PLSPAWNWITHMAXSTATS", "When a player is spawned, they have max health and armor."},
{ "M_PGS_ITEMSSPAWNPICKUPS", "Spawn Pickups"},
{ "D_PGS_ITEMSSPAWNPICKUPS", "Spawn pickups on map load."},
{ "M_PGS_COHERETICFRICTION", "Heretic Friction"},
{ "D_PGS_COHERETICFRICTION", "Use Heretic Friction"},
{ "M_PGS_GAMEDEATHMATCH", "Deathmatch"},
{ "D_PGS_GAMEDEATHMATCH", "Enables Deathmatch Mode (Player vs Player)"},
{ "M_PGS_PLSPAWNWITHALLKEYS", "Spawn With All Keys"},
{ "D_PGS_PLSPAWNWITHALLKEYS", "When a player is spawned, they have every key."},
{ "M_PGS_ITEMSKEEPWEAPONS", "Keep Weapons On Floor"},
{ "D_PGS_ITEMSKEEPWEAPONS", "Keep weapons on the ground when picked up."},
{ "M_PGS_GAMETEAMPLAY", "Enable Team Play"},
{ "D_PGS_GAMETEAMPLAY", "Enable team mode, teams of different colors vs others."},
{ "M_PGS_GAMETEAMDAMAGE", "Allow Team Damage"},
{ "D_PGS_GAMETEAMDAMAGE", "Allow players on the same team to hurt each other."},
{ "M_PGS_GAMEFRAGLIMIT", "Frag Limit"},
{ "D_PGS_GAMEFRAGLIMIT", "How many frags a player or team must obtain before they achieve victory,"},
{ "M_PGS_GAMETIMELIMIT", "Time Limit"},
{ "D_PGS_GAMETIMELIMIT", "Time in minutes before the game automatically ends."},
{ "M_PGS_MONSTATICRESPAWNTIME", "Static Monster Respawn Time"},
{ "D_PGS_MONSTATICRESPAWNTIME", "Monsters always come back after respawn delay rather than randomly afterwards."},
{ "M_PGS_PLFASTERWEAPONS", "Weapons Are Faster"},
{ "D_PGS_PLFASTERWEAPONS", "Weapons fire and move a bit faster (all speeds are set to 1)."},
{ "M_PGS_MONSPAWNMONSTERS", "Spawn Monsters"},
{ "D_PGS_MONSPAWNMONSTERS", "Monsters are spawned when the level loads."},
{ "M_PGS_GAMESPAWNMULTIPLAYER", "Spawn Multi-Player Objects"},
{ "D_PGS_GAMESPAWNMULTIPLAYER", "Spawn any items that are marked multiplayer (extra weapons, monsters, etc.)"},
{ "M_PGS_ITEMRESPAWNITEMS", "Respawn Items"},
{ "D_PGS_ITEMRESPAWNITEMS", "Items are respawned after they are picked up."},
{ "M_PGS_ITEMRESPAWNITEMSTIME", "Item Respawn Delay"},
{ "D_PGS_ITEMRESPAWNITEMSTIME", "Time in seconds before items are respawned."},
{ "M_PGS_MONFASTMONSTERS", "Fast Monsters"},
{ "D_PGS_MONFASTMONSTERS", "Monster move faster and their attacks are also faster."},
{ "M_PGS_GAMESOLIDCORPSES", "Solid Corpses"},
{ "D_PGS_GAMESOLIDCORPSES", "Corpses on the ground are solidified and could be killed again."},
{ "M_PGS_GAMEBLOODTIME", "Blood Time"},
{ "D_PGS_GAMEBLOODTIME", "Time in seconds blood will last on the gound."},
{ "M_PGS_GAMEGRAVITY", "Gravity"},
{ "D_PGS_GAMEGRAVITY", "The multiplier to the amount of downward force to apply to players that are in the air."},
{ "M_PGS_MONENABLECLEANUP", "Enable Corpse Cleanup"},
{ "D_PGS_MONENABLECLEANUP", "Enable clean up of dead monsters. [ReMooD >= 1.0a]"},
{ "M_PGS_MONCLEANUPRESPTIME", "Respawnable Cleanup Time"},
{ "D_PGS_MONCLEANUPRESPTIME", "Time in minutes before dead respawnable monsters are cleaned up."},
{ "M_PGS_MONCLEANUPNONRTIME", "Non-Respawnable Cleanup Time"},
{ "D_PGS_MONCLEANUPNONRTIME", "Time in minutes before dead respawnable monsters are cleaned up."},
{ "M_PGS_GAMESKILL", "Skill Level"},
{ "D_PGS_GAMESKILL", "The current difficulty of the level, the higher the more monsters that appear."},
{ "M_PGS_PLHALFDAMAGE", "Take Half Damage"},
{ "D_PGS_PLHALFDAMAGE", "Players recieve only half of normal damage they recieve."},
{ "M_PGS_PLDOUBLEAMMO", "Get Double Ammo"},
{ "D_PGS_PLDOUBLEAMMO", "Players recieve double the amount of ammo they pickup."},
{ "M_PGS_MONKILLCOUNTMODE", "Kill Count Mode"},
{ "D_PGS_MONKILLCOUNTMODE", "Specifies the mode at which kill totals are calculated."},
{ "M_PGS_COOLDBFGSPRAY", "Old BFG Spray"},
{ "D_PGS_COOLDBFGSPRAY", "Use BFG Ball owner as inflictor rather than the ball itself. [Legacy < 1.32]"},
{ "M_PGS_COEXPLODEHITFLOOR", "Hit Floor When A_Explode"},
{ "D_PGS_COEXPLODEHITFLOOR", "When a state calls A_Explode() the floor is hit. [Legacy >= 1.32]"},
{ "M_PGS_COBOMBTHRUFLOOR", "Bomb Through Floor"},
{ "D_PGS_COBOMBTHRUFLOOR", "Explosions bleed through floors. [Legacy < 1.32]"},
{ "M_PGS_COOLDEXPLOSIONS", "Use Old Explosions"},
{ "D_PGS_COOLDEXPLOSIONS", "Use older explosion code which cannot handle certain aspects. [Legacy < 1.32]"},
{ "M_PGS_COAIMCHECKFAKEFLOOR", "Check 3D Floor When Aiming"},
{ "D_PGS_COAIMCHECKFAKEFLOOR", "Checks local 3D floors to determine if it is possible to aim through them. [Legacy >= 1.32]"},
{ "M_PGS_CONEWGUNSHOTCODE", "Use New Gunshot Code"},
{ "D_PGS_CONEWGUNSHOTCODE", "Use logically incorrect gunshot code. [Legacy >= 1.32]"},
{ "M_PGS_COSHOOTCHECKFAKEFLOOR", "Check 3D Floor When Shooting"},
{ "D_PGS_COSHOOTCHECKFAKEFLOOR", "Checks local 3D floors to determine if it is possible to shoot through them. [Legacy >= 1.32]"},
{ "M_PGS_COSHOOTFLOORCLIPPING", "Clip Tracers To Surface"},
{ "D_PGS_COSHOOTFLOORCLIPPING", "When tracing clip against the floor rather than going through it. [Legacy >= 1.32]"},
{ "M_PGS_CONEWSSGSPREAD", "Use New SSG Spread"},
{ "D_PGS_CONEWSSGSPREAD", "Use a subtle change in the SSG spread code. [Legacy >= 1.32]"},
{ "M_PGS_COMONSTERLOOKFORMONSTER", "Monsters Look For Other Monsters"},
{ "D_PGS_COMONSTERLOOKFORMONSTER", "This enables monsters to look for other monsters. [ReMooD >= 1.0a]"},
{ "M_PGS_COOLDTHINGHEIGHTS", "Use Old Thing Heights"},
{ "D_PGS_COOLDTHINGHEIGHTS", "Use the older heights of objects that were changed in Legacy. [Legacy < 1.32]"},
{ "M_PGS_COLASTLOOKMAXPLAYERS", "Last Look MAXPLAYERS"},
{ "D_PGS_COLASTLOOKMAXPLAYERS", "This is the modulo value when calculating the randomized last look for spawns."},
{ "M_PGS_COMOVECHECKFAKEFLOOR", "Check 3D Floor When Moving"},
{ "D_PGS_COMOVECHECKFAKEFLOOR", "Checks 3D floors during movement. [Legacy >= 1.32]"},
{ "M_PGS_COMULTIPLAYER", "Multi-Player Mode"},
{ "D_PGS_COMULTIPLAYER", "Enables multiplayer mode checks."},
{ "M_PGS_COBOOMSUPPORT", "Boom Support"},
{ "D_PGS_COBOOMSUPPORT", "Allows changes used from Boom in certain areas. [Legacy >= 1.32]"},
{ "M_PGS_PLSPAWNWITHFAVGUN", "Spawn With Favorite Gun"},
{ "D_PGS_PLSPAWNWITHFAVGUN", "Allows players to start with their favorite gun when they respawn. [ReMooD >= 1.0a]"},
{ "M_PGS_CONOSAWFACING", "No Chainsaw Facing"},
{ "D_PGS_CONOSAWFACING", "When chainsawing enemies you face their direction to continue harming them."},
{ "M_PGS_COENABLETEAMMONSTERS", "Enable Team Monsters"},
{ "D_PGS_COENABLETEAMMONSTERS", "Allows monsters to be placed on a team along with players. [ReMooD >= 1.0a]"},
{ "M_PGS_COMONSTERDEADTARGET", "Monsters Untarget Dead"},
{ "D_PGS_COMONSTERDEADTARGET", "When the monster's target dies it no longer targets them. [ReMooD >= 1.0a]"},
{ "M_PGS_COJUMPREGARDLESS", "Ignore Jump Disable"},
{ "D_PGS_COJUMPREGARDLESS", "This allows jumping regardless if it is enabled or not, this is for old demos. [ReMooD < 1.0a]"},
{ "M_PGS_COOLDLASTLOOKLOGIC", "Use Old Lastlook Logic"},
{ "D_PGS_COOLDLASTLOOKLOGIC", "Use older method of computing an object's last look target. [Legacy < 1.30]"},
{ "M_PGS_CORADIALSPAWNCHECK", "Radial Spawn Check"},
{ "D_PGS_CORADIALSPAWNCHECK", "Enable radial spawn checking to help prevent stuck spawns. [ReMooD >= 1.0a]"},
{ "M_PGS_MONENABLEPLAYASMONSTER", "Enable Playing as Monsters"},
{ "D_PGS_MONENABLEPLAYASMONSTER", "Allows players to take control over monsters."},
{ "M_PGS_COKILLSTOPLAYERONE", "Give Kills to Player 1"},
{ "D_PGS_COKILLSTOPLAYERONE", "Gives kills performed by non-players to player 1. [ReMooD < 1.0a]"},
{ "M_PGS_PLALLOWSUICIDE", "Allow Suicide Pill"},
{ "D_PGS_PLALLOWSUICIDE", "Allows player to use the suicide pill key to instantly commit suicide [ReMooD >= 1.0a]."},
{ "M_PGS_PLSUICIDEDELAY", "Suicide Pill Delay"},
{ "D_PGS_PLSUICIDEDELAY", "Time in seconds after allowing another suicide pill after consuming an existing suicide pill [ReMooD >= 1.0a]."},
{ "M_PGS_PLSPAWNWITHMELEEONLY", "Spawn With Only Melee Weapons"},
{ "D_PGS_PLSPAWNWITHMELEEONLY", "When a player is spawned, they are only spawned with melee weapons. Spawn with non-super/super affects this option."},
{ "M_PGS_PLSPAWNWITHRANDOMGUN", "Spawn With A Random Weapon"},
{ "D_PGS_PLSPAWNWITHRANDOMGUN", "When a player is spawned, they are spawned with a random weapon. Spawn with non-super/super/melee affects this option."},
{ "M_PGS_COENABLESLOPES", "Enables Slopes"},
{ "D_PGS_COENABLESLOPES", "Enables the usage of sloped floors and ceilings. [ReMooD >= 1.0a]"},
{ "M_PGS_FUNFLIPLEVELS", "Flip Levels"},
{ "D_PGS_FUNFLIPLEVELS", "Levels are horizontaly flipped."},
{ "M_PGS_PLREDUCEINVENTORY", "Reduce Inventory on Exit"},
{ "D_PGS_PLREDUCEINVENTORY", "All items in the player inventory are reduced to a single item, that is all stacks are lost."},
{ "M_PGS_CODISPLACESPAWN", "Displawn Spawning"},
{ "D_PGS_CODISPLACESPAWN", "If the standard spawners and/or cluster spawners fail, a displace spawn will occur. This spawns the failed player next to an adjacent player. Used in cooperative and team modes only."},
{ "M_PGS_CORESPAWNCORPSESONLY", "Respawn Corpses Only"},
{ "D_PGS_CORESPAWNCORPSESONLY", "Only objects that are dead are respawned when respawn monsters is enabled."},
{ "M_PGS_CONEWGAMEMODES", "Enable New Game Modes"},
{ "D_PGS_CONEWGAMEMODES", "Enables the usage of the new game mode settings."},
{ "M_PGS_GAMEMODE", "Game Mode"},
{ "D_PGS_GAMEMODE", "The type of game currently being played."},
{ "M_PGS_CTFNEEDFLAGATHOME", "Flag At Home To Score"},
{ "D_PGS_CTFNEEDFLAGATHOME", "To score a flag, your team flag must be at home."},
{ "M_PGS_COVARIABLEFRICTION", "Boom Variable Friction"},
{ "D_PGS_COVARIABLEFRICTION", "Friction is able to be varied."},
{ "M_PGS_COALLOWPUSHERS", "Allow Boom Pushers"},
{ "D_PGS_COALLOWPUSHERS", "Enables push/puller objects to work."},
{ "M_PGS_PLMAXTEAMS", "Max Teams"},
{ "D_PGS_PLMAXTEAMS", "Maximum amount of teams that can exist at once."},
{ "M_PGS_PLMAXPLAYERS", "Max Players"},
{ "D_PGS_PLMAXPLAYERS", "Maximum amount of players that can be playing at one time."},
};
/* DS_NameOfString() -- Returns name of pointer to string */
const char* DS_NameOfString(char** const WCharStr)
{
size_t i;
/* Check */
if (!WCharStr)
return NULL;
/* Look through all */
for (i = 0; i < NUMUNICODESTRINGS; i++)
if (WCharStr == &UnicodeStrings[i].wcharstr)
return UnicodeStrings[i].id;
/* Failure */
return NULL;
}
/* DS_FindStringRef() -- Finds string reference by name */
const char** DS_FindStringRef(const char* const a_StrID)
{
static bool_t Booted = false;
size_t i;
uint32_t Hash;
/* Not booted? */
if (!Booted)
{
// Hash every string
for (i = 0; i < NUMUNICODESTRINGS; i++)
UnicodeStrings[i].Hash = Z_Hash(UnicodeStrings[i].id);
// Now it is booted
Booted = true;
}
/* Check */
if (!a_StrID)
return NULL;
/* Hash string */
Hash = Z_Hash(a_StrID);
/* Look through every string */
for (i = 0; i < NUMUNICODESTRINGS; i++)
if (Hash == UnicodeStrings[i].Hash)
if (strcasecmp(a_StrID, UnicodeStrings[i].id) == 0)
return &UnicodeStrings[i].wcharstr;
/* Not found */
return NULL;
}
/* D_USPrint() -- Prints internationalized string */
size_t D_USPrint(char* const a_OutBuf, const size_t a_OutSize, const UnicodeStringID_t a_StrID, const char* const a_Format, va_list a_ArgPtr)
{
#define BUFSIZE 128
#define SMALLBUF 32
#define HACKBUF 128
char MiniBuf[BUFSIZE];
char SmallBuf[SMALLBUF];
char HackBuf[HACKBUF];
char* Points[11];
char* o, *oe, *f, *Sym, *NextSym, *h;
const char* i, *iold;
int SpecialNum, sn, len, zz, hl;
int HackLeft;
bool_t SpecialPoint, NewLine;
va_list ArgPtrCopy;
void* PtrType;
int IntType;
long LongType;
/* Check */
if (a_StrID < 0 || a_StrID >= NUMUNICODESTRINGS)
return 0;
/* Copy Arguments */
__REMOOD_VA_COPY(ArgPtrCopy, a_ArgPtr);
/* Clear Mini Buffer */
memset(MiniBuf, 0, sizeof(MiniBuf));
memset(Points, 0, sizeof(Points));
memset(HackBuf, 0, sizeof(HackBuf));
/* Read and parse specials */
// Clone small buffer
memset(SmallBuf, 0, sizeof(SmallBuf));
strncat(SmallBuf, a_Format, SMALLBUF);
// Newline?
NewLine = !!strchr(a_Format, '\n');
// Go through format
NewLine = !!(*a_Format == '\n');
HackLeft = HACKBUF - 1;
h = HackBuf;
sn = 0;
for (Sym = strchr(SmallBuf, '%'); Sym; Sym = NextSym)
{
// Get occurance of next symbol
NextSym = strchr(Sym + 1, '%');
// Does not exist?
if (!NextSym)
{
// Go to \n if it exists
oe = strchr(Sym + 1, '\n');
// And it that does not exist, go to the end
if (!oe)
oe = &Sym[strlen(Sym)];
else
NewLine = true;
}
// Otherwise set holder to it
else
oe = NextSym;
// Convert to NUL
*oe = 0;
// Determine the sequence to print
f = oe - 1;
// Only if there is room in the albiet small buffer
if (HackLeft > 0)
{
switch (*f)
{
// Integers
case 'i':
case 'o':
case 'u':
case 'x':
case 'X':
case 'c':
// Long
if (*(f - 1) == 'l')
{
LongType = va_arg(a_ArgPtr, long);
snprintf(h, HackLeft, Sym, LongType);
}
// Standard
else
{
IntType = va_arg(a_ArgPtr, int);
snprintf(h, HackLeft, Sym, IntType);
}
break;
// Pointers
case 'p':
case 's':
PtrType = va_arg(a_ArgPtr, void*);
snprintf(h, HackLeft, Sym, PtrType);
break;
// Unknown
default:
break;
}
if (sn <= 9)
{
// Place here
Points[sn++] = h;
// Move around
hl = strlen(h);
h += hl + 2;
HackLeft -= hl + 2;
}
}
// Convert back to whatever, if anything exists
if (NextSym)
*oe = '%';
}
/* Read Input and place in output buffer */
i = DS_GetString(a_StrID);
iold = NULL;
SpecialPoint = false;
for (o = a_OutBuf, oe = (o + a_OutSize) - 1; o < oe;)
{
// Dollar Special
if (!SpecialPoint && *i == '$')
{
// Obtain special
SpecialNum = *(++i) - '1';
i++; // Done later
// Exists?
if (SpecialNum >= 0 && SpecialNum <= 9)
if (Points[SpecialNum])
{
iold = i;
i = Points[SpecialNum];
SpecialPoint = true;
}
}
// Normal
else
{
// End of string?
if (!SpecialPoint && !*i)
break;
// End of special point
if (SpecialPoint)
if (!*i)
{
SpecialPoint = false;
i = iold;
}
// Copy Character
*(o++) = *(i++);
}
}
/* Append Newline? */
if (NewLine)
if (o < oe)
*o = '\n';
else
a_OutBuf[a_OutSize - 1] = '\n';
/* End Arguments */
__REMOOD_VA_COPYEND(ArgPtrCopy);
/* Return Written Length */
return o - a_OutBuf;
#undef BUFSIZE
}