forked from OpenXcom/OpenXcom
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Extended.txt
957 lines (915 loc) · 41.8 KB
/
Extended.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
[b]Extended version of OpenXcom[/b]
[b]Mod version 4.0a[/b]
OpenXcom date: Nightly [dateOrigin/][br/]
OpenXcom commit: [commitOrigin/][br/]
Extended date: [date/][br/]
Extended commit: [commit/][br/]
[br/][br/]
[i]Ubuntu required libs[/i]
sudo apt-get install libsdl1.2debian libsdl-mixer1.2 libsdl-gfx1.2-4 libsdl-image1.2 libyaml-cpp0.5[br/]
[br/][br/]
[i]Behavior change[/i]
Hyper-Wave Decoder can have less than 100% chance to detect aliens.[br/]
Explosions don't remove unconscious unit if they can't kill them first.[br/]
Craft weapon equip screen is a bit rearranged.[br/]
Fixed "weapons" like the Medikit are now equipped by unit.[br/]
Psi-Amp use 3d range, not 2d.[br/]
Psi-Amp can use weapon power.[br/]
Fixed ammo are added after weapons in armor and unit (armor items are before unit items).[br/]
Corpses, items and Chryssalids are not spawned when unit is killed by weapons with overkill.[br/]
Stunned units can be hited by bullets and fire.[br/]
Big groups of aliens (20+) get less morale losses from casualties.[br/]
Terror units can now spawn with any built-in weapon, not only one defined by name.[br/]
While loading and unloading weapons you must pay the cost of moving the item to hand.[br/]
You can unprime granade for half of prime TUs cost.[br/]
Support for Ufo2000 armor damage type.[br/]
Psi-Amp can now obey maximum weapon range.[br/]
Psi-Amp can now deal direct damage using special attack type in popup menu.[br/]
Throwing now requires a healthy arm to do it (if the item is two-handed, then it requires both).[br/]
You can hit aliens in the head using any item you like, not only firearms stock.[br/]
Items can now be non-throwable.[br/]
Rewriten handling of alien psi attacks to handle new features of Psi-Amp.[br/]
Building, manufactures and research can now have special requirements for buildings available in base.[br/]
Throwing and hitting using two-handed weapons have the same penalty as with shooting.[br/]
[br/]
1.6:[br/]
You can train your solders basic skills.[br/]
Aliens weapon types/weapons can have different turn restriction.[br/]
You can rename weapon slot names in geoscape craft info.[br/]
[br/]
1.7:[br/]
Rewritten item use cost. Now is possible to spend HP, Morale or grain stun damage from using items.[br/]
You can't use old `energy*` properties in item, they are removed and replaced by new one in `cost*`.[br/]
Item have now range threshold unit they start calculating range power reduction.[br/]
Damage type can now change default power change per tile in explosion.[br/]
[br/]
1.8:[br/]
Option for custom weapon deploy for alien missions and ufos.[br/]
[br/]
1.9:[br/]
Options for customizing retaliation mission after shooting dow ufo.[br/]
Options for adding custom dodge chance or unit psi defence.[br/]
[br/]
2.0:[br/]
Breaking change: Psi-Amp use now weapon dropoff and aimRange for attack chance.[br/]
Breaking change: Drop support for Regeneration stat in armor. Use new regen stats now.[br/]
Inventory screens can now have up to 128 backgrounds.[br/]
Unit sprites recolors can now support up to 128 values.[br/]
Option for custom change of TU, HP, Energy, Morale or Stun after next turn based on unit stats.[br/]
New stat bonus based on stun level of unit.[br/]
Option for changing fuse type in granades and flare.[br/]
Option for pre-priming granades on map spawn.[br/]
Option for dodge chance based on direction of attack.[br/]
Oprion for bonus morale recovery when using medkit.[br/]
Option for self heal using medikit.[br/]
[br/]
2.1:[br/]
Craft can now have up to 4 different wepon type per slot.[br/]
Oprion for overriding shape of alien base.[br/]
Option for setting chance of special effect of item.[br/]
Moving can trigger all close proxy not only one.[br/]
Corpse explosion now can have bonus based on unit stats.[br/]
Grenades now can explode at once without destroying each others.[br/]
[br/]
2.2:[br/]
Option for custom sound and animation for miss attack and psi weapons.[br/]
[br/]
2.3:[br/]
Option for defining percent of all action cost stats. Old use of `flatPrime` and `flatThrow` is deprecated.[br/]
Facilities can now require items to build.[br/]
Medikit can now be used without UI and can use `hitSound`.[br/]
[br/]
2.4:[br/]
Option for defining bonus and damage type for melee in range weapons.[br/]
Option for big explosion sound for each items.[br/]
Option for showing fixed weapons on unit.[br/]
[br/]
2.5:[br/]
Update to nightly and bug fix.[br/]
[br/]
2.9:[br/]
Scripting support in unit graphic (more info in game log with debug on).[br/]
`bigSpriteAlt` and `floorSpriteAlt` is now obsolete, will be replaced by scripts in next version.[br/]
New property `refNode` used to shared values between items/solders/armors etc.[br/]
Option for setting numbers of melee hits done by AI.[br/]
Control space usage of soldiers with 2x2 armors in crafts.[br/]
[br/]
3.0:[br/]
Backported game machanic changes from Meridian OXCE+.[br/]
Fix stun damage calculation and add random for random option for final stats change by damage.[br/]
Refactored script handling.[br/]
Script support in reaction atack chance calculations.[br/]
Some light handling improvments.[br/]
New recolr and replace script graphic option for items.[br/]
Option for global events shared by scripts.[br/]
Custom tags that have user defined values.[br/]
[br/]
3.1:[br/]
Base building can now prevent building other buildings.[br/]
New tag type that store other mod id.[br/]
Option for changing defualt unit light radius.[br/]
New functions exposed to script.[br/]
Reaction scripts have now information about runing or strafing of target.[br/]
[br/]
3.2:[br/]
New functions exposed to script.[br/]
[br/]
3.3:[br/]
New light system.[br/]
Option for reserving more space for mod in common surface/sound sets.[br/]
Visibility scripts that determine visibility of targets.[br/]
[br/]
3.5:[br/]
Update to buildin script functions.[br/]
Update to recent nightly OpenXcom.[br/]
[br/]
3.6:[br/]
Config for new lighting system.[br/]
New map script options made by ohartenstein23.[br/]
New scripts for items and units.[br/]
Add option for grenades to explode in hand.[br/]
Changes in handlig items with prime.[br/]
Primed granades are not recoverable if consumable property is set.[br/]
[br/]
3.6a:[br/]
Fix couple of bugs.[br/]
Add some missed scripts.[br/]
Add damage type param to unit damage script.[br/]
[br/]
3.6b:[br/]
Fix critical bug in unit damage function.[br/]
[br/]
3.7:[br/]
New params with shooting weapon and shooter to damage and hit script.[br/]
Merge chagnes from master.[br/]
Random functions in script.[br/]
Vertical map generation support.[br/]
[br/]
3.8:[br/]
Add multi ammo weapons.[br/]
New param with battle action for unit hit and damage script.[br/]
[br/]
3.8a:[br/]
Bug fix.[br/]
[br/]
3.9:[br/]
Bug fix.[br/]
Improvments in displaying multiple ammo items in inventory.[br/]
Script altering experience grain.[br/]
[br/]
3.9a:[br/]
Bug fix.[br/]
[br/]
3.9b:[br/]
Bug fix.[br/]
[br/]
3.9c:[br/]
Bug fix.[br/]
[br/]
3.10:[br/]
Bug fix.[br/]
Update nightly.[br/]
New grenade fuse config.[br/]
[br/]
3.10a:[br/]
Bug fix.[br/]
Update nightly.[br/]
[br/]
3.10b:[br/]
[br/]
4.0:[br/]
Damage script can now alter zombie transformation chance.[br/]
Add access to current difficulty level in scripts.[br/]
Add base function requirmets to buy items, crafts and solders.[br/]
Add access to geoscape soldier in scripts.[br/]
Add script that is run at end of mission.[br/]
Add arcing shoots per attack type (by ohartenstein23).[br/]
Breaking change: Renamed `action` to `battle_action` in reaction scripts.[br/]
Add battle action to `awardExperience` script.[br/]
Breaking change: Renamed access function to statis in armor (added prefix `Stats.`).[br/]
[br/]
4.0a:[br/]
Bug fix.[br/]
[br/]
[examples]
[br/][br/]
[i]New ruleset[/i]
Example of usage:
In `metadata.yml`:
[code]
reservedSpace: 4 #how many BIGOBS.PCK/FLOOROB.PCK/BATTLE.CAT etc. reserve for that mod, this is multiply of default reserved size.
[/code]
In `*.rul`:
[code]
itemCategories: #from OXCE+
startingConditions: #from OXCE+
tooMuchSmokeThreshold: #from OXCE+
customTrainingFactor: 100 #change whow fast solders train.
chanceToStopRetaliation: 0 #chance to stop retaliation.
kneelBonusGlobal: 120 #default kneel weapon accuracy bonus in prercent.
oneHandedPenaltyGlobal: 80 #default two hand weapon accuracy penalty in percent.
missionRatings: #from OXCE+
monthlyRatings: #from OXCE+
difficultyBasedRetaliationDelay: #from OXCE+
[/code]
[code]
items:
- type: STR_ITEM_TYPE #default config ...
nameAsInem: ~ #string id used for displaying postfix ammo text in loaded weapon.
categories: ~ #from OXCE+
kneelBonus: -1 #kneel weapon accuracy bonus in prercent.
oneHandedPenalty: -1 #two hand weapon accuracy penalty in percent.
dropoff: 1 #used by Psi-Amp too. Default for Psi-Amp is 1.
aimRange: 0 #used by Pis-Amp too. Default for Psi-Amp is 0.
tuLoad: 15 #cost of loading weapon.
tuUnload: 8 #cost of unloading weapon.
specialChance: 90 #chance in % of triggering effect like zombify or corpse, granade and proxy explosion.
fuseType: -2 #set how prime granade works.
# -3 -> no priming, flare always work.
# -2 -> can prime, unlimited time. Granade explode instantly after throw. Flare work only after prime.
# -1 -> can prime, can set time. Granade explode after set time. Flare and Proxy disappere after set time.
# 0 -> can prime, set fixed time of 0 turns.
# 1 -> can prime, set fixed time of 1 turns.
# 2 -> can prime, set fixed time of 2 turns.
# ...
# 22 -> can prime, set fixed time of 22 turns.
# 23 -> can prime, set fixed time of 23 turns.
fuseTriggerEvents:
defaultBehavior: true #used to enable default fuse behavior. Defualt `true`.
throwTrigger: false #timer start on throw.
throwExplode: false #item explode (grenade) or is removed on thorw. Defualt `false`. `specialChance` affect this.
proximityTrigger: false #timer start when unit move in it proximity. Defulat `false`.
proximityExplode: false #item explode (grenade, proxi) or is removed when unit move in it porximity. Default `false`. `specialChance` affect this.
accuracyUse: 0 #bonus to accuracy of Psi-Amp special attack.
accuracyMindControl: 0 #bonus to accuracy of Psi-Amp Mind Control attack.
accuracyPanic: 0 #bonus to accuracy of Psi-Amp Panic attack.
accuracyThrow: 0 #accuracy of throw.
costAimed:
#cost of Aimed attack.
time: 2 #time units cost, can be in %. Alias of `tuAimed`.
energy: 0 #energy unit cost.
morale: 10 #morale points cost.
health: 1 #health points cost.
stun: 2 #stun damage applied by atack use.
costAuto:
#cost of Auto attack, if -1 it use `costAimed` value.
#same propertes like `costAimed`.
costSnap:
#cost of Snap attack, if -1 it use `costAimed` value.
#same propertes like `costAimed`.
costMelee:
#cost of Melee attack.
#same propertes like `costAimed`.
costUse:
#cost of item Use and Psi-Amp special attack.
#same propertes like `costAimed`.
costMindControl:
#cost of Psi-Amp Mind Control attack, if -1 it use `costUse` value.
#same propertes like `costAimed`.
costPanic:
#cost of Psi-Amp Panic attack, if -1 it use `costUse` value.
#same propertes like `costAimed`.
costThrow:
#cost of Throw.
#same propertes like `costAimed`.
costPrime:
#cost of Prime granade.
#same propertes like `costAimed`.
costUnprime:
#cost of Unprime granade.
#same propertes like `costAimed`.
flatUse:
#change how cost of all attacks and use work (flat or percent values).
time: true #time units cost is flat or %. Alias of `flatRate`.
energy: true #energy unit cost is flat or %. Default `true`.
morale: true #morale cost is flat or reduced by bravery. Default `true`.
health: true #health points cost is flat or %. Default `true`.
stun: false #stun damage applied by atack is flat or % of max health. Default `true`.
flatAimed:
#changes how `costAimed` behaves (flat or percent values), if -1 it use `flatUse` value.
#same propertes like `flatUse`.
flatAuto:
#changes how `costAuto` behaves (flat or percent values), if -1 it use `flatAimed` value.
#same propertes like `flatUse`.
flatSnap:
#changes how `costSnap` behaves (flat or percent values), if -1 it use `flatAimed` value.
#same propertes like `flatUse`.
flatMelee:
#optional for `costMelee` in range weapons.
#same propertes like `flatUse`.
#use of null (aka `~`) or -1 in property will cause fall back to `flatUse` values.
flatThrow:
#changes how `costThrow` behaves (flat or percent values).
#same propertes like `flatUse`.
flatPrime:
#changes how `costPrime` behaves (flat or percent values).
#same propertes like `flatUse`.
flatUnprime:
#changes how `costUnprime` behaves (flat or percent values).
#same propertes like `flatUse`.
confAimed:
shots: 1 #number of shots. Defulat `1`.
name: STR_AIMED_SHOT #name of attack in action menu.
ammoSlot: 0 #with ammo slot is used by this attack. Defulat `0`.
arcing: false #if `true` it will change attack to arcing shoot.
confAuto:
shots: 3 #number of shots, its alias with `autoShots`.
#...
#same properties as `confAimed`
#...
confSnap:
#...
#same properties as `confAimed`
#...
confMelee:
name: ~ #if no name is set name then it will be set based on damage type (stun or normal melee).
ammoSlot: -1 #override when `battleType` is change, `0` for melee weapons, `-1` for rest.
#...
#same properties as `confAimed`
#...
ammo: #list of avaiable ammo slots in weapon.
0:
tuLoad: 10 #alias to `tuLoad` in parent node.
toUnload: 20 #alias to `tuUnload` in parent node.
compatibleAmmo: [ AMMO_A, AMMO_B ] #alias to `compatibleAmmo` in parent node.
1:
#...
#analoge properties as `0` but without aliasing to parent.
#...
2:
#...
#analoge properties as `0` but without aliasing to parent.
#...
3:
#...
#analoge properties as `0` but without aliasing to parent.
#...
damageBonus: #used by ammo.
#each bonus can be writen as: `s: x`, `s: [x]`, `s: [x, y]` or `s: [x, y, z]`.
#where each value represents coefficient of polynomial `x * s + y * s^2 + z * s^3`.
#
#set `strength` to 1.0 if `strengthApplied: true`.
flatHundred: 0.0 #const bonus equal 100.
flatOne: 0.0 #const bonus equal 1.
strength: 0.1
psi: 0.0 #bonus equal `psiSkill*psiStrength`.
psiSkill: 0.5
psiStrength: 0.0
throwing: 0.0
bravery: 0.0
firing: [0.0, 0.0, 0.0]
health: [0.3]
tu: 0.0
reactions: [1, -0.002]
stamina: 0.0
melee: 0.0
strengthMelee: 0.0 #bonus equal `strength*melee`.
strengthThrowing: 0.0 #bonus equal `strength*throwing`.
firingReactions: 0.0 #bonus equal `firing*reaction`.
healthCurrent: 0.0 #curret value of hp.
tuCurrent: 0.0 #curret value of tu.
energyCurrent: 0.0 #curret value of energy.
moraleCurrent: 0.0 #curret value of morale.
stunCurrent: 0.0 #curret value of stun level.
healthNormalized: 0.0 #curret hp normalized to 1 (max hp give 1.0).
tuNormalized: 0.0 #curret tu normalized to 1 (max tu give 1.0).
energyNormalized: 0.0 #curret energy normalized to 1 (max energy give 1.0).
moraleNormalized: 0.0 #curret morale normalized to 1 (max morale give 1.0).
stunNormalized: 0.0 #curret stun level normalized to 1 (max stun compared to current health give 1.0).
meleeBonus: #used by range weapons melee hit.
#...
#same stats like `damageBonus`.
#...
accuracyMultiplier: #used by wapons and psi-amp.
#set `psi` to 0.02 if weapon is psi-amp
#...
#same stats like `damageBonus`.
#...
meleeMultiplier: #used by melee wapons.
#set `melee` to 1.00 if `skillApplied: true`
#...
#same stats like `damageBonus`.
#...
throwMultiplier: #used by throw.
#set `throwing` to 1.00 for default
#...
#same stats like `damageBonus`.
#...
powerRangeReduction: 0.0 #how much power a bullet loses per tile, used by Psi-Amp damage too.
powerRangeThreshold: 0.0 #how far in tiles bullet need fly to start appling `powerRangeReduction`.
damageAlter: #all values have default values based on `damageType`, used by ammo and corpses.
FixRadius: 60 #aka `BlastRadius`.
RandomType: 1 #how roll damage range.
# 0-> default behavior based on damage type
# 1-> UFO [0% - 200%]
# 2-> TFTD [50% - 150%]
# 3-> Flat [100% - 100%]
# 4-> Rng(5,10)
# 5-> 0
# 6-> Two dices [0% - 100%] + [0% - 100%]
ResistType: 1 #what resistance is used by an affected unit, same values like `damageType`.
FireBlastCalc: false #fire had special way of calculating blast.
IgnoreDirection: true #damage ignores direction of hit, used by smoke and fire.
IgnoreSelfDestruct: true #killing using this damage prevents self-destruct by this unit. Used by stun and explosive damage type.
IgnorePainImmunity: true #some units don't get stun level from damage.
IgnoreNormalMoraleLose: false #some units ignore normal morale loss from damage.
IgnoreOverKill: false #disables overkill damage. Defualt `true`.
ArmorEffectiveness: 0.5 #how effective armor is against this damage. Default `0.0` for smoke and stun, `1.0` rest.
RadiusEffectiveness: 0.3 #how power translates to splash radius. Defualt `0.05` for smoke, stun, explosive, `0.03` for fire, `0.0` rest.
RadiusReduction: 10.0 #how much explosion power is reduce per tile. Default `10.0`.
FireThreshold: 0 #how much damage is required to spawn fire on unit (after armor and ToHealth) or tile. Default `0` for fire, `1000.0` for rest.
SmokeThreshold: 100 #how much damage is required to spawn smoke on tile. Default `0.0` for smoke, `1000.0` for rest.
ToHealth: 1.0 #how much damage is done to health, can be negative. Default `0.0` for stun, smoke, none, `1.0` for rest.
ToArmor: 0.25 #how much damage is done to armor. Default `0.0` for stun, smoke, fire, none, `0.25` for rest.
ToArmorPre: 0.0 #how much damage is done to armor before applying armor protection. Default `0.0`.
ToWound: 0.1 #determine probability of wounds. Defualt `0.0` for stun, smoke, fire, none, `1.0` for rest (`RandomWound` by defulat change it io 1-3 points by defualt!).
ToItem: 0.0 #how much power is applied to items. Default `1.0` for explosive, `0.0` for rest.
ToTile: 0.0 #how much power is applied to the ground. Default `0.0` for stun, smoke, fire, none, `0.5` for rest.
ToStun: 0.25 #how much damage increases stun level. Default `1.0` for stun, smoke, `0.0` for fire, none, `2.5` for rest.
ToEnergy: 0.0 #how much power is applied to energy loss. Default `0.0`.
ToTime: 0.0 #how much power is applied to time units loss. Default `0.0`.
ToMorale: 0.0 #how much power is applied to morale loss. Affeced by target bravery. Default `0.0` (`IgnoreNormalMoraleLose` control normal morale change).
RandomHealth: false #do calucaltion of final health change use random value.
RandomArmor: false #do calculation of final armor change use random value.
RandomArmorPre: false #do calculation of final armor change use random value.
RandomWound: false #for `true` use original radom system giving `1` to `3` wounds, `false` will give linear value based on `ToWound`.
RandomItem: false #do calculation of value that compare with item armor use random value.
RandomTile: false #do calculation of value that compare with tile armor use random value.
RandomStun: false #do calculation of final stun level change use random value.
RandomEnergy: false #do calculation of final energy change use random value.
RandomTime: false #do calculation of final time units change use random value.
RandomMorale: false #do calculation of final moral change use random value.
meleeType: 2 #work like `damageType` but for range weapon melee hit.
meleeAlter: #work like `damageAlter` but for range weapon melee hit.
#set defaut values based on `meleeType`.
#...
#same stats like `damageAlter`.
#...
requiresBuy: #what tech is required for the item to be visible in the Hire/Purchase screen.
- SOME_TECH
- SOME_TECH_MK2
requiresBuyBaseFunc: #list of required base functions needed to buy this.
- SOME_BASE_FUNC_A
psiAttackName: STR_HIT_MELEE #string id of psi-amp attack name in the pop-up menu. Required to enable special attack.
primeActionName: STR_PRIME_GRENADE #string id of grenade prime action name in the pop-up menu. Required to enable prime action. Defulat value `STR_PRIME_GRENADE`;
primeActionMessage: STR_GRENADE_IS_ACTIVATED #string id of grenade prime action message.
unprimeActionName: ~ #string id of grenade unprime action name in the pop-up menu. Required to enable unprime action.
unprimeActionMessage: STR_GRENADE_IS_DEACTIVATED #string id of grenade unprime action message.
psiRequired: false #default based on weapon type, if `true` you need Psi Skill to use the weapon.
moraleRecovery: 10 #amount of recovered morale by medkit. Defailt `0`.
painKillerRecovery: 0 #how much missing health convert to morale. Default `1.0`.
allowSelfHeal: true #can medikit target user.
medikitType: 0 #change how medikit wroks, `0` default with UI, `1` fast heal, `2` fast stimulant, `3` fast pain killer.
isConsumable: false #check if medikit is consumable or primed granade not recoverable.
isExplodingInHands: false #item if primed will explode in hand, default is `fase`.
defaultInventorySlot: ~ #where place fixed weapon.
blockBothHands: false #do item require both hands to use?
fixedWeaponShow: true #if it's true then it will show fixed weapon on unit.
hitMissSound: 0 #override `hitSound` when any psi attack was unsuccessful.
meleeMissSound: 12 #override `meleeSound` when melee attack was unsuccessful.
psiSound: 0 #override `hitSound` when used for MC or Panic attack.
psiMissSound: 0 #override `hitMissSound` when used for MC or Panic attack.
hitMissAnimation: 0 #override `hitAnimation` when special psi attack was unsuccessful. Use `SMOKE.PCK`.
meleeMissAnimation: 0 #override `meleeMissAnimation` when melee, MC or Panic attack was unsuccessful. Use `HIT.PCK`.
psiAnimation: 0 #override `meleeAnimation` when used for MC or Panic attack. Use `HIT.PCK`.
psiMissAnimation: 0 #override `meleeMissAnimation` when MC or Panic attack was unsuccessful. Use `HIT.PCK`.
explosionHitSound: 2 #override default big explosion sound.
tags:
SOME_CUSTOM_TAG: 4 #user defined values used by script.
scripts:
recolorItemSprite: ~ #script that handle recoloring of each pixel in item sprite.
selectItemSprite: ~ #script that handle selecting graphic for item.
reactionWeaponAction: ~ #script that handle reacion to shoot, throw or melee from that weapon.
createItem: ~ #script call on creation of new item in battlespace.
newTurnItem: ~ #script call on each turn for all items in battlescape.
awardExperience: ~ #script that handle experiance grain from hiting unit.
ai:
useDelay: 3 #determine on what turn item can be used by aliens.
meleeHitCount: 25 #number of hits that AI try to do.
[/code]
[code]
armors:
- type: STR_ARMOR_TYPE #default config ...
fearImmune: false #default true for big units.
bleedImmune: false #default true for big units.
painImmune: false #default true for big units.
zombiImmune: false #ignored by big units.
overKill: 0.8 #when damage drops HPs to negative value greater than `overKill * maxHP` then the corpse is destroyed, default value is 0.50.
visibilityAtDay: 20 #default 20 for all.
visibilityAtDark: 9 #default 20 for aliens, 9 for humans.
personalLight: 15 #solder light radius.
specialWeapon: ALIEN_PSI_WEAPON #alien psi or melee attack.
builtInWeapons: #same as for units.
- STR_SOME_WEAPON
psiDefence: #used when attacked by psi-amp.
#default is `psiStrength` set to `1.0` and `psiSkill` set to `0.2`.
#...
#same stats like `damageBonus` in `items`.
#...
meleeDodge: #used when attacked by melee hit.
#default is `0.0`.
#...
#same stats like `damageBonus` in `items`.
#...
meleeDodgeBackPenalty: 0.2 #how much dodge unit lost when hit from behind. Default `0.0`.
recovery:
time: #amount of TU recovered each turn.
#default is `tu` set to `1.0`
#...
#same stats like `damageBonus` in `items`.
#...
energy: #amount of Energy recovered each turn.
#default is `energyRegen` set to `1.0`
#...
#same stats like `damageBonus` in `items`.
#...
energyRegen: 1.0 #special stat returning vanilia energy regen.
morale: #amount of Morale recovered each turn.
#default is `0.0`.
#...
#same stats like `damageBonus` in `items`.
#...
health: #amount of Health recovered each turn.
#default is `0.0`.
#...
#same stats like `damageBonus` in `items`.
#...
stun: #amount of Stun recovered each turn.
#default is `flatOne` set to `1.0`.
#...
#same stats like `damageBonus` in `items`.
#...
tags:
IS_THIS_NINJA: 1 #user defined values used by script.
scripts:
recolorUnitSprite: ~ #recolor script call for each pixel in unit sprite, used for corpse sprite too.
selectUnitSprite: ~ #sprite select script call for each body part.
reactionUnitAction: ~ #script used for handling reaction for unit performing action.
reactionUnitReaction: ~ #script used for handling reaction for unit reacting.
visibilityUnit: ~ #script that handle visibility test of other units, return value need be greater than zero to test be succesful. Second return value is used for distinguish between custom visibility modes, `null` is normal visibility.
hitUnit: ~ #script call when unit get hit by something, called before armor handling.
damageUnit: ~ #script call after armor handling, it handle damage to unit.
createUnit: ~ #script call on creation of new unit in battlescape.
newTurnUnit: ~ #script call on every turn for every unit in battlescape.
[/code]
[code]
soldiers:
- type: STR_SOLDIER_A
requiresBuyBaseFunc: #list of required base functions needed to buy this.
- SOME_BASE_FUNC_A
[/code]
[code]
crafts:
- type: STR_CRAFT_TYPE #default config ...
requiresBuyBaseFunc: #list of required base functions needed to buy this.
- SOME_BASE_FUNC_A
radarRange: 672 #craft radar range. Default `672`.
radarChance: 100 #craft radar dedection chance. Default `100`.
sightRange: 1696 #alien base dedection range. Default `1696`.
weapons: 4 #weapon number increased to 4.
weaponTypes: #definition of allowed weapon types in craft. Max 4 different types per slot.
- 0 #slot 1 accepts weapons with type 0. This is default.
- 0 #slot 2 accepts weapons with type 0.
- [0, 4, 13] #slot 3 accepts weapons with type 0, 4 and 13.
- 1 #slot 4 accepts weapons with type 1.
weaponStrings: #string ID used by geoscape craft status.
- STR_WEAPON_ONE
- STR_WEAPON_TWO
- STR_WEAPON_THREE
- STR_WEAPON_FOURTH
hitBonus: 0 #bonus percentage to all weapons hit chance. Range [0, 100].
avoidBonus: 0 #bonus percentage to craft dodge chance. Range [0, 100].
powerBonus: 0 #bonus percentage to all weapons damage. Range [0, 100].
armor: 0 #amount of blocked damage per hit.
[/code]
[code]
craftWeapons:
- type: STR_CRAFTWEAPON_TYPE #default config ...
weaponType: 1 #default value 0.
stats: #added to craft's stats.
fuelMax: 0 #additive bonus to craft stats.
damageMax: 0 #additive bonus to craft stats.
speedMax: 0 #additive bonus to craft stats.
accel: 0 #additive bonus to craft stats.
radarRange: 0 #additive bonus to craft stats.
radarChance: 0 #additive bonus to craft stats.
sightRange: 0 #additive bonus to craft stats.
hitBonus: 0 #bonus percentage to all weapons hit chance. Range [0, 100].
avoidBonus: 0 #bonus percentage to craft dodge chance. Range [0, 100].
powerBonus: 0 #bonus percentage to all weapons damage. Range [0, 100].
armor: 0 #amount of blocked damage per hit.
[/code]
[code]
ufos:
- type: STR_UFO_TYPE #default config ...
sightRange: 268 #xcom base dedection range. Default `268`.
hitBonus: 0 #bonus percentage to all weapons hit chance. Range [0, 100].
avoidBonus: 0 #bonus percentage to UFO dodge chance. Range [0, 100].
powerBonus: 0 #bonus percentage to all weapons damage. Range [0, 100].
armor: 0 #amount of blocked damage per hit.
craftCustomDeploy: STR_BATTLESHIP_1 #override craft default weapon deploy.
missionCustomDeploy: STR_TERROR_MISSION_2 #override mission defulat weapon deploy.
raceBonus: #bonus stats per race.
STR_SECTOID: #name of race that bonus apply.
damageMax: 0 #additive bonus to craft stats.
speedMax: 0 #additive bonus to craft stats.
accel: 0 #additive bonus to craft stats.
sightRange: 0 #additive bonus to craft stats.
hitBonus: 0 #bonus percentage to all weapon hit chance. Range [0, 100].
avoidBonus: 0 #bonus percentage to craft avoid chance. Range [0, 100].
powerBonus: 0 #bonus percentage to all weapon damage. Range [0, 100].
armor: 0 #amount of blocked damage per hit.
craftCustomDeploy: STR_BATTLESHIP_3 #override craft default weapon deploy.
missionCustomDeploy: STR_TERROR_MISSION_2 #override mission defulat weapon deploy.
[/code]
[code]
alienRaces:
- id: STR_SECTOID
retaliationMission: STR_ALIEN_RETALIATION #default mission spawn after destroing ufo.
retaliationAggression: 0 #chance modiffer to spawn retaliation mission.
baseCustomDeploy: STR_ALIEN_BASE_ASSAULT_2 #override alien base default weapon depoly.
baseCustomMission: STR_MIB_BASE #override alien base construction.
[/code]
[code]
alienDeployments:
- id: STR_SOMETHING
startingCondition: #from OXCE+
[/code]
[code]
itemCategories: #from OXCE+
- type:
replaceBy:
hidden:
listOrder:
[/code]
[code]
startingConditions: #from OXCE+
- type:
armorTransformations:
defaultArmor:
defaultItems:
allowedArmors:
allowedVehicles:
allowedItems:
allowedItemCategories:
allowedCraft:
[/code]
[code]
facilities:
- type: STR_SOME_FACILITY
buildCostItems:
STR_ITEM:
build: 10 #how many items of type `STR_ITEM` are require to build.
refund: 6 #how many items are returned when facility is dismantled.
provideBaseFunc: [ A ] #List of custom IDs that this bulding provide for base.
requiresBaseFunc: [ ] #List of custom IDs that are require to build this building in base.
forbidenBaseFunc: [ B ] #List of custom IDs that are forbiden by this building.
trainingRooms: 0 #Number of solder that can be train in that building, require langue strings.
refundValue: 0 #how much mony is returned when facility is dismantled.
[/code]
[code]
manufacture:
- type: STR_SOME_MANUFACTURE
requiresBaseFunc: [ A, C ] #List of custom IDs that are require to start production in base.
[/code]
[code]
research:
- type: STR_SOME_RESEARCH
requiresBaseFunc: [ W, K ] #List of custom IDs that are required to start this research in the base.
[/code]
[code]
terrains:
- name: CULTA
mapBlocks:
- name: SOMETHING
fuseTimers:
STR_GRANADE: [6, 16] #all items of that type will have set fuseTimer to random value in range [6, 16].
[/code]
[code]
lighting:
enhanced: 7 #flags for lighting system, final value = (`1` if enabled for tiles and fire) + (`2` if enabled for items) + (`4` if enabled for units). Default value `7`.
maxStatic: 20 #max range of fire and tile light radius. Affect overall game performace! Default `16`.
maxDynamic: 30 #max range of unit and item light radius. Affect overall game performace! Defulat `24`.
[/code]
[code]
mapScripts:
- type: CULTA
commands:
- type: addBlock
blocks: [1, 2, 3]
terrain: FOREST #Add map 1, 2, or 3 from terrain FOREST
- type: addLine
direction: vertical
rects:
- [1, 1, 4, 1]
terrain: URBAN #Add a road from terrain URBAN
- type: addUFO
terrain: MOUNT #UFO's LZ block will be from terrain MOUNT
- type: addCraft
terrain: JUNGLE #Player craft's LZ block will be from terrain JUNGLE
- type: fillArea
terrain: DESERT #Fill the rest of the map with map blocks from terrain DESERT
- type: URBAN
commands:
- type: addBlock
size: [2, 2, 4] # When using verticalLevels, definition of height is necessary
verticalLevels: # This block will be a series of maps stacked on top of each other, chosen randomly as with normal addBlock command
- type: ground # "ground" type maps are always placed first
groups: 6 # Pick the first block from group 6
size: [2, 2, 1] # Size in x and y must match the size of the block, vertical size definition is necessary for command to run properly
- type: middle # "middle" types are filler between "ground" and "ceiling," a list of all middle types is created to loop over to fill the vertical distance
groups: 7 # Pick a middle floor for this block from group 7
terrain: SOME_ALTERNATE_URBAN # It's possible to make each section a different terrain
size: [2, 2, 1]
- type: middle # This one is placed after the previous one, the command alternates back and forth between this and the previous to fill the size in z
blocks: [13, 14, 15]
size: [2, 2, 1]
- type: ceiling # Placed on top of all the other blocks
groups: 9
size: [2, 2, 1]
[/code]
[code]
globe:
textures:
- id: 0
baseTerrain: CULTA #If baseDefenseMapFromLocation is equal to one, this terrain can be used in conjunction with addBlockFromTerrain and fillAreaFrom terrain to populate empty squares on base defense maps
[/code]
[code]
baseDefenseMapFromLocation: 1 #If equal to one, the RNG will be seeded by the base's location when generating the map and returned to it's original value after
[/code]
[code]
ai:
useDelayBlaster: 3
useDelayFirearm: 0
useDelayGrenade: 3
useDelayMelee: 0
useDelayPsionic: 0
[/code]
[code]
extended:
tags: #definitions of user defined values used by script.
RuleItem: #used by `items` nodes.
SOME_CUSTOM_TAG: int
#avaiable types:
#`int` - natural number
#`RuleList` - name of other mod that is loaded. Accessed as id number in script. Have value -1 if mod with that name do not exists.
RuleArmor: #used by `armors` nodes.
IS_THIS_NINJA: int
scripts:
reactionUnitAction: #name of script that have enabled global events.
- offset: 1.2 #order in witch each global event is run.
code: | #script that will be called by event.
#some code
return 100;
[/code]
[code]
extraStrings:
- type: en-US
strings:
STR_NOT_ENOUGH_ITEMS: "Lack of {0} {1} items" #required when using `buildCostItems` in `facilities`. `{0}` is name of item, `{1}` is number of item we don't have.
STR_PHYSICAL_TRAINING: "Physical Training" #required when using `trainingRooms` in `facilities`.
STR_TRAINING: "Training" #required when using `trainingRooms` in `facilities`.
STR_REMAINING_TRAINING_FACILITY_CAPACITY: "REMAINING TRAINING CAPACITY> {ALT}{0}" #required when using `trainingRooms` in `facilities`.
STR_NOT_ENOUGH_MORALE: "You lack discipline!" #required when using item morale use cost.
STR_NOT_ENOUGH_HEALTH: "Not enough blood!" #required when using item health use cost.
STR_NOT_ENOUGH_STUN: "Too much pain!" #required when using item stun use cost.
STR_NO_USES_LEFT: "You can't use medi-kit" #required when using `medikitType`.
STR_NOT_ENOUGH_CRAFT_SPACE: "You can't fit it!" #required when you try change armor with 2x2 size and craft don't have space.
[/code]
Examples of script usage:
[code]
#special statements
someScriptCode: |
var int temp; #define variable of type `int` with name `temp`.
var int zero 42; #new variable with begining value of 42.
if OPERATION A B; #`OPERATION` can be: `lt` - less, `le` - less equal, `gt` - greater, `ge` - greater equal, `eq` - equal, `neq` - not equal
#some code 1
else OPERATION A B; #`else` can have same condition as first `if`.
#some code 2
else OPERATION A B; #you can repeat `else` with test multiple times.
#some code 3
else;
#final case, can be skipped.
end;
if or lt A B eq C D;
#you can write multiple operation with `or`.
#result will be true if any of this operation would return true.
end;
if and gt A B neq C D le E F;
#same for `and` but in this case all operation need be true.
end;
return B; #exit script with value of `B`.
[/code]
[code]
extended:
tags:
RuleArmor:
CORPSE_SWITCH_ENABLED: int
CORPSE_SWITCH_RESOURCES_MOD: RuleList
CORPSE_SWITCH_SPRITE_FLOOR_STUN: int
CORPSE_SWITCH_SPRITE_FLOOR_WOUND: int
CORPSE_SWITCH_SPRITE_FLOOR_DEAD: int
CORPSE_SWITCH_SPRITE_BIG_STUN: int
CORPSE_SWITCH_SPRITE_BIG_WOUND: int
CORPSE_SWITCH_SPRITE_BIG_DEAD: int
scripts:
selectItemSprite:
- offset: 1
code: |
#custom corpse graphic based on state of unit.
var int curr_hp;
var int curr_wounds;
var int temp;
var ptr BattleUnit unit;
var ptr RuleArmor armor;
item.getBattleUnit unit;
unit.getRuleArmor armor;
if neq armor null;
unit.getHealth curr_hp;
unit.getFatalwoundsTotal curr_wounds;
armor.getTag temp Tag.CORPSE_SWITCH_ENABLED;
if eq temp 1;
armor.getTag temp Tag.CORPSE_SWITCH_RESOURCES_MOD;
if eq blit_part blit_item_floor;
if le curr_hp 0;
armor.getTag sprite_index Tag.CORPSE_SWITCH_SPRITE_FLOOR_DEAD;
else gt curr_wounds 0;
armor.getTag sprite_index Tag.CORPSE_SWITCH_SPRITE_FLOOR_WOUND;
else;
armor.getTag sprite_index Tag.CORPSE_SWITCH_SPRITE_FLOOR_STUN;
end;
rules.getSpriteOffsetFloorob sprite_index temp;
return sprite_index;
else eq blit_part blit_item_big;
if le curr_hp 0;
armor.getTag sprite_index Tag.CORPSE_SWITCH_SPRITE_BIG_DEAD;
else gt curr_wounds 0;
armor.getTag sprite_index Tag.CORPSE_SWITCH_SPRITE_BIG_WOUND;
else;
armor.getTag sprite_index Tag.CORPSE_SWITCH_SPRITE_BIG_STUN;
end;
rules.getSpriteOffsetBigobs sprite_index temp;
return sprite_index;
end;
end;
end;
return sprite_index;
#enabling this functionality for unit
armors:
- type: STR_NONE_UC
tags:
CORPSE_SWITCH_ENABLED: 1 #1 enable this functionality for this unit, 0 disable
CORPSE_SWITCH_RESOURCES_MOD: current #to what mod sprites belongs to, `current` mean this mod.
CORPSE_SWITCH_SPRITE_FLOOR_STUN: 32
CORPSE_SWITCH_SPRITE_FLOOR_WOUND: 33
CORPSE_SWITCH_SPRITE_FLOOR_DEAD: 34
CORPSE_SWITCH_SPRITE_BIG_STUN: 42
CORPSE_SWITCH_SPRITE_BIG_WOUND: 43
CORPSE_SWITCH_SPRITE_BIG_DEAD: 44
[/code]
[code]
armors:
- type: PARROT_ARMOR
drawingRoutine: 4
scripts:
selectUnitSprite: |
#this script will always run move animation of unit.
var int temp;
var int walking;
unit.isWalking walking;
if eq walking 0;
unit.getId temp;
offsetmod temp 11 0 8; #desync animation of different units
add temp anim_frame;
wavegen_saw temp 8 8 7;
mul sprite_offset 8;
add sprite_offset 8;
add sprite_offset temp;
set sprite_index sprite_offset;
else;
add sprite_index sprite_offset;
end;
return sprite_index;
[/code]
[/examples]
[br/][br/]
[i]Links[/i]
Current working branch:[br/]
https://github.com/Yankes/OpenXcom/tree/OpenXcomExtended[br/]
[br/]
Download available on mod site (require latest nightly):[br/]
https://www.openxcom.com/mod/openxcom-extended[br/]
[br/]
Backup:[br/]
https://www.mediafire.com/folder/w07p0ibc985kd/OXCE[br/]
[br/]
Forum thread:[br/]
https://openxcom.org/forum/index.php?topic=2915.msg31641#msg31641[br/]
[br/]
[br/]
[i]Credits[/i]
Meridian for OXCE+ :)[br/]
stiansel for FOV speedup.[br/]
redv & WarBoy1982 for a couple of commits.[br/]
SolarusScorch for fixing language in readme.[br/]
SupSuper & WarBoy1982 & Daiky for OpenXcom :)[br/]