feat(1.6): 升级武装穿梭机并添加弹道拦截功能

- 为武装穿梭机添加弹道拦截器组件,提升防御能力
- 更换武装穿梭机的炮塔为 WULA_WM_Panzer_Turret
- 优化口袋空间生成逻辑,调整地形生成步骤
- 更新武装穿梭机相关定义,移除冗余的武器定义
- 修改穿梭机的显示标签,使其更符合实际功能
This commit is contained in:
2025-08-25 18:58:29 +08:00
parent 0f19e295e4
commit 454dfc7dee
7 changed files with 2260 additions and 101 deletions

View File

@@ -16,15 +16,16 @@
<li>ElevationFertility</li>
<li>Underground_RocksFromGrid</li>
<li>Terrain</li>
<li>WULA_PocketSpace_Small</li>
<li>Fog</li>
<li>WULA_PocketSpace_Small_GenStep</li>
</genSteps>
</MapGeneratorDef>
<!-- 13x13口袋空间生成步骤 -->
<GenStepDef>
<defName>WULA_PocketSpace_Small</defName>
<defName>WULA_PocketSpace_Small_GenStep</defName>
<order>990</order> <!-- 调整为更高的值,确保在所有基础地形生成之后执行 -->
<genStep Class="WulaFallenEmpire.GenStep_WulaPocketSpaceSmall" />
<genStep Class="WulaFallenEmpire.GenStep_WulaPocketSpaceSmall">
<prefabDefName>WULA_Shuttle_Prefab</prefabDefName> <!-- 指定要生成的预制件的defName -->
</genStep>
</GenStepDef>
</Defs>

View File

