예제 #1
0
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
예제 #2
0
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
예제 #3
0
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
예제 #4
0
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
예제 #5
0
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
예제 #6
0
    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
예제 #7
0
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
예제 #8
0
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)