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