@@ -0,0 +1,148 @@
<Defs>
<PrefabDef>
<defName>WULA_Shuttle_Prefab</defName> <!-- rename -->
<size>(13,13)</size>
<things>
<Table1x2c>
<position>(10, 0, 2)</position>
<relativeRotation>Clockwise</relativeRotation>
<stuff>Steel</stuff>
<quality>Normal</quality>
</Table1x2c>
<Armchair>
<position>(6, 0, 2)</position>
<relativeRotation>Opposite</relativeRotation>
<stuff>Cloth</stuff>
<quality>Normal</quality>
</Armchair>
<WULA_Charging_Station_Synth>
<positions>
<li>(1, 0, 1)</li>
<li>(1, 0, 3)</li>
<li>(1, 0, 5)</li>
</positions>
<relativeRotation>Clockwise</relativeRotation>
<quality>Normal</quality>
</WULA_Charging_Station_Synth>
<ChessTable>
<position>(11, 0, 5)</position>
<stuff>Steel</stuff>
<quality>Normal</quality>
</ChessTable>
<WulaDoor>
<rects>
<li>(3,1,3,1)</li>
<li>(5,2,5,2)</li>
<li>(3,3,3,3)</li>
<li>(3,5,3,5)</li>
<li>(9,6,9,6)</li>
<li>(3,7,3,7)</li>
<li>(3,9,3,9)</li>
<li>(3,11,3,11)</li>
</rects>
<relativeRotation>Clockwise</relativeRotation>
</WulaDoor>
<WulaDoor>
<position>(7, 0, 9)</position>
</WulaDoor>
<WULA_Cube_Productor_Energy>
<position>(6, 0, 1)</position>
<relativeRotation>Opposite</relativeRotation>
</WULA_Cube_Productor_Energy>
<Barricade>
<rects>
<li>(5,5,6,5)</li>
<li>(5,6,5,7)</li>
<li>(7,6,7,7)</li>
<li>(6,7,6,7)</li>
</rects>
<stuff>Steel</stuff>
</Barricade>
<Barricade>
<position>(7, 0, 5)</position>
<stuff>Steel</stuff>
<hp>278</hp>
</Barricade>
<DiningChair>
<position>(11, 0, 4)</position>
<stuff>Steel</stuff>
<quality>Normal</quality>
</DiningChair>
<DiningChair>
<position>(11, 0, 6)</position>
<relativeRotation>Opposite</relativeRotation>
<stuff>Steel</stuff>
<quality>Normal</quality>
</DiningChair>
<Bed>
<positions>
<li>(1, 0, 7)</li>
<li>(1, 0, 9)</li>
<li>(1, 0, 11)</li>
</positions>
<relativeRotation>Clockwise</relativeRotation>
<stuff>Steel</stuff>
<quality>Normal</quality>
</Bed>
<WulaWall>
<rects>
<li>(0,0,12,0)</li>
<li>(0,1,0,12)</li>
<li>(5,1,5,1)</li>
<li>(7,1,7,3)</li>
<li>(12,1,12,12)</li>
<li>(1,2,3,2)</li>
<li>(5,3,6,3)</li>
<li>(8,3,8,3)</li>
<li>(1,4,3,4)</li>
<li>(9,4,9,5)</li>
<li>(1,6,3,6)</li>
<li>(9,7,11,7)</li>
<li>(1,8,3,8)</li>
<li>(9,8,9,9)</li>
<li>(5,9,6,9)</li>
<li>(8,9,8,9)</li>
<li>(1,10,3,10)</li>
<li>(5,10,5,12)</li>
<li>(1,12,4,12)</li>
<li>(6,12,11,12)</li>
</rects>
<stuff>Steel</stuff>
</WulaWall>
<FlatscreenTelevision>
<position>(8, 0, 2)</position>
<relativeRotation>Clockwise</relativeRotation>
</FlatscreenTelevision>
<Shelf>
<position>(10, 0, 8)</position>
<stuff>Steel</stuff>
</Shelf>
<Shelf>
<position>(6, 0, 11)</position>
<relativeRotation>Clockwise</relativeRotation>
<stuff>Steel</stuff>
</Shelf>
<Shelf>
<position>(11, 0, 10)</position>
<relativeRotation>Counterclockwise</relativeRotation>
<stuff>Steel</stuff>
</Shelf>
<Shelf>
<position>(9, 0, 11)</position>
<relativeRotation>Opposite</relativeRotation>
<stuff>Steel</stuff>
</Shelf>
<Couch>
<position>(10, 0, 1)</position>
<stuff>Cloth</stuff>
<quality>Normal</quality>
</Couch>
<Couch>
<position>(11, 0, 3)</position>
<relativeRotation>Opposite</relativeRotation>
<stuff>Cloth</stuff>
<quality>Normal</quality>
</Couch>
</things>
</PrefabDef>
</Defs>

View File

