DEADSOFTWARE

f30ffea457fffb28d9a186efe2b3deb5030e0f67
[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 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 = '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 = '<COLORFILTERS>';
630 MsgFileFilterSaveDFWAD = 'Doom 2D: Forever Maps in DFWAD packages (*.wad)|*.wad';
631 MsgFileFilterSaveDFZIP = 'Doom 2D: Forever Maps in DFZIP archives (*.dfz)|*.dfz';
632 MsgFileFilterAll = 'Doom 2D: Forever Maps (*.dfz, *.wad)|*.wad;*.dfz|Doom 2D: Forever 0.30 Maps (*.ini)|*.ini|All Files (*.*)|*.*';
633 MsgFileFilterWad = 'Doom 2D: Forever Maps (*.dfz, *.wad)|*.wad;*.dfz|All Files (*.*)|*.*';
634 MsgFileFilterExeMac = 'Doom 2D Forever.app|*.app|Doom 2D Forever (Unix Executable)|Doom2DF;*';
635 MsgFileFilterExeWin = 'Doom2DF.exe|Doom2DF.exe;*.exe';
636 MsgFileFilterExeUnix = 'Doom2DF|Doom2DF;*';
638 MsgEditorTitle = 'Doom 2D: Forever Map Editor';
640 Var
641 BoolNames: Array [False..True] of String;
642 DirNames: Array [D_LEFT..D_RIGHT] of String;
643 DirNamesAdv: Array [0..3] of String;
644 DirButtonNames: Array [1..4] of String;
645 PANELNAMES: Array[0..13] of String;
646 EffectNames: Array [EFFECT_NONE..EFFECT_FIRE] of String;
647 ItemNames: Array [ITEM_MEDKIT_SMALL..ITEM_MAX] of String;
648 ShotNames: Array [TRIGGER_SHOT_PISTOL..TRIGGER_SHOT_MAX] of String;
649 MonsterNames: Array [MONSTER_DEMON..MONSTER_MAN] of String;
650 AreaNames: Array [AREA_PLAYERPOINT1..AREA_BLUETEAMPOINT] of String;
651 TriggerNames: Array [TRIGGER_EXIT..TRIGGER_MAX] of String;
653 function g_Language_GetList (): TStringList;
654 procedure g_Language_Set(lang: String);
656 Implementation
658 Uses
659 g_options, IniFiles, gettext, LazFileUtils,
660 SysUtils, e_log, f_main, f_about, f_activationtype,
661 f_addresource_sky, f_addresource_sound,
662 f_addresource_texture, f_choosetype, f_keys, f_mapcheck,
663 f_mapoptions, f_mapoptimization, f_options,
664 f_packmap, f_savemap, f_saveminimap, f_selectmap, Forms, utils;
666 const
667 InSourceLanguage = 'en_US';
669 procedure SetupArrays();
670 var
671 i: Integer;
673 begin
674 // Да/Нет:
675 BoolNames[False] := MsgArrayBoolFalse;
676 BoolNames[True] := MsgArrayBoolTrue;
678 // Направления:
679 DirNames[D_LEFT] := MsgArrayDirLeft;
680 DirNames[D_RIGHT] := MsgArrayDirRight;
682 // Смены направления:
683 DirNamesAdv[0] := MsgArrayDirSame;
684 DirNamesAdv[1] := MsgArrayDirLeft;
685 DirNamesAdv[2] := MsgArrayDirRight;
686 DirNamesAdv[3] := MsgArrayDirReversed;
688 // Направление (на кнопках):
689 DirButtonNames[1] := MsgArrayDirbtnLeft;
690 DirButtonNames[2] := MsgArrayDirbtnRight;
691 DirButtonNames[3] := MsgArrayDirbtnUp;
692 DirButtonNames[4] := MsgArrayDirbtnDown;
694 // Названия панелей:
695 PANELNAMES[0] := MsgArrayPanelWall;
696 PANELNAMES[1] := MsgArrayPanelBack;
697 PANELNAMES[2] := MsgArrayPanelFront;
698 PANELNAMES[3] := MsgArrayPanelDoorOpen;
699 PANELNAMES[4] := MsgArrayPanelDoorClose;
700 PANELNAMES[5] := MsgArrayPanelStair;
701 PANELNAMES[6] := MsgArrayPanelWater;
702 PANELNAMES[7] := MsgArrayPanelAcid1;
703 PANELNAMES[8] := MsgArrayPanelAcid2;
704 PANELNAMES[9] := MsgArrayPanelLiftUp;
705 PANELNAMES[10] := MsgArrayPanelLiftDown;
706 PANELNAMES[11] := MsgArrayPanelLiftLeft;
707 PANELNAMES[12] := MsgArrayPanelLiftRight;
708 PANELNAMES[13] := MsgArrayPanelBlockmon;
710 // Названия эффектов:
711 EffectNames[EFFECT_NONE] := MsgArrayFxNone;
712 EffectNames[EFFECT_TELEPORT] := MsgArrayFxTeleport;
713 EffectNames[EFFECT_RESPAWN] := MsgArrayFxRespawn;
714 EffectNames[EFFECT_FIRE] := MsgArrayFxFire;
716 // Названия предметов:
717 ItemNames[ITEM_MEDKIT_SMALL] := MsgArrayItemMedkit;
718 ItemNames[ITEM_MEDKIT_LARGE] := MsgArrayItemLargeMedkit;
719 ItemNames[ITEM_MEDKIT_BLACK] := MsgArrayItemBlackMedkit;
720 ItemNames[ITEM_ARMOR_GREEN] := MsgArrayItemGreenArmor;
721 ItemNames[ITEM_ARMOR_BLUE] := MsgArrayItemBlueArmor;
722 ItemNames[ITEM_SPHERE_BLUE] := MsgArrayItemBlueSphere;
723 ItemNames[ITEM_SPHERE_WHITE] := MsgArrayItemMegasphere;
724 ItemNames[ITEM_SUIT] := MsgArrayItemHazSuit;
725 ItemNames[ITEM_OXYGEN] := MsgArrayItemOxygen;
726 ItemNames[ITEM_INVUL] := MsgArrayItemInvulnerability;
727 ItemNames[ITEM_WEAPON_SAW] := MsgArrayItemChainsaw;
728 ItemNames[ITEM_WEAPON_SHOTGUN1] := MsgArrayItemShotgun;
729 ItemNames[ITEM_WEAPON_SHOTGUN2] := MsgArrayItemDbShotgun;
730 ItemNames[ITEM_WEAPON_CHAINGUN] := MsgArrayItemChaingun;
731 ItemNames[ITEM_WEAPON_ROCKETLAUNCHER] := MsgArrayItemRocketLauncher;
732 ItemNames[ITEM_WEAPON_PLASMA] := MsgArrayItemPlasmaRifle;
733 ItemNames[ITEM_WEAPON_BFG] := MsgArrayItemBfg;
734 ItemNames[ITEM_WEAPON_SUPERPULEMET] := MsgArrayItemSuperMinigun;
735 ItemNames[ITEM_WEAPON_FLAMETHROWER] := MsgArrayItemFlamethrower;
736 ItemNames[ITEM_AMMO_BULLETS] := MsgArrayItemClip;
737 ItemNames[ITEM_AMMO_BULLETS_BOX] := MsgArrayItemAmmoBox;
738 ItemNames[ITEM_AMMO_SHELLS] := MsgArrayItem4Shells;
739 ItemNames[ITEM_AMMO_SHELLS_BOX] := MsgArrayItem25Shells;
740 ItemNames[ITEM_AMMO_ROCKET] := MsgArrayItem1Rocket;
741 ItemNames[ITEM_AMMO_ROCKET_BOX] := MsgArrayItemRocketBox;
742 ItemNames[ITEM_AMMO_CELL] := MsgArrayItemCell;
743 ItemNames[ITEM_AMMO_CELL_BIG] := MsgArrayItemLargeCell;
744 ItemNames[ITEM_AMMO_FUELCAN] := MsgArrayItemFuelcan;
745 ItemNames[ITEM_AMMO_BACKPACK] := MsgArrayItemBackpack;
746 ItemNames[ITEM_KEY_RED] := MsgArrayItemKeyRed;
747 ItemNames[ITEM_KEY_GREEN] := MsgArrayItemKeyGreen;
748 ItemNames[ITEM_KEY_BLUE] := MsgArrayItemKeyBlue;
749 ItemNames[ITEM_WEAPON_KASTET] := '?';
750 ItemNames[ITEM_WEAPON_PISTOL] := '??';
751 ItemNames[ITEM_BOTTLE] := MsgArrayItemBottle;
752 ItemNames[ITEM_HELMET] := MsgArrayItemHelmet;
753 ItemNames[ITEM_JETPACK] := MsgArrayItemJetpack;
754 ItemNames[ITEM_INVIS] := MsgArrayItemInvis;
756 // Названия снарядов:
757 ShotNames[TRIGGER_SHOT_PISTOL] := MsgArrayShotPistol;
758 ShotNames[TRIGGER_SHOT_BULLET] := MsgArrayShotBullet;
759 ShotNames[TRIGGER_SHOT_SHOTGUN] := MsgArrayShotShotgun;
760 ShotNames[TRIGGER_SHOT_SSG] := MsgArrayShotSsg;
761 ShotNames[TRIGGER_SHOT_IMP] := MsgArrayShotImp;
762 ShotNames[TRIGGER_SHOT_PLASMA] := MsgArrayShotPlasma;
763 ShotNames[TRIGGER_SHOT_SPIDER] := MsgArrayShotSpider;
764 ShotNames[TRIGGER_SHOT_CACO] := MsgArrayShotCaco;
765 ShotNames[TRIGGER_SHOT_BARON] := MsgArrayShotBaron;
766 ShotNames[TRIGGER_SHOT_MANCUB] := MsgArrayShotMancub;
767 ShotNames[TRIGGER_SHOT_REV] := MsgArrayShotRev;
768 ShotNames[TRIGGER_SHOT_ROCKET] := MsgArrayShotRocket;
769 ShotNames[TRIGGER_SHOT_BFG] := MsgArrayShotBfg;
770 ShotNames[TRIGGER_SHOT_EXPL] := MsgArrayShotExpl;
771 ShotNames[TRIGGER_SHOT_BFGEXPL] := MsgArrayShotBfgexpl;
772 ShotNames[TRIGGER_SHOT_FLAME] := MsgArrayShotFlame;
774 // Названия монстров:
775 MonsterNames[MONSTER_DEMON] := MsgArrayMonDemon;
776 MonsterNames[MONSTER_IMP] := MsgArrayMonImp;
777 MonsterNames[MONSTER_ZOMBY] := MsgArrayMonZombie;
778 MonsterNames[MONSTER_SERG] := MsgArrayMonSergeant;
779 MonsterNames[MONSTER_CYBER] := MsgArrayMonCyber;
780 MonsterNames[MONSTER_CGUN] := MsgArrayMonCgun;
781 MonsterNames[MONSTER_BARON] := MsgArrayMonHellBaron;
782 MonsterNames[MONSTER_KNIGHT] := MsgArrayMonHellKnight;
783 MonsterNames[MONSTER_CACO] := MsgArrayMonCacodemon;
784 MonsterNames[MONSTER_SOUL] := MsgArrayMonLostSoul;
785 MonsterNames[MONSTER_PAIN] := MsgArrayMonPainElemental;
786 MonsterNames[MONSTER_SPIDER] := MsgArrayMonMastermind;
787 MonsterNames[MONSTER_BSP] := MsgArrayMonArachnatron;
788 MonsterNames[MONSTER_MANCUB] := MsgArrayMonMancubus;
789 MonsterNames[MONSTER_SKEL] := MsgArrayMonRevenant;
790 MonsterNames[MONSTER_VILE] := MsgArrayMonArchvile;
791 MonsterNames[MONSTER_FISH] := MsgArrayMonFish;
792 MonsterNames[MONSTER_BARREL] := MsgArrayMonBarrel;
793 MonsterNames[MONSTER_ROBO] := MsgArrayMonRobot;
794 MonsterNames[MONSTER_MAN] := MsgArrayMonPrikolist;
796 // Названия областей:
797 AreaNames[AREA_PLAYERPOINT1] := MsgArrayAreaPlayerOne;
798 AreaNames[AREA_PLAYERPOINT2] := MsgArrayAreaPlayerTwo;
799 AreaNames[AREA_DMPOINT] := MsgArrayAreaDm;
800 AreaNames[AREA_REDFLAG] := MsgArrayAreaFlagRed;
801 AreaNames[AREA_BLUEFLAG] := MsgArrayAreaFlagBlue;
802 AreaNames[AREA_DOMFLAG] := MsgArrayAreaFlagDom;
803 AreaNames[AREA_REDTEAMPOINT] := MsgArrayAreaTeamRed;
804 AreaNames[AREA_BLUETEAMPOINT] := MsgArrayAreaTeamBlue;
806 // Названия триггеров:
807 TriggerNames[TRIGGER_EXIT] := MsgArrayTrExit;
808 TriggerNames[TRIGGER_TELEPORT] := MsgArrayTrTeleport;
809 TriggerNames[TRIGGER_OPENDOOR] := MsgArrayTrDoorOpen;
810 TriggerNames[TRIGGER_CLOSEDOOR] := MsgArrayTrDoorClose;
811 TriggerNames[TRIGGER_DOOR] := MsgArrayTrDoorSwitch;
812 TriggerNames[TRIGGER_DOOR5] := MsgArrayTrDoor5Sec;
813 TriggerNames[TRIGGER_CLOSETRAP] := MsgArrayTrTrapClose;
814 TriggerNames[TRIGGER_TRAP] := MsgArrayTrTrap;
815 TriggerNames[TRIGGER_PRESS] := MsgArrayTrExtend;
816 TriggerNames[TRIGGER_SECRET] := MsgArrayTrSecret;
817 TriggerNames[TRIGGER_LIFTUP] := MsgArrayTrLiftUp;
818 TriggerNames[TRIGGER_LIFTDOWN] := MsgArrayTrLiftDown;
819 TriggerNames[TRIGGER_LIFT] := MsgArrayTrLiftSwitch;
820 TriggerNames[TRIGGER_TEXTURE] := MsgArrayTrTexture;
821 TriggerNames[TRIGGER_ON] := MsgArrayTrOn;
822 TriggerNames[TRIGGER_OFF] := MsgArrayTrOff;
823 TriggerNames[TRIGGER_ONOFF] := MsgArrayTrSwitch;
824 TriggerNames[TRIGGER_SOUND] := MsgArrayTrSound;
825 TriggerNames[TRIGGER_SPAWNMONSTER] := MsgArrayTrSpawnMonster;
826 TriggerNames[TRIGGER_SPAWNITEM] := MsgArrayTrSpawnItem;
827 TriggerNames[TRIGGER_MUSIC] := MsgArrayTrMusic;
828 TriggerNames[TRIGGER_PUSH] := MsgArrayTrPush;
829 TriggerNames[TRIGGER_SCORE] := MsgArrayTrScore;
830 TriggerNames[TRIGGER_MESSAGE] := MsgArrayTrMessage;
831 TriggerNames[TRIGGER_DAMAGE] := MsgArrayTrDamage;
832 TriggerNames[TRIGGER_HEALTH] := MsgArrayTrHealth;
833 TriggerNames[TRIGGER_SHOT] := MsgArrayTrShot;
834 TriggerNames[TRIGGER_EFFECT] := MsgArrayTrEffect;
836 // Установка значений в панели выбора объектов:
837 with MainForm do
838 begin
839 lbPanelType.Items.Clear();
840 for i := 0 to High(PANELNAMES) do
841 lbPanelType.Items.Add(PANELNAMES[i]);
842 lbPanelType.ItemIndex := 0;
844 lbItemList.Clear();
845 for i := ITEM_MEDKIT_SMALL to ITEM_KEY_BLUE do
846 lbItemList.Items.Add(ItemNames[i]);
847 lbItemList.Items.Add(ItemNames[ITEM_BOTTLE]);
848 lbItemList.Items.Add(ItemNames[ITEM_HELMET]);
849 lbItemList.Items.Add(ItemNames[ITEM_JETPACK]);
850 lbItemList.Items.Add(ItemNames[ITEM_INVIS]);
851 lbItemList.Items.Add(ItemNames[ITEM_WEAPON_FLAMETHROWER]);
852 lbItemList.Items.Add(ItemNames[ITEM_AMMO_FUELCAN]);
854 lbMonsterList.Clear();
855 for i := MONSTER_DEMON to MONSTER_MAN do
856 lbMonsterList.Items.Add(MonsterNames[i]);
858 lbAreasList.Clear();
859 for i := AREA_PLAYERPOINT1 to AREA_BLUETEAMPOINT do
860 lbAreasList.Items.Add(AreaNames[i]);
862 lbTriggersList.Clear();
863 for i := Low(TriggerNames) to High(TriggerNames) do
864 lbTriggersList.Items.Add(TriggerNames[i]);
866 clbActivationType.Clear();
867 clbActivationType.Items.Add(MsgCtrlActPlayerClose);
868 clbActivationType.Items.Add(MsgCtrlActMonsterClose);
869 clbActivationType.Items.Add(MsgCtrlActPlayerPress);
870 clbActivationType.Items.Add(MsgCtrlActMonsterPress);
871 clbActivationType.Items.Add(MsgCtrlActShot);
872 clbActivationType.Items.Add(MsgCtrlActNoMonster);
874 clbKeys.Clear();
875 clbKeys.Items.Add(MsgCtrlKeysRed);
876 clbKeys.Items.Add(MsgCtrlKeysGreen);
877 clbKeys.Items.Add(MsgCtrlKeysBlue);
878 clbKeys.Items.Add(MsgCtrlKeysTeamRed);
879 clbKeys.Items.Add(MsgCtrlKeysTeamBlue);
880 end;
881 end;
883 procedure SetupCaptions();
884 var i: Integer; s: AnsiString;
885 begin
886 // Главная форма:
887 with MainForm do
888 begin
889 // Заголовок:
890 s := g_GetBuildHash(false);
891 if s = 'custom build' then
892 s := s + ' by ' + g_GetBuilderName() + ' ' + EDITOR_BUILDDATE + ' ' + EDITOR_BUILDTIME;
893 FormCaption := MsgEditorTitle + ' (' + s + ')';
894 i := Pos('-', Caption);
895 if i > 0 then
896 begin
897 Caption := FormCaption + ' ' + Copy(Caption, i, Length(Caption)-i+1);
898 end
899 else
900 Caption := FormCaption;
902 // Apple menu:
903 miAppleAbout.Caption := MsgMenuAppleAbout;
904 miApplePref.Caption := MsgMenuApplePref;
905 // File menu:
906 miMenuFile.Caption := MsgMenuFile;
907 miNewMap.Caption := MsgMenuFileNew;
908 miOpenMap.Caption := MsgMenuFileOpen;
909 miMacRecentSubMenu.Caption := MsgMenuFileRecentMac;
910 miMacRecentClear.Caption := MsgMenuFileRecentClearMac;
911 miSaveMap.Caption := MsgMenuFileSave;
912 miSaveMapAs.Caption := MsgMenuFileSaveAs;
913 miOpenWadMap.Caption := MsgMenuFileOpenWad;
914 miReopenMap.Caption := MsgMenuFileReopen;
915 miSaveMiniMap.Caption := MsgMenuFileSaveMini;
916 miDeleteMap.Caption := MsgMenuFileDelete;
917 miPackMap.Caption := MsgMenuFilePackMap;
918 miWinRecent.Caption := MsgMenuFileRecentWin;
919 miExit.Caption := MsgMenuFileExitWin;
920 // Edit menu:
921 miMenuEdit.Caption := MsgMenuEdit;
922 miUndo.Caption := MsgMenuEditUndo;
923 miCopy.Caption := MsgMenuEditCopy;
924 miCut.Caption := MsgMenuEditCut;
925 miPaste.Caption := MsgMenuEditPaste;
926 miSelectAll.Caption := MsgMenuEditSelectAll;
927 miSnapToGrid.Caption := MsgMenuEditSnapGrid;
928 miSwitchGrid.Caption := MsgMenuEditStepGrid;
929 miToFore.Caption := MsgMenuEditToFore;
930 miToBack.Caption := MsgMenuEditToBack;
931 miMapOptions.Caption := MsgMenuEditMapProps;
932 miOptions.Caption := MsgMenuEditPrefWin;
933 // View menu:
934 miMenuView.Caption := MsgMenuView;
935 miLayers.Caption := MsgMenuViewLayers;
936 miLayer1.Caption := MsgMenuLayerBack;
937 miLayer2.Caption := MsgMenuLayerWall;
938 miLayer3.Caption := MsgMenuLayerFore;
939 miLayer4.Caption := MsgMenuLayerStair;
940 miLayer5.Caption := MsgMenuLayerWater;
941 miLayer6.Caption := MsgMenuLayerItem;
942 miLayer7.Caption := MsgMenuLayerMonster;
943 miLayer8.Caption := MsgMenuLayerArea;
944 miLayer9.Caption := MsgMenuLayerTrigger;
945 miMiniMap.Caption := MsgMenuViewMinimap;
946 miShowEdges.Caption := MsgMenuViewBounds;
947 miMapPreview.Caption := MsgMenuViewPreview;
948 // Service menu:
949 miMenuService.Caption := MsgMenuServ;
950 miCheckMap.Caption := MsgMenuServTest;
951 miOptimmization.Caption := MsgMenuServOpt;
952 miTestMap.Caption := MsgMenuServLaunch;
953 // Window menu:
954 miMenuWindow.Caption := MsgMenuWindow;
955 miMacMinimize.Caption := MsgMenuWindowMinimize;
956 miMacZoom.Caption := MsgMenuWindowZoom;
957 // Help menu:
958 miMenuHelp.Caption := MsgMenuHelp;
959 miAbout.Caption := MsgMenuHelpAboutWin;
961 // Toolbar:
962 tbNewMap.Hint := MsgMenuTbNew;
963 tbOpenMap.Hint := MsgMenuTbOpen;
964 tbSaveMap.Hint := MsgMenuTbSave;
965 tbOpenWadMap.Hint := MsgMenuTbOpenWad;
966 tbShowMap.Hint := MsgMenuTbMinimap;
967 tbShow.Hint := MsgMenuTbLayers;
968 miLayerP1.Caption := MsgMenuLayerBack;
969 miLayerP2.Caption := MsgMenuLayerWall;
970 miLayerP3.Caption := MsgMenuLayerFore;
971 miLayerP4.Caption := MsgMenuLayerStair;
972 miLayerP5.Caption := MsgMenuLayerWater;
973 miLayerP6.Caption := MsgMenuLayerItem;
974 miLayerP7.Caption := MsgMenuLayerMonster;
975 miLayerP8.Caption := MsgMenuLayerArea;
976 miLayerP9.Caption := MsgMenuLayerTrigger;
977 tbGridOn.Hint := MsgMenuTbGrid;
978 tbGrid.Hint := MsgMenuTbGridStep;
979 tbTestMap.Hint := MsgMenuTbLaunch;
981 // Object property editor:
982 bApplyProperty.Caption := MsgBtnApplyProps;
983 vleObjectProperty.TitleCaptions[0] := MsgCtrlPropKey;
984 vleObjectProperty.TitleCaptions[1] := MsgCtrlPropValue;
986 // Panels Tab:
987 tsPanels.Caption := MsgCtrlPanels;
988 lbPanelType.Hint := MsgPropPanelType;
989 lbTextureList.Hint := MsgCtrlListTexture;
990 LabelTxW.Caption := MsgLabTexWidth;
991 LabelTxH.Caption := MsgLabTexHeight;
992 cbPreview.Caption := MsgCtrlPreview;
993 bbAddTexture.Hint := MsgBtnTextureAdd;
994 bbRemoveTexture.Hint := MsgBtnTextureDelete;
995 bClearTexture.Hint := MsgBtnTextureEmpty;
997 // Items Tab:
998 tsItems.Caption := MsgCtrlItems;
999 lbItemList.Hint := MsgCtrlListItem;
1000 cbOnlyDM.Caption := MsgCtrlItemDm;
1001 cbFall.Caption := MsgCtrlItemFalls;
1003 // Monters Tab:
1004 tsMonsters.Caption := MsgCtrlMonsters;
1005 lbMonsterList.Hint := MsgCtrlListMonster;
1006 rbMonsterLeft.Caption := MsgCtrlLeft;
1007 rbMonsterRight.Caption := MsgCtrlRight;
1009 // Areas Tab:
1010 tsAreas.Caption := MsgCtrlAreas;
1011 lbAreasList.Hint := MsgCtrlListArea;
1012 rbAreaLeft.Caption := MsgCtrlLeft;
1013 rbAreaRight.Caption := MsgCtrlRight;
1015 // Triggers Tab:
1016 tsTriggers.Caption := MsgCtrlTriggers;
1017 lbTriggersList.Hint := MsgCtrlListTrigger;
1018 clbActivationType.Hint := MsgCtrlListActive;
1019 clbKeys.Hint := MsgCtrlListKeys;
1020 end;
1022 // Форма "О программе":
1023 with AboutForm do
1024 begin
1025 Caption := MsgCapAbout;
1026 LabelTitle.Caption := MsgEditorTitle;
1027 LabelVer.Caption := MsgLabAboutVer;
1028 LabelAuthor.Caption := MsgLabAboutAuthor;
1029 LabelAuthor2.Caption := MsgLabAboutAuthor2;
1030 LabelMail.Caption := MsgLabAboutMail;
1031 LabelMail2.Caption := MsgLabAboutMail2;
1032 LabelSite.Caption := MsgLabAboutSite;
1033 LabelHttp.Caption := MsgLabAboutHttp;
1034 end;
1036 // Форма "Тип активации":
1037 with ActivationTypeForm do
1038 begin
1039 Caption := MsgCapAct;
1040 cbPlayerCollide.Caption := MsgCtrlActPlayerClose;
1041 cbMonsterCollide.Caption := MsgCtrlActMonsterClose;
1042 cbPlayerPress.Caption := MsgCtrlActPlayerPress;
1043 cbMonsterPress.Caption := MsgCtrlActMonsterPress;
1044 cbShot.Caption := MsgCtrlActShot;
1045 cbNoMonster.Caption := MsgCtrlActNoMonster;
1046 bOK.Caption := MsgBtnOk;
1047 end;
1049 // Форма "Выбор текстуры для неба":
1050 with AddSkyForm do
1051 begin
1052 Caption := MsgCapAddSky;
1053 LabelWADs.Caption := MsgLabAddWads;
1054 LabelSections.Caption := MsgLabAddSections;
1055 bOK.Caption := MsgBtnOk;
1056 bCancel.Caption := MsgBtnCancel;
1057 end;
1059 // Форма "Выбор звука или музыки":
1060 with AddSoundForm do
1061 begin
1062 Caption := MsgCapAddSound;
1063 LabelWADs.Caption := MsgLabAddWads;
1064 LabelSections.Caption := MsgLabAddSections;
1065 bOK.Caption := MsgBtnOk;
1066 bCancel.Caption := MsgBtnCancel;
1067 bEmpty.Caption := MsgBtnNoSound;
1068 end;
1070 // Форма "Выбор текстуры":
1071 with AddTextureForm do
1072 begin
1073 Caption := MsgCapAddTexture;
1074 LabelWADs.Caption := MsgLabAddWads;
1075 LabelSections.Caption := MsgLabAddSections;
1076 bAddTexture.Caption := MsgBtnAdd;
1077 bClose.Caption := MsgBtnClose;
1078 bAddClose.Caption := MsgBtnAddClose;
1079 end;
1081 // Форма "Выбор типа монстра" / "Выбор типа предмета":
1082 ChooseTypeForm.bOK.Caption := MsgBtnOk;
1084 // Форма "Ключи":
1085 with KeysForm do
1086 begin
1087 Caption := MsgCapKeys;
1088 cbRedKey.Caption := MsgCtrlKeysRed;
1089 cbGreenKey.Caption := MsgCtrlKeysGreen;
1090 cbBlueKey.Caption := MsgCtrlKeysBlue;
1091 cbRedTeam.Caption := MsgCtrlKeysTeamRed;
1092 cbBlueTeam.Caption := MsgCtrlKeysTeamBlue;
1093 bOK.Caption := MsgBtnOk;
1094 end;
1096 // Форма "Проверка карты":
1097 with MapCheckForm do
1098 begin
1099 Caption := MsgCapTest;
1100 bCheckMap.Caption := MsgBtnTestAgain;
1101 bClose.Caption := MsgBtnClose;
1102 end;
1104 // Форма "Оптимизация карты":
1105 with MapOptimizationForm do
1106 begin
1107 Caption := MsgCapOpt;
1108 // Выбор оптимизации:
1109 GroupBoxOpt.Caption := MsgCtrlOptGb;
1110 rbTexturesOptimization.Caption := MsgCtrlOptTexture;
1111 rbPanelsOptimization.Caption := MsgCtrlOptPanel;
1112 // Оптимизация текстур:
1113 bBeginTextureOptimization.Caption := MsgBtnStart;
1114 // Оптимизация панелей:
1115 cbOptimizeWalls.Caption := MsgCtrlOptWall;
1116 cbOptimizeForeGround.Caption := MsgCtrlOptFore;
1117 cbOptimizeBackGround.Caption := MsgCtrlOptBack;
1118 cbOptimizeSteps.Caption := MsgCtrlOptStair;
1119 cbOptimizeWater.Caption := MsgCtrlOptWater;
1120 cbOptimizeAcid1.Caption := MsgCtrlOptAcid1;
1121 cbOptimizeAcid2.Caption := MsgCtrlOptAcid2;
1122 cbOptimizeLift.Caption := MsgCtrlOptLift;
1123 cbOptimizeBlockMon.Caption := MsgCtrlOptBlockmon;
1124 bBeginPanelsOptimization.Caption := MsgBtnStart;
1125 end;
1127 // Форма "Параметры карты":
1128 with MapOptionsForm do
1129 begin
1130 Caption := MsgCapSets;
1131 // Основные параметры:
1132 LabelName.Caption := MsgLabSetsName;
1133 LabelDesc.Caption := MsgLabSetsDesc;
1134 LabelAuthor.Caption := MsgLabSetsAuthor;
1135 LabelBack.Caption := MsgLabSetsBack;
1136 LabelMusic.Caption := MsgLabSetsMusic;
1137 // Статистика:
1138 GBStats.Caption := MsgCtrlSetsStats;
1139 LabelTexs.Caption := MsgLabSetsTextures;
1140 LabelPanels.Caption := MsgLabSetsPanels;
1141 LabelItems.Caption := MsgLabSetsItems;
1142 LabelMonsters.Caption := MsgLabSetsMonsters;
1143 LabelAreas.Caption := MsgLabSetsAreas;
1144 LabelTriggers.Caption := MsgLabSetsTriggers;
1145 // Размеры:
1146 GBSizes.Caption := MsgCtrlSetsSizes;
1147 LabelWidth.Caption := MsgLabSetsWidth;
1148 LabelHeight.Caption := MsgLabSetsHeight;
1149 LabelCurSize.Caption := MsgLabSetsSizes;
1150 LabelMapMove.Caption := MsgLabSetsMapmove;
1151 cbSnapping.Caption := MsgLabSetsSnapping;
1152 // Кнопки:
1153 bOK.Caption := MsgBtnOk;
1154 bCancel.Caption := MsgBtnCancel;
1155 end;
1157 // Form preferences:
1158 with OptionsForm do
1159 begin
1160 Caption := MsgCapEs;
1161 bOK.Caption := MsgBtnOk;
1162 bCancel.Caption := MsgBtnCancel;
1163 // TabGeneral:
1164 TabGeneral.Caption := MsgCtrlEsGeneral;
1165 cbShowDots.Caption := MsgCtrlEsGrid;
1166 cbShowTexture.Caption := MsgCtrlEsTexture;
1167 cbShowSize.Caption := MsgCtrlEsPanelSize;
1168 cbCheckerboard.Caption := MsgCtrlEsCheckerboard;
1169 LabelGrid.Caption := MsgLabEsGrid;
1170 LabelGridCol.Caption := MsgLabEsGridColor;
1171 LabelGridSize.Caption := MsgLabEsGridSize;
1172 LabelBack.Caption := MsgLabEsBack;
1173 LabelPreview.Caption := MsgLabEsPreview;
1174 LabelMinimap.Caption := MsgLabEsMinimap;
1175 LabelLanguage.Caption := MsgLabEsLanguage;
1176 // TabFiles:
1177 TabFiles.Caption := MsgCtrlEsFiles;
1178 LabelRecent.Caption := MsgLabEsRecent;
1179 // TabTesting:
1180 TabTesting.Caption := MsgCtrlEsTesting;
1181 rbDM.Caption := MsgCtrlLaunchDm;
1182 rbTDM.Caption := MsgCtrlLaunchTdm;
1183 rbCTF.Caption := MsgCtrlLaunchCtf;
1184 rbCOOP.Caption := MsgCtrlLaunchCoop;
1185 cbTwoPlayers.Caption := MsgCtrlLaunch2p;
1186 cbTeamDamage.Caption := MsgCtrlLaunchFf;
1187 cbAllowExit.Caption := MsgCtrlLaunchExit;
1188 cbWeaponStay.Caption := MsgCtrlLaunchWeapons;
1189 cbMonstersDM.Caption := MsgCtrlLaunchMonsters;
1190 cbMapOnce.Caption := MsgCtrlLaunchClose;
1191 LabelTime.Caption := MsgLabLaunchTime;
1192 LabelSecs.Caption := MsgLabLaunchSecs;
1193 LabelScore.Caption := MsgLabLaunchScore;
1194 {$IF DEFINED(DARWIN)}
1195 LabelPath.Caption := MsgLabLaunchPathMac;
1196 ExeEdit.DialogTitle := MsgCtrlLaunchOpen;
1197 ExeEdit.Filter := MsgFileFilterExeMac;
1198 {$ELSEIF DEFINED(WINDOWS)}
1199 LabelPath.Caption := MsgLabLaunchPathWin;
1200 ExeEdit.DialogTitle := MsgCtrlLaunchOpen;
1201 ExeEdit.Filter := MsgFileFilterExeWin;
1202 {$ELSE}
1203 LabelPath.Caption := MsgLabLaunchPathUnix;
1204 ExeEdit.DialogTitle := MsgCtrlLaunchOpen;
1205 ExeEdit.Filter := MsgFileFilterExeUnix;
1206 {$ENDIF}
1207 LabelArgs.Caption := MsgLabLaunchArgs;
1208 end;
1210 // Форма "Упаковать карту":
1211 with PackMapForm do
1212 begin
1213 Caption := MsgCapPack;
1214 bPack.Caption := MsgBtnPack;
1215 LabelSaveTo.Caption := MsgLabPackSaveTo;
1216 LabelMapName.Caption := MsgLabPackMapName;
1217 // Что упаковывать:
1218 cbTextrures.Caption := MsgCtrlPackTextures;
1219 LabelTextures.Caption := MsgLabPackTextures;
1220 cbSky.Caption := MsgCtrlPackSky;
1221 LabelSky.Caption := MsgLabPackSky;
1222 cbMusic.Caption := MsgCtrlPackMusic;
1223 LabelMusic.Caption := MsgLabPackMusic;
1224 cbAdd.Caption := MsgCtrlPackAdd;
1225 cbNonStandart.Caption := MsgCtrlPackNonStd;
1226 end;
1228 // Форма "Сохранить карту":
1229 with SaveMapForm do
1230 begin
1231 Caption := MsgCapSave;
1232 bOK.Caption := MsgBtnOk;
1233 bCancel.Caption := MsgBtnCancel;
1234 end;
1236 // Форма "Сохранить мини-карту":
1237 with SaveMiniMapForm do
1238 begin
1239 Caption := MsgCapMini;
1240 LabelScale.Caption := MsgLabMiniScale;
1241 bSave.Caption := MsgBtnSave;
1242 bClose.Caption := MsgBtnClose;
1243 end;
1245 // Форма "Выбор карты":
1246 with SelectMapForm do
1247 begin
1248 Caption := MsgCapSelect;
1249 bOK.Caption := MsgBtnOk;
1250 bCancel.Caption := MsgBtnCancel;
1251 end;
1253 // Заголовок приложения:
1254 Application.Title := MsgEditorTitle;
1255 end;
1257 type
1258 TResArg = record
1259 ini: TIniFile;
1260 ignored: TStringList;
1261 end;
1262 PResArg = ^TResArg;
1264 function gResourceItarator (name, value: AnsiString; hash: LongInt; arg: Pointer): AnsiString;
1265 var res: PResArg; orig: AnsiString;
1266 begin
1267 res := PResArg(arg);
1268 orig := res.ini.ReadString('resourcestring', name + '$', '');
1269 if (orig = '') or (orig = value) then
1270 begin
1271 if res.ini.ValueExists('resourcestring', name) then
1272 begin
1273 result := res.ini.ReadString('resourcestring', name, '');
1274 end
1275 else
1276 begin
1277 result := value;
1278 if res.ignored.IndexOf(Copy(name, 1, Pos('.', name) - 1)) < 0 then
1279 e_WriteLog(' Seems that key ' + name + ' not translated', MSG_NOTIFY);
1280 end;
1281 end
1282 else
1283 begin
1284 e_WriteLog(' Original resource string for ' + name + ' do not match, translation are outdated?', MSG_WARNING);
1285 e_WriteLog(' [' + value + '] -> [' + orig + ']', MSG_WARNING);
1286 result := value;
1287 end;
1288 end;
1290 procedure gSetLanguageFormStream (const lang: AnsiString; stream: TStream; out ok: Boolean);
1291 var res: TResArg;
1292 begin
1293 ok := False;
1294 try
1295 res.ini := TIniFile.Create(stream, [ifoStripComments, ifoStripQuotes, ifoEscapeLineFeeds]);
1296 except
1297 res.ini := nil;
1298 end;
1299 if res.ini <> nil then
1300 begin
1301 try
1302 ok := res.ini.SectionExists('resourcestring');
1303 if ok then
1304 begin
1305 res.ignored := TStringList.Create;
1306 res.ignored.CaseSensitive := False;
1307 res.ini.ReadSection('ignore', res.ignored);
1308 res.ignored.Sort;
1309 SetResourceStrings(gResourceItarator, @res);
1310 res.ignored.Free();
1311 end;
1312 finally
1313 res.ini.Free();
1314 end;
1315 end;
1316 if not ok then e_WriteLog('Translation file for ' + lang + ' are invalid ', MSG_FATALERROR);
1317 end;
1319 procedure gSetLanguageFromFile (const lang: AnsiString; out ok: Boolean);
1320 const langfilename = 'editor';
1321 var stream: TFileStream; name: AnsiString;
1322 begin
1323 name := LangDir + DirectorySeparator + langfilename + '.' + lang + '.lng';
1324 try
1325 stream := TFileStream.Create(name, fmOpenRead);
1326 try
1327 gSetLanguageFormStream(lang, stream, ok);
1328 finally
1329 stream.Free();
1330 end;
1331 except on E: EFOpenError do
1332 ok := False;
1333 end;
1334 end;
1336 procedure gSetLanguage (const lang: AnsiString; out ok: Boolean);
1337 begin
1338 gSetLanguageFromFile(lang, ok);
1339 end;
1341 function g_Language_GetList (): TStringList;
1342 const langfilename = 'editor';
1343 var list: TStringList; info: TSearchRec;
1344 begin
1345 list := TStringList.Create;
1346 list.Duplicates := dupIgnore;
1347 list.Add(InSourceLanguage);
1348 if FindFirst(LangDir + DirectorySeparator + langfilename + '.*.lng', faReadOnly, info) = 0 then
1349 begin
1350 repeat
1351 list.Add(Copy(ExtractFileNameWithoutExt(info.Name), Length(langfilename) + 2));
1352 until FindNext(info) <> 0;
1353 FindClose(info);
1354 end;
1355 list.Sort;
1356 result := list;
1357 end;
1359 procedure g_Language_Set(lang: String);
1360 var syslang, fallbacklang: String; ok: Boolean;
1361 begin
1362 ResetResourceTables;
1364 if lang = '' then
1365 begin
1366 GetLanguageIDs(syslang, fallbacklang); // TODO: remove dependency on gettext
1367 e_WriteLog('g_Language_Set: try strings "' + syslang + '" (system)', MSG_NOTIFY);
1368 gSetLanguage(syslang, ok);
1369 if not ok then
1370 begin
1371 e_WriteLog('g_Language_Set: try strings "' + fallbacklang + '" (fallback)', MSG_NOTIFY);
1372 gSetLanguage(syslang, ok);
1373 end;
1374 end
1375 else
1376 begin
1377 e_WriteLog('g_Language_Set: try strings "' + lang + '" (user specified)', MSG_NOTIFY);
1378 gSetLanguage(lang, ok);
1379 end;
1380 if not ok then e_WriteLog('g_Language_Set: use default strings "' + InSourceLanguage + '" (in-source)', MSG_NOTIFY);
1382 SetupArrays();
1383 SetupCaptions();
1384 RemoveSelectFromObjects();
1385 end;
1387 End.