DEADSOFTWARE

lang: use LangDir to find localization files
[d2df-editor.git] / src / editor / g_language.pas
1 Unit g_language;
3 {$INCLUDE ../shared/a_modes.inc}
5 Interface
7 uses g_Basic, MAPDEF;
9 resourcestring
10 MsgNotAccessible = 'N/A';
12 MsgArrayBoolFalse = 'No';
13 MsgArrayBoolTrue = 'Yes';
15 MsgArrayDirLeft = 'Left';
16 MsgArrayDirRight = 'Right';
17 MsgArrayDirSame = 'Don''t change';
18 MsgArrayDirReversed = 'Reversed';
20 MsgArrayDirbtnLeft = 'Left';
21 MsgArrayDirbtnRight = 'Right';
22 MsgArrayDirbtnUp = 'Up';
23 MsgArrayDirbtnDown = 'Down';
25 MsgArrayPanelWall = 'Wall';
26 MsgArrayPanelBack = 'Background';
27 MsgArrayPanelFront = 'Foreground';
28 MsgArrayPanelDoorOpen = 'Open Door';
29 MsgArrayPanelDoorClose = 'Closed Door';
30 MsgArrayPanelStair = 'Step';
31 MsgArrayPanelWater = 'Water';
32 MsgArrayPanelAcid1 = 'Acid 1';
33 MsgArrayPanelAcid2 = 'Acid 2';
34 MsgArrayPanelLiftUp = 'Stream Up';
35 MsgArrayPanelLiftDown = 'Stream Down';
36 MsgArrayPanelLiftLeft = 'Stream Left';
37 MsgArrayPanelLiftRight = 'Stream Right';
38 MsgArrayPanelBlockmon = 'Monster Boundary';
40 MsgArrayFxNone = 'None';
41 MsgArrayFxTeleport = 'Teleport';
42 MsgArrayFxRespawn = 'Respawn';
43 MsgArrayFxFire = 'Arch-Vile Fire';
45 MsgArrayItemMedkit = 'Stimpack';
46 MsgArrayItemLargeMedkit = 'Medikit';
47 MsgArrayItemBlackMedkit = 'Berserk Pack';
48 MsgArrayItemGreenArmor = 'Green Armor';
49 MsgArrayItemBlueArmor = 'Blue Armor';
50 MsgArrayItemBlueSphere = 'Soulsphere';
51 MsgArrayItemMegasphere = 'Megasphere';
52 MsgArrayItemHazSuit = 'Envirosuit';
53 MsgArrayItemOxygen = 'Scuba';
54 MsgArrayItemInvulnerability = 'Invulnerability';
55 MsgArrayItemChainsaw = 'Chainsaw';
56 MsgArrayItemShotgun = 'Shotgun';
57 MsgArrayItemDbShotgun = 'Super Shotgun';
58 MsgArrayItemChaingun = 'Chaingun';
59 MsgArrayItemRocketLauncher = 'Rocket Launcher';
60 MsgArrayItemPlasmaRifle = 'Plasma Rifle';
61 MsgArrayItemBfg = 'BFG9000';
62 MsgArrayItemSuperMinigun = 'Super Chaingun';
63 MsgArrayItemFlamethrower = 'Flamethrower';
64 MsgArrayItemClip = 'Clip';
65 MsgArrayItemAmmoBox = 'Box of Bullets';
66 MsgArrayItem4Shells = '4 Shells';
67 MsgArrayItem25Shells = 'Box of Shells';
68 MsgArrayItem1Rocket = 'Rocket';
69 MsgArrayItemRocketBox = 'Box of Rockets';
70 MsgArrayItemCell = 'Energy Cell';
71 MsgArrayItemLargeCell = 'Energy Cell Pack';
72 MsgArrayItemFuelcan = 'Fuel Canister';
73 MsgArrayItemBackpack = 'Backpack';
74 MsgArrayItemKeyRed = 'Red Key';
75 MsgArrayItemKeyGreen = 'Green Key';
76 MsgArrayItemKeyBlue = 'Blue Key';
77 MsgArrayItemBottle = 'Health Globe';
78 MsgArrayItemHelmet = 'Armor Shard';
79 MsgArrayItemJetpack = 'Jetpack';
80 MsgArrayItemInvis = 'Invisibility';
82 MsgArrayShotPistol = 'Pistol shot';
83 MsgArrayShotBullet = 'Chaingun shot';
84 MsgArrayShotShotgun = 'Shotgun shot';
85 MsgArrayShotSsg = 'Super Shotgun shot';
86 MsgArrayShotImp = 'Imp fireball';
87 MsgArrayShotPlasma = 'Blue plasma';
88 MsgArrayShotSpider = 'Arachnotron plasma';
89 MsgArrayShotCaco = 'Cacodemon fireball';
90 MsgArrayShotBaron = 'Hell Baron projectile';
91 MsgArrayShotMancub = 'Mancubus gunshot';
92 MsgArrayShotRev = 'Revenant projectile';
93 MsgArrayShotRocket = 'Rocket';
94 MsgArrayShotBfg = 'BFG ball';
95 MsgArrayShotExpl = 'Explosion';
96 MsgArrayShotBfgexpl = 'BFG explosion';
97 MsgArrayShotFlame = 'Flame';
99 MsgArrayMonDemon = 'Pinky';
100 MsgArrayMonImp = 'Imp';
101 MsgArrayMonZombie = 'Zombie';
102 MsgArrayMonSergeant = 'Sergeant';
103 MsgArrayMonCyber = 'Cyberdemon';
104 MsgArrayMonCgun = 'Commando';
105 MsgArrayMonHellBaron = 'Hell Baron';
106 MsgArrayMonHellKnight = 'Hell Knight';
107 MsgArrayMonCacodemon = 'Cacodemon';
108 MsgArrayMonLostSoul = 'Lost Soul';
109 MsgArrayMonPainElemental = 'Pain Elemental';
110 MsgArrayMonMastermind = 'Spider Mastermind';
111 MsgArrayMonArachnatron = 'Arachnotron';
112 MsgArrayMonMancubus = 'Mancubus';
113 MsgArrayMonRevenant = 'Revenant';
114 MsgArrayMonArchvile = 'Arch-Vile';
115 MsgArrayMonFish = 'Piranha';
116 MsgArrayMonBarrel = 'Barrel';
117 MsgArrayMonRobot = 'Robot';
118 MsgArrayMonPrikolist = 'Prikolist';
120 MsgArrayAreaPlayerOne = 'Player 1';
121 MsgArrayAreaPlayerTwo = 'Player 2';
122 MsgArrayAreaDm = 'DM Spawn Point';
123 MsgArrayAreaFlagRed = 'Red Flag';
124 MsgArrayAreaFlagBlue = 'Blue Flag';
125 MsgArrayAreaFlagDom = 'Domination Flag';
126 MsgArrayAreaTeamRed = 'Red Team';
127 MsgArrayAreaTeamBlue = 'Blue Team';
129 MsgArrayTrExit = 'Exit';
130 MsgArrayTrTeleport = 'Teleport';
131 MsgArrayTrDoorOpen = 'Open Door';
132 MsgArrayTrDoorClose = 'Close Door';
133 MsgArrayTrDoorSwitch = 'Door';
134 MsgArrayTrDoor5Sec = 'Door (5 sec)';
135 MsgArrayTrTrapClose = 'Close Trap';
136 MsgArrayTrTrap = 'Trap';
137 MsgArrayTrExtend = 'Extender';
138 MsgArrayTrSecret = 'Secret';
139 MsgArrayTrLiftUp = 'Turn stream up/left';
140 MsgArrayTrLiftDown = 'Turn stream down/right';
141 MsgArrayTrLiftSwitch = 'Revert stream';
142 MsgArrayTrTexture = 'Change Texture';
143 MsgArrayTrOn = 'Enable Trigger';
144 MsgArrayTrOff = 'Disable Trigger';
145 MsgArrayTrSwitch = 'Trigger Toggle';
146 MsgArrayTrSound = 'Play Sound';
147 MsgArrayTrSpawnMonster = 'Spawn Monster';
148 MsgArrayTrSpawnItem = 'Spawn Item';
149 MsgArrayTrMusic = 'Play Music';
150 MsgArrayTrPush = 'Push';
151 MsgArrayTrScore = 'Team Score';
152 MsgArrayTrMessage = 'Message';
153 MsgArrayTrDamage = 'Damage';
154 MsgArrayTrHealth = 'Healer';
155 MsgArrayTrShot = 'Turret';
156 MsgArrayTrEffect = 'Effect';
158 MsgPropId = 'ID';
159 MsgPropX = 'X';
160 MsgPropY = 'Y';
161 MsgPropWidth = 'Width';
162 MsgPropHeight = 'Height';
163 MsgPropPanelType = 'Panel Type';
164 MsgPropPanelTex = 'Texture';
165 MsgPropPanelAlpha = 'Transparency';
166 MsgPropPanelBlend = 'Blending';
167 MsgPropDmOnly = 'DM Only';
168 MsgPropItemFalls = 'Falls';
169 MsgPropDirection = 'Direction';
171 MsgPropTrType = 'Trigger Type';
172 MsgPropTrEnabled = 'Enabled';
173 MsgPropTrTexturePanel = 'Textured Panel';
174 MsgPropTrActivation = 'Activation Type';
175 MsgPropTrKeys = 'Keys';
176 MsgPropTrD2d = 'D2D-like';
177 MsgPropTrSilent = 'Silent';
178 MsgPropTrCount = 'Count';
179 MsgPropTrInterval = 'Interval (in ticks)';
180 MsgPropTrHealth = 'Health';
181 MsgPropTrNextMap = 'Next Map';
182 MsgPropTrTeleportTo = 'Teleport to';
183 MsgPropTrTeleportSilent = 'Silent';
184 MsgPropTrTeleportDir = 'New Direction';
185 MsgPropTrDoorPanel = 'Door Panel';
186 MsgPropTrTrapPanel = 'Trap Panel';
187 MsgPropTrExArea = 'Action Area';
188 MsgPropTrExDelay = 'Delay';
189 MsgPropTrExCount = 'Count';
190 MsgPropTrExMonster = 'Monster ID';
191 MsgPropTrExRandom = 'Random';
192 MsgPropTrLiftPanel = 'Stream Panel';
193 MsgPropTrTextureOnce = 'Once';
194 MsgPropTrTextureAnimOnce = 'Animate Once';
195 MsgPropTrSoundName = 'Sound (snd)';
196 MsgPropTrSoundVolume = 'Volume';
197 MsgPropTrSoundPan = 'Pan';
198 MsgPropTrSoundCount = 'Loops';
199 MsgPropTrSoundLocal = 'Local';
200 MsgPropTrSoundSwitch = 'Switch';
201 MsgPropTrFxType = 'Effect';
202 MsgPropTrSpawnTo = 'Spawn at';
203 MsgPropTrSpawnMax = 'Maximum';
204 MsgPropTrSpawnDelay = 'Autospawn (in ticks)';
205 MsgPropTrMonsterType = 'Monster';
206 MsgPropTrMonsterActive = 'Active';
207 MsgPropTrMonsterBehaviour = 'Behaviour';
208 MsgPropTrMonsterBehaviour0 = 'Normal';
209 MsgPropTrMonsterBehaviour1 = 'Killer';
210 MsgPropTrMonsterBehaviour2 = 'Maniac';
211 MsgPropTrMonsterBehaviour3 = 'Insane';
212 MsgPropTrMonsterBehaviour4 = 'Cannibal';
213 MsgPropTrMonsterBehaviour5 = 'Good';
214 MsgPropTrItemType = 'Item';
215 MsgPropTrMusicName = 'Music';
216 MsgPropTrMusicAct = 'Action (m)';
217 MsgPropTrMusicOn = 'Play';
218 MsgPropTrMusicOff = 'Pause';
219 MsgPropTrPushAngle = 'Angle';
220 MsgPropTrPushForce = 'Force';
221 MsgPropTrPushReset = 'Reset velocity';
222 MsgPropTrScoreAct = 'Action (s)';
223 MsgPropTrScoreAct0 = 'Add points';
224 MsgPropTrScoreAct1 = 'Subtract points';
225 MsgPropTrScoreAct2 = 'Team Wins';
226 MsgPropTrScoreAct3 = 'Team Loses';
227 MsgPropTrScoreTeam = 'Team';
228 MsgPropTrScoreTeam0 = 'My';
229 MsgPropTrScoreTeam1 = 'Enemy';
230 MsgPropTrScoreTeam2 = 'Red';
231 MsgPropTrScoreTeam3 = 'Blue';
232 MsgPropTrScoreCon = 'Console message';
233 MsgPropTrScoreMsg = 'Game message';
234 MsgPropTrDamageValue = 'Damage';
235 MsgPropTrDamageKind = 'Damage type';
236 MsgPropTrDamageKind0 = 'HIT_SOME';
237 MsgPropTrDamageKind3 = 'HIT_TRAP';
238 MsgPropTrDamageKind4 = 'HIT_FALL';
239 MsgPropTrDamageKind5 = 'HIT_WATER';
240 MsgPropTrDamageKind6 = 'HIT_ACID';
241 MsgPropTrDamageKind7 = 'HIT_ELECTRO';
242 MsgPropTrDamageKind8 = 'HIT_FLAME';
243 MsgPropTrHealthMax = 'To maximum';
244 MsgPropTrShotType = 'Projectile';
245 MsgPropTrShotSound = 'Shot sound';
246 MsgPropTrShotAngle = 'Angle';
247 MsgPropTrShotAcc = 'Spread';
248 MsgPropTrShotTo = 'Auto targeting';
249 MsgPropTrShotTo0 = 'None';
250 MsgPropTrShotTo1 = 'Monsters';
251 MsgPropTrShotTo2 = 'Players';
252 MsgPropTrShotTo3 = 'Red team';
253 MsgPropTrShotTo4 = 'Blue team';
254 MsgPropTrShotTo5 = 'Monsters, players';
255 MsgPropTrShotTo6 = 'Players, monsters';
256 MsgPropTrShotAim = 'Auto-aiming mode';
257 MsgPropTrShotAim0 = 'Trigger area';
258 MsgPropTrShotAim1 = 'Entire map';
259 MsgPropTrShotAim2 = 'Trace trigger area';
260 MsgPropTrShotAim3 = 'Trace entire map';
261 MsgPropTrShotAmmo = 'Ammo limit';
262 MsgPropTrShotReload = 'Reload interval (in ticks)';
263 MsgPropTrShotSight = 'Sight interval (in ticks)';
264 MsgPropTrShotPanel = 'Indicator panel';
265 MsgPropTrMessageKind = 'Message kind';
266 MsgPropTrMessageKind0 = 'Console message';
267 MsgPropTrMessageKind1 = 'Event message';
268 MsgPropTrMessageTo = 'Send to';
269 MsgPropTrMessageTo0 = 'Me';
270 MsgPropTrMessageTo1 = 'My team';
271 MsgPropTrMessageTo2 = 'Enemy team';
272 MsgPropTrMessageTo3 = 'Red team';
273 MsgPropTrMessageTo4 = 'Blue team';
274 MsgPropTrMessageTo5 = 'Everyone';
275 MsgPropTrMessageText = 'Message text';
276 MsgPropTrMessageTime = 'Time (in ticks)';
277 MsgPropTrEffectType = 'Effect type';
278 MsgPropTrEffectSubtype = 'Effect subtype';
279 MsgPropTrEffectColor = 'Effect color';
280 MsgPropTrEffectCenter = 'Trigger center';
281 MsgPropTrEffectVelx = 'Horizontal speed';
282 MsgPropTrEffectVely = 'Vertical speed';
283 MsgPropTrEffectSpl = 'Speed variance left';
284 MsgPropTrEffectSpr = 'Speed variance right';
285 MsgPropTrEffectSpu = 'Speed variance up';
286 MsgPropTrEffectSpd = 'Speed variance down';
287 MsgPropTrEffectParticle = 'Particle generator';
288 MsgPropTrEffectAnimation = 'Animation';
289 MsgPropTrEffectSliquid = 'Water splash';
290 MsgPropTrEffectLliquid = 'Light colored splash';
291 MsgPropTrEffectDliquid = 'Dark colored splash';
292 MsgPropTrEffectBlood = 'Blood';
293 MsgPropTrEffectSpark = 'Sparks';
294 MsgPropTrEffectBubble = 'Bubbles';
296 MsgMsgError = 'Error';
297 MsgMsgWrongTexwidth = 'Panel Width must be a multiple of Texture Width (%d)';
298 MsgMsgWrongTexheight = 'Panel Height must be a multiple of Texture Height (%d)';
299 MsgMsgWrongAlpha = 'Transparency must be in [0..255] interval';
300 MsgMsgWrongSize = 'Width and Height must be greater than 0';
301 MsgMsgWrongXy = 'X or Y coordinate hasn''t been set';
302 MsgMsgTextureAlready = 'Texture "%s" already exists';
303 MsgMsgResName64 = 'Resource "%s" name must not be longer than 64 chars';
304 MsgMsgChooseItem = 'Select Item';
305 MsgMsgChooseMonster = 'Select Monster';
306 MsgMsgChooseArea = 'Select Area';
307 MsgMsgChooseTexture = 'Select Texture';
308 MsgMsgChooseRes = 'Resource hasn''t been selected';
309 MsgMsgExit = 'Exit';
310 MsgMsgExitPromt = 'Leaving so soon?';
311 MsgMsgDelTexture = 'Delete the texture';
312 MsgMsgDelTexturePromt = 'Delete the texture "%s" ?';
313 MsgMsgDelTextureCant = 'Can''t delete texture in use. Replace it on all panels with this texture.';
314 MsgMsgDelRecent = 'File does not longer exist';
315 MsgMsgDelRecentPromt = 'Remove entry from recent list?';
316 MsgMsgClearMap = 'New map';
317 MsgMsgClearMapPromt = 'Clear the entire map?';
318 MsgMsgDeleteMap = 'Delete the map';
319 MsgMsgDeleteMapPromt = 'Delete the map "%s" from "%s" ?';
320 MsgMsgMapDeleted = 'Map is deleted';
321 MsgMsgMapDeletedPromt = 'Map "%s" is deleted';
322 MsgMsgReopenMapPromt = 'Reopen this map?';
323 MsgMsgExecError = 'Game start error';
324 MsgMsgSoundError = 'Can''t play sound';
325 MsgMsgWadError = 'Can''t open WAD: %s';
326 MsgMsgResError = 'Can''t read resource: %s:%s\%s';
327 MsgMsgPacked = 'Map "%s" with resources saved to "%s"';
328 MsgMsgMapExists = 'Map "%s" already exists. Overwrite?';
329 MsgMsgSaveMap = 'Save the map';
331 MsgHintTeleport = 'Choose destination of Teleport';
332 MsgHintSpawn = 'Choose Spawn point';
333 MsgHintPanelDoor = 'Choose Door';
334 MsgHintPanelTexture = 'Choose textured Panel';
335 MsgHintPanelShot = 'Choose textured shot indicator Panel';
336 MsgHintPanelLift = 'Choose Stream Panel';
337 MsgHintMonster = 'Choose Monster';
338 MsgHintExtArea = 'Specify action Area';
339 MsgHintWidth = 'Width: %d';
340 MsgHintHeight = 'Height: %d';
342 MsgMenuFile = 'File';
343 MsgMenuFileNew = 'New';
344 MsgMenuFileOpen = 'Open...';
345 MsgMenuFileSave = 'Save';
346 MsgMenuFileSaveAs = 'Save As...';
347 MsgMenuFileOpenWad = 'Select Map...';
348 MsgMenuFileReopen = 'Revert to Saved';
349 MsgMenuFileSaveMini = 'Save Minimap...';
350 MsgMenuFileDelete = 'Delete from WAD...';
351 MsgMenuFilePackMap = 'Pack to WAD...';
352 MsgMenuFileExit = 'Exit';
354 MsgMenuEdit = 'Edit';
355 MsgMenuEditUndo = 'Undo';
356 MsgMenuEditCopy = 'Copy';
357 MsgMenuEditCut = 'Cut';
358 MsgMenuEditPaste = 'Paste';
359 MsgMenuEditSelectAll = 'Select All';
360 MsgMenuEditToFore = 'Bring to Front';
361 MsgMenuEditToBack = 'Send to Back';
363 MsgMenuTools = 'Tools';
364 MsgMenuToolsSnapGrid = 'Snap to Grid';
365 MsgMenuToolsMinimap = 'Show Minimap';
366 MsgMenuToolsStepGrid = 'Switch Grid Granularity';
367 MsgMenuToolsShowEdges = 'Show Map Bounds';
368 MsgMenuToolsLayers = 'Layers';
370 MsgMenuServ = 'Service';
371 MsgMenuServTest = 'Analyse Map...';
372 MsgMenuServOpt = 'Optimize Map...';
373 MsgMenuServPreview = 'Preview Mode';
374 MsgMenuServLaunch = 'Run Test';
376 MsgMenuSets = 'Settings';
377 MsgMenuSetsMap = 'Map Properties...';
378 MsgMenuSetsEditor = 'Preferences...';
379 MsgMenuSetsLaunch = 'In-game test settings';
381 MsgMenuHelp = 'Help';
382 MsgMenuHelpAbout = 'About';
384 MsgMenuLayerBack = '1. Background';
385 MsgMenuLayerWall = '2. Walls';
386 MsgMenuLayerFore = '3. Foreground';
387 MsgMenuLayerStair = '4. Steps';
388 MsgMenuLayerWater = '5. Liquids';
389 MsgMenuLayerItem = '6. Items';
390 MsgMenuLayerMonster = '7. Monsters';
391 MsgMenuLayerArea = '8. Areas';
392 MsgMenuLayerTrigger = '9. Triggers';
394 MsgMenuTbNew = 'New Map';
395 MsgMenuTbOpen = 'Open Map';
396 MsgMenuTbSave = 'Save Map';
397 MsgMenuTbOpenWad = 'Open another Map from same WAD';
398 MsgMenuTbMinimap = 'Show Mini-map';
399 MsgMenuTbLayers = 'Show/Hide Objects';
400 MsgMenuTbGrid = 'Grid On/Off';
401 MsgMenuTbGridStep = 'Switch Grid step';
402 MsgMenuTbLaunch = 'Run Test';
404 MsgMenuLaunchSets = 'Settings...';
406 MsgCapFxType = 'Select Effect type';
407 MsgCapMonsterType = 'Select Monster type';
408 MsgCapItemType = 'Select Item type';
409 MsgCapAbout = 'About Map Editor';
410 MsgCapAct = 'Activation type';
411 MsgCapAddSky = 'Select Sky Texture';
412 MsgCapAddSound = 'Select Sound/Music';
413 MsgCapAddTexture = 'Select Texture';
414 MsgCapKeys = 'Keys';
415 MsgCapTest = 'Analyse Map';
416 MsgCapOpt = 'Optimize Map';
417 MsgCapSets = 'Map Properties';
418 MsgCapLaunch = 'In-game test Settings';
419 MsgCapEs = 'Editor Preferences';
420 MsgCapPack = 'Pack Map';
421 MsgCapSave = 'Save Map';
422 MsgCapMini = 'Save Minimap';
423 MsgCapSelect = 'Select Map';
424 MsgCapOpen = 'Open Map';
425 MsgCapRemove = 'Remove Map';
426 MsgCapTexture = 'Texture: %dx%d';
427 MsgCapAnimation = 'Animation: %dx%d, %d frames';
428 MsgCapStatSelected = 'Selected objects: %d';
430 MsgCtrlPropKey = 'Property';
431 MsgCtrlPropValue = 'Value';
433 MsgCtrlPanels = 'Panels';
434 MsgCtrlItems = 'Items';
435 MsgCtrlMonsters = 'Monsters';
436 MsgCtrlAreas = 'Areas';
437 MsgCtrlTriggers = 'Triggers';
439 MsgCtrlListTexture = 'Texture List';
440 MsgCtrlListItem = 'Item List';
441 MsgCtrlListMonster = 'Monster List';
442 MsgCtrlListArea = 'Area List';
443 MsgCtrlListTrigger = 'Trigger List';
444 MsgCtrlListActive = 'Activation Type';
445 MsgCtrlListKeys = 'Keys Needed';
447 MsgCtrlPreview = 'Texture Preview';
448 MsgCtrlItemDm = 'DM Only';
449 MsgCtrlItemFalls = 'Falls';
450 MsgCtrlLeft = 'Left';
451 MsgCtrlRight = 'Right';
453 MsgCtrlActPlayerClose = 'Player Collides';
454 MsgCtrlActMonsterClose = 'Monster Collides';
455 MsgCtrlActPlayerPress = 'Player Pressed';
456 MsgCtrlActMonsterPress = 'Monster Pressed';
457 MsgCtrlActShot = 'Shot';
458 MsgCtrlActNoMonster = 'No Monsters';
460 MsgCtrlKeysRed = 'Red Key';
461 MsgCtrlKeysGreen = 'Green Key';
462 MsgCtrlKeysBlue = 'Blue Key';
463 MsgCtrlKeysTeamRed = 'Red Team';
464 MsgCtrlKeysTeamBlue = 'Blue Team';
466 MsgCtrlOptGb = 'Optimization';
467 MsgCtrlOptTexture = 'Texture Optimization';
468 MsgCtrlOptPanel = 'Panel Optimization';
469 MsgCtrlOptWall = 'Walls';
470 MsgCtrlOptFore = 'Foreground';
471 MsgCtrlOptBack = 'Background';
472 MsgCtrlOptStair = 'Steps';
473 MsgCtrlOptWater = 'Water';
474 MsgCtrlOptAcid1 = 'Acid 1';
475 MsgCtrlOptAcid2 = 'Acid 2';
476 MsgCtrlOptLift = 'Streams';
477 MsgCtrlOptBlockmon = 'Monster Boundary';
478 MsgCtrlOptDescTexture = 'Deletes unused textures from texture list.';
479 MsgCtrlOptDescPanel = 'Merges nearby panels of same type. Increases game performance.';
480 MsgCtrlSetsStats = 'Statistics:';
481 MsgCtrlSetsSizes = 'Map Size:';
483 MsgCtrlLaunchDm = 'Deathmatch';
484 MsgCtrlLaunchTdm = 'Team Deathmatch';
485 MsgCtrlLaunchCtf = 'Capture the Flag';
486 MsgCtrlLaunchCoop = 'Cooperative';
487 MsgCtrlLaunch2p = 'Two Players';
488 MsgCtrlLaunchFf = 'Friendly Fire';
489 MsgCtrlLaunchExit = 'Enable Exit';
490 MsgCtrlLaunchWeapons = 'Weapons Stay';
491 MsgCtrlLaunchMonsters = 'Enable Monsters';
492 MsgCtrlLaunchClose = 'Close the game after exiting the map';
493 MsgCtrlLaunchOpen = 'Select Doom 2D: Forever executable';
495 MsgCtrlEsGrid = 'Show Grid';
496 MsgCtrlEsTexture = 'Show Panel Texture';
497 MsgCtrlEsPanelSize = 'Show Panel Size';
498 MsgCtrlEsCheckerboard = 'Use Checkerboard';
500 MsgCtrlPackTextures = 'Textures';
501 MsgCtrlPackSky = 'Sky';
502 MsgCtrlPackMusic = 'Music';
503 MsgCtrlPackAdd = 'Don''t overwrite WAD';
504 MsgCtrlPackNonStd = 'Non-standard Resources only';
506 MsgLabTexWidth = 'Texture Width:';
507 MsgLabTexHeight = 'Texture Height:';
509 MsgLabSpectrum = 'Show the Spectrum';
511 MsgLabAboutVer = 'Version 2.1.5';
512 MsgLabAboutAuthor = 'Author: rs.falcon';
513 MsgLabAboutAuthor2 = 'Additions: Pss';
514 MsgLabAboutMail = 'rmw.falcon@mail.ru';
515 MsgLabAboutMail2 = 'pssxx@mail.ru';
516 MsgLabAboutSite = 'Doom 2D: Forever Web-site';
517 MsgLabAboutHttp = 'www.doom2d.org';
519 MsgLabAddWads = 'WAD Files:';
520 MsgLabAddSections = 'WAD Sections:';
522 MsgLabSetsName = 'Map Name:';
523 MsgLabSetsDesc = 'Map Description';
524 MsgLabSetsAuthor = 'Author:';
525 MsgLabSetsBack = 'Background/Sky:';
526 MsgLabSetsMusic = 'Music:';
527 MsgLabSetsTextures = 'Textures:';
528 MsgLabSetsPanels = 'Panels:';
529 MsgLabSetsItems = 'Items:';
530 MsgLabSetsMonsters = 'Monsters:';
531 MsgLabSetsAreas = 'Areas:';
532 MsgLabSetsTriggers = 'Triggers:';
533 MsgLabSetsSizes = 'Current:';
534 MsgLabSetsWidth = 'Width:';
535 MsgLabSetsHeight = 'Height:';
536 MsgLabSetsMapmove = 'Direction to shift map objects:';
537 MsgLabSetsSnapping = 'Preserve snapping';
539 MsgLabLaunchTime = 'Time Limit:';
540 MsgLabLaunchSecs = 'seconds';
541 MsgLabLaunchScore = 'Score Limit:';
542 MsgLabLaunchPath = 'Path to Doom2DF.exe:';
543 MsgLabLaunchArgs = 'Launch Arguments:';
545 MsgLabEsGrid = 'Grid Step:';
546 MsgLabEsGridColor = 'Grid Color:';
547 MsgLabEsGridSize = 'Grid Dot Size:';
548 MsgLabEsBack = 'Background Color:';
549 MsgLabEsPreview = 'Texture Preview Background Color:';
550 MsgLabEsMinimap = 'Mini-map Scale:';
551 MsgLabEsRecent = 'Recent Maps List Contains:';
552 MsgLabEsLanguage = 'Language:';
553 MsgLabEsCompress = 'Compress archive when save';
554 MsgLabEsBackup = 'Make backup before save';
556 MsgLabPackSaveTo = 'Save to:';
557 MsgLabPackMapName = 'Map Resource Name:';
558 MsgLabPackTextures = 'Texture Section:';
559 MsgLabPackSky = 'Sky Section:';
560 MsgLabPackMusic = 'Music Section:';
562 MsgLabMiniScale = 'Scale:';
564 MsgBtnApplyProps = 'Apply Properties';
565 MsgBtnOk = 'OK';
566 MsgBtnCancel = 'Cancel';
567 MsgBtnAdd = 'Add';
568 MsgBtnClose = 'Close';
569 MsgBtnAddClose = 'Add and Close';
570 MsgBtnTestAgain = 'Check';
571 MsgBtnStart = 'Run';
572 MsgBtnPack = 'Pack';
573 MsgBtnSave = 'Save';
574 MsgBtnNoSound = 'No sound';
575 MsgBtnTextureAdd = 'Add texture to the list';
576 MsgBtnTextureDelete = 'Delete texture from the list';
577 MsgBtnTextureEmpty = 'Deselect texture';
579 MsgLoadWad = 'Reading WAD';
580 MsgLoadMap = 'Loading Map';
581 MsgLoadTextures = 'Reading Textures';
582 MsgLoadPanels = 'Reading Panels';
583 MsgLoadItems = 'Reading Items';
584 MsgLoadMonsters = 'Reading Monsters';
585 MsgLoadAreas = 'Reading Areas';
586 MsgLoadTriggers = 'Reading Triggers';
588 MsgTestAreaWall = 'Player collides with the wall and will be stuck.';
589 MsgTestAreaWallStr = 'Area #%d collides with Map (%d:%d)';
590 MsgTestSpawns1 = 'There are several spawn points for First Player on the map';
591 MsgTestSpawns2 = 'There are several spawn points for Second Player on the map';
592 MsgTestSpawns = 'There are several spawn points on the map. Random one will be used.';
593 MsgTestNoDm = 'There are no DM spawn points on the map';
594 MsgTestNoDmEx = 'There are no DM spawn points on the map. Only "Single Player" mode available.';
595 MsgTestMonsterWall = 'Monster collides with the wall and will be stuck.';
596 MsgTestMonsterWallStr = 'Monster #%d collides with a map (%d:%d)';
598 MsgOptNoTextures = 'Texture list is empty';
599 MsgOptDeletedTextures = 'Deleted Textures:';
600 MsgOptTotalTextures = 'Textures Total:';
601 MsgOptTexDeleted = 'Textures Deleted:';
602 MsgOptPanelsOpt = 'Panels Optimized:';
603 MsgOptWalls = 'Walls Optimization...';
604 MsgOptFores = 'Foreground Optimization...';
605 MsgOptBacks = 'Background Optimization...';
606 MsgOptStairs = 'Steps Optimization...';
607 MsgOptWater = 'Water Optimization...';
608 MsgOptAcid1 = 'Acid 1 Optimization...';
609 MsgOptAcid2 = 'Acid 2 Optimization...';
610 MsgOptLifts = 'Streams Optimization...';
611 MsgOptBlockmon = 'Monster Boundaries Optimization...';
612 MsgOptTotalPanels = 'Panels Total:';
613 MsgOptPanelsAfter = 'Panels after Optimization:';
615 MsgWadSpecialMap = '<MAP WAD-FILE>';
616 MsgWadSpecialTexs = '<EXTRA TEXTURES>';
618 MsgFileFilterAll = 'Doom 2D: Forever Maps (*.dfz, *.dfzip, *.zip, *.wad)|*.dfz;*.dfzip;*.zip;*.wad|Doom 2D: Forever 0.30 Maps (*.ini)|*.ini|All Files (*.*)|*.*';
619 MsgFileFilterWad = 'Doom 2D: Forever Maps (*.dfz)|*.dfz|Doom 2D: Forever Maps (*.dfzip)|*.dfzip|Doom 2D: Forever Maps (*.zip)|*.zip|Doom 2D: Forever Maps (*.wad)|*.wad|All Files (*.*)|*.*';
621 MsgEditorTitle = 'Doom 2D: Forever Map Editor';
623 Var
624 BoolNames: Array [False..True] of String;
625 DirNames: Array [D_LEFT..D_RIGHT] of String;
626 DirNamesAdv: Array [0..3] of String;
627 DirButtonNames: Array [1..4] of String;
628 PANELNAMES: Array[0..13] of String;
629 EffectNames: Array [EFFECT_NONE..EFFECT_FIRE] of String;
630 ItemNames: Array [ITEM_MEDKIT_SMALL..ITEM_MAX] of String;
631 ShotNames: Array [TRIGGER_SHOT_PISTOL..TRIGGER_SHOT_MAX] of String;
632 MonsterNames: Array [MONSTER_DEMON..MONSTER_MAN] of String;
633 AreaNames: Array [AREA_PLAYERPOINT1..AREA_BLUETEAMPOINT] of String;
634 TriggerNames: Array [TRIGGER_EXIT..TRIGGER_MAX] of String;
636 procedure g_Language_Set(lang: String);
638 Implementation
640 Uses
641 gettext, g_options,
642 SysUtils, e_log, f_main, f_about, f_activationtype,
643 f_addresource_sky, f_addresource_sound,
644 f_addresource_texture, f_choosetype, f_keys, f_mapcheck,
645 f_mapoptions, f_mapoptimization, f_options,
646 f_packmap, f_savemap, f_saveminimap, f_selectmap, Forms, utils;
648 procedure SetupArrays();
649 var
650 i: Integer;
652 begin
653 // Да/Нет:
654 BoolNames[False] := MsgArrayBoolFalse;
655 BoolNames[True] := MsgArrayBoolTrue;
657 // Направления:
658 DirNames[D_LEFT] := MsgArrayDirLeft;
659 DirNames[D_RIGHT] := MsgArrayDirRight;
661 // Смены направления:
662 DirNamesAdv[0] := MsgArrayDirSame;
663 DirNamesAdv[1] := MsgArrayDirLeft;
664 DirNamesAdv[2] := MsgArrayDirRight;
665 DirNamesAdv[3] := MsgArrayDirReversed;
667 // Направление (на кнопках):
668 DirButtonNames[1] := MsgArrayDirbtnLeft;
669 DirButtonNames[2] := MsgArrayDirbtnRight;
670 DirButtonNames[3] := MsgArrayDirbtnUp;
671 DirButtonNames[4] := MsgArrayDirbtnDown;
673 // Названия панелей:
674 PANELNAMES[0] := MsgArrayPanelWall;
675 PANELNAMES[1] := MsgArrayPanelBack;
676 PANELNAMES[2] := MsgArrayPanelFront;
677 PANELNAMES[3] := MsgArrayPanelDoorOpen;
678 PANELNAMES[4] := MsgArrayPanelDoorClose;
679 PANELNAMES[5] := MsgArrayPanelStair;
680 PANELNAMES[6] := MsgArrayPanelWater;
681 PANELNAMES[7] := MsgArrayPanelAcid1;
682 PANELNAMES[8] := MsgArrayPanelAcid2;
683 PANELNAMES[9] := MsgArrayPanelLiftUp;
684 PANELNAMES[10] := MsgArrayPanelLiftDown;
685 PANELNAMES[11] := MsgArrayPanelLiftLeft;
686 PANELNAMES[12] := MsgArrayPanelLiftRight;
687 PANELNAMES[13] := MsgArrayPanelBlockmon;
689 // Названия эффектов:
690 EffectNames[EFFECT_NONE] := MsgArrayFxNone;
691 EffectNames[EFFECT_TELEPORT] := MsgArrayFxTeleport;
692 EffectNames[EFFECT_RESPAWN] := MsgArrayFxRespawn;
693 EffectNames[EFFECT_FIRE] := MsgArrayFxFire;
695 // Названия предметов:
696 ItemNames[ITEM_MEDKIT_SMALL] := MsgArrayItemMedkit;
697 ItemNames[ITEM_MEDKIT_LARGE] := MsgArrayItemLargeMedkit;
698 ItemNames[ITEM_MEDKIT_BLACK] := MsgArrayItemBlackMedkit;
699 ItemNames[ITEM_ARMOR_GREEN] := MsgArrayItemGreenArmor;
700 ItemNames[ITEM_ARMOR_BLUE] := MsgArrayItemBlueArmor;
701 ItemNames[ITEM_SPHERE_BLUE] := MsgArrayItemBlueSphere;
702 ItemNames[ITEM_SPHERE_WHITE] := MsgArrayItemMegasphere;
703 ItemNames[ITEM_SUIT] := MsgArrayItemHazSuit;
704 ItemNames[ITEM_OXYGEN] := MsgArrayItemOxygen;
705 ItemNames[ITEM_INVUL] := MsgArrayItemInvulnerability;
706 ItemNames[ITEM_WEAPON_SAW] := MsgArrayItemChainsaw;
707 ItemNames[ITEM_WEAPON_SHOTGUN1] := MsgArrayItemShotgun;
708 ItemNames[ITEM_WEAPON_SHOTGUN2] := MsgArrayItemDbShotgun;
709 ItemNames[ITEM_WEAPON_CHAINGUN] := MsgArrayItemChaingun;
710 ItemNames[ITEM_WEAPON_ROCKETLAUNCHER] := MsgArrayItemRocketLauncher;
711 ItemNames[ITEM_WEAPON_PLASMA] := MsgArrayItemPlasmaRifle;
712 ItemNames[ITEM_WEAPON_BFG] := MsgArrayItemBfg;
713 ItemNames[ITEM_WEAPON_SUPERPULEMET] := MsgArrayItemSuperMinigun;
714 ItemNames[ITEM_WEAPON_FLAMETHROWER] := MsgArrayItemFlamethrower;
715 ItemNames[ITEM_AMMO_BULLETS] := MsgArrayItemClip;
716 ItemNames[ITEM_AMMO_BULLETS_BOX] := MsgArrayItemAmmoBox;
717 ItemNames[ITEM_AMMO_SHELLS] := MsgArrayItem4Shells;
718 ItemNames[ITEM_AMMO_SHELLS_BOX] := MsgArrayItem25Shells;
719 ItemNames[ITEM_AMMO_ROCKET] := MsgArrayItem1Rocket;
720 ItemNames[ITEM_AMMO_ROCKET_BOX] := MsgArrayItemRocketBox;
721 ItemNames[ITEM_AMMO_CELL] := MsgArrayItemCell;
722 ItemNames[ITEM_AMMO_CELL_BIG] := MsgArrayItemLargeCell;
723 ItemNames[ITEM_AMMO_FUELCAN] := MsgArrayItemFuelcan;
724 ItemNames[ITEM_AMMO_BACKPACK] := MsgArrayItemBackpack;
725 ItemNames[ITEM_KEY_RED] := MsgArrayItemKeyRed;
726 ItemNames[ITEM_KEY_GREEN] := MsgArrayItemKeyGreen;
727 ItemNames[ITEM_KEY_BLUE] := MsgArrayItemKeyBlue;
728 ItemNames[ITEM_WEAPON_KASTET] := '?';
729 ItemNames[ITEM_WEAPON_PISTOL] := '??';
730 ItemNames[ITEM_BOTTLE] := MsgArrayItemBottle;
731 ItemNames[ITEM_HELMET] := MsgArrayItemHelmet;
732 ItemNames[ITEM_JETPACK] := MsgArrayItemJetpack;
733 ItemNames[ITEM_INVIS] := MsgArrayItemInvis;
735 // Названия снарядов:
736 ShotNames[TRIGGER_SHOT_PISTOL] := MsgArrayShotPistol;
737 ShotNames[TRIGGER_SHOT_BULLET] := MsgArrayShotBullet;
738 ShotNames[TRIGGER_SHOT_SHOTGUN] := MsgArrayShotShotgun;
739 ShotNames[TRIGGER_SHOT_SSG] := MsgArrayShotSsg;
740 ShotNames[TRIGGER_SHOT_IMP] := MsgArrayShotImp;
741 ShotNames[TRIGGER_SHOT_PLASMA] := MsgArrayShotPlasma;
742 ShotNames[TRIGGER_SHOT_SPIDER] := MsgArrayShotSpider;
743 ShotNames[TRIGGER_SHOT_CACO] := MsgArrayShotCaco;
744 ShotNames[TRIGGER_SHOT_BARON] := MsgArrayShotBaron;
745 ShotNames[TRIGGER_SHOT_MANCUB] := MsgArrayShotMancub;
746 ShotNames[TRIGGER_SHOT_REV] := MsgArrayShotRev;
747 ShotNames[TRIGGER_SHOT_ROCKET] := MsgArrayShotRocket;
748 ShotNames[TRIGGER_SHOT_BFG] := MsgArrayShotBfg;
749 ShotNames[TRIGGER_SHOT_EXPL] := MsgArrayShotExpl;
750 ShotNames[TRIGGER_SHOT_BFGEXPL] := MsgArrayShotBfgexpl;
751 ShotNames[TRIGGER_SHOT_FLAME] := MsgArrayShotFlame;
753 // Названия монстров:
754 MonsterNames[MONSTER_DEMON] := MsgArrayMonDemon;
755 MonsterNames[MONSTER_IMP] := MsgArrayMonImp;
756 MonsterNames[MONSTER_ZOMBY] := MsgArrayMonZombie;
757 MonsterNames[MONSTER_SERG] := MsgArrayMonSergeant;
758 MonsterNames[MONSTER_CYBER] := MsgArrayMonCyber;
759 MonsterNames[MONSTER_CGUN] := MsgArrayMonCgun;
760 MonsterNames[MONSTER_BARON] := MsgArrayMonHellBaron;
761 MonsterNames[MONSTER_KNIGHT] := MsgArrayMonHellKnight;
762 MonsterNames[MONSTER_CACO] := MsgArrayMonCacodemon;
763 MonsterNames[MONSTER_SOUL] := MsgArrayMonLostSoul;
764 MonsterNames[MONSTER_PAIN] := MsgArrayMonPainElemental;
765 MonsterNames[MONSTER_SPIDER] := MsgArrayMonMastermind;
766 MonsterNames[MONSTER_BSP] := MsgArrayMonArachnatron;
767 MonsterNames[MONSTER_MANCUB] := MsgArrayMonMancubus;
768 MonsterNames[MONSTER_SKEL] := MsgArrayMonRevenant;
769 MonsterNames[MONSTER_VILE] := MsgArrayMonArchvile;
770 MonsterNames[MONSTER_FISH] := MsgArrayMonFish;
771 MonsterNames[MONSTER_BARREL] := MsgArrayMonBarrel;
772 MonsterNames[MONSTER_ROBO] := MsgArrayMonRobot;
773 MonsterNames[MONSTER_MAN] := MsgArrayMonPrikolist;
775 // Названия областей:
776 AreaNames[AREA_PLAYERPOINT1] := MsgArrayAreaPlayerOne;
777 AreaNames[AREA_PLAYERPOINT2] := MsgArrayAreaPlayerTwo;
778 AreaNames[AREA_DMPOINT] := MsgArrayAreaDm;
779 AreaNames[AREA_REDFLAG] := MsgArrayAreaFlagRed;
780 AreaNames[AREA_BLUEFLAG] := MsgArrayAreaFlagBlue;
781 AreaNames[AREA_DOMFLAG] := MsgArrayAreaFlagDom;
782 AreaNames[AREA_REDTEAMPOINT] := MsgArrayAreaTeamRed;
783 AreaNames[AREA_BLUETEAMPOINT] := MsgArrayAreaTeamBlue;
785 // Названия триггеров:
786 TriggerNames[TRIGGER_EXIT] := MsgArrayTrExit;
787 TriggerNames[TRIGGER_TELEPORT] := MsgArrayTrTeleport;
788 TriggerNames[TRIGGER_OPENDOOR] := MsgArrayTrDoorOpen;
789 TriggerNames[TRIGGER_CLOSEDOOR] := MsgArrayTrDoorClose;
790 TriggerNames[TRIGGER_DOOR] := MsgArrayTrDoorSwitch;
791 TriggerNames[TRIGGER_DOOR5] := MsgArrayTrDoor5Sec;
792 TriggerNames[TRIGGER_CLOSETRAP] := MsgArrayTrTrapClose;
793 TriggerNames[TRIGGER_TRAP] := MsgArrayTrTrap;
794 TriggerNames[TRIGGER_PRESS] := MsgArrayTrExtend;
795 TriggerNames[TRIGGER_SECRET] := MsgArrayTrSecret;
796 TriggerNames[TRIGGER_LIFTUP] := MsgArrayTrLiftUp;
797 TriggerNames[TRIGGER_LIFTDOWN] := MsgArrayTrLiftDown;
798 TriggerNames[TRIGGER_LIFT] := MsgArrayTrLiftSwitch;
799 TriggerNames[TRIGGER_TEXTURE] := MsgArrayTrTexture;
800 TriggerNames[TRIGGER_ON] := MsgArrayTrOn;
801 TriggerNames[TRIGGER_OFF] := MsgArrayTrOff;
802 TriggerNames[TRIGGER_ONOFF] := MsgArrayTrSwitch;
803 TriggerNames[TRIGGER_SOUND] := MsgArrayTrSound;
804 TriggerNames[TRIGGER_SPAWNMONSTER] := MsgArrayTrSpawnMonster;
805 TriggerNames[TRIGGER_SPAWNITEM] := MsgArrayTrSpawnItem;
806 TriggerNames[TRIGGER_MUSIC] := MsgArrayTrMusic;
807 TriggerNames[TRIGGER_PUSH] := MsgArrayTrPush;
808 TriggerNames[TRIGGER_SCORE] := MsgArrayTrScore;
809 TriggerNames[TRIGGER_MESSAGE] := MsgArrayTrMessage;
810 TriggerNames[TRIGGER_DAMAGE] := MsgArrayTrDamage;
811 TriggerNames[TRIGGER_HEALTH] := MsgArrayTrHealth;
812 TriggerNames[TRIGGER_SHOT] := MsgArrayTrShot;
813 TriggerNames[TRIGGER_EFFECT] := MsgArrayTrEffect;
815 // Установка значений в панели выбора объектов:
816 with MainForm do
817 begin
818 lbPanelType.Items.Clear();
819 for i := 0 to High(PANELNAMES) do
820 lbPanelType.Items.Add(PANELNAMES[i]);
821 lbPanelType.ItemIndex := 0;
823 lbItemList.Clear();
824 for i := ITEM_MEDKIT_SMALL to ITEM_KEY_BLUE do
825 lbItemList.Items.Add(ItemNames[i]);
826 lbItemList.Items.Add(ItemNames[ITEM_BOTTLE]);
827 lbItemList.Items.Add(ItemNames[ITEM_HELMET]);
828 lbItemList.Items.Add(ItemNames[ITEM_JETPACK]);
829 lbItemList.Items.Add(ItemNames[ITEM_INVIS]);
830 lbItemList.Items.Add(ItemNames[ITEM_WEAPON_FLAMETHROWER]);
831 lbItemList.Items.Add(ItemNames[ITEM_AMMO_FUELCAN]);
833 lbMonsterList.Clear();
834 for i := MONSTER_DEMON to MONSTER_MAN do
835 lbMonsterList.Items.Add(MonsterNames[i]);
837 lbAreasList.Clear();
838 for i := AREA_PLAYERPOINT1 to AREA_BLUETEAMPOINT do
839 lbAreasList.Items.Add(AreaNames[i]);
841 lbTriggersList.Clear();
842 for i := Low(TriggerNames) to High(TriggerNames) do
843 lbTriggersList.Items.Add(TriggerNames[i]);
845 clbActivationType.Clear();
846 clbActivationType.Items.Add(MsgCtrlActPlayerClose);
847 clbActivationType.Items.Add(MsgCtrlActMonsterClose);
848 clbActivationType.Items.Add(MsgCtrlActPlayerPress);
849 clbActivationType.Items.Add(MsgCtrlActMonsterPress);
850 clbActivationType.Items.Add(MsgCtrlActShot);
851 clbActivationType.Items.Add(MsgCtrlActNoMonster);
853 clbKeys.Clear();
854 clbKeys.Items.Add(MsgCtrlKeysRed);
855 clbKeys.Items.Add(MsgCtrlKeysGreen);
856 clbKeys.Items.Add(MsgCtrlKeysBlue);
857 clbKeys.Items.Add(MsgCtrlKeysTeamRed);
858 clbKeys.Items.Add(MsgCtrlKeysTeamBlue);
859 end;
860 end;
862 procedure SetupCaptions();
863 var i: Integer; s: AnsiString;
864 begin
865 // Главная форма:
866 with MainForm do
867 begin
868 // Заголовок:
869 s := g_GetBuildHash(false);
870 if s = 'custom build' then
871 s := s + ' by ' + g_GetBuilderName() + ' ' + EDITOR_BUILDDATE + ' ' + EDITOR_BUILDTIME;
872 FormCaption := MsgEditorTitle + ' (' + s + ')';
873 i := Pos('-', Caption);
874 if i > 0 then
875 begin
876 Caption := FormCaption + ' ' + Copy(Caption, i, Length(Caption)-i+1);
877 end
878 else
879 Caption := FormCaption;
880 // Главное меню:
881 // "Файл":
882 miMenuFile.Caption := MsgMenuFile;
883 miNewMap.Caption := MsgMenuFileNew;
884 miOpenMap.Caption := MsgMenuFileOpen;
885 miSaveMap.Caption := MsgMenuFileSave;
886 miSaveMapAs.Caption := MsgMenuFileSaveAs;
887 miOpenWadMap.Caption := MsgMenuFileOpenWad;
888 miReopenMap.Caption := MsgMenuFileReopen;
889 miSaveMiniMap.Caption := MsgMenuFileSaveMini;
890 miDeleteMap.Caption := MsgMenuFileDelete;
891 miPackMap.Caption := MsgMenuFilePackMap;
892 miExit.Caption := MsgMenuFileExit;
893 // "Правка":
894 miMenuEdit.Caption := MsgMenuEdit;
895 miUndo.Caption := MsgMenuEditUndo;
896 miCopy.Caption := MsgMenuEditCopy;
897 miCut.Caption := MsgMenuEditCut;
898 miPaste.Caption := MsgMenuEditPaste;
899 miSelectAll.Caption := MsgMenuEditSelectAll;
900 miToFore.Caption := MsgMenuEditToFore;
901 miToBack.Caption := MsgMenuEditToBack;
902 // "Инструменты":
903 miSnapToGrid.Caption := MsgMenuToolsSnapGrid;
904 miMiniMap.Caption := MsgMenuToolsMinimap;
905 miSwitchGrid.Caption := MsgMenuToolsStepGrid;
906 miShowEdges.Caption := MsgMenuToolsShowEdges;
907 miLayers.Caption := MsgMenuToolsLayers;
908 miLayer1.Caption := MsgMenuLayerBack;
909 miLayer2.Caption := MsgMenuLayerWall;
910 miLayer3.Caption := MsgMenuLayerFore;
911 miLayer4.Caption := MsgMenuLayerStair;
912 miLayer5.Caption := MsgMenuLayerWater;
913 miLayer6.Caption := MsgMenuLayerItem;
914 miLayer7.Caption := MsgMenuLayerMonster;
915 miLayer8.Caption := MsgMenuLayerArea;
916 miLayer9.Caption := MsgMenuLayerTrigger;
917 miMapOptions.Caption := MsgMenuSetsMap;
918 miOptions.Caption := MsgMenuSetsEditor;
919 // "Сервис":
920 miMenuService.Caption := MsgMenuServ;
921 miCheckMap.Caption := MsgMenuServTest;
922 miOptimmization.Caption := MsgMenuServOpt;
923 miMapPreview.Caption := MsgMenuServPreview;
924 miTestMap.Caption := MsgMenuServLaunch;
925 // "Справка":
926 miMenuHelp.Caption := MsgMenuHelp;
927 miAbout.Caption := MsgMenuHelpAbout;
929 // Панель инструментов:
930 tbNewMap.Hint := MsgMenuTbNew;
931 tbOpenMap.Hint := MsgMenuTbOpen;
932 tbSaveMap.Hint := MsgMenuTbSave;
933 tbOpenWadMap.Hint := MsgMenuTbOpenWad;
934 tbShowMap.Hint := MsgMenuTbMinimap;
935 tbShow.Hint := MsgMenuTbLayers;
936 tbGridOn.Hint := MsgMenuTbGrid;
937 tbGrid.Hint := MsgMenuTbGridStep;
938 tbTestMap.Hint := MsgMenuTbLaunch;
939 // Всплывающее меню для кнопки слоев:
940 miLayerP1.Caption := MsgMenuLayerBack;
941 miLayerP2.Caption := MsgMenuLayerWall;
942 miLayerP3.Caption := MsgMenuLayerFore;
943 miLayerP4.Caption := MsgMenuLayerStair;
944 miLayerP5.Caption := MsgMenuLayerWater;
945 miLayerP6.Caption := MsgMenuLayerItem;
946 miLayerP7.Caption := MsgMenuLayerMonster;
947 miLayerP8.Caption := MsgMenuLayerArea;
948 miLayerP9.Caption := MsgMenuLayerTrigger;
950 // Кнопка применения свойств:
951 bApplyProperty.Caption := MsgBtnApplyProps;
952 // Редактор свойств объектов:
953 vleObjectProperty.TitleCaptions[0] := MsgCtrlPropKey;
954 vleObjectProperty.TitleCaptions[1] := MsgCtrlPropValue;
956 // Вкладка "Панели":
957 tsPanels.Caption := MsgCtrlPanels;
958 lbPanelType.Hint := MsgPropPanelType;
959 lbTextureList.Hint := MsgCtrlListTexture;
960 // Панель настройки текстур:
961 LabelTxW.Caption := MsgLabTexWidth;
962 LabelTxH.Caption := MsgLabTexHeight;
963 cbPreview.Caption := MsgCtrlPreview;
964 bbAddTexture.Hint := MsgBtnTextureAdd;
965 bbRemoveTexture.Hint := MsgBtnTextureDelete;
966 bClearTexture.Hint := MsgBtnTextureEmpty;
968 // Вкладка "Предметы":
969 tsItems.Caption := MsgCtrlItems;
970 lbItemList.Hint := MsgCtrlListItem;
971 cbOnlyDM.Caption := MsgCtrlItemDm;
972 cbFall.Caption := MsgCtrlItemFalls;
974 // Вкладка "Монстры":
975 tsMonsters.Caption := MsgCtrlMonsters;
976 lbMonsterList.Hint := MsgCtrlListMonster;
977 rbMonsterLeft.Caption := MsgCtrlLeft;
978 rbMonsterRight.Caption := MsgCtrlRight;
980 // Вкладка "Области":
981 tsAreas.Caption := MsgCtrlAreas;
982 lbAreasList.Hint := MsgCtrlListArea;
983 rbAreaLeft.Caption := MsgCtrlLeft;
984 rbAreaRight.Caption := MsgCtrlRight;
986 // Вкладка "Триггеры":
987 tsTriggers.Caption := MsgCtrlTriggers;
988 lbTriggersList.Hint := MsgCtrlListTrigger;
989 clbActivationType.Hint := MsgCtrlListActive;
990 clbKeys.Hint := MsgCtrlListKeys;
991 end;
993 // Форма "О программе":
994 with AboutForm do
995 begin
996 Caption := MsgCapAbout;
997 LabelTitle.Caption := MsgEditorTitle;
998 LabelVer.Caption := MsgLabAboutVer;
999 LabelAuthor.Caption := MsgLabAboutAuthor;
1000 LabelAuthor2.Caption := MsgLabAboutAuthor2;
1001 LabelMail.Caption := MsgLabAboutMail;
1002 LabelMail2.Caption := MsgLabAboutMail2;
1003 LabelSite.Caption := MsgLabAboutSite;
1004 LabelHttp.Caption := MsgLabAboutHttp;
1005 end;
1007 // Форма "Тип активации":
1008 with ActivationTypeForm do
1009 begin
1010 Caption := MsgCapAct;
1011 cbPlayerCollide.Caption := MsgCtrlActPlayerClose;
1012 cbMonsterCollide.Caption := MsgCtrlActMonsterClose;
1013 cbPlayerPress.Caption := MsgCtrlActPlayerPress;
1014 cbMonsterPress.Caption := MsgCtrlActMonsterPress;
1015 cbShot.Caption := MsgCtrlActShot;
1016 cbNoMonster.Caption := MsgCtrlActNoMonster;
1017 bOK.Caption := MsgBtnOk;
1018 end;
1020 // Форма "Выбор текстуры для неба":
1021 with AddSkyForm do
1022 begin
1023 Caption := MsgCapAddSky;
1024 LabelWADs.Caption := MsgLabAddWads;
1025 LabelSections.Caption := MsgLabAddSections;
1026 bOK.Caption := MsgBtnOk;
1027 bCancel.Caption := MsgBtnCancel;
1028 end;
1030 // Форма "Выбор звука или музыки":
1031 with AddSoundForm do
1032 begin
1033 Caption := MsgCapAddSound;
1034 LabelWADs.Caption := MsgLabAddWads;
1035 LabelSections.Caption := MsgLabAddSections;
1036 bOK.Caption := MsgBtnOk;
1037 bCancel.Caption := MsgBtnCancel;
1038 bEmpty.Caption := MsgBtnNoSound;
1039 end;
1041 // Форма "Выбор текстуры":
1042 with AddTextureForm do
1043 begin
1044 Caption := MsgCapAddTexture;
1045 LabelWADs.Caption := MsgLabAddWads;
1046 LabelSections.Caption := MsgLabAddSections;
1047 bAddTexture.Caption := MsgBtnAdd;
1048 bClose.Caption := MsgBtnClose;
1049 bAddClose.Caption := MsgBtnAddClose;
1050 end;
1052 // Форма "Выбор типа монстра" / "Выбор типа предмета":
1053 ChooseTypeForm.bOK.Caption := MsgBtnOk;
1055 // Форма "Ключи":
1056 with KeysForm do
1057 begin
1058 Caption := MsgCapKeys;
1059 cbRedKey.Caption := MsgCtrlKeysRed;
1060 cbGreenKey.Caption := MsgCtrlKeysGreen;
1061 cbBlueKey.Caption := MsgCtrlKeysBlue;
1062 cbRedTeam.Caption := MsgCtrlKeysTeamRed;
1063 cbBlueTeam.Caption := MsgCtrlKeysTeamBlue;
1064 bOK.Caption := MsgBtnOk;
1065 end;
1067 // Форма "Проверка карты":
1068 with MapCheckForm do
1069 begin
1070 Caption := MsgCapTest;
1071 bCheckMap.Caption := MsgBtnTestAgain;
1072 bClose.Caption := MsgBtnClose;
1073 end;
1075 // Форма "Оптимизация карты":
1076 with MapOptimizationForm do
1077 begin
1078 Caption := MsgCapOpt;
1079 // Выбор оптимизации:
1080 GroupBoxOpt.Caption := MsgCtrlOptGb;
1081 rbTexturesOptimization.Caption := MsgCtrlOptTexture;
1082 rbPanelsOptimization.Caption := MsgCtrlOptPanel;
1083 // Оптимизация текстур:
1084 bBeginTextureOptimization.Caption := MsgBtnStart;
1085 // Оптимизация панелей:
1086 cbOptimizeWalls.Caption := MsgCtrlOptWall;
1087 cbOptimizeForeGround.Caption := MsgCtrlOptFore;
1088 cbOptimizeBackGround.Caption := MsgCtrlOptBack;
1089 cbOptimizeSteps.Caption := MsgCtrlOptStair;
1090 cbOptimizeWater.Caption := MsgCtrlOptWater;
1091 cbOptimizeAcid1.Caption := MsgCtrlOptAcid1;
1092 cbOptimizeAcid2.Caption := MsgCtrlOptAcid2;
1093 cbOptimizeLift.Caption := MsgCtrlOptLift;
1094 cbOptimizeBlockMon.Caption := MsgCtrlOptBlockmon;
1095 bBeginPanelsOptimization.Caption := MsgBtnStart;
1096 end;
1098 // Форма "Параметры карты":
1099 with MapOptionsForm do
1100 begin
1101 Caption := MsgCapSets;
1102 // Основные параметры:
1103 LabelName.Caption := MsgLabSetsName;
1104 LabelDesc.Caption := MsgLabSetsDesc;
1105 LabelAuthor.Caption := MsgLabSetsAuthor;
1106 LabelBack.Caption := MsgLabSetsBack;
1107 LabelMusic.Caption := MsgLabSetsMusic;
1108 // Статистика:
1109 GBStats.Caption := MsgCtrlSetsStats;
1110 LabelTexs.Caption := MsgLabSetsTextures;
1111 LabelPanels.Caption := MsgLabSetsPanels;
1112 LabelItems.Caption := MsgLabSetsItems;
1113 LabelMonsters.Caption := MsgLabSetsMonsters;
1114 LabelAreas.Caption := MsgLabSetsAreas;
1115 LabelTriggers.Caption := MsgLabSetsTriggers;
1116 // Размеры:
1117 GBSizes.Caption := MsgCtrlSetsSizes;
1118 LabelWidth.Caption := MsgLabSetsWidth;
1119 LabelHeight.Caption := MsgLabSetsHeight;
1120 LabelCurSize.Caption := MsgLabSetsSizes;
1121 LabelMapMove.Caption := MsgLabSetsMapmove;
1122 cbSnapping.Caption := MsgLabSetsSnapping;
1123 // Кнопки:
1124 bOK.Caption := MsgBtnOk;
1125 bCancel.Caption := MsgBtnCancel;
1126 end;
1128 // From "Editor settings":
1129 with OptionsForm do
1130 begin
1131 Caption := MsgCapEs;
1132 bOK.Caption := MsgBtnOk;
1133 bCancel.Caption := MsgBtnCancel;
1134 // TabGeneral:
1135 cbShowDots.Caption := MsgCtrlEsGrid;
1136 cbShowTexture.Caption := MsgCtrlEsTexture;
1137 cbShowSize.Caption := MsgCtrlEsPanelSize;
1138 cbCheckerboard.Caption := MsgCtrlEsCheckerboard;
1139 LabelGrid.Caption := MsgLabEsGrid;
1140 LabelGridCol.Caption := MsgLabEsGridColor;
1141 LabelGridSize.Caption := MsgLabEsGridSize;
1142 LabelBack.Caption := MsgLabEsBack;
1143 LabelPreview.Caption := MsgLabEsPreview;
1144 LabelMinimap.Caption := MsgLabEsMinimap;
1145 LabelLanguage.Caption := MsgLabEsLanguage;
1146 // TabFiles:
1147 cbCompress.Caption := MsgLabEsCompress;
1148 cbBackup.Caption := MsgLabEsBackup;
1149 LabelRecent.Caption := MsgLabEsRecent;
1150 // TabTesting:
1151 rbDM.Caption := MsgCtrlLaunchDm;
1152 rbTDM.Caption := MsgCtrlLaunchTdm;
1153 rbCTF.Caption := MsgCtrlLaunchCtf;
1154 rbCOOP.Caption := MsgCtrlLaunchCoop;
1155 cbTwoPlayers.Caption := MsgCtrlLaunch2p;
1156 cbTeamDamage.Caption := MsgCtrlLaunchFf;
1157 cbAllowExit.Caption := MsgCtrlLaunchExit;
1158 cbWeaponStay.Caption := MsgCtrlLaunchWeapons;
1159 cbMonstersDM.Caption := MsgCtrlLaunchMonsters;
1160 cbMapOnce.Caption := MsgCtrlLaunchClose;
1161 LabelTime.Caption := MsgLabLaunchTime;
1162 LabelSecs.Caption := MsgLabLaunchSecs;
1163 LabelScore.Caption := MsgLabLaunchScore;
1164 LabelPath.Caption := MsgLabLaunchPath;
1165 FindD2dDialog.Title := MsgCtrlLaunchOpen;
1166 LabelArgs.Caption := MsgLabLaunchArgs;
1167 end;
1169 // Форма "Упаковать карту":
1170 with PackMapForm do
1171 begin
1172 Caption := MsgCapPack;
1173 bPack.Caption := MsgBtnPack;
1174 LabelSaveTo.Caption := MsgLabPackSaveTo;
1175 LabelMapName.Caption := MsgLabPackMapName;
1176 // Что упаковывать:
1177 cbTextrures.Caption := MsgCtrlPackTextures;
1178 LabelTextures.Caption := MsgLabPackTextures;
1179 cbSky.Caption := MsgCtrlPackSky;
1180 LabelSky.Caption := MsgLabPackSky;
1181 cbMusic.Caption := MsgCtrlPackMusic;
1182 LabelMusic.Caption := MsgLabPackMusic;
1183 cbAdd.Caption := MsgCtrlPackAdd;
1184 cbNonStandart.Caption := MsgCtrlPackNonStd;
1185 end;
1187 // Форма "Сохранить карту":
1188 with SaveMapForm do
1189 begin
1190 Caption := MsgCapSave;
1191 bOK.Caption := MsgBtnOk;
1192 bCancel.Caption := MsgBtnCancel;
1193 end;
1195 // Форма "Сохранить мини-карту":
1196 with SaveMiniMapForm do
1197 begin
1198 Caption := MsgCapMini;
1199 LabelScale.Caption := MsgLabMiniScale;
1200 bSave.Caption := MsgBtnSave;
1201 bClose.Caption := MsgBtnClose;
1202 end;
1204 // Форма "Выбор карты":
1205 with SelectMapForm do
1206 begin
1207 Caption := MsgCapSelect;
1208 bOK.Caption := MsgBtnOk;
1209 bCancel.Caption := MsgBtnCancel;
1210 end;
1212 // Заголовок приложения:
1213 Application.Title := MsgEditorTitle;
1214 end;
1216 procedure g_Language_Set(lang: String);
1217 const langfilename = 'editor';
1218 var syslang, fallbacklang: String;
1219 begin
1220 e_WriteLog('g_Language_Set: requested lang is "' + lang + '"', MSG_NOTIFY);
1221 GetLanguageIDs(syslang, fallbacklang);
1222 if lang = '' then lang := syslang;
1224 ResetResourceTables;
1225 try
1226 e_WriteLog('g_Language_Set: try language "' + lang + '"', MSG_NOTIFY);
1227 TranslateResourceStrings(LangDir + DirectorySeparator + langfilename + '.' + lang + '.mo');
1228 except
1229 try
1230 e_WriteLog('g_Language_Set: try system language "' + syslang + '"', MSG_NOTIFY);
1231 TranslateResourceStrings(LangDir + DirectorySeparator + langfilename + '.' + syslang + '.mo');
1232 except
1233 try
1234 e_WriteLog('g_Language_Set: try fallback language "' + fallbacklang + '"', MSG_NOTIFY);
1235 TranslateResourceStrings(LangDir + DirectorySeparator + langfilename + '.' + fallbacklang + '.mo');
1236 except
1237 e_WriteLog('g_Language_Set: use default strings', MSG_NOTIFY);
1238 end;
1239 end;
1240 end;
1241 e_WriteLog('g_Language_Set: ok', MSG_NOTIFY);
1242 SetupArrays();
1243 SetupCaptions();
1244 RemoveSelectFromObjects();
1245 end;
1247 End.