@@ -69,7 +69,7 @@
<forcedCostLeavings>
<li MayRequire="Ludeon.RimWorld.Odyssey">ShuttleEngine</li>
</forcedCostLeavings>
<turretGunDef>Gun_ChargeBlasterHeavyTurret</turretGunDef>
<turretGunDef>WULA_WM_Panzer_Turret</turretGunDef>
<turretBurstCooldownTime>5.5</turretBurstCooldownTime>
<turretTopDrawSize>1.75</turretTopDrawSize>
<turretTopOffset>(0, 0.05)</turretTopOffset>
@@ -128,7 +128,16 @@
<li Class="CompProperties_AmbientSound">
<sound>ShuttleIdle_Ambience</sound>
</li>
<li Class="CompProperties_ProjectileInterceptor">
<radius>9</radius>
<interceptGroundProjectiles>true</interceptGroundProjectiles>
<color>(0.5, 0.3, 0.9, 0.5)</color>
<reactivateEffect>BulletShieldGenerator_Reactivate</reactivateEffect>
<activeSound>BulletShield_Ambience</activeSound>
<disarmedByEmpForTicks>1080</disarmedByEmpForTicks>
<chargeIntervalTicks>-1</chargeIntervalTicks>
<chargeDurationTicks>0</chargeDurationTicks>
</li>
</comps>
<modExtensions>
<li Class="WulaFallenEmpire.PocketMapProperties">
@@ -145,59 +154,6 @@
<uiOrder>2601</uiOrder>
</ThingDef>
<!-- 改进的武器定义 -->
<ThingDef ParentName="BaseBullet">
<defName>WULA_Bullet_ArmedShuttleAdvanced</defName>
<label>advanced shuttle cannon shell</label>
<graphicData>
<texPath>Things/Projectile/Bullet_Big</texPath>
<graphicClass>Graphic_Single</graphicClass>
<color>(0.8, 0.9, 1.0)</color>
</graphicData>
<projectile>
<damageDef>Bullet</damageDef>
<damageAmountBase>30</damageAmountBase>
<armorPenetrationBase>0.4</armorPenetrationBase>
<speed>75</speed>
</projectile>
</ThingDef>
<ThingDef ParentName="BaseWeaponTurret">
<defName>Gun_ChargeBlasterAdvancedTurret</defName>
<label>advanced charge blaster</label>
<description>An upgraded pulse-charged rapid-fire blaster with enhanced targeting systems and increased firepower.</description>
<graphicData>
<texPath>Things/Item/Equipment/WeaponRanged/ChargeBlasterLight</texPath>
<graphicClass>Graphic_Single</graphicClass>
<color>(0.8, 0.9, 1.0)</color>
</graphicData>
<statBases>
<AccuracyTouch>0.85</AccuracyTouch>
<AccuracyShort>0.75</AccuracyShort>
<AccuracyMedium>0.65</AccuracyMedium>
<AccuracyLong>0.45</AccuracyLong>
<RangedWeapon_Cooldown>4.5</RangedWeapon_Cooldown>
</statBases>
<verbs>
<li>
<verbClass>Verb_Shoot</verbClass>
<hasStandardCommand>true</hasStandardCommand>
<defaultProjectile>WULA_Bullet_ArmedShuttleAdvanced</defaultProjectile>
<warmupTime>1.0</warmupTime>
<minRange>3.5</minRange>
<range>50.9</range>
<ticksBetweenBurstShots>6</ticksBetweenBurstShots>
<burstShotCount>8</burstShotCount>
<soundCast>Shot_ChargeBlaster</soundCast>
<soundCastTail>GunTail_Heavy</soundCastTail>
<muzzleFlashScale>10</muzzleFlashScale>
<targetParams>
<canTargetLocations>true</canTargetLocations>
</targetParams>
</li>
</verbs>
</ThingDef>
<!-- 到达天降物 -->
<ThingDef ParentName="ShuttleSkyfallerBase">
<defName>ArmedShuttleWithPocketIncoming_WULA</defName>

View File

@@ -68,7 +68,7 @@
<forcedCostLeavings>
<li MayRequire="Ludeon.RimWorld.Odyssey">ShuttleEngine</li>
</forcedCostLeavings>
<turretGunDef>Gun_ChargeBlasterHeavyTurret</turretGunDef>
<turretGunDef>WULA_WM_Panzer_Turret</turretGunDef>
<turretBurstCooldownTime>5.5</turretBurstCooldownTime>
<turretTopDrawSize>1.75</turretTopDrawSize>
<turretTopOffset>(0, 0.05)</turretTopOffset>
@@ -122,6 +122,16 @@
<li Class="CompProperties_AmbientSound">
<sound>ShuttleIdle_Ambience</sound>
</li>
<li Class="CompProperties_ProjectileInterceptor">
<radius>9</radius>
<interceptGroundProjectiles>true</interceptGroundProjectiles>
<color>(0.5, 0.3, 0.9, 0.5)</color>
<reactivateEffect>BulletShieldGenerator_Reactivate</reactivateEffect>
<activeSound>BulletShield_Ambience</activeSound>
<disarmedByEmpForTicks>1080</disarmedByEmpForTicks>
<chargeIntervalTicks>-1</chargeIntervalTicks>
<chargeDurationTicks>0</chargeDurationTicks>
</li>
</comps>
<placeWorkers>
<li>PlaceWorker_NotUnderRoof</li>
@@ -143,35 +153,6 @@
<speed>70</speed>
</projectile>
</ThingDef>
<ThingDef ParentName="BaseWeaponTurret">
<defName>Gun_ChargeBlasterHeavyTurret</defName>
<label>light charge blaster</label>
<description>A pulse-charged rapid-fire blaster for area fire.</description>
<graphicData>
<texPath>Things/Item/Equipment/WeaponRanged/ChargeBlasterLight</texPath>
<graphicClass>Graphic_Single</graphicClass>
</graphicData>
<statBases>
<AccuracyLong>0.08</AccuracyLong>
<RangedWeapon_Cooldown>5.5</RangedWeapon_Cooldown>
</statBases>
<verbs>
<li>
<verbClass>Verb_Shoot</verbClass>
<hasStandardCommand>true</hasStandardCommand>
<defaultProjectile>WULA_Bullet_ArmedShuttle</defaultProjectile>
<warmupTime>1.25</warmupTime>
<minRange>3.9</minRange>
<range>45.9</range>
<ticksBetweenBurstShots>7</ticksBetweenBurstShots>
<burstShotCount>9</burstShotCount>
<soundCast>Shot_ChargeBlaster</soundCast>
<soundCastTail>GunTail_Heavy</soundCastTail>
<muzzleFlashScale>9</muzzleFlashScale>
</li>
</verbs>
</ThingDef>
<ThingDef ParentName="ShuttleSkyfallerBase">
<defName>ArmedShuttleIncoming_WULA</defName>
@@ -214,7 +195,7 @@
<ThingDef ParentName="ShuttleSkyfallerBase">
<defName>ArmedShuttleLeaving_WULA</defName>
<label>穿梭机出口</label>
<label>武装穿梭机 (离开中)</label>
<thingClass>PassengerShuttleLeaving</thingClass>
<rotatable>true</rotatable>
<graphicData>
@@ -257,7 +238,7 @@
<TransportShipDef>
<defName>Ship_ArmedShuttle</defName>
<label>armed shuttle</label>
<label>武装穿梭机</label>
<shipThing>WULA_ArmedShuttle</shipThing>
<arrivingSkyfaller>ArmedShuttleIncoming_WULA</arrivingSkyfaller>
<leavingSkyfaller>ArmedShuttleLeaving_WULA</leavingSkyfaller>

File diff suppressed because it is too large Load Diff

View File

@@ -14,6 +14,9 @@ namespace WulaFallenEmpire
{
public override int SeedPart => 928735; // 不同于AncientStockpile的种子
// 允许通过XML配置指定要生成的预制件Def名称
public string prefabDefName;
public override void Generate(Map map, GenStepParams parms)
{
try
@@ -32,17 +35,19 @@ namespace WulaFallenEmpire
Log.Message("[WULA] WULA pocket space generation completed");
// 添加预制件生成
// 注意这里需要根据实际的PrefabDef名称进行加载
// 暂时使用一个示例PrefabDef名称实际使用时应替换
PrefabDef customPrefabDef = DefDatabase<PrefabDef>.GetNamed("YourCustomPrefabDefName", false);
if (customPrefabDef != null)
// 如果指定了预制件Def名称则加载并生成
if (!string.IsNullOrEmpty(prefabDefName))
{
GeneratePrefab(map, customPrefabDef);
Log.Message($"[WULA] Generated custom prefab: {customPrefabDef.defName}");
}
else
{
Log.Warning("[WULA] Custom prefab 'YourCustomPrefabDefName' not found. Skipping prefab generation.");
PrefabDef customPrefabDef = DefDatabase<PrefabDef>.GetNamed(prefabDefName, false);
if (customPrefabDef != null)
{
GeneratePrefab(map, customPrefabDef);
Log.Message($"[WULA] Generated custom prefab: {customPrefabDef.defName}");
}
else
{
Log.Warning($"[WULA] Custom prefab '{prefabDefName}' not found. Skipping prefab generation.");
}
}
}
catch (Exception ex)