diff --git a/1.6/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/1.6/Assemblies/WulaFallenEmpire.dll index 7e73ea64..d2b51762 100644 Binary files a/1.6/1.6/Assemblies/WulaFallenEmpire.dll and b/1.6/1.6/Assemblies/WulaFallenEmpire.dll differ diff --git a/1.6/1.6/Defs/DamageDefs/Damages_Wula.xml b/1.6/1.6/Defs/DamageDefs/Damages_Wula.xml index 4362962e..2b504c3f 100644 --- a/1.6/1.6/Defs/DamageDefs/Damages_Wula.xml +++ b/1.6/1.6/Defs/DamageDefs/Damages_Wula.xml @@ -161,48 +161,6 @@ - - - - WULA_WM_Disturber_Turret_Damage - - WulaFallenEmpire.DamageWorker_ExtraDamage - true - {0} 被等离子干扰而亡。 - true - Electric - 50 - 0 - - - Explosion_Vaporize - Damage_EMP - true - EMPResistance - 2200 - WULA_Mech_EMP_Drop_Shockwave - - -
  • - 穿透伤害 - true - - -
  • - WULA_Armour_Piercing_Projectile_4_Damage - 100 - false - 2 - - -
  • - - -
    -
    - Wula_Psi_Damage @@ -383,7 +341,8 @@ WULA_Disturber_Turret_Bomb - WulaFallenEmpire.DamageWorker_ExtraDamage + + WulaFallenEmpire.DamageWorker_ExplosionWithTerrain 250 2.0 2 @@ -392,7 +351,10 @@ WULA_Disturber_Turret_Bomb_Shockwave -
  • +
  • + LavaShallow +
  • + - - + -->
    diff --git a/1.6/1.6/Defs/Effects/WulaFleckDefs.xml b/1.6/1.6/Defs/Effects/WulaFleckDefs.xml index f34c924f..e7152636 100644 --- a/1.6/1.6/Defs/Effects/WulaFleckDefs.xml +++ b/1.6/1.6/Defs/Effects/WulaFleckDefs.xml @@ -6,18 +6,12 @@ 0.50 1 1.2 - 0.005 + 0.025 Wula/Mote/WULA_GunTail_Plasma MoteGlow - 3.25 - (218,255,200,155) - - - - WULA_GunTail_Plasma_Yellow - - (242,160,69,155) + 4.25 + (179,127,67,155) diff --git a/1.6/1.6/Defs/ResearchProjectDefs/WULA_ResearchProjects_Remake.xml b/1.6/1.6/Defs/ResearchProjectDefs/WULA_ResearchProjects_Remake.xml index 1dd996a5..c7d6b390 100644 --- a/1.6/1.6/Defs/ResearchProjectDefs/WULA_ResearchProjects_Remake.xml +++ b/1.6/1.6/Defs/ResearchProjectDefs/WULA_ResearchProjects_Remake.xml @@ -712,7 +712,7 @@ 10.00 3.80 - 允许通过传送将乌拉帝国的建筑直接传送到空投区,这使得建筑可以立刻部署到目标地点,且无视厚岩顶阻挡。 + 允许通过传送将乌拉帝国的建筑直接传送到空投区,这使得建筑可以立刻部署到目标地点,且无视厚岩顶阻挡。除此之外,也可以建造区域跃迁引擎,以移动整个基地。 2000
  • WULA_Colony_License_LV3_Technology
  • diff --git a/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Misc_Buildings.xml b/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Misc_Buildings.xml index ccf8586f..de8feb07 100644 --- a/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Misc_Buildings.xml +++ b/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Misc_Buildings.xml @@ -1,60 +1,97 @@ - WULA_AreaTeleportBeacon - - 负责协调殖民地与轨道上的乌拉帝国舰队进行材料输送的信标,空投建筑会优先从信标覆盖区域吸纳资源完成空投。 - Building - -
  • BuildingsMisc
  • -
    + + 乌拉帝国的科技结晶之一,可以供整个区域继续传送的跃迁引擎,它会把区域内的地面、建筑、生物和散落材料等完整地移动到其他地图上。 + WulaFallenEmpire.Building_ExtraGraphics + true + Building + 50 + true + PassThroughOnly + 1 + (1,1) + true + None + (0.56, 0.62, 0.9) + Wula/Building/Flag/WULA_Flag_Building_A + false - Wula/Building/WULA_OrbitalTradeBeacon + Wula/Building/Flag/WULA_Flag_Building_Mount Graphic_Single - - (0.3, 0.2, 0.3) - (0,0,-0.1) - + (1,1) - Building - MinifiedThing + + 4 + - 75 - 800 + 50 0.5 + 1000 5 - MapMeshAndRealTime - true - 0.15 - - 40 - 1 - Normal + true + false + North + true + Light + BulletImpact_Metal + true + RealtimeOnly + ConstructMetal + true + WULA_Buildings + +
  • WULA_Building_Teleporter_Technology
  • +
    - BuildingDestroyed_Metal_Small + false + BuildingDestroyed_Metal_Big + true + true + +
  • + 0 + 0 + + +
  • + Wula/Building/Flag/WULA_Flag_Building_A + MoteGlow + (3,3) + 0 + (0,1,2) + 1.5 + 0.2 + 0 +
  • +
  • + Wula/Building/Flag/WULA_Flag_Building_Mount + Transparent + (1,1) + 1 + (0,1,0) + 0 + 0 + 0 +
  • + + +
  • (13, 13) 120 - WULA_Colony_License_LV1_Technology + WULA_Building_Teleporter_Technology +
  • +
  • + 3 + (120,240,252,0)
  • - false - 14 - WULA_Buildings - 2100 - false - -
  • PlaceWorker_ShowTradeBeaconRadius
  • -
    - Misc2 - -
  • WULA_Colony_License_LV1_Technology
  • -
    @@ -1030,6 +1067,4 @@ - -
    \ No newline at end of file diff --git a/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Turret_Buildings.xml b/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Turret_Buildings.xml index fadca402..7c593ea6 100644 --- a/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Turret_Buildings.xml +++ b/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Turret_Buildings.xml @@ -1446,8 +1446,8 @@ Wula_Disturber_Turret_Cleanzone - - 清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑。\n\nHBt-1"磁石"是一种需要通电才能运转的重型防御炮塔,以联装的方式装载了四门威力巨大的离子风暴炮,其射弹携带了强大的EMP效果和杀伤效果,可以在远距离上撕碎一切冲击阵地的敌军。 + + 清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑。\n\nHBt-1"磁石"是一种需要通电才能运转的重型防御炮塔,以联装的方式装载了四门威力巨大的火山风暴炮,其射弹携带了强大的EMP效果和杀伤效果,可以在远距离上撕碎一切冲击阵地的敌军。 Wula/Building/Wula_Disturber_Turret MinifiedThing Normal @@ -1555,8 +1555,8 @@ Wula_Disturber_Turret - - HBt-1"磁石"是一种需要通电才能运转的重型防御炮塔,以联装的方式装载了四门威力巨大的离子风暴炮,其射弹携带了强大的EMP效果和杀伤效果,可以在远距离上撕碎一切冲击阵地的敌军。 + + HBt-1"磁石"是一种需要通电才能运转的重型防御炮塔,以联装的方式装载了四门威力巨大的火山风暴炮,其射弹携带了强大的EMP效果和杀伤效果,可以在远距离上撕碎一切冲击阵地的敌军。 WulaFallenEmpire.Building_TurretGunHasSpeed MapMeshAndRealTime @@ -1663,7 +1663,7 @@ Wula_Disturber_Turret_Weapon - 中型舰炮,毁灭能力超群。 + 乌拉帝国的火山炮之一,拥有气化敌军的能力。 None true Ultra @@ -1682,7 +1682,7 @@
  • - Verb_Shoot + WulaFallenEmpire.Verb_ShootWithOffset false Bullet_WULA_WM_Disturber_Turret 5 @@ -1703,19 +1703,26 @@
  • + +
  • + +
  • (0, -2)
  • + + +
    Bullet_WULA_WM_Disturber_Turret - + WulaFallenEmpire.Projectile_NorthArcTrail Normal True - Wula/Projectile/WULA_Energy_2_Shell + Wula/Projectile/WULA_Energy_Shell Graphic_Single MoteGlow (2.5,3) - (218,255,200,255) + (202,147,67,205) WULA_Disturber_Turret_Bomb @@ -1740,7 +1747,7 @@
  • WULA_GunTail_Plasma 3 - 1 + 9 1~2 0.5~1.0 0.1~0.3 diff --git a/Source/WulaFallenEmpire/Damage/DamageDefExtension_TerrainCover.cs b/Source/WulaFallenEmpire/Damage/DamageDefExtension_TerrainCover.cs new file mode 100644 index 00000000..14a48153 --- /dev/null +++ b/Source/WulaFallenEmpire/Damage/DamageDefExtension_TerrainCover.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using RimWorld; +using Verse; + +namespace WulaFallenEmpire +{ + // 地形覆盖配置的 ModExtension + public class DamageDefExtension_TerrainCover : DefModExtension + { + // 要生成的地形定义 + public TerrainDef terrainToSpawn; + + // 生成概率(0-1) + public float terrainChance = 1f; + + // 检查特定单元格是否允许生成地形 + public bool CanAffectCell(IntVec3 cell, Map map, out string reason) + { + reason = null; + + if (!cell.InBounds(map)) + { + reason = "Cell out of bounds"; + return false; + } + + // 检查地形类型 + TerrainDef currentTerrain = cell.GetTerrain(map); + + // 检查是否可以构建地形 + if (!GenConstruct.CanBuildOnTerrain(terrainToSpawn, cell, map, Rot4.North)) + { + reason = "Cannot build on terrain"; + return false; + } + + return true; + } + } +} diff --git a/Source/WulaFallenEmpire/Damage/DamageWorker_ExplosionWithTerrain.cs b/Source/WulaFallenEmpire/Damage/DamageWorker_ExplosionWithTerrain.cs new file mode 100644 index 00000000..e7867667 --- /dev/null +++ b/Source/WulaFallenEmpire/Damage/DamageWorker_ExplosionWithTerrain.cs @@ -0,0 +1,89 @@ +using System.Collections.Generic; +using System.Linq; +using RimWorld; +using UnityEngine; +using Verse; +using Verse.Sound; + +namespace WulaFallenEmpire +{ + public class DamageWorker_ExplosionWithTerrain : DamageWorker_AddInjury + { + // 获取地形覆盖扩展 + private DamageDefExtension_TerrainCover GetTerrainCoverExtension(DamageDef damageDef) + { + if (damageDef?.modExtensions == null) + return null; + + return damageDef.modExtensions + .OfType() + .FirstOrDefault(); + } + + public override void ExplosionAffectCell(Explosion explosion, IntVec3 c, List damagedThings, List ignoredThings, bool canThrowMotes) + { + base.ExplosionAffectCell(explosion, c, damagedThings, ignoredThings, canThrowMotes); + var terrainCover = GetTerrainCoverExtension(explosion.damType); + // 处理地形覆盖 + ProcessTerrainCover(explosion, c, terrainCover); + } + + // 处理地形覆盖 + private void ProcessTerrainCover(Explosion explosion, IntVec3 cellsToAffect, DamageDefExtension_TerrainCover terrainCover) + { + if (explosion.Map == null) + return; + + Map map = explosion.Map; + + ApplyTerrainCoverToCell(cellsToAffect, map, terrainCover, explosion); + } + + // 对单个单元格应用地形覆盖 + public void ApplyTerrainCoverToCell(IntVec3 cell, Map map, + DamageDefExtension_TerrainCover terrainCover, Explosion explosion = null) + { + // 检查单元格是否可影响 + if (!terrainCover.CanAffectCell(cell, map, out string reason)) + { + Log.Message($"Cannot affect cell {cell}: {reason}"); + return; + } + + TerrainDef currentTerrain = cell.GetTerrain(map); + + // 检查框架 + Frame frame = cell.GetFirstThing(map); + + // 检查植物(特别是大型树木) + Plant plant = cell.GetPlant(map); + if (plant != null && plant.def.plant.treeCategory == TreeCategory.Super) + { + Log.Message($"Large tree at {cell}, skipping"); + return; + } + + // 尝试设置地形 + if (GenConstruct.CanBuildOnTerrain(terrainCover.terrainToSpawn, cell, map, Rot4.North)) + { + // 销毁框架(如果需要) + if (frame != null) + { + frame.Destroy(DestroyMode.Vanish); + } + + // 保存原始地形(用于临时覆盖) + TerrainDef originalTerrain = map.terrainGrid.TerrainAt(cell); + + // 设置新地形 + map.terrainGrid.SetTerrain(cell, terrainCover.terrainToSpawn); + + Log.Message($"Applied terrain {terrainCover.terrainToSpawn.defName} to cell {cell}"); + } + else + { + Log.Message($"Cannot build terrain {terrainCover.terrainToSpawn.defName} at cell {cell}"); + } + } + } +} diff --git a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj index ae890d9b..d2893ce1 100644 --- a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj +++ b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj @@ -70,10 +70,331 @@ ..\..\..\..\..\..\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.TextRenderingModule.dll False - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +