Segfault errors usually mean that you're either missing something that should've been defined or have a typo that means you're referencing something that isn't defined. From the stack trace, it shows we error looking for the minStats of a soldier type ruleset - have you defined your STR_REPTOID soldier type in a soldiers ruleset? You can't transform a soldier from one type to another that doesn't exist. Try starting by making a copy of STR_SOLDIER and renaming it STR_REPTOID and seeing if that fixes this specific crash.
Your transformations ruleset looks good, but you should comment out the "requiredItems:" line if you're going to comment out everything it contains. Leaving an empty key like that will make a YAML error. You can also write it as "requiredItems: []" instead.
If you just want to hire alien soldiers, you just need the entry in the soldiers ruleset and either give them a hiring cost or use a manufacturing project to turn captured live aliens into a soldier of that type. Both the Piratez and 40k mods have examples of multiple soldier types and manufacturing them if you want to see some ways that this is done.
Managed to do that, tinkered a bit, sadly, got another error. I also took a look that these mods you've mentioned. First things first, the error I encountered:
[19-08-2019_21-53-14] [INFO] Scanning user mods in 'D:/Program Files (x86)/SteamApps/common/XCom UFO Defense/OpenXcom - Copy - Copy/user/'...
[19-08-2019_21-53-50] [FATAL] A fatal error has occurred: Sprite inventory_REPTOID.SPK not found
[19-08-2019_21-53-50] [FATAL] 0x585c30 OpenXcom::CrossPlatform::stackTrace(void*)
[19-08-2019_21-53-50] [FATAL] 0x586fb0 OpenXcom::CrossPlatform::crashDump(void*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
[19-08-2019_21-53-50] [FATAL] 0x41c780 exceptionLogger()
[19-08-2019_21-53-50] [FATAL] 0xaff950 MPEGaction::MPEGaction()
[19-08-2019_21-53-50] [FATAL] 0xcb9060 void std::iter_swap<__gnu_cxx::__normal_iterator<OpenXcom::ScriptProcData*, std::vector<OpenXcom::ScriptProcData, std::allocator<OpenXcom::ScriptProcData> > >, __gnu_cxx::__normal_iterator<OpenXcom::ScriptProcData*, std::vector<OpenXcom::ScriptProcData, std::allocator<OpenXcom::ScriptProcData> > > >(__gnu_cxx::__normal_iterator<OpenXcom::ScriptProcData*, std::vector<OpenXcom::ScriptProcData, std::allocator<OpenXcom::ScriptProcData> > >, __gnu_cxx::__normal_iterator<OpenXcom::ScriptProcData*, std::vector<OpenXcom::ScriptProcData, std::allocator<OpenXcom::ScriptProcData> > >)
[19-08-2019_21-53-50] [FATAL] 0xcbdf60 OpenXcom::ScriptGlobal::addTagType<OpenXcom::ScriptTag<OpenXcom::RuleItem, unsigned char> >()::{lambda(unsigned long long)#1}::_FUN(unsigned long long)
[19-08-2019_21-53-50] [FATAL] 0xba34f0 OpenXcom::Surface* OpenXcom::Mod::getRule<OpenXcom::Surface>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, OpenXcom::Surface*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, OpenXcom::Surface*> > > const&, bool) const
[19-08-2019_21-53-50] [FATAL] 0x7530a0 OpenXcom::Mod::getSurface(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)
[19-08-2019_21-53-50] [FATAL] 0x532180 OpenXcom::InventoryState::init()
[19-08-2019_21-53-50] [FATAL] 0x5a18a0 OpenXcom::InteractiveSurface::handle(OpenXcom::Action*, OpenXcom::State*)
[19-08-2019_21-53-50] [FATAL] 0x657c90 OpenXcom::State::handle(OpenXcom::Action*)
[19-08-2019_21-53-50] [FATAL] 0x533620 OpenXcom::InventoryState::handle(OpenXcom::Action*)
[19-08-2019_21-53-50] [FATAL] 0x59ee70 OpenXcom::Game::run()
[19-08-2019_21-53-50] [FATAL] 0x41c8c0 SDL_main
[19-08-2019_21-53-50] [FATAL] 0x91adc0 console_main
[19-08-2019_21-53-50] [FATAL] 0x91aee0 WinMain
[19-08-2019_21-53-50] [FATAL] ??
[19-08-2019_21-53-50] [FATAL] ??
[19-08-2019_21-53-50] [FATAL] 0x7ff947e47bc0 BaseThreadInitThunk
[19-08-2019_21-53-50] [FATAL] 0x7ff9498ece50 RtlUserThreadStart
[19-08-2019_21-53-55] [FATAL] OpenXcom has crashed: Sprite inventory_REPTOID.SPK not found
How do I assign that missing inventory sprite? I did look for it. I can find it, but as mentioned, no idea how to assign it...
For the sake of easiness and hope I will not end up being sued, I used the Reptoid from "FinalModPack"
Thank you for helping me =)
armors.rul
- type: REPTOID_ARMOR0
spriteSheet: REPTOID.PCK
spriteInv: inventory_REPTOID
corpseBattle:
- STR_REPTOID_CORPSE
frontArmor: 15
sideArmor: 15
rearArmor: 12
underArmor: 10
drawingRoutine: 0
movementType: 0
damageModifier:
- 1.0
- 1.0
- 0.5
- 0.9
- 0.8
- 0.8
- 1.0
- 0.8
- 1.4
- 0.0
loftempsSet: [ 3 ]
- type: REPTOID_ARMOR1
spriteSheet: REPTOID.PCK
spriteInv: inventory_REPTOID
corpseBattle:
- STR_REPTOID_CORPSE
frontArmor: 20
sideArmor: 20
rearArmor: 15
underArmor: 14
drawingRoutine: 0
movementType: 0
damageModifier:
- 1.0
- 1.0
- 0.5
- 0.9
- 0.8
- 0.8
- 1.0
- 0.8
- 1.4
- 0.0
loftempsSet: [ 3 ]
- type: REPTOID_ARMOR2
spriteSheet: REPTOID.PCK
spriteInv: inventory_REPTOID
corpseBattle:
- STR_REPTOID_CORPSE
frontArmor: 24
sideArmor: 24
rearArmor: 18
underArmor: 16
drawingRoutine: 0
movementType: 0
damageModifier:
- 1.0
- 1.0
- 0.5
- 0.9
- 0.8
- 0.8
- 1.0
- 0.8
- 1.4
- 0.0
loftempsSet: [ 3 ]
extraSprites.rul
- type: inventory_REPTOID
singleImage: true
files:
0: Resources/FinalModPack/Races_Compilation/ReptoidRace/inventory_REPTOID.png
soldiers.rul
soldiers:
- type: STR_REPTOID_COMMANDER
costBuy: 40000
costSalary: 0
minStats:
tu: 50
stamina: 40
health: 25
bravery: 10
reactions: 30
firing: 40
throwing: 50
strength: 20
psiStrength: 0
psiSkill: 0
melee: 20
maxStats:
tu: 100
stamina: 150
health: 80
bravery: 100
reactions: 100
firing: 110
throwing: 110
strength: 80
psiStrength: 100
psiSkill: 110
melee: 110
statCaps:
tu: 100
stamina: 150
health: 80
bravery: 100
reactions: 100
firing: 110
throwing: 110
strength: 80
psiStrength: 100
psiSkill: 110
melee: 110
armor: STR_NONE_UC
standHeight: 22
kneelHeight: 14
femaleFrequency: 100
soldierNames:
- delete
- SoldierName/
Folder path: D:\Program Files (x86)\SteamApps\common\XCom UFO Defense\OpenXcom - Copy - Copy\standard\Final Mod Pack\Resources\FinalModPack\Races_Compilation\ReptoidRace -> inventory_REPTOID.png (I made a copy of the folder everytime I did something with the mod)
soldierTransformation.rul
soldierTransformation:
- name: STR_Create_Alien
listOrder: 1
producedSoldierType: STR_REPTOID
producedSoldierArmor: REPTOID_ARMOR0
keepSoldierArmor: false
createsClone: false
needsCorpseRecovered: false
allowsDeadSoldiers: true
allowsLiveSoldiers: true
allowsWoundedSoldiers: true # adding these guys too, if we want to sack them
allowedSoldierTypes:
- STR_SOLDIER
forbiddenPreviousTransformations:
- STR_Create_Alien
requiredMinStats: # The minimum stats a soldier must have in order to be eligible for this project, defaults to all 0 so any soldier is eligible
tu: 0
stamina: 0
health: 0
bravery: 0
reactions: 0
firing: 0
throwing: 0
strength: 0
psiStrength: 0
psiSkill: 0
melee: 0
requiredItems: # A list of items that must be consumed from the base's stores in which you start this project, the default empty list means no items are used
#
cost: 50000 # The cost of the project in dollars
transferTime: 0 # Soldiers can be put in a transfer back to the base where they started if this parameter is greater than the default of 0 hours. New clones or resurrected soldiers are automatically given a transfer to the base with a default of 24 hours.
recoveryTime: 0 # The amount of wound recovery time a soldier is given after this project completes and the transfer, if any, is completed. The default value is 0 days.
flatOverallStatChange: # A direct change to the soldier's overall stats when undergoing this project, can be positive or negative - tu: 5 means the soldier will gain 5 max time units, while tu: -5 means the soldier will lose 5 max time units. The default of 0 means no change.
tu: 0
stamina: 0
health: 0
bravery: 0
reactions: 0
firing: 0
throwing: 0
strength: 0
psiStrength: 0
psiSkill: 0
melee: 0
percentOverallStatChange: # A percent change to the soldier's overall stats when undergoing this project, can be positive or negative - tu: 5 means the soldier will gain an extra 5% of their max time units, while tu: -5 means the soldier will lose 5% of their max time units. The default of 0 means no change.
tu: 0
stamina: 0
health: 0
bravery: 0
reactions: 0
firing: 0
throwing: 0
strength: 0
psiStrength: 0
psiSkill: 0
melee: 0
percentGainedStatChange: # A percent change to the soldier's stats, but instead of taking a portion of the overall stats, this only applies to the stats they've trained up from their initial values, can be positive or negative - firing: -100 means the soldier will lose all of the firing accuracy they trained since joining, while firing: 10 means they gain 10% of the amount they trained over their initial values. The default of 0 means no change.
tu: 0
stamina: 0
health: 0
bravery: 0
reactions: 0
firing: 0
throwing: 0
strength: 0
psiStrength: 0
psiSkill: 0
melee: 0
useRandomStats: false
lowerBoundAtMinStats: true
upperBoundAtMaxStats: false
upperBoundAtStatCaps: true
extraStrings:
- type: en-US
strings:
STR_Create_Alien: "Create Alien"
Edit: Added a few codes...
Edit 2: Adding folder path to "Reptoid"
Edit 3: Adding updated soldierTransformation.rul