DEADSOFTWARE

ea1f23660237da8593209739dc0200d84287843f
[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, Classes;
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 MsgMsgExitPrompt = 'Leaving so soon?';
311 MsgMsgDelTexture = 'Delete the texture';
312 MsgMsgDelTexturePrompt = '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 MsgMsgDelRecentPrompt = 'Remove entry from recent list?';
316 MsgMsgClearMap = 'New map';
317 MsgMsgClearMapPrompt = 'Clear the entire map?';
318 MsgMsgDeleteMap = 'Delete the map';
319 MsgMsgDeleteMapPrompt = 'Delete the map "%s" from "%s" ?';
320 MsgMsgMapDeleted = 'Map is deleted';
321 MsgMsgMapDeletedPrompt = 'Map "%s" is deleted';
322 MsgMsgReopenMapPrompt = '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 MsgMenuAppleAbout = 'About Editor';
343 MsgMenuApplePref = 'Preferences...';
345 MsgMenuFile = 'File';
346 MsgMenuFileNew = 'New';
347 MsgMenuFileOpen = 'Open...';
348 MsgMenuFileRecentMac = 'Open Recent';
349 MsgMenuFileRecentClearMac = 'Clear Recent';
350 MsgMenuFileSave = 'Save';
351 MsgMenuFileSaveAs = 'Save As...';
352 MsgMenuFileOpenWad = 'Select Map...';
353 MsgMenuFileReopen = 'Revert to Saved';
354 MsgMenuFileSaveMini = 'Save Minimap...';
355 MsgMenuFileDelete = 'Remove from WAD...';
356 MsgMenuFilePackMap = 'Pack to WAD...';
357 MsgMenuFileRecentWin = 'Recent Files';
358 MsgMenuFileExitWin = 'Exit';
360 MsgMenuEdit = 'Edit';
361 MsgMenuEditUndo = 'Undo';
362 MsgMenuEditCopy = 'Copy';
363 MsgMenuEditCut = 'Cut';
364 MsgMenuEditPaste = 'Paste';
365 MsgMenuEditSelectAll = 'Select All';
366 MsgMenuEditSnapGrid = 'Snap to Grid';
367 MsgMenuEditStepGrid = 'Switch Grid Granularity';
368 MsgMenuEditToFore = 'Bring to Front';
369 MsgMenuEditToBack = 'Send to Back';
370 MsgMenuEditMapProps = 'Map Properties...';
371 MsgMenuEditPrefWin = 'Preferences...';
373 MsgMenuView = 'View';
374 MsgMenuViewLayers = 'Layers';
375 MsgMenuViewMinimap = 'Show Minimap';
376 MsgMenuViewBounds = 'Show Map Bounds';
377 MsgMenuViewPreview = 'Preview Mode';
379 MsgMenuServ = 'Service';
380 MsgMenuServTest = 'Analyse Map...';
381 MsgMenuServOpt = 'Optimize Map...';
382 MsgMenuServLaunch = 'Run Test';
384 MsgMenuWindow = 'Window';
385 MsgMenuWindowMinimize = 'Minimize';
386 MsgMenuWindowZoom = 'Zoom';
388 MsgMenuHelp = 'Help';
389 MsgMenuHelpAboutWin = 'About Editor';
391 MsgMenuLayerBack = '1. Background';
392 MsgMenuLayerWall = '2. Walls';
393 MsgMenuLayerFore = '3. Foreground';
394 MsgMenuLayerStair = '4. Steps';
395 MsgMenuLayerWater = '5. Liquids';
396 MsgMenuLayerItem = '6. Items';
397 MsgMenuLayerMonster = '7. Monsters';
398 MsgMenuLayerArea = '8. Areas';
399 MsgMenuLayerTrigger = '9. Triggers';
401 MsgMenuTbNew = 'New Map';
402 MsgMenuTbOpen = 'Open Map';
403 MsgMenuTbSave = 'Save Map';
404 MsgMenuTbOpenWad = 'Open another Map from same WAD';
405 MsgMenuTbMinimap = 'Show Mini-map';
406 MsgMenuTbLayers = 'Show/Hide Objects';
407 MsgMenuTbGrid = 'Grid On/Off';
408 MsgMenuTbGridStep = 'Switch Grid step';
409 MsgMenuTbLaunch = 'Run Test';
411 MsgMenuLaunchSets = 'Settings...';
413 MsgCapFxType = 'Select Effect type';
414 MsgCapMonsterType = 'Select Monster type';
415 MsgCapItemType = 'Select Item type';
416 MsgCapAbout = 'About Map Editor';
417 MsgCapAct = 'Activation type';
418 MsgCapAddSky = 'Select Sky Texture';
419 MsgCapAddSound = 'Select Sound/Music';
420 MsgCapAddTexture = 'Select Texture';
421 MsgCapKeys = 'Keys';
422 MsgCapTest = 'Analyse Map';
423 MsgCapOpt = 'Optimize Map';
424 MsgCapSets = 'Map Properties';
425 MsgCapLaunch = 'In-game test Settings';
426 MsgCapEs = 'Preferences';
427 MsgCapPack = 'Pack Map';
428 MsgCapSave = 'Save Map';
429 MsgCapMini = 'Save Minimap';
430 MsgCapSelect = 'Select Map';
431 MsgCapOpen = 'Open Map';
432 MsgCapRemove = 'Remove Map';
433 MsgCapTexture = 'Texture: %dx%d';
434 MsgCapAnimation = 'Animation: %dx%d, %d frames';
435 MsgCapStatSelected = 'Selected objects: %d';
437 MsgCtrlPropKey = 'Property';
438 MsgCtrlPropValue = 'Value';
440 MsgCtrlPanels = 'Panels';
441 MsgCtrlItems = 'Items';
442 MsgCtrlMonsters = 'Monsters';
443 MsgCtrlAreas = 'Areas';
444 MsgCtrlTriggers = 'Triggers';
446 MsgCtrlListTexture = 'Texture List';
447 MsgCtrlListItem = 'Item List';
448 MsgCtrlListMonster = 'Monster List';
449 MsgCtrlListArea = 'Area List';
450 MsgCtrlListTrigger = 'Trigger List';
451 MsgCtrlListActive = 'Activation Type';
452 MsgCtrlListKeys = 'Keys Needed';
454 MsgCtrlPreview = 'Texture Preview';
455 MsgCtrlItemDm = 'DM Only';
456 MsgCtrlItemFalls = 'Falls';
457 MsgCtrlLeft = 'Left';
458 MsgCtrlRight = 'Right';
460 MsgCtrlActPlayerClose = 'Player Collides';
461 MsgCtrlActMonsterClose = 'Monster Collides';
462 MsgCtrlActPlayerPress = 'Player Pressed';
463 MsgCtrlActMonsterPress = 'Monster Pressed';
464 MsgCtrlActShot = 'Shot';
465 MsgCtrlActNoMonster = 'No Monsters';
467 MsgCtrlKeysRed = 'Red Key';
468 MsgCtrlKeysGreen = 'Green Key';
469 MsgCtrlKeysBlue = 'Blue Key';
470 MsgCtrlKeysTeamRed = 'Red Team';
471 MsgCtrlKeysTeamBlue = 'Blue Team';
473 MsgCtrlOptGb = 'Optimization';
474 MsgCtrlOptTexture = 'Texture Optimization';
475 MsgCtrlOptPanel = 'Panel Optimization';
476 MsgCtrlOptWall = 'Walls';
477 MsgCtrlOptFore = 'Foreground';
478 MsgCtrlOptBack = 'Background';
479 MsgCtrlOptStair = 'Steps';
480 MsgCtrlOptWater = 'Water';
481 MsgCtrlOptAcid1 = 'Acid 1';
482 MsgCtrlOptAcid2 = 'Acid 2';
483 MsgCtrlOptLift = 'Streams';
484 MsgCtrlOptBlockmon = 'Monster Boundary';
485 MsgCtrlOptDescTexture = 'Deletes unused textures from texture list.';
486 MsgCtrlOptDescPanel = 'Merges nearby panels of same type. Increases game performance.';
487 MsgCtrlSetsStats = 'Statistics:';
488 MsgCtrlSetsSizes = 'Map Size:';
490 MsgCtrlEsTesting = 'Testing';
491 MsgCtrlLaunchDm = 'Deathmatch';
492 MsgCtrlLaunchTdm = 'Team Deathmatch';
493 MsgCtrlLaunchCtf = 'Capture the Flag';
494 MsgCtrlLaunchCoop = 'Cooperative';
495 MsgCtrlLaunch2p = 'Two Players';
496 MsgCtrlLaunchFf = 'Friendly Fire';
497 MsgCtrlLaunchExit = 'Enable Exit';
498 MsgCtrlLaunchWeapons = 'Weapons Stay';
499 MsgCtrlLaunchMonsters = 'Enable Monsters';
500 MsgCtrlLaunchClose = 'Close the game after exiting the map';
501 MsgCtrlLaunchOpen = 'Select Doom 2D: Forever executable';
503 MsgCtrlEsGeneral = 'General';
504 MsgCtrlEsGrid = 'Show Grid';
505 MsgCtrlEsTexture = 'Show Panel Texture';
506 MsgCtrlEsPanelSize = 'Show Panel Size';
507 MsgCtrlEsCheckerboard = 'Use Checkerboard';
509 MsgCtrlPackTextures = 'Textures';
510 MsgCtrlPackSky = 'Sky';
511 MsgCtrlPackMusic = 'Music';
512 MsgCtrlPackAdd = 'Don''t overwrite WAD';
513 MsgCtrlPackNonStd = 'Non-standard Resources only';
515 MsgLabTexWidth = 'Texture Width:';
516 MsgLabTexHeight = 'Texture Height:';
518 MsgLabSpectrum = 'Show the Spectrum';
520 MsgLabAboutVer = 'Version 2.1.5';
521 MsgLabAboutAuthor = 'Author: rs.falcon';
522 MsgLabAboutAuthor2 = 'Additions: Pss';
523 MsgLabAboutMail = 'rmw.falcon@mail.ru';
524 MsgLabAboutMail2 = 'pssxx@mail.ru';
525 MsgLabAboutSite = 'Doom 2D: Forever Web-site';
526 MsgLabAboutHttp = 'www.doom2d.org';
528 MsgLabAddWads = 'WAD Files:';
529 MsgLabAddSections = 'WAD Sections:';
531 MsgLabSetsName = 'Map Name:';
532 MsgLabSetsDesc = 'Map Description';
533 MsgLabSetsAuthor = 'Author:';
534 MsgLabSetsBack = 'Background/Sky:';
535 MsgLabSetsMusic = 'Music:';
536 MsgLabSetsTextures = 'Textures:';
537 MsgLabSetsPanels = 'Panels:';
538 MsgLabSetsItems = 'Items:';
539 MsgLabSetsMonsters = 'Monsters:';
540 MsgLabSetsAreas = 'Areas:';
541 MsgLabSetsTriggers = 'Triggers:';
542 MsgLabSetsSizes = 'Current:';
543 MsgLabSetsWidth = 'Width:';
544 MsgLabSetsHeight = 'Height:';
545 MsgLabSetsMapmove = 'Direction to shift map objects:';
546 MsgLabSetsSnapping = 'Preserve snapping';
548 MsgLabLaunchTime = 'Time Limit:';
549 MsgLabLaunchSecs = 'seconds';
550 MsgLabLaunchScore = 'Score Limit:';
551 MsgLabLaunchPathWin = 'Path to Doom2DF.exe:';
552 MsgLabLaunchPathMac = 'Path to Doom 2D Forever.app:';
553 MsgLabLaunchPathUnix = 'Path to Doom2DF:';
554 MsgLabLaunchArgs = 'Launch Arguments:';
556 MsgLabEsGrid = 'Grid Step:';
557 MsgLabEsGridColor = 'Grid Color:';
558 MsgLabEsGridSize = 'Grid Dot Size:';
559 MsgLabEsBack = 'Background Color:';
560 MsgLabEsPreview = 'Texture Preview Background Color:';
561 MsgLabEsMinimap = 'Mini-map Scale:';
562 MsgLabEsRecent = 'Recent Maps List Contains:';
563 MsgLabEsLanguage = 'Language:';
564 MsgLabEsLanguageAuto = 'System Default';
566 MsgCtrlEsFiles = 'Files';
568 MsgLabPackSaveTo = 'Save to:';
569 MsgLabPackMapName = 'Map Resource Name:';
570 MsgLabPackTextures = 'Texture Section:';
571 MsgLabPackSky = 'Sky Section:';
572 MsgLabPackMusic = 'Music Section:';
574 MsgLabMiniScale = 'Scale:';
576 MsgBtnApplyProps = 'Apply Properties';
577 MsgBtnOk = 'OK';
578 MsgBtnCancel = 'Cancel';
579 MsgBtnAdd = 'Add';
580 MsgBtnClose = 'Close';
581 MsgBtnAddClose = 'Add and Close';
582 MsgBtnTestAgain = 'Check';
583 MsgBtnStart = 'Run';
584 MsgBtnPack = 'Pack';
585 MsgBtnSave = 'Save';
586 MsgBtnNoSound = 'No sound';
587 MsgBtnTextureAdd = 'Add texture to the list';
588 MsgBtnTextureDelete = 'Delete texture from the list';
589 MsgBtnTextureEmpty = 'Deselect texture';
591 MsgLoadWad = 'Reading WAD';
592 MsgLoadMap = 'Loading Map';
593 MsgLoadTextures = 'Reading Textures';
594 MsgLoadPanels = 'Reading Panels';
595 MsgLoadItems = 'Reading Items';
596 MsgLoadMonsters = 'Reading Monsters';
597 MsgLoadAreas = 'Reading Areas';
598 MsgLoadTriggers = 'Reading Triggers';
600 MsgTestAreaWall = 'Player collides with the wall and will be stuck.';
601 MsgTestAreaWallStr = 'Area #%d collides with Map (%d:%d)';
602 MsgTestSpawns1 = 'There are several spawn points for First Player on the map';
603 MsgTestSpawns2 = 'There are several spawn points for Second Player on the map';
604 MsgTestSpawns = 'There are several spawn points on the map. Random one will be used.';
605 MsgTestNoDm = 'There are no DM spawn points on the map';
606 MsgTestNoDmEx = 'There are no DM spawn points on the map. Only "Single Player" mode available.';
607 MsgTestMonsterWall = 'Monster collides with the wall and will be stuck.';
608 MsgTestMonsterWallStr = 'Monster #%d collides with a map (%d:%d)';
610 MsgOptNoTextures = 'Texture list is empty';
611 MsgOptDeletedTextures = 'Deleted Textures:';
612 MsgOptTotalTextures = 'Textures Total:';
613 MsgOptTexDeleted = 'Textures Deleted:';
614 MsgOptPanelsOpt = 'Panels Optimized:';
615 MsgOptWalls = 'Walls Optimization...';
616 MsgOptFores = 'Foreground Optimization...';
617 MsgOptBacks = 'Background Optimization...';
618 MsgOptStairs = 'Steps Optimization...';
619 MsgOptWater = 'Water Optimization...';
620 MsgOptAcid1 = 'Acid 1 Optimization...';
621 MsgOptAcid2 = 'Acid 2 Optimization...';
622 MsgOptLifts = 'Streams Optimization...';
623 MsgOptBlockmon = 'Monster Boundaries Optimization...';
624 MsgOptTotalPanels = 'Panels Total:';
625 MsgOptPanelsAfter = 'Panels after Optimization:';
627 MsgWadSpecialMap = '<MAP WAD-FILE>';
628 MsgWadSpecialTexs = '<EXTRA TEXTURES>';
630 MsgFileFilterAll = 'Doom 2D: Forever Maps (*.wad)|*.wad|Doom 2D: Forever 0.30 Maps (*.ini)|*.ini|All Files (*.*)|*.*';
631 MsgFileFilterWad = 'Doom 2D: Forever Maps (*.wad)|*.wad|All Files (*.*)|*.*';
632 MsgFileFilterExeMac = 'Doom 2D Forever.app|*.app|Doom 2D Forever (Unix Executable)|Doom2DF;*';
633 MsgFileFilterExeWin = 'Doom2DF.exe|Doom2DF.exe;*.exe';
634 MsgFileFilterExeUnix = 'Doom2DF|Doom2DF;*';
636 MsgEditorTitle = 'Doom 2D: Forever Map Editor';
638 Var
639 BoolNames: Array [False..True] of String;
640 DirNames: Array [D_LEFT..D_RIGHT] of String;
641 DirNamesAdv: Array [0..3] of String;
642 DirButtonNames: Array [1..4] of String;
643 PANELNAMES: Array[0..13] of String;
644 EffectNames: Array [EFFECT_NONE..EFFECT_FIRE] of String;
645 ItemNames: Array [ITEM_MEDKIT_SMALL..ITEM_MAX] of String;
646 ShotNames: Array [TRIGGER_SHOT_PISTOL..TRIGGER_SHOT_MAX] of String;
647 MonsterNames: Array [MONSTER_DEMON..MONSTER_MAN] of String;
648 AreaNames: Array [AREA_PLAYERPOINT1..AREA_BLUETEAMPOINT] of String;
649 TriggerNames: Array [TRIGGER_EXIT..TRIGGER_MAX] of String;
651 function g_Language_GetList (): TStringList;
652 procedure g_Language_Set(lang: String);
654 Implementation
656 Uses
657 g_options, IniFiles, gettext, LazFileUtils,
658 SysUtils, e_log, f_main, f_about, f_activationtype,
659 f_addresource_sky, f_addresource_sound,
660 f_addresource_texture, f_choosetype, f_keys, f_mapcheck,
661 f_mapoptions, f_mapoptimization, f_options,
662 f_packmap, f_savemap, f_saveminimap, f_selectmap, Forms, utils;
664 const
665 InSourceLanguage = 'en_US';
667 procedure SetupArrays();
668 var
669 i: Integer;
671 begin
672 // Да/Нет:
673 BoolNames[False] := MsgArrayBoolFalse;
674 BoolNames[True] := MsgArrayBoolTrue;
676 // Направления:
677 DirNames[D_LEFT] := MsgArrayDirLeft;
678 DirNames[D_RIGHT] := MsgArrayDirRight;
680 // Смены направления:
681 DirNamesAdv[0] := MsgArrayDirSame;
682 DirNamesAdv[1] := MsgArrayDirLeft;
683 DirNamesAdv[2] := MsgArrayDirRight;
684 DirNamesAdv[3] := MsgArrayDirReversed;
686 // Направление (на кнопках):
687 DirButtonNames[1] := MsgArrayDirbtnLeft;
688 DirButtonNames[2] := MsgArrayDirbtnRight;
689 DirButtonNames[3] := MsgArrayDirbtnUp;
690 DirButtonNames[4] := MsgArrayDirbtnDown;
692 // Названия панелей:
693 PANELNAMES[0] := MsgArrayPanelWall;
694 PANELNAMES[1] := MsgArrayPanelBack;
695 PANELNAMES[2] := MsgArrayPanelFront;
696 PANELNAMES[3] := MsgArrayPanelDoorOpen;
697 PANELNAMES[4] := MsgArrayPanelDoorClose;
698 PANELNAMES[5] := MsgArrayPanelStair;
699 PANELNAMES[6] := MsgArrayPanelWater;
700 PANELNAMES[7] := MsgArrayPanelAcid1;
701 PANELNAMES[8] := MsgArrayPanelAcid2;
702 PANELNAMES[9] := MsgArrayPanelLiftUp;
703 PANELNAMES[10] := MsgArrayPanelLiftDown;
704 PANELNAMES[11] := MsgArrayPanelLiftLeft;
705 PANELNAMES[12] := MsgArrayPanelLiftRight;
706 PANELNAMES[13] := MsgArrayPanelBlockmon;
708 // Названия эффектов:
709 EffectNames[EFFECT_NONE] := MsgArrayFxNone;
710 EffectNames[EFFECT_TELEPORT] := MsgArrayFxTeleport;
711 EffectNames[EFFECT_RESPAWN] := MsgArrayFxRespawn;
712 EffectNames[EFFECT_FIRE] := MsgArrayFxFire;
714 // Названия предметов:
715 ItemNames[ITEM_MEDKIT_SMALL] := MsgArrayItemMedkit;
716 ItemNames[ITEM_MEDKIT_LARGE] := MsgArrayItemLargeMedkit;
717 ItemNames[ITEM_MEDKIT_BLACK] := MsgArrayItemBlackMedkit;
718 ItemNames[ITEM_ARMOR_GREEN] := MsgArrayItemGreenArmor;
719 ItemNames[ITEM_ARMOR_BLUE] := MsgArrayItemBlueArmor;
720 ItemNames[ITEM_SPHERE_BLUE] := MsgArrayItemBlueSphere;
721 ItemNames[ITEM_SPHERE_WHITE] := MsgArrayItemMegasphere;
722 ItemNames[ITEM_SUIT] := MsgArrayItemHazSuit;
723 ItemNames[ITEM_OXYGEN] := MsgArrayItemOxygen;
724 ItemNames[ITEM_INVUL] := MsgArrayItemInvulnerability;
725 ItemNames[ITEM_WEAPON_SAW] := MsgArrayItemChainsaw;
726 ItemNames[ITEM_WEAPON_SHOTGUN1] := MsgArrayItemShotgun;
727 ItemNames[ITEM_WEAPON_SHOTGUN2] := MsgArrayItemDbShotgun;
728 ItemNames[ITEM_WEAPON_CHAINGUN] := MsgArrayItemChaingun;
729 ItemNames[ITEM_WEAPON_ROCKETLAUNCHER] := MsgArrayItemRocketLauncher;
730 ItemNames[ITEM_WEAPON_PLASMA] := MsgArrayItemPlasmaRifle;
731 ItemNames[ITEM_WEAPON_BFG] := MsgArrayItemBfg;
732 ItemNames[ITEM_WEAPON_SUPERPULEMET] := MsgArrayItemSuperMinigun;
733 ItemNames[ITEM_WEAPON_FLAMETHROWER] := MsgArrayItemFlamethrower;
734 ItemNames[ITEM_AMMO_BULLETS] := MsgArrayItemClip;
735 ItemNames[ITEM_AMMO_BULLETS_BOX] := MsgArrayItemAmmoBox;
736 ItemNames[ITEM_AMMO_SHELLS] := MsgArrayItem4Shells;
737 ItemNames[ITEM_AMMO_SHELLS_BOX] := MsgArrayItem25Shells;
738 ItemNames[ITEM_AMMO_ROCKET] := MsgArrayItem1Rocket;
739 ItemNames[ITEM_AMMO_ROCKET_BOX] := MsgArrayItemRocketBox;
740 ItemNames[ITEM_AMMO_CELL] := MsgArrayItemCell;
741 ItemNames[ITEM_AMMO_CELL_BIG] := MsgArrayItemLargeCell;
742 ItemNames[ITEM_AMMO_FUELCAN] := MsgArrayItemFuelcan;
743 ItemNames[ITEM_AMMO_BACKPACK] := MsgArrayItemBackpack;
744 ItemNames[ITEM_KEY_RED] := MsgArrayItemKeyRed;
745 ItemNames[ITEM_KEY_GREEN] := MsgArrayItemKeyGreen;
746 ItemNames[ITEM_KEY_BLUE] := MsgArrayItemKeyBlue;
747 ItemNames[ITEM_WEAPON_KASTET] := '?';
748 ItemNames[ITEM_WEAPON_PISTOL] := '??';
749 ItemNames[ITEM_BOTTLE] := MsgArrayItemBottle;
750 ItemNames[ITEM_HELMET] := MsgArrayItemHelmet;
751 ItemNames[ITEM_JETPACK] := MsgArrayItemJetpack;
752 ItemNames[ITEM_INVIS] := MsgArrayItemInvis;
754 // Названия снарядов:
755 ShotNames[TRIGGER_SHOT_PISTOL] := MsgArrayShotPistol;
756 ShotNames[TRIGGER_SHOT_BULLET] := MsgArrayShotBullet;
757 ShotNames[TRIGGER_SHOT_SHOTGUN] := MsgArrayShotShotgun;
758 ShotNames[TRIGGER_SHOT_SSG] := MsgArrayShotSsg;
759 ShotNames[TRIGGER_SHOT_IMP] := MsgArrayShotImp;
760 ShotNames[TRIGGER_SHOT_PLASMA] := MsgArrayShotPlasma;
761 ShotNames[TRIGGER_SHOT_SPIDER] := MsgArrayShotSpider;
762 ShotNames[TRIGGER_SHOT_CACO] := MsgArrayShotCaco;
763 ShotNames[TRIGGER_SHOT_BARON] := MsgArrayShotBaron;
764 ShotNames[TRIGGER_SHOT_MANCUB] := MsgArrayShotMancub;
765 ShotNames[TRIGGER_SHOT_REV] := MsgArrayShotRev;
766 ShotNames[TRIGGER_SHOT_ROCKET] := MsgArrayShotRocket;
767 ShotNames[TRIGGER_SHOT_BFG] := MsgArrayShotBfg;
768 ShotNames[TRIGGER_SHOT_EXPL] := MsgArrayShotExpl;
769 ShotNames[TRIGGER_SHOT_BFGEXPL] := MsgArrayShotBfgexpl;
770 ShotNames[TRIGGER_SHOT_FLAME] := MsgArrayShotFlame;
772 // Названия монстров:
773 MonsterNames[MONSTER_DEMON] := MsgArrayMonDemon;
774 MonsterNames[MONSTER_IMP] := MsgArrayMonImp;
775 MonsterNames[MONSTER_ZOMBY] := MsgArrayMonZombie;
776 MonsterNames[MONSTER_SERG] := MsgArrayMonSergeant;
777 MonsterNames[MONSTER_CYBER] := MsgArrayMonCyber;
778 MonsterNames[MONSTER_CGUN] := MsgArrayMonCgun;
779 MonsterNames[MONSTER_BARON] := MsgArrayMonHellBaron;
780 MonsterNames[MONSTER_KNIGHT] := MsgArrayMonHellKnight;
781 MonsterNames[MONSTER_CACO] := MsgArrayMonCacodemon;
782 MonsterNames[MONSTER_SOUL] := MsgArrayMonLostSoul;
783 MonsterNames[MONSTER_PAIN] := MsgArrayMonPainElemental;
784 MonsterNames[MONSTER_SPIDER] := MsgArrayMonMastermind;
785 MonsterNames[MONSTER_BSP] := MsgArrayMonArachnatron;
786 MonsterNames[MONSTER_MANCUB] := MsgArrayMonMancubus;
787 MonsterNames[MONSTER_SKEL] := MsgArrayMonRevenant;
788 MonsterNames[MONSTER_VILE] := MsgArrayMonArchvile;
789 MonsterNames[MONSTER_FISH] := MsgArrayMonFish;
790 MonsterNames[MONSTER_BARREL] := MsgArrayMonBarrel;
791 MonsterNames[MONSTER_ROBO] := MsgArrayMonRobot;
792 MonsterNames[MONSTER_MAN] := MsgArrayMonPrikolist;
794 // Названия областей:
795 AreaNames[AREA_PLAYERPOINT1] := MsgArrayAreaPlayerOne;
796 AreaNames[AREA_PLAYERPOINT2] := MsgArrayAreaPlayerTwo;
797 AreaNames[AREA_DMPOINT] := MsgArrayAreaDm;
798 AreaNames[AREA_REDFLAG] := MsgArrayAreaFlagRed;
799 AreaNames[AREA_BLUEFLAG] := MsgArrayAreaFlagBlue;
800 AreaNames[AREA_DOMFLAG] := MsgArrayAreaFlagDom;
801 AreaNames[AREA_REDTEAMPOINT] := MsgArrayAreaTeamRed;
802 AreaNames[AREA_BLUETEAMPOINT] := MsgArrayAreaTeamBlue;
804 // Названия триггеров:
805 TriggerNames[TRIGGER_EXIT] := MsgArrayTrExit;
806 TriggerNames[TRIGGER_TELEPORT] := MsgArrayTrTeleport;
807 TriggerNames[TRIGGER_OPENDOOR] := MsgArrayTrDoorOpen;
808 TriggerNames[TRIGGER_CLOSEDOOR] := MsgArrayTrDoorClose;
809 TriggerNames[TRIGGER_DOOR] := MsgArrayTrDoorSwitch;
810 TriggerNames[TRIGGER_DOOR5] := MsgArrayTrDoor5Sec;
811 TriggerNames[TRIGGER_CLOSETRAP] := MsgArrayTrTrapClose;
812 TriggerNames[TRIGGER_TRAP] := MsgArrayTrTrap;
813 TriggerNames[TRIGGER_PRESS] := MsgArrayTrExtend;
814 TriggerNames[TRIGGER_SECRET] := MsgArrayTrSecret;
815 TriggerNames[TRIGGER_LIFTUP] := MsgArrayTrLiftUp;
816 TriggerNames[TRIGGER_LIFTDOWN] := MsgArrayTrLiftDown;
817 TriggerNames[TRIGGER_LIFT] := MsgArrayTrLiftSwitch;
818 TriggerNames[TRIGGER_TEXTURE] := MsgArrayTrTexture;
819 TriggerNames[TRIGGER_ON] := MsgArrayTrOn;
820 TriggerNames[TRIGGER_OFF] := MsgArrayTrOff;
821 TriggerNames[TRIGGER_ONOFF] := MsgArrayTrSwitch;
822 TriggerNames[TRIGGER_SOUND] := MsgArrayTrSound;
823 TriggerNames[TRIGGER_SPAWNMONSTER] := MsgArrayTrSpawnMonster;
824 TriggerNames[TRIGGER_SPAWNITEM] := MsgArrayTrSpawnItem;
825 TriggerNames[TRIGGER_MUSIC] := MsgArrayTrMusic;
826 TriggerNames[TRIGGER_PUSH] := MsgArrayTrPush;
827 TriggerNames[TRIGGER_SCORE] := MsgArrayTrScore;
828 TriggerNames[TRIGGER_MESSAGE] := MsgArrayTrMessage;
829 TriggerNames[TRIGGER_DAMAGE] := MsgArrayTrDamage;
830 TriggerNames[TRIGGER_HEALTH] := MsgArrayTrHealth;
831 TriggerNames[TRIGGER_SHOT] := MsgArrayTrShot;
832 TriggerNames[TRIGGER_EFFECT] := MsgArrayTrEffect;
834 // Установка значений в панели выбора объектов:
835 with MainForm do
836 begin
837 lbPanelType.Items.Clear();
838 for i := 0 to High(PANELNAMES) do
839 lbPanelType.Items.Add(PANELNAMES[i]);
840 lbPanelType.ItemIndex := 0;
842 lbItemList.Clear();
843 for i := ITEM_MEDKIT_SMALL to ITEM_KEY_BLUE do
844 lbItemList.Items.Add(ItemNames[i]);
845 lbItemList.Items.Add(ItemNames[ITEM_BOTTLE]);
846 lbItemList.Items.Add(ItemNames[ITEM_HELMET]);
847 lbItemList.Items.Add(ItemNames[ITEM_JETPACK]);
848 lbItemList.Items.Add(ItemNames[ITEM_INVIS]);
849 lbItemList.Items.Add(ItemNames[ITEM_WEAPON_FLAMETHROWER]);
850 lbItemList.Items.Add(ItemNames[ITEM_AMMO_FUELCAN]);
852 lbMonsterList.Clear();
853 for i := MONSTER_DEMON to MONSTER_MAN do
854 lbMonsterList.Items.Add(MonsterNames[i]);
856 lbAreasList.Clear();
857 for i := AREA_PLAYERPOINT1 to AREA_BLUETEAMPOINT do
858 lbAreasList.Items.Add(AreaNames[i]);
860 lbTriggersList.Clear();
861 for i := Low(TriggerNames) to High(TriggerNames) do
862 lbTriggersList.Items.Add(TriggerNames[i]);
864 clbActivationType.Clear();
865 clbActivationType.Items.Add(MsgCtrlActPlayerClose);
866 clbActivationType.Items.Add(MsgCtrlActMonsterClose);
867 clbActivationType.Items.Add(MsgCtrlActPlayerPress);
868 clbActivationType.Items.Add(MsgCtrlActMonsterPress);
869 clbActivationType.Items.Add(MsgCtrlActShot);
870 clbActivationType.Items.Add(MsgCtrlActNoMonster);
872 clbKeys.Clear();
873 clbKeys.Items.Add(MsgCtrlKeysRed);
874 clbKeys.Items.Add(MsgCtrlKeysGreen);
875 clbKeys.Items.Add(MsgCtrlKeysBlue);
876 clbKeys.Items.Add(MsgCtrlKeysTeamRed);
877 clbKeys.Items.Add(MsgCtrlKeysTeamBlue);
878 end;
879 end;
881 procedure SetupCaptions();
882 var i: Integer; s: AnsiString;
883 begin
884 // Главная форма:
885 with MainForm do
886 begin
887 // Заголовок:
888 s := g_GetBuildHash(false);
889 if s = 'custom build' then
890 s := s + ' by ' + g_GetBuilderName() + ' ' + EDITOR_BUILDDATE + ' ' + EDITOR_BUILDTIME;
891 FormCaption := MsgEditorTitle + ' (' + s + ')';
892 i := Pos('-', Caption);
893 if i > 0 then
894 begin
895 Caption := FormCaption + ' ' + Copy(Caption, i, Length(Caption)-i+1);
896 end
897 else
898 Caption := FormCaption;
900 // Apple menu:
901 miAppleAbout.Caption := MsgMenuAppleAbout;
902 miApplePref.Caption := MsgMenuApplePref;
903 // File menu:
904 miMenuFile.Caption := MsgMenuFile;
905 miNewMap.Caption := MsgMenuFileNew;
906 miOpenMap.Caption := MsgMenuFileOpen;
907 miMacRecentSubMenu.Caption := MsgMenuFileRecentMac;
908 miMacRecentClear.Caption := MsgMenuFileRecentClearMac;
909 miSaveMap.Caption := MsgMenuFileSave;
910 miSaveMapAs.Caption := MsgMenuFileSaveAs;
911 miOpenWadMap.Caption := MsgMenuFileOpenWad;
912 miReopenMap.Caption := MsgMenuFileReopen;
913 miSaveMiniMap.Caption := MsgMenuFileSaveMini;
914 miDeleteMap.Caption := MsgMenuFileDelete;
915 miPackMap.Caption := MsgMenuFilePackMap;
916 miWinRecent.Caption := MsgMenuFileRecentWin;
917 miExit.Caption := MsgMenuFileExitWin;
918 // Edit menu:
919 miMenuEdit.Caption := MsgMenuEdit;
920 miUndo.Caption := MsgMenuEditUndo;
921 miCopy.Caption := MsgMenuEditCopy;
922 miCut.Caption := MsgMenuEditCut;
923 miPaste.Caption := MsgMenuEditPaste;
924 miSelectAll.Caption := MsgMenuEditSelectAll;
925 miSnapToGrid.Caption := MsgMenuEditSnapGrid;
926 miSwitchGrid.Caption := MsgMenuEditStepGrid;
927 miToFore.Caption := MsgMenuEditToFore;
928 miToBack.Caption := MsgMenuEditToBack;
929 miMapOptions.Caption := MsgMenuEditMapProps;
930 miOptions.Caption := MsgMenuEditPrefWin;
931 // View menu:
932 miMenuView.Caption := MsgMenuView;
933 miLayers.Caption := MsgMenuViewLayers;
934 miLayer1.Caption := MsgMenuLayerBack;
935 miLayer2.Caption := MsgMenuLayerWall;
936 miLayer3.Caption := MsgMenuLayerFore;
937 miLayer4.Caption := MsgMenuLayerStair;
938 miLayer5.Caption := MsgMenuLayerWater;
939 miLayer6.Caption := MsgMenuLayerItem;
940 miLayer7.Caption := MsgMenuLayerMonster;
941 miLayer8.Caption := MsgMenuLayerArea;
942 miLayer9.Caption := MsgMenuLayerTrigger;
943 miMiniMap.Caption := MsgMenuViewMinimap;
944 miShowEdges.Caption := MsgMenuViewBounds;
945 miMapPreview.Caption := MsgMenuViewPreview;
946 // Service menu:
947 miMenuService.Caption := MsgMenuServ;
948 miCheckMap.Caption := MsgMenuServTest;
949 miOptimmization.Caption := MsgMenuServOpt;
950 miTestMap.Caption := MsgMenuServLaunch;
951 // Window menu:
952 miMenuWindow.Caption := MsgMenuWindow;
953 miMacMinimize.Caption := MsgMenuWindowMinimize;
954 miMacZoom.Caption := MsgMenuWindowZoom;
955 // Help menu:
956 miMenuHelp.Caption := MsgMenuHelp;
957 miAbout.Caption := MsgMenuHelpAboutWin;
959 // Toolbar:
960 tbNewMap.Hint := MsgMenuTbNew;
961 tbOpenMap.Hint := MsgMenuTbOpen;
962 tbSaveMap.Hint := MsgMenuTbSave;
963 tbOpenWadMap.Hint := MsgMenuTbOpenWad;
964 tbShowMap.Hint := MsgMenuTbMinimap;
965 tbShow.Hint := MsgMenuTbLayers;
966 miLayerP1.Caption := MsgMenuLayerBack;
967 miLayerP2.Caption := MsgMenuLayerWall;
968 miLayerP3.Caption := MsgMenuLayerFore;
969 miLayerP4.Caption := MsgMenuLayerStair;
970 miLayerP5.Caption := MsgMenuLayerWater;
971 miLayerP6.Caption := MsgMenuLayerItem;
972 miLayerP7.Caption := MsgMenuLayerMonster;
973 miLayerP8.Caption := MsgMenuLayerArea;
974 miLayerP9.Caption := MsgMenuLayerTrigger;
975 tbGridOn.Hint := MsgMenuTbGrid;
976 tbGrid.Hint := MsgMenuTbGridStep;
977 tbTestMap.Hint := MsgMenuTbLaunch;
979 // Object property editor:
980 bApplyProperty.Caption := MsgBtnApplyProps;
981 vleObjectProperty.TitleCaptions[0] := MsgCtrlPropKey;
982 vleObjectProperty.TitleCaptions[1] := MsgCtrlPropValue;
984 // Panels Tab:
985 tsPanels.Caption := MsgCtrlPanels;
986 lbPanelType.Hint := MsgPropPanelType;
987 lbTextureList.Hint := MsgCtrlListTexture;
988 LabelTxW.Caption := MsgLabTexWidth;
989 LabelTxH.Caption := MsgLabTexHeight;
990 cbPreview.Caption := MsgCtrlPreview;
991 bbAddTexture.Hint := MsgBtnTextureAdd;
992 bbRemoveTexture.Hint := MsgBtnTextureDelete;
993 bClearTexture.Hint := MsgBtnTextureEmpty;
995 // Items Tab:
996 tsItems.Caption := MsgCtrlItems;
997 lbItemList.Hint := MsgCtrlListItem;
998 cbOnlyDM.Caption := MsgCtrlItemDm;
999 cbFall.Caption := MsgCtrlItemFalls;
1001 // Monters Tab:
1002 tsMonsters.Caption := MsgCtrlMonsters;
1003 lbMonsterList.Hint := MsgCtrlListMonster;
1004 rbMonsterLeft.Caption := MsgCtrlLeft;
1005 rbMonsterRight.Caption := MsgCtrlRight;
1007 // Areas Tab:
1008 tsAreas.Caption := MsgCtrlAreas;
1009 lbAreasList.Hint := MsgCtrlListArea;
1010 rbAreaLeft.Caption := MsgCtrlLeft;
1011 rbAreaRight.Caption := MsgCtrlRight;
1013 // Triggers Tab:
1014 tsTriggers.Caption := MsgCtrlTriggers;
1015 lbTriggersList.Hint := MsgCtrlListTrigger;
1016 clbActivationType.Hint := MsgCtrlListActive;
1017 clbKeys.Hint := MsgCtrlListKeys;
1018 end;
1020 // Форма "О программе":
1021 with AboutForm do
1022 begin
1023 Caption := MsgCapAbout;
1024 LabelTitle.Caption := MsgEditorTitle;
1025 LabelVer.Caption := MsgLabAboutVer;
1026 LabelAuthor.Caption := MsgLabAboutAuthor;
1027 LabelAuthor2.Caption := MsgLabAboutAuthor2;
1028 LabelMail.Caption := MsgLabAboutMail;
1029 LabelMail2.Caption := MsgLabAboutMail2;
1030 LabelSite.Caption := MsgLabAboutSite;
1031 LabelHttp.Caption := MsgLabAboutHttp;
1032 end;
1034 // Форма "Тип активации":
1035 with ActivationTypeForm do
1036 begin
1037 Caption := MsgCapAct;
1038 cbPlayerCollide.Caption := MsgCtrlActPlayerClose;
1039 cbMonsterCollide.Caption := MsgCtrlActMonsterClose;
1040 cbPlayerPress.Caption := MsgCtrlActPlayerPress;
1041 cbMonsterPress.Caption := MsgCtrlActMonsterPress;
1042 cbShot.Caption := MsgCtrlActShot;
1043 cbNoMonster.Caption := MsgCtrlActNoMonster;
1044 bOK.Caption := MsgBtnOk;
1045 end;
1047 // Форма "Выбор текстуры для неба":
1048 with AddSkyForm do
1049 begin
1050 Caption := MsgCapAddSky;
1051 LabelWADs.Caption := MsgLabAddWads;
1052 LabelSections.Caption := MsgLabAddSections;
1053 bOK.Caption := MsgBtnOk;
1054 bCancel.Caption := MsgBtnCancel;
1055 end;
1057 // Форма "Выбор звука или музыки":
1058 with AddSoundForm do
1059 begin
1060 Caption := MsgCapAddSound;
1061 LabelWADs.Caption := MsgLabAddWads;
1062 LabelSections.Caption := MsgLabAddSections;
1063 bOK.Caption := MsgBtnOk;
1064 bCancel.Caption := MsgBtnCancel;
1065 bEmpty.Caption := MsgBtnNoSound;
1066 end;
1068 // Форма "Выбор текстуры":
1069 with AddTextureForm do
1070 begin
1071 Caption := MsgCapAddTexture;
1072 LabelWADs.Caption := MsgLabAddWads;
1073 LabelSections.Caption := MsgLabAddSections;
1074 bAddTexture.Caption := MsgBtnAdd;
1075 bClose.Caption := MsgBtnClose;
1076 bAddClose.Caption := MsgBtnAddClose;
1077 end;
1079 // Форма "Выбор типа монстра" / "Выбор типа предмета":
1080 ChooseTypeForm.bOK.Caption := MsgBtnOk;
1082 // Форма "Ключи":
1083 with KeysForm do
1084 begin
1085 Caption := MsgCapKeys;
1086 cbRedKey.Caption := MsgCtrlKeysRed;
1087 cbGreenKey.Caption := MsgCtrlKeysGreen;
1088 cbBlueKey.Caption := MsgCtrlKeysBlue;
1089 cbRedTeam.Caption := MsgCtrlKeysTeamRed;
1090 cbBlueTeam.Caption := MsgCtrlKeysTeamBlue;
1091 bOK.Caption := MsgBtnOk;
1092 end;
1094 // Форма "Проверка карты":
1095 with MapCheckForm do
1096 begin
1097 Caption := MsgCapTest;
1098 bCheckMap.Caption := MsgBtnTestAgain;
1099 bClose.Caption := MsgBtnClose;
1100 end;
1102 // Форма "Оптимизация карты":
1103 with MapOptimizationForm do
1104 begin
1105 Caption := MsgCapOpt;
1106 // Выбор оптимизации:
1107 GroupBoxOpt.Caption := MsgCtrlOptGb;
1108 rbTexturesOptimization.Caption := MsgCtrlOptTexture;
1109 rbPanelsOptimization.Caption := MsgCtrlOptPanel;
1110 // Оптимизация текстур:
1111 bBeginTextureOptimization.Caption := MsgBtnStart;
1112 // Оптимизация панелей:
1113 cbOptimizeWalls.Caption := MsgCtrlOptWall;
1114 cbOptimizeForeGround.Caption := MsgCtrlOptFore;
1115 cbOptimizeBackGround.Caption := MsgCtrlOptBack;
1116 cbOptimizeSteps.Caption := MsgCtrlOptStair;
1117 cbOptimizeWater.Caption := MsgCtrlOptWater;
1118 cbOptimizeAcid1.Caption := MsgCtrlOptAcid1;
1119 cbOptimizeAcid2.Caption := MsgCtrlOptAcid2;
1120 cbOptimizeLift.Caption := MsgCtrlOptLift;
1121 cbOptimizeBlockMon.Caption := MsgCtrlOptBlockmon;
1122 bBeginPanelsOptimization.Caption := MsgBtnStart;
1123 end;
1125 // Форма "Параметры карты":
1126 with MapOptionsForm do
1127 begin
1128 Caption := MsgCapSets;
1129 // Основные параметры:
1130 LabelName.Caption := MsgLabSetsName;
1131 LabelDesc.Caption := MsgLabSetsDesc;
1132 LabelAuthor.Caption := MsgLabSetsAuthor;
1133 LabelBack.Caption := MsgLabSetsBack;
1134 LabelMusic.Caption := MsgLabSetsMusic;
1135 // Статистика:
1136 GBStats.Caption := MsgCtrlSetsStats;
1137 LabelTexs.Caption := MsgLabSetsTextures;
1138 LabelPanels.Caption := MsgLabSetsPanels;
1139 LabelItems.Caption := MsgLabSetsItems;
1140 LabelMonsters.Caption := MsgLabSetsMonsters;
1141 LabelAreas.Caption := MsgLabSetsAreas;
1142 LabelTriggers.Caption := MsgLabSetsTriggers;
1143 // Размеры:
1144 GBSizes.Caption := MsgCtrlSetsSizes;
1145 LabelWidth.Caption := MsgLabSetsWidth;
1146 LabelHeight.Caption := MsgLabSetsHeight;
1147 LabelCurSize.Caption := MsgLabSetsSizes;
1148 LabelMapMove.Caption := MsgLabSetsMapmove;
1149 cbSnapping.Caption := MsgLabSetsSnapping;
1150 // Кнопки:
1151 bOK.Caption := MsgBtnOk;
1152 bCancel.Caption := MsgBtnCancel;
1153 end;
1155 // Form preferences:
1156 with OptionsForm do
1157 begin
1158 Caption := MsgCapEs;
1159 bOK.Caption := MsgBtnOk;
1160 bCancel.Caption := MsgBtnCancel;
1161 // TabGeneral:
1162 TabGeneral.Caption := MsgCtrlEsGeneral;
1163 cbShowDots.Caption := MsgCtrlEsGrid;
1164 cbShowTexture.Caption := MsgCtrlEsTexture;
1165 cbShowSize.Caption := MsgCtrlEsPanelSize;
1166 cbCheckerboard.Caption := MsgCtrlEsCheckerboard;
1167 LabelGrid.Caption := MsgLabEsGrid;
1168 LabelGridCol.Caption := MsgLabEsGridColor;
1169 LabelGridSize.Caption := MsgLabEsGridSize;
1170 LabelBack.Caption := MsgLabEsBack;
1171 LabelPreview.Caption := MsgLabEsPreview;
1172 LabelMinimap.Caption := MsgLabEsMinimap;
1173 LabelLanguage.Caption := MsgLabEsLanguage;
1174 // TabFiles:
1175 TabFiles.Caption := MsgCtrlEsFiles;
1176 LabelRecent.Caption := MsgLabEsRecent;
1177 // TabTesting:
1178 TabTesting.Caption := MsgCtrlEsTesting;
1179 rbDM.Caption := MsgCtrlLaunchDm;
1180 rbTDM.Caption := MsgCtrlLaunchTdm;
1181 rbCTF.Caption := MsgCtrlLaunchCtf;
1182 rbCOOP.Caption := MsgCtrlLaunchCoop;
1183 cbTwoPlayers.Caption := MsgCtrlLaunch2p;
1184 cbTeamDamage.Caption := MsgCtrlLaunchFf;
1185 cbAllowExit.Caption := MsgCtrlLaunchExit;
1186 cbWeaponStay.Caption := MsgCtrlLaunchWeapons;
1187 cbMonstersDM.Caption := MsgCtrlLaunchMonsters;
1188 cbMapOnce.Caption := MsgCtrlLaunchClose;
1189 LabelTime.Caption := MsgLabLaunchTime;
1190 LabelSecs.Caption := MsgLabLaunchSecs;
1191 LabelScore.Caption := MsgLabLaunchScore;
1192 {$IF DEFINED(DARWIN)}
1193 LabelPath.Caption := MsgLabLaunchPathMac;
1194 ExeEdit.DialogTitle := MsgCtrlLaunchOpen;
1195 ExeEdit.Filter := MsgFileFilterExeMac;
1196 {$ELSEIF DEFINED(WINDOWS)}
1197 LabelPath.Caption := MsgLabLaunchPathWin;
1198 ExeEdit.DialogTitle := MsgCtrlLaunchOpen;
1199 ExeEdit.Filter := MsgFileFilterExeWin;
1200 {$ELSE}
1201 LabelPath.Caption := MsgLabLaunchPathUnix;
1202 ExeEdit.DialogTitle := MsgCtrlLaunchOpen;
1203 ExeEdit.Filter := MsgFileFilterExeUnix;
1204 {$ENDIF}
1205 LabelArgs.Caption := MsgLabLaunchArgs;
1206 end;
1208 // Форма "Упаковать карту":
1209 with PackMapForm do
1210 begin
1211 Caption := MsgCapPack;
1212 bPack.Caption := MsgBtnPack;
1213 LabelSaveTo.Caption := MsgLabPackSaveTo;
1214 LabelMapName.Caption := MsgLabPackMapName;
1215 // Что упаковывать:
1216 cbTextrures.Caption := MsgCtrlPackTextures;
1217 LabelTextures.Caption := MsgLabPackTextures;
1218 cbSky.Caption := MsgCtrlPackSky;
1219 LabelSky.Caption := MsgLabPackSky;
1220 cbMusic.Caption := MsgCtrlPackMusic;
1221 LabelMusic.Caption := MsgLabPackMusic;
1222 cbAdd.Caption := MsgCtrlPackAdd;
1223 cbNonStandart.Caption := MsgCtrlPackNonStd;
1224 end;
1226 // Форма "Сохранить карту":
1227 with SaveMapForm do
1228 begin
1229 Caption := MsgCapSave;
1230 bOK.Caption := MsgBtnOk;
1231 bCancel.Caption := MsgBtnCancel;
1232 end;
1234 // Форма "Сохранить мини-карту":
1235 with SaveMiniMapForm do
1236 begin
1237 Caption := MsgCapMini;
1238 LabelScale.Caption := MsgLabMiniScale;
1239 bSave.Caption := MsgBtnSave;
1240 bClose.Caption := MsgBtnClose;
1241 end;
1243 // Форма "Выбор карты":
1244 with SelectMapForm do
1245 begin
1246 Caption := MsgCapSelect;
1247 bOK.Caption := MsgBtnOk;
1248 bCancel.Caption := MsgBtnCancel;
1249 end;
1251 // Заголовок приложения:
1252 Application.Title := MsgEditorTitle;
1253 end;
1255 type
1256 TResArg = record
1257 ini: TIniFile;
1258 ignored: TStringList;
1259 end;
1260 PResArg = ^TResArg;
1262 function gResourceItarator (name, value: AnsiString; hash: LongInt; arg: Pointer): AnsiString;
1263 var res: PResArg; orig: AnsiString;
1264 begin
1265 res := PResArg(arg);
1266 orig := res.ini.ReadString('resourcestring', name + '$', '');
1267 if (orig = '') or (orig = value) then
1268 begin
1269 if res.ini.ValueExists('resourcestring', name) then
1270 begin
1271 result := res.ini.ReadString('resourcestring', name, '');
1272 end
1273 else
1274 begin
1275 result := value;
1276 if res.ignored.IndexOf(Copy(name, 1, Pos('.', name) - 1)) < 0 then
1277 e_WriteLog(' Seems that key ' + name + ' not translated', MSG_NOTIFY);
1278 end;
1279 end
1280 else
1281 begin
1282 e_WriteLog(' Original resource string for ' + name + ' do not match, translation are outdated?', MSG_WARNING);
1283 e_WriteLog(' [' + value + '] -> [' + orig + ']', MSG_WARNING);
1284 result := value;
1285 end;
1286 end;
1288 procedure gSetLanguageFormStream (const lang: AnsiString; stream: TStream; out ok: Boolean);
1289 var res: TResArg;
1290 begin
1291 ok := False;
1292 try
1293 res.ini := TIniFile.Create(stream, [ifoStripComments, ifoStripQuotes, ifoEscapeLineFeeds]);
1294 except
1295 res.ini := nil;
1296 end;
1297 if res.ini <> nil then
1298 begin
1299 try
1300 ok := res.ini.SectionExists('resourcestring');
1301 if ok then
1302 begin
1303 res.ignored := TStringList.Create;
1304 res.ignored.CaseSensitive := False;
1305 res.ini.ReadSection('ignore', res.ignored);
1306 res.ignored.Sort;
1307 SetResourceStrings(gResourceItarator, @res);
1308 res.ignored.Free();
1309 end;
1310 finally
1311 res.ini.Free();
1312 end;
1313 end;
1314 if not ok then e_WriteLog('Translation file for ' + lang + ' are invalid ', MSG_FATALERROR);
1315 end;
1317 procedure gSetLanguageFromFile (const lang: AnsiString; out ok: Boolean);
1318 const langfilename = 'editor';
1319 var stream: TFileStream; name: AnsiString;
1320 begin
1321 name := LangDir + DirectorySeparator + langfilename + '.' + lang + '.lng';
1322 try
1323 stream := TFileStream.Create(name, fmOpenRead);
1324 try
1325 gSetLanguageFormStream(lang, stream, ok);
1326 finally
1327 stream.Free();
1328 end;
1329 except on E: EFOpenError do
1330 ok := False;
1331 end;
1332 end;
1334 procedure gSetLanguage (const lang: AnsiString; out ok: Boolean);
1335 begin
1336 gSetLanguageFromFile(lang, ok);
1337 end;
1339 function g_Language_GetList (): TStringList;
1340 const langfilename = 'editor';
1341 var list: TStringList; info: TSearchRec;
1342 begin
1343 list := TStringList.Create;
1344 list.Duplicates := dupIgnore;
1345 list.Add(InSourceLanguage);
1346 if FindFirst(LangDir + DirectorySeparator + langfilename + '.*.lng', faAnyFile, info) = 0 then
1347 begin
1348 repeat
1349 list.Add(Copy(ExtractFileNameWithoutExt(info.Name), Length(langfilename) + 2));
1350 until FindNext(info) <> 0;
1351 FindClose(info);
1352 end;
1353 list.Sort;
1354 result := list;
1355 end;
1357 procedure g_Language_Set(lang: String);
1358 var syslang, fallbacklang: String; ok: Boolean;
1359 begin
1360 ResetResourceTables;
1362 if lang = '' then
1363 begin
1364 GetLanguageIDs(syslang, fallbacklang); // TODO: remove dependency on gettext
1365 e_WriteLog('g_Language_Set: try strings "' + syslang + '" (system)', MSG_NOTIFY);
1366 gSetLanguage(syslang, ok);
1367 if not ok then
1368 begin
1369 e_WriteLog('g_Language_Set: try strings "' + fallbacklang + '" (fallback)', MSG_NOTIFY);
1370 gSetLanguage(syslang, ok);
1371 end;
1372 end
1373 else
1374 begin
1375 e_WriteLog('g_Language_Set: try strings "' + lang + '" (user specified)', MSG_NOTIFY);
1376 gSetLanguage(lang, ok);
1377 end;
1378 if not ok then e_WriteLog('g_Language_Set: use default strings "' + InSourceLanguage + '" (in-source)', MSG_NOTIFY);
1380 SetupArrays();
1381 SetupCaptions();
1382 RemoveSelectFromObjects();
1383 end;
1385 End.