def test_gather_dragon_boss(scan_and_load: ScanLoadFn): # DragonBoss has two DCSCs, one with a higher priority chr_export = scan_and_load(X_DRAGON_CHR) props = gather_dcsc_properties(chr_export) assert isinstance(props, UEProxyStructure) assert isinstance(props, PrimalDinoStatusComponent) assert props.bCanSuffocate[0] == False
def test_gather_x_dragon(scan_and_load: ScanLoadFn): # X-Dragon inherits the same two DCSCs from DragonBoss chr_export = scan_and_load(X_DRAGON_CHR) props = gather_dcsc_properties(chr_export) assert isinstance(props, UEProxyStructure) assert isinstance(props, PrimalDinoStatusComponent) assert props.bCanSuffocate[0] == False
def test_gather_troodon_dcsc_alt(scan_and_load: ScanLoadFn): chr_export = scan_and_load(TROODON_CHR) props = gather_dcsc_properties(chr_export, alt=True) assert isinstance(props, UEProxyStructure) assert isinstance(props, PrimalDinoStatusComponent) assert props.MaxStatusValues[0] == 200 # only in Troodon DCSC asset assert props.MaxStatusValues[4] == 100 # was 200 in Troodon chr asset, skipped due to alt=True assert props.MaxStatusValues[7] == 140 # in DCSC, overridden in Troodon DCSC
def test_gather_troodon_dcsc(scan_and_load): chr_export = scan_and_load(TROODON_CHR) props = gather_dcsc_properties(chr_export) assert isinstance(props, UEProxyStructure) assert isinstance(props, PrimalDinoStatusComponent) assert props.MaxStatusValues[0] == 200 # only in Troodon DCSC asset assert props.MaxStatusValues[4] == 200 # in Troodon chr asset assert props.MaxStatusValues[7] == 140 # in DCSC, overridden in Troodon DCSC
def test_gather_dodo_dcsc(scan_and_load): dodo = scan_and_load(DODO_CHR) dodo_dcsc = gather_dcsc_properties(dodo) assert isinstance(dodo_dcsc, UEProxyStructure) assert isinstance(dodo_dcsc, PrimalDinoStatusComponent) assert dodo_dcsc.MaxStatusValues[0] == 40 # only in Dodo chr assert dodo_dcsc.MaxStatusValues[3] == 150 # only in DCSC asset assert dodo_dcsc.MaxStatusValues[7] == 50 # in DCSC, then overridden by Dodo
def extract(self, proxy: UEProxyStructure) -> Any: species: PrimalDinoCharacter = cast(PrimalDinoCharacter, proxy) asset: UAsset = proxy.get_source().asset assert asset.assetname and asset.default_class modid: Optional[str] = self.manager.loader.get_mod_id(asset.assetname) overrides = get_overrides_for_species(asset.assetname, modid) if _should_skip_species(species, overrides): return None try: dcsc = gather_dcsc_properties(species.get_source()) except AssetLoadException as ex: logger.warning( f'Gathering properties failed for {asset.assetname}: %s', str(ex)) return None name = str(species.DescriptiveName[0]) variants = get_variants_from_assetname( asset.assetname, overrides) | get_variants_from_species( species, overrides) if variants: if should_skip_from_variants(variants, overrides): return None name = adjust_name_from_variants(name, variants, overrides) out = Species(bp=asset.default_class.fullname) out.name = name out.dinoNameTag = species.DinoNameTag[0] out.customTag = species.CustomTag[0] out.targetingTeamName = species.TargetingTeamNameOverride[0] out.mass = species.CharacterMovement[0].Mass[0] out.dragWeight = species.DragWeight[0] if variants: out.variants = tuple(sorted(variants)) out.flags = gather_flags(species, OUTPUT_FLAGS) out.levelCaps = convert_level_data(species, dcsc) out.cloning = gather_cloning_data(species) out.falling = FallingData( dmgMult=species.FallDamageMultiplier[0], maxSpeed=species.MaxFallSpeed[0], ) movement = gather_movement_data(species, dcsc) out.movementW = movement.movementW out.movementD = movement.movementD out.staminaRates = movement.staminaRates out.attack = gather_attack_data(species) return out
def test_gather_deino(scan_and_load: ScanLoadFn): # Deino has a species-specific DCSC with a lower priority than the one it inherits chr_export = scan_and_load(DEINO_CHR) props = gather_dcsc_properties(chr_export) assert isinstance(props, UEProxyStructure) assert isinstance(props, PrimalDinoStatusComponent) assert props.MaxStatusValues[0] == 200 # from Raptor DCSC because Deino DCSC priority is -1 assert props.MaxStatusValues[1] == 150 # from Raptor DCSC because Deino DCSC priority is -1 assert props.MaxStatusValues[3] == 150 # from default DCSC
def test_gather_dcsc_conflict(scan_and_load: ScanLoadFn): # Species inherits from Quetz but doesn't use that DCSC # Used to verify that DCSCs shouldn't be combined if no override exists for a property chr_export = scan_and_load(PTM_DCSC_CONFLICT_CHR) props = gather_dcsc_properties(chr_export) assert isinstance(props, UEProxyStructure) assert isinstance(props, PrimalDinoStatusComponent) assert props.MaxStatusValues[0] == 100 # from PTM_DCSC and not DCSC_Quetz (1200) assert props.MaxStatusValues[1] == 100 # from PTM_DCSC and not DCSC_Quetz (800) assert props.MaxStatusValues[2] == 100 # from PTM_DCSC and not DCSC_Quetz (1850) assert props.MaxStatusValues[4] == 100 # from PTM_DCSC and not DCSC_Quetz (1200) assert props.TamedBaseHealthMultiplier[0] == 1 # from PTM_DCSC and not DCSC_Quetz (0.85)