diff --git a/1.6/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/1.6/Assemblies/WulaFallenEmpire.dll
index e500a146..ee29dbb2 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/AbilityDefs/WULA_Flyover_Ability.xml b/1.6/1.6/Defs/AbilityDefs/WULA_Flyover_Ability.xml
index c94a659c..3984d8e2 100644
--- a/1.6/1.6/Defs/AbilityDefs/WULA_Flyover_Ability.xml
+++ b/1.6/1.6/Defs/AbilityDefs/WULA_Flyover_Ability.xml
@@ -1,10 +1,10 @@
- WULA_CallBattleShip
+ WULA_CallMotherShip
发送增援请求,呼叫乌拉帝国舰队的一艘母舰前往殖民地。\n\n隶属于乌拉帝国边缘开发署的母舰是帝国殖民地扩张的基石,它们徘徊于近地轨道上,随时为下面的乌拉帝国殖民地提供援助。母舰的速度非常慢,在离开轨道前,它们能够提供好几天的全方位的支援。\n\n母舰拥有以下设施:\n<color=#6BB7B7><i>-生产设施</i></color>\n<color=#DEC28F><i>-建筑空投设施</i></color>\n<color=#BD952F><i>-机库</i></color>\n<color=#BD2F31><i>-武器阵列</i></color>
- Wula/UI/Abilities/WULA_CallBattleShip
+ Wula/UI/Abilities/WULA_CallMotherShip
1
Misc12
false
@@ -25,12 +25,12 @@
- WULA_BattleShip_Entity
+ WULA_MotherShip_Entity
640000
1
- WULA_BattleShip
+ WULA_MotherShip
Standard
0.01
20
@@ -40,12 +40,193 @@
-
- WULA_Spawn_Fighter_Rocket
-
- 指挥乌拉帝国的攻击机,中速掠过战场,使用其导弹对目标区域发起打击。\n\n在飞行期间,它会使用磁轨炮打击遇到的敌人。
-
+ WULA_CallBattleShip
+
+ 发送增援请求,呼叫乌拉帝国舰队的一艘护航舰前往殖民地。\n\n乌拉帝国边缘开发署的护航舰是近地支援舰队的基础作战单位,它们的体积虽然不如战列巡洋舰那样庞大,但是依然搭载了让地面武装望尘莫及的庞大火炮阵列,可以对地面发起骇人的轰炸。\n\n护航舰拥有以下设施:\n<color=#BD2F31><i>-武器阵列</i></color>
+ Wula/UI/Abilities/WULA_CallBattleShip
+ 1
+ Misc12
+ false
+ true
+ false
+
+ Verb_CastAbility
+ true
+ false
+ true
+ 2
+ -1
+ false
+
+ false
+ true
+
+
+
+
+
+ WULA_BattleShip
+ Standard
+ 0.05
+ 20
+ MapEdge
+ OppositeMapEdge
+ true
+
+
+
+
+ WULA_CallConstructionShip
+
+ 发送增援请求,呼叫乌拉帝国舰队的一艘工程舰前往殖民地。\n\n帝国工程舰是搭载了移动工厂的无武装舰种,它们可以完整地使用乌拉帝国的锻造技术生产装备、护甲、建筑和机械体,并依照指令通过空投仓将其送至各殖民地。\n\n工程舰拥有以下设施:\n<color=#6BB7B7><i>-生产设施</i></color>\n<color=#DEC28F><i>-建筑空投设施</i></color>
+ Wula/UI/Abilities/WULA_CallConstructionShip
+ 1
+ Misc12
+ false
+ true
+ false
+
+ Verb_CastAbility
+ true
+ false
+ true
+ 5
+ -1
+ false
+
+ false
+ true
+
+
+
+
+
+ WULA_ConstructionShip
+ Standard
+ 0.025
+ 20
+ MapEdge
+ OppositeMapEdge
+ true
+
+
+
+
+
+
+ WULA_Spawn_Fighter_Drone_Laser
+
+ 指挥乌拉帝国的蜂群无人机,中速掠过战场,使用其下挂的小型激光炮打击遇到的敌人——无人机电容器并不大,只能打击前3个目标。
+ Wula/UI/Abilities/WULA_Spawn_Fighter_Drone_Laser
+ 1
+ Misc12
+ false
+
+ Verb_CastAbility
+ false
+ false
+ 0
+ 120
+ true
+
+ false
+ true
+
+
+
+
+ WULA_Fighter_Drone_Entity
+ 5000
+ 1
+
+
+ WULA_Fighter_Drone_A
+ GroundStrafing
+ 2
+ 20
+ true
+ Perpendicular
+
+
+ true
+
+
+ false
+
+
+ true
+ (0.3,0.7,1.0,0.3)
+
+
+
+
+ WULA_Spawn_Fighter_Drone_Bomb
+
+ 指挥乌拉帝国的蜂群无人机,中速掠过战场,在目标地点丢下2枚高阻汽油弹,汽油弹附带化学燃料,除了爆炸外还会会造成一段时间的区域性燃烧。
+ Wula/UI/Abilities/WULA_Spawn_Fighter_Drone_Bomb
+ 1
+ Misc12
+ false
+
+ Verb_CastAbility
+ false
+ false
+ 0
+ 120
+ true
+
+ false
+ true
+
+
+
+
+ WULA_Fighter_Drone_Entity
+ 5000
+ 1
+
+
+ WULA_Fighter_Drone_B
+ GroundStrafing
+ 2.5
+ 20
+ true
+ Perpendicular
+
+
+ true
+ 1
+ 2
+ 1
+
+ 2
+ 2
+
+
+ false
+
+
+ true
+ (1.0,0.3,0.1,0.2)
+
+ false
+
+
+
+
+ WULA_Spawn_Striker_Missile
+
+ 指挥乌拉帝国的攻击机,中速掠过战场,使用其导弹打击遇到的敌人。\n导弹的挂载量可使其对12个目标发起打击。
+ Wula/UI/Abilities/WULA_Spawn_Striker_Missile
1
Misc12
false
@@ -62,13 +243,65 @@
-
+
- WULA_Fighter_A
+ WULA_Striker_A
+ GroundStrafing
+ 3
+ 20
+ true
+ Perpendicular
+
+
+ true
+ 6
+
+
+ false
+
+
+ true
+ (0.3,0.7,1.0,0.3)
+
+
+
+ HarborFacility
+ 需要拥有<color=#BD952F><i>机库</i></color>设施的战舰在地图上才能发起空袭
+
+
+
+
+ WULA_Spawn_Striker_RailGun
+
+ 指挥乌拉帝国的战机,高速掠过战场,使用机腹的两台高射速机炮打击目标地点——因为速度原因,打击区会很狭长。
+ Wula/UI/Abilities/WULA_Spawn_Striker_RailGun
+ 1
+ Misc12
+ false
+
+ Verb_CastAbility
+ false
+ false
+ 1
+ 120
+ true
+
+ false
+ true
+
+
+
+
+ WULA_Striker_Entity
+ 5000
+ 1
+
+
+ WULA_Striker_B
GroundStrafing
3
20
@@ -78,18 +311,20 @@
true
4
- 25
- 0.13
+ 52
+ 0.15
- 12
- 16
+
- true
+ false
true
(1.0,0.3,0.1,0.2)
+
+ false
true
@@ -103,10 +338,10 @@
- WULA_Spawn_Fighter_RailGun
-
- 指挥乌拉帝国的战机,低速掠过战场,使用其磁轨炮打击遇到的所有敌人。
-
+ WULA_Spawn_Striker_EMP
+
+ 指挥乌拉帝国的战机,高速掠过战场,快速丢下一组EMP炸弹——因为速度原因,打击区会很狭长。
+ Wula/UI/Abilities/WULA_Spawn_Striker_EMP
1
Misc12
false
@@ -123,21 +358,36 @@
-
+
- WULA_Fighter_B
+ WULA_Striker_C
GroundStrafing
- 3
+ 5
20
true
Perpendicular
+
+ true
+ 1
+ 35
+ 0.2
+
+
+
- true
+ false
+
+
+ true
+ (1.0,0.3,0.1,0.2)
+
+ false
true
@@ -150,6 +400,197 @@
+
+ WULA_Spawn_Bomber_BaseBomb
+
+ 指挥乌拉帝国的轰炸机,低速掠过战场,在目标地点投下大量炸弹——最终造成的破坏比标定轰炸区域要大很多。
+ Wula/UI/Abilities/WULA_Spawn_Bomber_BaseBomb
+ 1
+ Misc12
+ false
+
+ Verb_CastAbility
+ false
+ false
+ 1
+ 120
+ true
+
+ false
+ true
+
+
+
+
+ WULA_Bomber_Entity
+ 10000
+ 1
+
+
+ WULA_Bomber_A
+ GroundStrafing
+ 3
+ 20
+ true
+ Perpendicular
+
+
+ true
+ 2
+ 45
+ 0.1
+
+
+
+
+ false
+
+
+ true
+ (1.0,0.3,0.1,0.2)
+
+ false
+
+
+ true
+ (0.3,0.7,1.0,0.3)
+
+
+
+ HarborFacility
+ 需要拥有<color=#BD952F><i>机库</i></color>设施的战舰在地图上才能发起空袭
+
+
+
+
+ WULA_Spawn_Bomber_Smoke
+
+ 指挥乌拉帝国的轰炸机,低速掠过战场,在目标地点投下大量烟雾弹——最终形成的烟墙比标定轰炸区域要大很多。
+ Wula/UI/Abilities/WULA_Spawn_Bomber_Smoke
+ 1
+ Misc12
+ false
+
+ Verb_CastAbility
+ false
+ false
+ 1
+ 120
+ true
+
+ false
+ true
+
+
+
+
+ WULA_Bomber_Entity
+ 5000
+ 1
+
+
+ WULA_Bomber_B
+ GroundStrafing
+ 3
+ 20
+ true
+ Perpendicular
+
+
+ true
+ 1
+ 160
+ 0.1
+
+
+
+
+ false
+
+
+ true
+ (1.0,0.3,0.1,0.2)
+
+ false
+
+
+ true
+ (0.3,0.7,1.0,0.3)
+
+
+
+ HarborFacility
+ 需要拥有<color=#BD952F><i>机库</i></color>设施的战舰在地图上才能发起空袭
+
+
+
+
+ WULA_Spawn_Bomber_DarkMatterBomb
+
+ 指挥乌拉帝国的轰炸机,低速掠过战场,在目标地点投下一枚反物质炸弹——记得躲远点。
+ Wula/UI/Abilities/WULA_Spawn_Bomber_DarkMatterBomb
+ 1
+ Misc12
+ false
+
+ Verb_CastAbility
+ false
+ false
+ 1
+ 120
+ true
+
+ false
+ true
+
+
+
+
+ WULA_Bomber_Entity
+ 10000
+ 1
+
+
+ WULA_Bomber_C
+ GroundStrafing
+ 3
+ 20
+ true
+ Perpendicular
+
+
+ true
+ 1
+ 1
+ 1
+
+ 1
+ 1
+
+
+ false
+
+
+ true
+ (1.0,0.3,0.1,0.2)
+
+ false
+
+
+ true
+ (0.3,0.7,1.0,0.3)
+
+
+
+ HarborFacility
+ 需要拥有<color=#BD952F><i>机库</i></color>设施的战舰在地图上才能发起空袭
+
+
+
+
+
WULA_Spawn_ShipChunkIncoming
diff --git a/1.6/1.6/Defs/EventDefs/EventDef_Wula/Wula_MainEvent.xml b/1.6/1.6/Defs/EventDefs/EventDef_Wula/Wula_MainEvent.xml
index 52c34cac..327d6c8e 100644
--- a/1.6/1.6/Defs/EventDefs/EventDef_Wula/Wula_MainEvent.xml
+++ b/1.6/1.6/Defs/EventDefs/EventDef_Wula/Wula_MainEvent.xml
@@ -3,10 +3,13 @@
Wula_UI_Legion_1
- Wula/Events/Portraits/WULA_Legion_1
- 「军团」
+ Wula/Events/Portraits/WULA_Legion_2
+ 「军团」,P.I.A
- 这里是P.I.A,通讯信号良好,等待输入。
+ 这里是乌拉帝国行星封锁机关P.I.A,通讯信号良好,等待输入。
+ 那句话怎么说来着?天下无敌,天上来敌。
+ 早在这些生物的祖先还在有机汤里面翻滚时,我们就已经是这个银河系的霸主了——以前如此,今后也会如此。
+ 一般来说,我们并不喜欢暴力和流血冲突,如果这些星系的原住民能更配合点就好了。
@@ -76,4 +79,33 @@
+
+
+
+ Wula_UI_Legion_Reply_1
+
+ Wula/Events/Portraits/WULA_Legion_4
+ 「军团」,P.I.A
+
+ 请,不要,往舰队扔尸体、废物殖民者、动物和有毒垃圾!
+ 你们是把舰队当成垃圾处理厂了吗?把你的尸体、废物殖民者、动物和有毒垃圾搬走!
+
+
+
+
+ true
+ (226,191,195,195)
+ (226,191,195,185)
+ (255,255,255,255)
+ (255,255,255,255)
+
+
+
+
+
+
+
+
+
+
diff --git a/1.6/1.6/Defs/HediffDefs/WULA_FM_Hediffs.xml b/1.6/1.6/Defs/HediffDefs/WULA_FM_Hediffs.xml
index 1e3efef3..ef7f940a 100644
--- a/1.6/1.6/Defs/HediffDefs/WULA_FM_Hediffs.xml
+++ b/1.6/1.6/Defs/HediffDefs/WULA_FM_Hediffs.xml
@@ -49,7 +49,9 @@
+ WULA_CallMotherShip
WULA_CallBattleShip
+ WULA_CallConstructionShip
@@ -69,6 +71,11 @@
+
+
+ WULA_Spawn_ShipChunkIncoming
+
+
@@ -86,6 +93,18 @@
+
+
+ WULA_Spawn_Fighter_Drone_Laser
+ WULA_Spawn_Fighter_Drone_Bomb
+ WULA_Spawn_Striker_Missile
+ WULA_Spawn_Striker_RailGun
+ WULA_Spawn_Striker_EMP
+ WULA_Spawn_Bomber_BaseBomb
+ WULA_Spawn_Bomber_Smoke
+ WULA_Spawn_Bomber_DarkMatterBomb
+
+
\ No newline at end of file
diff --git a/1.6/1.6/Defs/RecipeDefs/Recipes_WULA.xml b/1.6/1.6/Defs/RecipeDefs/Recipes_WULA.xml
index 37a8440b..e20d3be0 100644
--- a/1.6/1.6/Defs/RecipeDefs/Recipes_WULA.xml
+++ b/1.6/1.6/Defs/RecipeDefs/Recipes_WULA.xml
@@ -1,5 +1,148 @@
+
+
+ Make_WULA_Alloy
+
+ 使用钢铁进行加工得到的高密度合金,是许多乌拉帝国装备的原材料。
+ 正在锻造合金
+ GeneralLaborSpeed
+
+ Smith
+ Recipe_Smith
+ 500
+
+ false
+
+
+
+
+ Steel
+
+
+ 3
+
+
+
+ 2
+
+ Crafting
+ 100
+
+
+ WULA_WeaponArmor_Productor_Technology
+
+
+
+ Make_WULA_Alloy_Group
+
+ 使用钢铁进行加工得到的高密度合金,是许多乌拉帝国装备的原材料。
+ 正在锻造合金
+ GeneralLaborSpeed
+
+ Smith
+ Recipe_Smith
+ 2200
+
+ false
+
+
+
+
+ Steel
+
+
+ 15
+
+
+
+ 10
+
+ Crafting
+ 100
+
+
+ WULA_WeaponArmor_Productor_Technology
+
+
+
+ Make_WULA_Dark_Matter_Item
+
+ 制造1份封装的暗物质,由暗物质约束装置和暗物质组成,是乌拉帝国大型设施和武备所必须的能量来源。
+ 正在制造乌拉帝国暗物质
+ GeneralLaborSpeed
+
+ Smith
+ Recipe_Smith
+
+ false
+
+
+
+
+ WULA_Alloy
+
+
+ 16
+
+
+
+
+ ComponentIndustrial
+
+
+ 2
+
+
+
+ 1
+
+ Crafting
+ 100
+
+
+ WULA_Colony_License_LV2_Technology
+
+
+
+ Make_WULA_Neutronium
+
+ 以2份乌拉帝国暗物质制造1份零素,一种强大的材料,可以打造出最坚硬的护甲或者最强大的近战武器。
+ 正在压缩零素
+ GeneralLaborSpeed
+
+ Smith
+ Recipe_Smith
+ 5000
+
+ false
+
+ 10
+
+
+ 15
+
+
+
+
+
+ WULA_Dark_Matter_Item
+
+
+ 2
+
+
+
+ 1
+
+ Crafting
+ 100
+
+
+ WULA_Colony_License_LV3_Technology
+
+
+
Make_WULA_Charge_Cube
@@ -261,83 +404,6 @@
-
- Make_WULA_Dark_Matter_Item
-
- 制造1份封装的暗物质,由暗物质约束装置和暗物质组成,是乌拉帝国大型设施和武备所必须的能量来源。
- 正在制造乌拉帝国暗物质
- GeneralLaborSpeed
-
- Smith
- Recipe_Smith
-
- false
-
- 15
-
-
-
-
-
- WULA_Charge_Cube
-
-
- 25
-
-
-
-
- ComponentSpacer
-
-
- 8
-
-
-
- 1
-
- Crafting
- 100
-
-
- WULA_Dark_Matter_Technology
-
-
-
- Make_WULA_Neutronium
-
- 以1份乌拉帝国暗物质制造10份零素,一种强大的材料,可以打造出最坚硬的护甲或者最强大的近战武器。
- 正在压缩零素
- GeneralLaborSpeed
-
- Smith
- Recipe_Smith
- 15000
-
- false
-
- 15
-
-
-
-
-
- WULA_Dark_Matter_Item
-
-
- 1
-
-
-
- 10
-
- Crafting
- 100
-
-
- WULA_Neutronium_Technology
-
-
WULA_Build_Wula_Synth
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 5061a279..cc7d750c 100644
--- a/1.6/1.6/Defs/ResearchProjectDefs/WULA_ResearchProjects_Remake.xml
+++ b/1.6/1.6/Defs/ResearchProjectDefs/WULA_ResearchProjects_Remake.xml
@@ -60,15 +60,17 @@
600
5.00
4.40
-
+
WULA_Light_Fighter_Drone_Technology
+
+
WULA_Colony_License_LV2_Technology
- WULA_Bomber_Technology
-
- 允许殖民地建立信标增加轰炸机配额,并使得机械乌拉可以调频天线以申请航空器空中打击。\n\n乌拉帝国的轰炸机是可以进入大气层的最大的飞行载具,除了可以使用机炮监视航路外,还能投下大量炸弹夷平帝国之敌。\n\n空中打击依赖于战舰的<color=#BD952F><i>机库</i></color>,只有携带此类设施的战舰出现在地图中时,才能呼叫航空器支援。
+ WULA_Aircraft_Carrier_Technology
+
+ 允许殖民地建立信标增加航空母舰配额,并使得机械乌拉可以调频天线以申请舰队空中支援。\n\n乌拉帝国的轻型航空母舰没有什么武装,但是能够装载大量的战机以支援地面战斗。\n\n此战舰携带以下设施:\n<color=#BD952F><i>机库</i></color>
600
6.00
4.40
@@ -77,14 +79,16 @@
- WULA_Aircraft_Carrier_Technology
+ WULA_Bomber_Technology
+
+ 允许殖民地建立信标增加轰炸机配额,并使得机械乌拉可以调频天线以申请航空器空中打击。\n\n乌拉帝国的轰炸机是可以进入大气层的最大的飞行载具,除了可以使用机炮监视航路外,还能投下大量炸弹夷平帝国之敌。\n\n空中打击依赖于战舰的<color=#BD952F><i>机库</i></color>,只有携带此类设施的战舰出现在地图中时,才能呼叫航空器支援。
+ 600
9.00
4.40
-
- 允许殖民地建立信标增加航空母舰配额,并使得机械乌拉可以调频天线以申请舰队空中支援。\n\n乌拉帝国的轻型航空母舰没有什么武装,但是能够装载大量的战机以支援地面战斗。\n\n此战舰携带以下设施:\n<color=#BD952F><i>机库</i></color>
- 600
+
+ WULA_Aircraft_Carrier_Technology
+
- WULA_Bomber_Technology
WULA_Colony_License_LV3_Technology
@@ -123,6 +127,18 @@
WULA_Colony_License_LV1_Technology
+
+ WULA_DarkEnergy_Generators_Technology
+ 5.00
+ 3.80
+
+ 允许殖民地申请空投暗物质发电机,一种输出功率极为恐怖却非常消耗资源的发电机。
+ 600
+
+ WULA_Colony_License_LV2_Technology
+
+
+
WULA_Bunker_Drop_Technology
@@ -152,7 +168,7 @@
WULA_Shutdown_Technology
3.00
- 3.90
+ 2.10
获取关闭乌拉帝国合成人各系统的必须知识。
800
@@ -160,6 +176,38 @@
WULA_Synth_Productor_Technology
+
+
+ WULA_Turret_Base_AT_Technology
+ 6.00
+ 1.40
+
+ 允许殖民地申请空投反战车磁轨炮台,可以在远距离上击穿拥有厚重装甲的敌人。
+ 600
+
+ WULA_Bunker_Drop_Technology
+
+
+ WULA_Synth_Weapon_2_Bullet_Technology
+ WULA_Colony_License_LV2_Technology
+
+
+
+ WULA_Turret_Base_Laser_Technology
+ 7.00
+ 1.40
+
+ 允许殖民地申请空投激光炮台,可以持续定向烧灼敌军,最大限度地击伤对手并留存战利品和俘虏。
+ 600
+
+ WULA_Bunker_Drop_Technology
+
+
+ WULA_Synth_Weapon_2_Laser_Technology
+ WULA_Colony_License_LV2_Technology
+
+
+
@@ -194,8 +242,10 @@
0.80
-
+
WULA_Synth_Weapon_1_Base_Technology
+
+
WULA_Colony_License_LV2_Technology
@@ -207,9 +257,9 @@
5.00
0.20
-
-
WULA_Synth_Weapon_1_Base_Technology
+
+
WULA_Colony_License_LV2_Technology
@@ -222,9 +272,9 @@
0.20
WULA_Synth_Weapon_1_Missile_Technology
-
-
WULA_Synth_Weapon_2_Bullet_Technology
+
+
WULA_Colony_License_LV3_Technology
@@ -232,16 +282,99 @@
WULA_Synth_Weapon_3_Laser_Technology
9.00
0.80
-
+
允许从作业通讯台提交生产高级能量武器的乌拉帝国武备的订单,只要为其提供安稳的输出环境,它们就能展现其恐怖的攻坚能力。
600
-
-
WULA_Synth_Weapon_2_Laser_Technology
+
+
WULA_Colony_License_LV3_Technology
+
+ WULA_Synth_Weapon_2_Melee_Technology
+
+ 允许从作业通讯台提交生产链锯武器的乌拉帝国武备的订单,这种近战武器可以在一次命中时造成大量伤口。
+ 2400
+ 6.00
+ 2.10
+
+ WULA_Synth_Weapon_1_Base_Technology
+
+
+ WULA_Colony_License_LV2_Technology
+
+
+
+ WULA_Synth_Weapon_3_Melee_Technology
+
+ 允许从作业通讯台提交生产巨锤武器的乌拉帝国武备的订单,这种近战武器势大力沉,可以造成高额范围性伤害,为针对敌方重装部队而设计。
+ 2400
+ 9.00
+ 2.10
+
+ WULA_Synth_Weapon_2_Melee_Technology
+
+
+ WULA_Colony_License_LV3_Technology
+
+
+
+
+
+
+
+ WULA_Synth_Clothes_1_Technology
+ 2.00
+ 2.70
+
+ 允许从作业通讯台提交生产简易乌拉帝国衣服的订单。
+ 1200
+
+ WULA_Colony_License_LV1_Technology
+
+
+
+ WULA_Synth_Clothes_2_Technology
+ 5.00
+ 2.70
+
+ 允许从作业通讯台提交生产高级乌拉帝国衣服的订单。
+ 1200
+
+ WULA_Synth_Clothes_1_Technology
+
+
+ WULA_Colony_License_LV2_Technology
+
+
+
+ WULA_Synth_Armor_1_Technology
+ 6.00
+ 2.70
+
+ 允许从作业通讯台提交生产基础乌拉帝国装甲的订单。
+ 1200
+
+ WULA_Synth_Clothes_2_Technology
+
+
+
+ WULA_Synth_Armor_2_Technology
+ 9.00
+ 2.70
+
+ 允许从作业通讯台提交生产高级乌拉帝国装甲的订单。
+ 1200
+
+ WULA_Synth_Armor_1_Technology
+
+
+ WULA_Colony_License_LV3_Technology
+
+
+
- 1
- 1
-
-
-
-
- WULA_Neutronium
-
- 零素也称中子元素,是中子星的主要构成成分,相比常规合金更适合作为装甲和近战武器的铸造材料,乌拉帝国通过以暗物质驱动的科技进行材料压缩,可以人为地制造这种强大材料。
-
- Wula/Item/WULA_Neutronium
- Graphic_Single
-
- None
- false
- Metal_Drop
- Metal_Drop
- false
- false
-
- 1
- 1
- 3
- 3
- 1
- 0
- 0
- 2
- 3
-
-
- ResourcesRaw
-
- false
- true
-
-
- Metallic
-
- Metal
- 0
- false
- ConstructMetal
- (63, 74, 70)
- BulletImpact_Metal
- MeleeHit_Metal_Sharp
- MeleeHit_Metal_Blunt
- Pawn_Melee_Punch_HitBuilding_Metal
-
- 0
-
-
- 5
- 0
- 10
- 10
- 10
- 1.1
-
-
- Heavy
- 200
- 50
-
-
-
- WULA_Charge_Cube
-
- 被高度压缩的能源核心,是机械乌拉的能源系统唯一可接受的外部输入性能量来源。
- ThingWithComps
- Item
- MapMeshOnly
- true
- false
- true
-
- Wula/Item/WULA_Charge_Cube
- Graphic_Single
-
- 30
-
- 1
- 50
- 0
- 0
- 0.01
- 24
- 0.3
- 450
-
- Item
- Rare
- true
-
- FoodMeals
-
- true
- 14
-
- Liquor
- 1
- 1
- 16
- 270
- NeverForNutrition
- -1000
- -1000
- EatVegetarian
- MechResurrectCast
-
-
- WULA_ChargingHediff
- 1.0
-
-
-
- 200
- None
- Last
- true
- 1
-
-
-
- Ingest
- 从能量核心中摄取能量
- true
-
-
-
-
- 12.0
-
-
-
-
- WULA_Charge_Cube_No_Power
-
- 被使用过的乌拉帝国能源核心,需要重新充能。
-
- Wula/Item/WULA_Charge_Cube_Without_Power
- Graphic_Single
-
- 30
-
- 0.01
- 24
- 0.3
- 450
-
-
- ItemsMisc
-
-
- 200
- None
-
-
-
-
- WULA_Soul_Wedge
-
- 一种通过特殊手段将生命体灵魂抽离封装得到的物品,是乌拉帝国灵能理论中“灵魂量化”的集中体现,可为各种乌拉帝国灵能法杖充能,也可以直接作为金属成分加入锻造。
-
- Wula/Item/WULA_Soul_Wedge
- Graphic_Single
-
- false
- Metal_Drop
- Metal_Drop
- false
- false
- 500
-
- 0.75
- 0.01
- 1.5
- 1.5
- 0.1
- 0
- 0
- 1.2
- 1.2
-
-
- ResourcesRaw
-
- false
- true
-
-
- Metallic
-
- Metal
- 0
- false
- ConstructMetal
- (190, 120, 210)
- BulletImpact_Metal
- MeleeHit_Metal_Sharp
- MeleeHit_Metal_Blunt
- Pawn_Melee_Punch_HitBuilding_Metal
-
- 1
-
-
- 0.75
- 0.5
- 0
- 2
- 2
- 1
- 0.8
-
-
-
- PsychicSensitivityFactor
- 1.06
- 1.08
- 1.1
- 1.13
- 1.15
- 1.17
- 1.20
-
-
-
-
- PsychicEntropyMaxOffset
- 4
- 6
- 8
- 11
- 13
- 15
- 18
-
-
- PsychicEntropyRecoveryRateOffset
- 0.04
- 0.04
- 0.04
- 0.04
- 0.04
- 0.04
- 0.04
-
-
-
- Medium
- 80
- 50
-
-
-
-
- Wula_Organic_Precursor
-
- 一坨经过封包之后完全认不出原料的玩意,只能扔进乌拉帝国铸铁仪中加工为钢铁。
-
- Wula/Item/WULA_Dark_Matter_Item
- Graphic_Single
-
- Rare
- false
- false
- false
-
- 60
- 6
- 1
- 0.1
-
-
- ResourcesRaw
-
-
-
- Make_Wula_Organic_Precursor
-
- 制造有机物前体以供乌拉帝国铸铁仪器使用
- 正在制造有机物前体。
- 450
- CookSpeed
- Cook
- Recipe_CookMeal
- true
-
-
-
- 有机物
-
- MeatRaw
- AnimalProductRaw
- PlantFoodRaw
-
-
- Hay
- WoodLog
-
-
- 30
-
-
-
- 30
-
-
-
- FoodRaw
-
-
- Hay
- WoodLog
-
-
-
-
- Foods
-
-
- Hay
-
-
- Cooking
-
-
-
-
- 一个蕴含了提升特定技能所需知识的数据包,需要通过乌拉帝国合成人特有的神经接口接入,其他种族无法使用。\n\n机械乌拉的存储空间有限,每一次使用数据包都会迫使其遗忘其他非目标技能并损失经验值,没有热情的技能将更快被遗忘。
- ThingWithComps
- Item
- MapMeshOnly
- Archotech
- true
- 14
- true
- Item
- Never
- true
- Middle
-
- NeurotrainersPsycast
-
-
- 100
- -4
- 1
- 5
- 0.1
- 15000
-
-
- Wula/Item/WULA_Syhth_Trainer
- Graphic_Single
-
-
- WULA_New_Synth_Skill_Technology
-
-
- 1
-
-
- UnfinishedHealthItemProsthetic
- false
- GeneralLaborSpeed
- Crafting
- Smith
- Recipe_Machining
- 650
-
- None
-
-
-
-
-
-
-
- WULA_Syhth_Trainer_Soothing
-
-
-
- UseNeurotrainer
- 使用数据包训练射击技能
- true
- Wula_Synth
-
-
- Shooting
- 50000
- 25000
- 2.0
- 1.5
-
-
-
-
- WULA_Syhth_Trainer_Melee
-
-
-
- UseNeurotrainer
- 使用数据包训练格斗技能
- true
- Wula_Synth
-
-
- Melee
- 50000
- 10000
- 2.0
- 1.5
-
-
-
-
- WULA_Syhth_Trainer_Animals
-
-
-
- UseNeurotrainer
- 使用数据包训练驯兽技能
- true
- Wula_Synth
-
-
- Animals
- 50000
- 10000
- 2.0
- 1.5
-
-
-
-
- WULA_Syhth_Trainer_Artistic
-
-
-
- UseNeurotrainer
- 使用数据包训练艺术技能
- true
- Wula_Synth
-
-
- Artistic
- 50000
- 10000
- 2.0
- 1.5
-
-
-
-
- WULA_Syhth_Trainer_Construction
-
-
-
- UseNeurotrainer
- 使用数据包训练建造技能
- true
- Wula_Synth
-
-
- Construction
- 50000
- 10000
- 2.0
- 1.5
-
-
-
-
- WULA_Syhth_Trainer_Cooking
-
-
-
- UseNeurotrainer
- 使用数据包训练烹饪技能
- true
- Wula_Synth
-
-
- Cooking
- 50000
- 10000
- 2.0
- 1.5
-
-
-
-
- WULA_Syhth_Trainer_Crafting
-
-
-
- UseNeurotrainer
- 使用数据包训练手工技能
- true
- Wula_Synth
-
-
- Crafting
- 50000
- 10000
- 2.0
- 1.5
-
-
-
-
- WULA_Syhth_Trainer_Intellectual
-
-
-
- UseNeurotrainer
- 使用数据包训练智识技能
- true
- Wula_Synth
-
-
- Intellectual
- 50000
- 10000
- 2.0
- 1.5
-
-
-
-
- WULA_Syhth_Trainer_Medicine
-
-
-
- UseNeurotrainer
- 使用数据包训练医疗技能
- true
- Wula_Synth
-
-
- Medicine
- 50000
- 10000
- 2.0
- 1.5
-
-
-
-
- WULA_Syhth_Trainer_Mining
-
-
-
- UseNeurotrainer
- 使用数据包训练采矿技能
- true
- Wula_Synth
-
-
- Mining
- 50000
- 10000
- 2.0
- 1.5
-
-
-
-
- WULA_Syhth_Trainer_Plants
-
-
-
- UseNeurotrainer
- 使用数据包训练种植技能
- true
- Wula_Synth
-
-
- Plants
- 50000
- 10000
- 2.0
- 1.5
-
-
-
-
- WULA_Syhth_Trainer_Social
-
-
-
- UseNeurotrainer
- 使用数据包训练社交技能
- true
- Wula_Synth
-
-
- Social
- 50000
- 10000
- 2.0
- 1.5
-
-
-
-
-
-
-
-
-
- 一个可以人为调整人格倾向的数据包,使得乌拉帝国合成人在特定领域激发热情,需要通过乌拉帝国合成人特有的神经接口接入,其他种族无法使用。\n\n机械乌拉的存储空间有限,每一次使用数据包都会使得任意其他技能失去热情。
- ThingWithComps
- Item
- MapMeshOnly
- Archotech
- true
- 14
- true
- Item
- Never
- true
- Middle
-
- NeurotrainersPsycast
-
-
- 100
- -4
- 1
- 5
- 0.1
- 30000
-
-
- Wula/Item/WULA_Syhth_Passion_Trainer
- Graphic_Single
-
-
- WULA_New_Synth_Skill_2_Technology
-
-
- 1
-
-
- UnfinishedHealthItemProsthetic
- false
- GeneralLaborSpeed
- Crafting
- Smith
- Recipe_Machining
- 650
-
- None
-
-
-
-
-
-
-
-
- WULA_Syhth_Passion_Trainer_Melee
-
-
-
- UseNeurotrainer
- 使用数据包激发格斗兴趣
- true
- Wula_Synth
-
-
-
- Melee
-
- Major
-
- 1~1
-
-
-
-
-
- WULA_Syhth_Passion_Trainer_Shooting
-
-
-
- UseNeurotrainer
- 使用数据包激发射击兴趣
- true
- Wula_Synth
-
-
- Shooting
- Major
- 1~1
-
-
-
-
-
- WULA_Syhth_Passion_Trainer_Construction
-
-
-
- UseNeurotrainer
- 使用数据包激发建造兴趣
- true
- Wula_Synth
-
-
- Construction
- Major
- 1~1
-
-
-
-
-
- WULA_Syhth_Passion_Trainer_Mining
-
-
-
- UseNeurotrainer
- 使用数据包激发采矿兴趣
- true
- Wula_Synth
-
-
- Mining
- Major
- 1~1
-
-
-
-
-
- WULA_Syhth_Passion_Trainer_Cooking
-
-
-
- UseNeurotrainer
- 使用数据包激发烹饪兴趣
- true
- Wula_Synth
-
-
- Cooking
- Major
- 1~1
-
-
-
-
-
- WULA_Syhth_Passion_Trainer_Plants
-
-
-
- UseNeurotrainer
- 使用数据包激发种植兴趣
- true
- Wula_Synth
-
-
- Plants
- Major
- 1~1
-
-
-
-
-
- WULA_Syhth_Passion_Trainer_Animals
-
-
-
- UseNeurotrainer
- 使用数据包激发驯兽兴趣
- true
- Wula_Synth
-
-
- Animals
- Major
- 1~1
-
-
-
-
-
- WULA_Syhth_Passion_Trainer_Crafting
-
-
-
- UseNeurotrainer
- 使用数据包激发手工兴趣
- true
- Wula_Synth
-
-
- Crafting
- Major
- 1~1
-
-
-
-
-
- WULA_Syhth_Passion_Trainer_Artistic
-
-
-
- UseNeurotrainer
- 使用数据包激发艺术兴趣
- true
- Wula_Synth
-
-
- Artistic
- Major
- 1~1
-
-
-
-
-
- WULA_Syhth_Passion_Trainer_Medicine
-
-
-
- UseNeurotrainer
- 使用数据包激发医疗兴趣
- true
- Wula_Synth
-
-
- Medicine
- Major
- 1~1
-
-
-
-
-
- WULA_Syhth_Passion_Trainer_Social
-
-
-
- UseNeurotrainer
- 使用数据包激发社交兴趣
- true
- Wula_Synth
-
-
- Social
- Major
- 1~1
-
-
-
-
-
- WULA_Syhth_Passion_Trainer_Intellectual
-
-
-
- UseNeurotrainer
- 使用数据包激发智识兴趣
- true
- Wula_Synth
-
-
- Intellectual
- Major
- 1~1
-
-
-
-
-
-
-
- Wula_BackstoryRegeneratorImplant
-
- 从乌拉帝国上行链路下载的数据包,内含随机的人格数据,机械乌拉在使用后会改变其人格,这会重置它禁止的工作,但是不会重设其热情和特质。\n\n新的人格有可能和旧人格一模一样,且必须保存游戏后重新加载才能起效!
- ThingWithComps
-
- Wula/Item/WULA_Syhth_Trainer
- Graphic_Single
-
-
- 1500
- 0.1
-
-
-
- WULA_New_Synth_Skill_2_Technology
-
-
-
- 8
-
-
-
- 50
- 1
- 1
-
-
-
- CompUsableImplant
- UseItem
- 使用 {0_label}
-
-
- Wula_RegenerateBackstory
- Brain
-
-
-
-
-
- Wula_RegenerateBackstory
-
- a backstory regenerator
- A backstory regenerator is installed.
- Wula_BackstoryRegeneratorImplant
-
-
-
- Wula_Backstory_Categories
-
- false
-
-
-
-
diff --git a/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Drop_Buildings.xml b/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Drop_Buildings.xml
index b7786d18..c7710f1c 100644
--- a/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Drop_Buildings.xml
+++ b/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Drop_Buildings.xml
@@ -4,7 +4,7 @@
WulaWall_Cleanzone
- 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者后勤舰在上空才能投送建筑。\n\n乌拉帝国用于建造堡垒的外壁相当厚实,能够抵御大量伤害,并且拥有气密性,可以用在飞船外壳上。
+ 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n乌拉帝国用于建造堡垒的外壁相当厚实,能够抵御大量伤害,并且拥有气密性,可以用在飞船外壳上。
Wula/Building/Linked/WULA_Fortress_Wall_MenuIcon
MinifiedThing
Normal
@@ -59,10 +59,8 @@
WulaWall_Incoming
true
1
- WULA_Flyover_BaseBuilder
true
false
- 乌拉帝国母舰或后勤舰
@@ -174,7 +172,7 @@
WulaDoor_Cleanzone
- 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者后勤舰在上空才能投送建筑。\n\n乌拉帝国堡垒的大门不仅能够抵御大量爆炸和震荡伤害,还拥有无需通电即可运转的伺服系统来增加大门通过速度。
+ 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n乌拉帝国堡垒的大门不仅能够抵御大量爆炸和震荡伤害,还拥有无需通电即可运转的伺服系统来增加大门通过速度。
Building_Door
Building
DoorMoveable
@@ -238,10 +236,8 @@
WulaDoor_Incoming
true
1
- WULA_Flyover_BaseBuilder
true
false
- 乌拉帝国母舰或后勤舰
@@ -397,248 +393,70 @@
1138
-
-
+
+
- WULA_Cat_Bunker_Cleanzone
-
- 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者后勤舰在上空才能投送建筑。\n\n乌拉猫猫地堡是集生产和防御为一体的坚实建筑,3只乌拉猫猫自律机械体会和地堡一起空降。地堡可供乌拉猫猫更换工作类型,并允许乌拉猫猫进驻使用内部武器击败来犯敌军。
- Wula/Building/WULA_Cat_Bunker_south
- MinifiedThing
- Normal
-
- WULA_Cat_Bunker
- Mech_WULA_Cat
- Mech_WULA_Cat_Constructor
- Mech_WULA_Cat_Assault
-
-
- BuildingsMisc
-
+ WULA_GlobalStorageSenderPod
+
+ 一个一次性的物资输送装置,可以将装载的货物发射到乌拉帝国的舰队以供其使用。
- Wula/Building/WULA_Dropping_Building_Cleanzone
- Graphic_Multi
- (3,3)
-
- false
-
+ Things/Special/DropPod
+ Graphic_Single
+ (2,2)
- Building
- PassThroughOnly
- 0
- false
- 0.5
- false
- false
+ (1,1)
false
-
- WULA_Bunker_Drop_Technology
-
-
- 1
- 1
- 1
- 0
-
- (3,3)
- 0
- 1
-
- 300
- 3
-
-
- BuildingDestroyed_Metal_Small
-
- WULA_Buildings
-
-
- WULA_Cat_Bunker_Incoming
- true
- 1
- WULA_Flyover_BaseBuilder
- true
- false
- 乌拉帝国母舰或后勤舰
-
-
-
-
- WULA_Cat_Bunker_Incoming
-
- (3,3)
-
- Wula/Building/WULA_Cat_Bunker_Incoming
- Graphic_Single
- CutoutFlying
- (3,3)
-
-
- Accelerate
- Things/Skyfaller/SkyfallerShadowDropPod
- (2, 2)
- DropPod_Fall
- 100
- Explosion_Vaporize
- 0.05
- 1
- 1
-
-
- (0,0)
- (1, 1)
-
-
- WULA_Cat_Bunker
-
-
-
- Smoke_Joint
-
-
-
-
- WULA_Cat_Bunker
-
- 这是一个从乌拉帝国母舰上空投下来的地堡,它拥有一些预制件,可以供乌拉猫猫更换其工作类型。此外,当敌人袭击时,可将乌拉猫猫召回至地堡内,它们将在地堡里对外射击以击退来犯者。
- WulaFallenEmpire.Building_MechanoidRecycler
Normal
-
- WULA_Cat_Bunker_TurretGun
- Mech_WULA_Cat
- Mech_WULA_Cat_Constructor
- Mech_WULA_Cat_Assault
-
-
- Wula/Building/WULA_Cat_Bunker
- Graphic_Multi
- (3,3)
-
- false
-
-
- (1.65, 1.65, 0.85)
- (0, 0, -0.2)
-
-
- Building
+ BuildingOnTop
PassThroughOnly
false
+ Misc12
0.5
- false
- 42
- false
-
- 0
+ WULA_Buildings
+ 2201
+ Medium
- 500
- 1
- 20
- 0
+ 250
+ 1600
+ 0.5
- (3,3)
- 200
+ 60
+ 1
-
- BuildingDestroyed_Metal_Small
- 3.5
-
-
- 6
- (120,240,252,0)
+
+ 500
+ 0.8
+ true
-
-
- true
- false
+
+ DropPodLeaving
+ false
-
- 6
-
-
-
- Mech_WULA_Cat
- Mech_WULA_Cat_Constructor
- Mech_WULA_Cat_Assault
-
- WULA_RecycleMechanoid
- 5
-
-
-
- Mech_WULA_Cat
- Mech_WULA_Cat_Constructor
- Mech_WULA_Cat_Assault
-
-
-
-
-
- Mech_WULA_Cat
- 1
-
-
- Mech_WULA_Cat_Constructor
- 1
-
-
- Mech_WULA_Cat_Assault
- 1
-
-
-
-
-
-
- WULA_Cat_Bunker_TurretGun
- 0
- true
- 6
- 1.5
+
+ true
+ Wula_UI_Legion_Reply_1
-
-
- WULA_Cat_Bunker_TurretGun
-
- 由进入地堡的乌拉猫猫操纵的炮塔——说那么多干什么,扣扳机就完了,殖民地会报销弹药的。
-
- Wula/Weapon/WULA_Weapon_Empty
- Graphic_Single
-
-
- 0.5
- 0.3
- 0.25
- 0.12
- 4.8
- 0
- 5
- 0
-
-
-
- Verb_Shoot
- Bullet_WULA_RW_Base_AR
- 0
- 21
- 32
- 2
- Shot_AssaultRifle
- GunTail_Medium
- 9
- 1
-
-
+
+ ITab_ContentsTransporter
+
+
+ PlaceWorker_NotUnderRoof
+
+
+ TransportPod
+
+ 6
+ 0.65
WULA_MaintenancePod_Cleanzone
- 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者后勤舰在上空才能投送建筑。\n\n合成人维护舱是为乌拉帝国合成人设计的设施,机械乌拉需要定期进入其中进行身体机能的维护和校准,否则他们的身体会逐渐衰弱。维护需要消耗零部件,同时会修理所有的伤口。
+ 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n合成人维护舱是为乌拉帝国合成人设计的设施,机械乌拉需要定期进入其中进行身体机能的维护和校准,否则他们的身体会逐渐衰弱。维护需要消耗零部件,同时会修理所有的伤口。
Wula/Building/WULA_MaintenancePod
MinifiedThing
Normal
@@ -693,10 +511,8 @@
WULA_MaintenancePod_Incoming
true
1
- WULA_Flyover_BaseBuilder
true
false
- 乌拉帝国母舰或后勤舰
@@ -835,7 +651,7 @@
WULA_WeaponArmor_Productor_Cleanzone
- 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者后勤舰在上空才能投送建筑。\n\n乌拉帝国作业通讯台是用于联络乌拉帝国母舰和后勤舰并下达武器、装备订单的特殊通讯台。这些武器装备的生产不需要殖民地参与,只需要使用乌拉帝国物资交换舱将材料发送给帝国舰队,然后根据材料数量下单即可。
+ 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n乌拉帝国作业通讯台是用于联络乌拉帝国母舰和工程舰并下达武器、装备订单的特殊通讯台。这些武器装备的生产不需要殖民地参与,只需要使用乌拉帝国物资交换舱将材料发送给帝国舰队,然后根据材料数量下单即可。
Wula/Building/WULA_WeaponArmor_Productor
MinifiedThing
Normal
@@ -883,10 +699,8 @@
WULA_WeaponArmor_Productor_Incoming
true
1
- WULA_Flyover_BaseBuilder
true
false
- 乌拉帝国母舰或后勤舰
@@ -927,7 +741,7 @@
WULA_WeaponArmor_Productor
- 一台用于联络乌拉帝国母舰和后勤舰并下达订单的特殊通讯台。这些物资装备的生产不需要殖民地参与,只需要使用乌拉帝国物资输送舱将材料发送给帝国舰队,然后根据材料数量下单即可。
+ 一台用于联络乌拉帝国母舰和工程舰并下达订单的特殊通讯台。这些物资装备的生产不需要殖民地参与,只需要使用乌拉帝国物资输送舱将材料发送给帝国舰队,然后根据材料数量下单即可。
WulaFallenEmpire.Building_GlobalWorkTable
MapMeshAndRealTime
Normal
@@ -999,7 +813,7 @@
WULA_Machine_Recharger_Cleanzone
- 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者后勤舰在上空才能投送建筑。\n\n乌拉帝国地下维护站是能够储存大量电量并允许所有大小类型的乌拉帝国机械体进行充电的充电站,不支持合成人的充能。由于其根基埋于地下,因此不会阻碍其他殖民者和机械体在其上面的移动。
+ 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n乌拉帝国地下维护站是能够储存大量电量并允许所有大小类型的乌拉帝国机械体进行充电的充电站,不支持合成人的充能。由于其根基埋于地下,因此不会阻碍其他殖民者和机械体在其上面的移动。
Wula/Building/WULA_Machine_Recharger
MinifiedThing
Normal
@@ -1047,10 +861,8 @@
WULA_Machine_Recharger_Incoming
true
1
- WULA_Flyover_BaseBuilder
true
false
- 乌拉帝国母舰或后勤舰
@@ -1168,7 +980,7 @@
WULA_Charging_Station_Synth_Cleanzone
- 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者后勤舰在上空才能投送建筑。\n\n合成人充电站是一台供乌拉帝国合成人进行机体充能和改装的检修站,当机械乌拉需要充电时会优先前往此处充电。
+ 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n合成人充电站是一台供乌拉帝国合成人进行机体充能和改装的检修站,当机械乌拉需要充电时会优先前往此处充电。
Wula/Building/WULA_Charging_Station_Synth_south
MinifiedThing
Normal
@@ -1216,10 +1028,8 @@
WULA_Charging_Station_Synth_Incoming
true
1
- WULA_Flyover_BaseBuilder
true
false
- 乌拉帝国母舰或后勤舰
@@ -1326,8 +1136,8 @@
WULA_Cube_Productor_Cleanzone
- 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者后勤舰在上空才能投送建筑。\n\n乌拉帝国编织体是一台简易的塑性构造体,只能生产一些材料,以本地加工的方式降低舰队的加工压力。
- Wula/Building/WULA_Cube_Productor_Energy_south
+ 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n乌拉帝国编织体是一台简易的塑性构造体,只能生产一些材料,以本地加工的方式降低舰队的加工压力。
+ Wula/Building/WULA_Cube_Productor_south
MinifiedThing
Normal
@@ -1378,10 +1188,8 @@
WULA_Cube_Productor_Incoming
true
1
- WULA_Flyover_BaseBuilder
true
false
- 乌拉帝国母舰或后勤舰
@@ -1390,7 +1198,7 @@
(1,1)
- Wula/Building/WULA_Charging_Station_Synth_Incoming
+ Wula/Building/WULA_Cube_Productor_Incoming
Graphic_Single
CutoutFlying
(1,1)
@@ -1426,7 +1234,7 @@
Building_WorkTable
MapMeshAndRealTime
- Wula/Building/WULA_Cube_Productor_Energy
+ Wula/Building/WULA_Cube_Productor
Graphic_Multi
(1,1)
@@ -1458,6 +1266,8 @@
Item
+ Make_WULA_Alloy
+ Make_WULA_Alloy_Group
Make_WULA_Charge_Cube
Make_WULA_Charge_Cube_Group
Recharge_WULA_Charge_Cube_Energy
@@ -1469,12 +1279,6 @@
ITab_Bills
-
-
- CompPowerTrader
- 500
-
-
PlaceWorker_PreventInteractionSpotOverlap
@@ -1482,5 +1286,216 @@
BillsTab
+
+
+ 4
+ (120,240,252,0)
+
+
+
+ true
+ false
+
+
+ CompPowerTrader
+ 500
+
+
+
+
+
+
+ Wula_DarkEnergy_Generators_Cleanzone
+
+ 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n一台使用暗物质湮灭反应提供能量的乌拉帝国发电机,需要消耗暗物质作为燃料且消耗速率很高,但是拥有普通发电机望尘莫及的发电能力。为了在野战环境下随炮塔群一起空投,这种发电机的装甲层设计的非常厚实。
+ Wula/Building/Wula_DarkEnergy_Generators
+ MinifiedThing
+ Normal
+
+ BuildingsMisc
+
+
+ Wula/Building/WULA_Dropping_Building_Cleanzone
+ Graphic_Multi
+ (5,5)
+
+ false
+
+
+ Building
+ PassThroughOnly
+ false
+ 0.5
+ false
+ 0
+ false
+ false
+
+ WULA_DarkEnergy_Generators_Technology
+
+
+ 1
+ 1
+ 1
+ 0
+
+ (5,5)
+ 0
+ 1
+
+ 50
+ 1
+
+
+ BuildingDestroyed_Metal_Small
+
+
+ WulaFallenEmpire.PlaceWorker_CustomRadius
+
+ WULA_Buildings
+
+
+ 7.9
+ (0.5, 1, 1)
+ 0
+ true
+
+ 在不接电线的情况下,该建筑可提供的最大供电半径,可作为野战状态下的阵地构建参考。
+ true
+
+
+ Wula_DarkEnergy_Generators_Incoming
+ true
+ 1
+ true
+ false
+
+
+
+
+ Wula_DarkEnergy_Generators_Incoming
+
+ (5,5)
+
+ Wula/Building/Wula_DarkEnergy_Generators_Incoming
+ Graphic_Single
+ CutoutFlying
+ (7,7)
+
+
+ Accelerate
+ Things/Skyfaller/SkyfallerShadowDropPod
+ (7, 7)
+ DropPod_Fall
+ 100
+ Explosion_Vaporize
+ 0.05
+ 1
+ 1
+
+
+ (0,0)
+ (1, 1)
+
+
+ Wula_DarkEnergy_Generators
+
+
+
+ Smoke_Joint
+
+
+
+
+ Wula_DarkEnergy_Generators
+
+ 一台使用暗物质湮灭反应提供能量的乌拉帝国发电机,需要消耗暗物质作为燃料且消耗速率很高,但是拥有普通发电机望尘莫及的发电能力。为了在野战环境下随炮塔群一起空投,这种发电机的装甲层设计的非常厚实。
+ Building
+ MapMeshAndRealTime
+
+ Wula/Building/Wula_DarkEnergy_Generators
+ Graphic_Single
+ (7,7.25)
+ (0, 0, 1.15)
+
+ (1.93,1,1.69)
+ (-0.03,0,-0.1)
+
+
+ Building
+ PassThroughOnly
+ 0
+ 50
+ false
+ true
+ false
+
+ 3500
+ 2500
+ 0
+ -20
+
+ Normal
+ false
+ (5,5)
+
+ false
+ false
+ BuildingDestroyed_Metal_Medium
+
+
+ 100
+ 2
+
+
+
+ 7.9
+ (0.5, 1, 1)
+ 0
+ true
+
+ 在不接电线的情况下,该建筑可提供的最大供电半径,可作为野战状态下的阵地构建参考。
+ true
+
+
+ CompPowerPlant
+ -10000
+ true
+ ChemfuelFiredGenerator_Ambience
+
+
+
+ 暗物质燃料
+ 暗物质燃料
+ 需要填入封装的暗物质
+ 1.0
+ 5.0
+
+
+ WULA_Dark_Matter_Item
+
+
+ 1
+ true
+ true
+
+
+ 9
+ (120,240,252,0)
+
+
+
+ true
+
+ EMP
+
+
+
+
+ true
+ false
+
+
+ WULA_Buildings
\ No newline at end of file
diff --git a/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Local_Buildings.xml b/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Local_Buildings.xml
deleted file mode 100644
index 4fdbe286..00000000
--- a/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Local_Buildings.xml
+++ /dev/null
@@ -1,184 +0,0 @@
-
-
-
-
- WULA_GlobalStorageSenderPod
-
- 一个一次性的物资输送装置,可以将装载的货物发射到乌拉帝国的舰队以供其使用。
-
- Things/Special/DropPod
- Graphic_Single
- (2,2)
-
- (1,1)
- false
- Normal
- BuildingOnTop
- PassThroughOnly
- false
- Misc12
- 0.5
- WULA_Buildings
- 2201
- Medium
-
- 250
- 1600
- 0.5
-
-
- 60
- 1
-
-
-
- 500
- 0.8
- true
-
-
- DropPodLeaving
- false
-
-
-
- ITab_ContentsTransporter
-
-
- PlaceWorker_NotUnderRoof
-
-
- TransportPod
-
- 6
- 0.65
-
-
-
-
- Wula_AI_Heavy_Panzer_Gunnery_Turret
-
- 与战车型机械体SMp-38A"斯佩萨特"所装备的同款的联装机炮炮塔,火力和精准度稍逊于战车版本,并且没有额外的火箭弹可供使用,优点便是比战车要便宜的多。
- Building_TurretGun
- MapMeshAndRealTime
-
- Wula/Building/WULA_Turret_Component
- Graphic_Single
- (2,2)
-
-
- (0.3,0.3,1.4,1.4)
-
-
- (0.5,0.35,0.75)
- (0,0,-0.05)
-
-
- true
- Wula/Building/Wula_AI_Heavy_Panzer_Gunnery_Turret
- 1.0
- Building
- false
- false
- (2,2)
-
- 1500
- 0
- 3200
- 80
- 0
- 1.00
-
-
- 200
- 30
- 5
-
- false
- Normal
-
-
-
-
- MechanoidsWakeUp
-
-
- 240
- 5.9
- Bomb
- 0.5
-
-
-
- EMP
-
-
-
- MechTurretBig_Call
-
-
-
- PassThroughOnly
- 50
- 0.5
- true
- Heavy
- WULA_Buildings
-
- 640
-
- true
- WULA_WM_Panzer_Autocannon_Turret
- 0.5
- (0, 0.05)
- 2.0
-
-
- PlaceWorker_TurretTop
- PlaceWorker_ShowTurretRadius
-
-
- WULA_Structure_Technology
- SniperTurret
-
-
-
- WULA_WM_Panzer_Autocannon_Turret
-
- Wula/Building/WULA_WM_Panzer_Autocannon
- Graphic_Single
-
-
-
- 0.5
- 0.5
- 0.4
- 0.3
- 0.8
-
-
-
- Verb_Shoot
- true
- Bullet_WULA_WM_Panzer_Autocannon
- 0.5
- 32
- 10
- 0.1
- 6
- Shot_TurretSniper
- GunTail_Heavy
- 18
-
- true
- true
- true
-
-
-
-
-
\ No newline at end of file
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 559d46e7..f1b2bc4f 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
@@ -9,7 +9,6 @@
true
Building
50
- WULA_Buildings
true
PassThroughOnly
1
@@ -17,7 +16,7 @@
true
(0.56, 0.62, 0.9)
- Wula/Building/WULA_Cat_Bunker_south
+ Wula/Building/WULA_Flyover_Beacon
Graphic_Single
TransparentPostLight
(1,1)
@@ -34,6 +33,77 @@
true
true
false
+ North
+ true
+ Light
+ BulletImpact_Metal
+ true
+ RealtimeOnly
+ ConstructMetal
+ true
+
+ BuildingDestroyed_Metal_Big
+ true
+ true
+
+
+
+ WULA_MotherShip_Entity
+ 1
+
+
+ true
+ 1
+ true
+ false
+
+
+
+
+ WULA_MotherShip_Entity
+
+ 什么?这是个记录数量用的thingdef,你不应该在任何场合下看到这个。
+ Thing
+
+
+
+
+
+ WULA_Fake_Fighter_Drone_Building
+
+ 111
+ Building
+ true
+ Building
+ 50
+ true
+ PassThroughOnly
+ 1
+ (3,3)
+ true
+ (0.56, 0.62, 0.9)
+
+ Wula/Building/WULA_Fake_Fighter_Drone_Building
+ Graphic_Single
+ TransparentPostLight
+ (3,3)
+ (195,195,195,255)
+
+
+ 100
+ 0.5
+ 36000
+ 125
+ 0.65
+
+ WULA_Buildings
+
+ WULA_Light_Fighter_Drone_Technology
+
+ Normal
+ true
+ true
+ false
East
true
Light
@@ -49,20 +119,204 @@
- WULA_BattleShip_Entity
+ WULA_Fighter_Drone_Entity
+ 1
+ WULA_Fighter_Drone_Leaving
+
+ false
+
+
+
+
+ WULA_Fighter_Drone_Leaving
+
+ FlyShipLeaving
+
+ true
+ Shuttle_Leaving
+ -10
+ -40~-15
+ 0.05
+ Things/Skyfaller/SkyfallerShadowRectangle
+ (2,2)
+ 1
+
+
+ (0,90)
+ (1,110)
+
+
+
+
+ (0,90)
+ (1,91)
+
+
+
+
+ (0,0)
+ (0.08,2)
+
+
+
+
+ (0,0.2)
+ (0.4,0.7)
+
+
+
+
+ Wula/Building/WULA_Fake_Fighter_Drone_Building
+ Graphic_Single
+ TransparentPostLight
+ (2.65,2.65)
+
+ MetaOverlays
+
+
+ WULA_Fighter_Drone_Entity
+
+ 什么?这是个记录数量用的thingdef,你不应该在任何场合下看到这个。
+ Thing
+
+
+ WULA_Fake_Striker_Beacon_Building
+
+ 111
+ Building
+ true
+ Building
+ 50
+ true
+ PassThroughOnly
+ 1
+ true
+ (0.56, 0.62, 0.9)
+ (2,2)
+ Wula/Building/WULA_Fake_Striker_Beacon_Building
+ false
+
+ Wula/Building/WULA_Flyover_Beacon
+ Graphic_Single
+ TransparentPostLight
+ (2,2)
+ (195,195,195,255)
+
+
+ 600
+ 0.5
+ 36000
+ 125
+ 0.65
+
+ WULA_Buildings
+
+ WULA_Striker_Technology
+
+ Normal
+ true
+ false
+ North
+ true
+ Light
+ BulletImpact_Metal
+ true
+ RealtimeOnly
+ ConstructMetal
+ true
+
+ BuildingDestroyed_Metal_Big
+ true
+ true
+
+
+
+ 3
+ (120,240,252,0)
+
+
+ WULA_Striker_Entity
1
- true
- 1
- true
- false
+ false
- WULA_BattleShip_Entity
-
+ WULA_Striker_Entity
+
+ 什么?这是个记录数量用的thingdef,你不应该在任何场合下看到这个。
+ Thing
+
+
+ WULA_Fake_Bomber_Beacon_Building
+
+ 111
+ Building
+ true
+ Building
+ 50
+ WULA_Buildings
+ true
+ PassThroughOnly
+ 1
+ (2,2)
+ false
+ Wula/Building/WULA_Fake_Bomber_Beacon_Building
+
+ Wula/Building/WULA_Flyover_Beacon
+ Graphic_Single
+ TransparentPostLight
+ (2,2)
+ (195,195,195,255)
+
+ true
+ (0.56, 0.62, 0.9)
+
+ 600
+ 0.5
+ 36000
+ 125
+ 0.65
+
+ WULA_Buildings
+
+ WULA_Bomber_Technology
+
+ Normal
+ true
+ false
+ North
+ true
+ Light
+ BulletImpact_Metal
+ true
+ RealtimeOnly
+ ConstructMetal
+ true
+
+ BuildingDestroyed_Metal_Big
+ true
+ true
+
+
+
+ 3
+ (120,240,252,0)
+
+
+ WULA_Bomber_Entity
+ 1
+
+
+ false
+
+
+
+
+ WULA_Bomber_Entity
+
什么?这是个记录数量用的thingdef,你不应该在任何场合下看到这个。
Thing
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
new file mode 100644
index 00000000..430a1a0a
--- /dev/null
+++ b/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Turret_Buildings.xml
@@ -0,0 +1,808 @@
+
+
+
+
+ WULA_Cat_Bunker_Cleanzone
+
+ 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n乌拉猫猫地堡是集生产和防御为一体的坚实建筑,3只乌拉猫猫自律机械体会和地堡一起空降。地堡可供乌拉猫猫更换工作类型,并允许乌拉猫猫进驻使用内部武器击败来犯敌军。
+ Wula/Building/WULA_Cat_Bunker_south
+ MinifiedThing
+ Normal
+
+ WULA_Cat_Bunker
+ Mech_WULA_Cat
+ Mech_WULA_Cat_Constructor
+ Mech_WULA_Cat_Assault
+
+
+ BuildingsMisc
+
+
+ Wula/Building/WULA_Dropping_Building_Cleanzone
+ Graphic_Multi
+ (3,3)
+
+ false
+
+
+ Building
+ PassThroughOnly
+ 0
+ false
+ 0.5
+ false
+ false
+ false
+
+ WULA_Bunker_Drop_Technology
+
+
+ 1
+ 1
+ 1
+ 0
+
+ (3,3)
+ 0
+ 1
+
+ 300
+ 3
+
+
+ BuildingDestroyed_Metal_Small
+
+ WULA_Buildings
+
+ WulaFallenEmpire.PlaceWorker_CustomRadius
+
+
+
+ 21
+ (1, 1, 1)
+ 0
+ true
+
+ 在该建筑空降到指定地点时,其炮台武器的最大射程。
+ true
+
+
+ WULA_Cat_Bunker_Incoming
+ true
+ 1
+ true
+ false
+
+
+
+
+ WULA_Cat_Bunker_Incoming
+
+ (3,3)
+
+ Wula/Building/WULA_Cat_Bunker_Incoming
+ Graphic_Single
+ CutoutFlying
+ (3,3)
+
+
+ Accelerate
+ Things/Skyfaller/SkyfallerShadowDropPod
+ (2, 2)
+ DropPod_Fall
+ 100
+ Explosion_Vaporize
+ 0.05
+ 1
+ 1
+
+
+ (0,0)
+ (1, 1)
+
+
+ WULA_Cat_Bunker
+
+
+
+ Smoke_Joint
+
+
+
+
+ WULA_Cat_Bunker
+
+ 这是一个从乌拉帝国母舰上空投下来的地堡,它拥有一些预制件,可以供乌拉猫猫更换其工作类型。此外,当敌人袭击时,可将乌拉猫猫召回至地堡内,它们将在地堡里对外射击以击退来犯者。
+ WulaFallenEmpire.Building_MechanoidRecycler
+ Normal
+
+ WULA_Cat_Bunker_TurretGun
+ Mech_WULA_Cat
+ Mech_WULA_Cat_Constructor
+ Mech_WULA_Cat_Assault
+
+
+ Wula/Building/WULA_Cat_Bunker
+ Graphic_Multi
+ (3,3)
+
+ false
+
+
+ (1.65, 1.65, 0.85)
+ (0, 0, -0.2)
+
+
+ Building
+ PassThroughOnly
+ false
+ 0.5
+ false
+ 42
+ false
+
+ 0
+
+ 500
+ 1
+ 20
+ 0
+
+ (3,3)
+
+ 200
+
+
+ BuildingDestroyed_Metal_Small
+ 3.5
+
+
+
+ 6
+ (120,240,252,0)
+
+
+
+ true
+ false
+
+
+ 6
+
+
+
+ Mech_WULA_Cat
+ Mech_WULA_Cat_Constructor
+ Mech_WULA_Cat_Assault
+
+ WULA_RecycleMechanoid
+ 5
+
+
+
+ Mech_WULA_Cat
+ Mech_WULA_Cat_Constructor
+ Mech_WULA_Cat_Assault
+
+
+
+
+
+ Mech_WULA_Cat
+ 1
+
+
+ Mech_WULA_Cat_Constructor
+ 1
+
+
+ Mech_WULA_Cat_Assault
+ 1
+
+
+
+
+
+
+ WULA_Cat_Bunker_TurretGun
+ 0
+ true
+ 6
+ 1.5
+
+
+
+
+ WULA_Cat_Bunker_TurretGun
+
+ 由进入地堡的乌拉猫猫操纵的炮塔——说那么多干什么,扣扳机就完了,殖民地会报销弹药的。
+
+ Wula/Weapon/WULA_Weapon_Empty
+ Graphic_Single
+
+
+ 0.5
+ 0.3
+ 0.25
+ 0.12
+ 4.8
+ 0
+ 5
+ 0
+
+
+
+ Verb_Shoot
+ Bullet_WULA_RW_Base_AR
+ 0
+ 21
+ 32
+ 2
+ Shot_AssaultRifle
+ GunTail_Medium
+ 9
+ 1
+
+
+
+
+
+
+ Wula_Base_ATGun_Turret_Cleanzone
+
+ 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\nATt-6"金红石"反战车炮塔是一种需要通电才能运转的中型防御炮塔,依靠澎湃的电磁动力发射高穿透性的炮弹。这种炮台的射速不是很高,但是穿甲能力很强,且会造成小范围溅射伤害。
+ Wula/Building/Wula_Base_ATGun_Turret
+ MinifiedThing
+ Normal
+
+ Wula_Base_ATGun_Turret_Weapon
+
+
+ BuildingsMisc
+
+
+ Wula/Building/WULA_Dropping_Building_Cleanzone
+ Graphic_Multi
+ (3,3)
+
+ false
+
+
+ Building
+ PassThroughOnly
+ 0
+ false
+ 0.5
+ false
+ false
+ false
+
+ WULA_Turret_Base_AT_Technology
+
+
+ 1
+ 1
+ 1
+ 0
+
+ (3,3)
+ 0
+ 1
+
+ 300
+ 3
+
+
+ BuildingDestroyed_Metal_Small
+
+
+ WulaFallenEmpire.PlaceWorker_CustomRadius
+
+ WULA_Buildings
+
+
+ 75
+ (1, 1, 1)
+ 0
+ true
+
+ 在该建筑空降到指定地点时,其炮台武器的最大射程。
+ true
+
+
+ Wula_Base_ATGun_Turret_Incoming
+ true
+ 1
+ true
+ false
+
+
+
+
+ Wula_Base_ATGun_Turret_Incoming
+
+ (3,3)
+
+ Wula/Building/Wula_Base_ATGun_Turret_Incoming
+ Graphic_Single
+ CutoutFlying
+ (3,3.75)
+
+
+ Accelerate
+ Things/Skyfaller/SkyfallerShadowDropPod
+ (2, 2)
+ DropPod_Fall
+ 100
+ Explosion_Vaporize
+ 0.05
+ 1
+ 1
+
+
+ (0,0)
+ (1, 1)
+
+
+ Wula_Base_ATGun_Turret
+
+
+
+ Smoke_Joint
+
+
+
+
+ Wula_Base_ATGun_Turret
+
+ ATt-6"金红石"反战车炮塔是一种需要通电才能运转的中型防御炮塔,依靠澎湃的电磁动力发射高穿透性的炮弹。这种炮台的射速不是很高,但是穿甲能力很强,且会造成小范围溅射伤害。
+ WulaFallenEmpire.Building_TurretGunHasSpeed
+ MapMeshAndRealTime
+
+
+ 0.5
+
+
+
+ Wula/Building/WULA_Turret_Component
+ Graphic_Single
+ (3,3)
+
+
+ (0.3,0.3,1.4,1.4)
+
+
+ (0.5,0.35,0.75)
+ (0,0,-0.05)
+
+
+ true
+ Wula/Building/Wula_Base_ATGun_Turret
+ 1.0
+ Building
+ false
+ false
+ (3,3)
+
+ 1500
+ 0
+ 3200
+ 80
+ 0
+ 1.00
+
+
+ 200
+ 30
+ 5
+
+ false
+ Normal
+ PassThroughOnly
+ 50
+ 0.5
+ true
+
+ 640
+
+ true
+ Wula_Base_ATGun_Turret_Weapon
+ 3
+ (-0.04, 0)
+ 5.0
+
+
+ PlaceWorker_TurretTop
+ PlaceWorker_ShowTurretRadius
+
+
+
+
+
+ MechanoidsWakeUp
+
+
+
+ EMP
+
+
+
+ MechTurretBig_Call
+
+
+
+ true
+ false
+
+
+ CompPowerTrader
+ 300
+
+
+ 6
+ (120,240,252,0)
+
+
+
+
+
+ Wula_Base_ATGun_Turret_Weapon
+
+ 反战车炮塔,可以从极远距离上精准地点杀高价值目标。
+ None
+ true
+ Ultra
+
+ Wula/Building/Wula_Base_ATGun_Turret_Weapon
+ Graphic_Single
+ 3
+
+ 0.33
+
+ 150
+ 1
+ 2
+ 2
+ 2
+
+
+
+ Verb_Shoot
+ true
+ Bullet_WULA_WM_Panzer_Turret
+ 0
+ 4
+ 5.9
+ 75
+ 1
+ 0.1
+ WULA_MW_Mass_Drivers_Shootingsound
+ GunTail_Heavy
+ 18
+
+
+
+
+ Bullet_WULA_WM_Panzer_Turret
+
+ WulaFallenEmpire.Projectile_ExplosiveWithTrail
+ Normal
+ True
+
+ Wula/Projectile/WULA_Bullet_ChargeLanceShot_Red
+ Graphic_Single
+ TransparentPostLight
+ 5
+
+
+
+
+ Bullet
+ 180
+ 220
+ 2
+ 3.5
+ Artillery_HitThickRoof
+ MortarBomb_Explode
+ MortarRound_PreImpact
+ MortarRound_Ambient
+ 10
+
+
+
+ WULA_GunTail_Lighting
+ 5
+
+
+
+
+
+
+ Wula_Base_Laser_Turret_Cleanzone
+
+ 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\nMLt-1"棱晶"激光炮塔是一种需要通电才能运转的中型防御炮塔,能够以高能激光束持续照射一个目标将其气化。装载在炮塔上的激光武器不需要预热,因此对付多个目标的效果要优于手持光束武器。
+ Wula/Building/Wula_Base_Laser_Turret
+ MinifiedThing
+ Normal
+
+ Wula_Base_ATGun_Turret_Weapon
+
+
+ BuildingsMisc
+
+
+ Wula/Building/WULA_Dropping_Building_Cleanzone
+ Graphic_Multi
+ (3,3.5)
+
+ false
+
+
+ Building
+ PassThroughOnly
+ 0
+ false
+ 0.5
+ false
+ false
+ false
+
+ WULA_Turret_Base_AT_Technology
+
+
+ 1
+ 1
+ 1
+ 0
+
+ (3,3)
+ 0
+ 1
+
+ 300
+ 3
+
+
+ BuildingDestroyed_Metal_Small
+
+
+ WulaFallenEmpire.PlaceWorker_CustomRadius
+
+ WULA_Buildings
+
+
+ 52
+ (1, 1, 1)
+ 0
+ true
+
+ 在该建筑空降到指定地点时,其炮台武器的最大射程。
+ true
+
+
+ Wula_Base_Laser_Turret_Incoming
+ true
+ 1
+ true
+ false
+
+
+
+
+ Wula_Base_Laser_Turret_Incoming
+
+ (3,3)
+
+ Wula/Building/Wula_Base_Laser_Turret_Incoming
+ Graphic_Single
+ CutoutFlying
+ (3,3.75)
+
+
+ Accelerate
+ Things/Skyfaller/SkyfallerShadowDropPod
+ (2, 2)
+ DropPod_Fall
+ 100
+ Explosion_Vaporize
+ 0.05
+ 1
+ 1
+
+
+ (0,0)
+ (1, 1)
+
+
+ Wula_Base_Laser_Turret
+
+
+
+ Smoke_Joint
+
+
+
+
+ Wula_Base_Laser_Turret
+
+ MLt-1"棱晶"激光炮塔是一种需要通电才能运转的中型防御炮塔,能够以高能激光束持续照射一个目标将其气化。装载在炮塔上的激光武器不需要预热,因此对付多个目标的效果要优于手持光束武器。
+ WulaFallenEmpire.Building_TurretGunHasSpeed
+ MapMeshAndRealTime
+
+
+ 0.5
+
+
+
+ Wula/Building/WULA_Turret_Component
+ Graphic_Single
+ (3,3)
+
+
+ (0.3,0.3,1.4,1.4)
+
+
+ (0.5,0.35,0.75)
+ (0,0,-0.05)
+
+
+ true
+ Wula/Building/Wula_Base_Laser_Turret
+ 1.0
+ Building
+ false
+ false
+ (3,3)
+
+ 1500
+ 0
+ 3200
+ 80
+ 0
+ 1.00
+
+
+ 200
+ 30
+ 5
+
+ false
+ Normal
+ PassThroughOnly
+ 50
+ 0.5
+ true
+
+ 640
+
+ true
+ Wula_Base_Laser_Turret_Weapon
+ 0.01
+ (-0.04, 0)
+ 5.0
+
+
+ PlaceWorker_TurretTop
+ PlaceWorker_ShowTurretRadius
+
+
+
+
+
+ MechanoidsWakeUp
+
+
+
+ EMP
+
+
+
+ MechTurretBig_Call
+
+
+
+ true
+ false
+
+
+ CompPowerTrader
+ 500
+
+
+ 6
+ (120,240,252,0)
+
+
+
+
+
+ Wula_Base_Laser_Turret_Weapon
+
+ 激光炮塔,通过持续照射融化敌军。
+ None
+ true
+ Ultra
+
+ Wula/Building/Wula_Base_Laser_Turret_Weapon
+ Graphic_Single
+ 3
+
+ 0.33
+
+ 150
+ 1
+ 2
+ 2
+ 2
+
+
+
+ WulaFallenEmpire.Verb_ShootBeamExplosive
+
+
+ true
+ 52
+ 32
+ 1
+ WULA_RW_Handle_Cannon_Burn
+ 1
+
+
+ 1000
+ -1
+ 0
+ 0
+ 0
+
+
+ 0
+ WULA_RW_Beam_Shootingsound
+ Mote_WULA_RW_Handle_Cannon_Beam
+ GraserBeam_End
+
+ 0
+
+
+ 1
+ 0
+ 0
+
+
+ 0.8
+ true
+
+
+ (0, 0)
+ (0.65, 0.4)
+ (1, 0.75)
+
+
+
+
+
+ false
+
+
+
+ false
+ 1
+ 0
+ Burn
+ 1
+
+ 1
+
+ Mote_WULA_Beam_Charge
+ 1.07
+
+
+
+
diff --git a/1.6/1.6/Defs/ThingDefs_Misc/Apperals/WULA_Apparel.xml b/1.6/1.6/Defs/ThingDefs_Misc/Apperals/WULA_Apparel.xml
index b00aa4a5..bce1d2fc 100644
--- a/1.6/1.6/Defs/ThingDefs_Misc/Apperals/WULA_Apparel.xml
+++ b/1.6/1.6/Defs/ThingDefs_Misc/Apperals/WULA_Apparel.xml
@@ -1,7 +1,6 @@
- 0
Fabric
@@ -39,6 +38,9 @@
UnfinishedApparel
false
+
+ WULA_WeaponArmor_Productor
+
1
@@ -47,6 +49,11 @@
1
1
+
+
+ Equipment
+
+
@@ -64,6 +71,9 @@
50
+
+ Fabric
+
ApparelMisc
@@ -95,7 +105,15 @@
UnfinishedApparel
false
+
+ WULA_WeaponArmor_Productor
+
+
+
+ Equipment
+
+
@@ -109,6 +127,10 @@
50
+ 乌拉帝国合成人的贴身织物,有些微防御能力。
+
+ 3000
+
Graphic_Single
CutoutComplex
@@ -117,11 +139,18 @@
ApparelMisc
0
+ 0.01
+
+ 0.1
+ 0.10
+ 0.10
+
Wula_Apparel
Wula_Inner
+ Wula_Apparel_Init
Torso
@@ -138,20 +167,82 @@
UnfinishedApparel
GeneralLaborSpeed
false
+ WULA_Synth_Clothes_1_Technology
+
+ WULA_WeaponArmor_Productor
+
+
+
+ Equipment
+
+
-
- WULA_Official_Uniform
-
- 这是乌拉帝国宫廷专门配发给高级官员的制服,以一对形似幡的附件而得名。裁制得体大方,设计经久耐用,并且为合成人的躯体做了特殊改造。
+
+
+ WULA_Bodystocking
+
- Wula/Apparel/WULA_official_uniform
+ Wula/Apparel/WULA_Bodystocking
-
- RoyalTier5
-
+ Wula/Apparel/WULA_Bodystocking
+
+
+
+ WULA_Bodystocking_White
+
+
+ Wula/Apparel/WULA_Bodystocking_White
+
+
+ Wula/Apparel/WULA_Bodystocking_White
+
+
+
+ WULA_Pantyhose_Black
+
+
+ Wula/Apparel/WULA_Pantyhose_Black
+
+
+ Wula/Apparel/WULA_Pantyhose_Black
+
+
+
+ WULA_Pantyhose_White
+
+
+ Wula/Apparel/WULA_Pantyhose_White
+
+
+ Wula/Apparel/WULA_Pantyhose_White
+
+
+
+ WULA_Latex_Catsuit
+
+
+ Wula/Apparel/WULA_Latex_Catsuit
+
+
+ Wula/Apparel/WULA_Latex_Catsuit
+
+
+
+
+
+ WULA_Maid_Uniform
+
+ 配发给乌拉帝国合成人的标志性制服,没什么防御力,但是轻便美观,方便活动和工作。
+
+ Wula/Apparel/WULA_Maid_Uniform
+
+
+ WULA_Synth_Clothes_1_Technology
+
+
Torso
Neck
@@ -160,10 +251,9 @@
Legs
- OnSkin
Middle
- Wula/Apparel/WULA_official_uniform
+ Wula/Apparel/WULA_Maid_Uniform
false
false
false
@@ -171,112 +261,44 @@
200
6000
- 3
- 1.5
- 5
+ 2
0.25
- -0.1
- 0.35
+ 0.1
-
- GeneralLaborSpeed
-
- 7
-
-
- 1
-
-
- WULA_Bodystocking
-
- 这就是普通的连身黑丝,在哪里造的有什么关系吗?它没有什么别的功能,除了提供一些保暖能力——话说回来,乌拉合成人又不会感到冷。
+
+ WULA_Maid_Uniform_Headband
+
+ 配发给乌拉帝国合成人的标志性制服,没什么防御力,但是轻便美观,方便活动和工作。
- Wula/Apparel/WULA_Bodystocking
+ Wula/Apparel/WULA_Maid_Uniform_Headband
-
-
- Wula_Apparel_Init
-
- Wula/Apparel/WULA_Bodystocking
-
- WULA_Synth_Clothes_Technology
-
- WULA_Cube_Productor_Energy
-
+ WULA_Synth_Clothes_1_Technology
+
+
+ UpperHead
+
+
+ Middle
+
+ Wula/Apparel/WULA_Maid_Uniform_Headband
+ false
+ false
+ false
+
+ 200
3000
+ 1
+ 0.25
-
-
- WULA_Bodystocking_White
-
- 虽然名为连身白丝,但是这种织物的实际颜色取决于材料的颜色。
-
- Wula/Apparel/WULA_Bodystocking_White
-
-
-
- Wula_Apparel_Init
-
- Wula/Apparel/WULA_Bodystocking_White
-
- 0.20
- 0.10
+ 0.05
-
- WULA_Synth_Clothes_Technology
-
- WULA_Cube_Productor_Energy
-
-
-
- 3000
-
-
-
- WULA_Body_Suit
-
- 这是乌拉帝国的战斗人员专用的制服,拥有一整套神经接口用以和其他外接护甲连接。它可以增加穿戴者的战斗技能,但是在干活的时候会束手束脚不太方便。
-
- Wula/Apparel/WULA_Body_Suit
-
-
- ApparelArmor
-
- 50
-
- 2
-
-
- Wula/Apparel/WULA_Body_Suit
-
-
- -0.1
- -0.1
- 0.5
- 0.2
- -0.1
- 0.5
-
-
- WULA_Synth_Clothes_2_Technology
-
- WULA_Cube_Productor_Energy
-
-
- 5
-
-
-
- 7000
- 0.5
-
@@ -386,86 +408,6 @@
0.25
-
- WULA_Assault_Troop_PowerArmor
-
- 乌拉帝国的常规步兵部队穿戴的动力甲,以轻便和高防御力受到喜爱。
-
- WULA_Synth_Armor_Technology
-
- 7
-
- false
-
-
- Wula/Apparel/WULA_Assault_Troop_PowerArmor
-
-
- 40000
- 500
- 8
- 0
- 0.75
- 0.75
- 1.0
- 15
-
-
-
- -0.05
- -0.5
- 60
-
- 200
-
- 8
-
-
-
- Wula_Armor_Medium
-
- Wula/Apparel/WULA_Assault_Troop_PowerArmor
-
-
-
- WULA_Assault_Troop_Helmet
-
- 与乌拉帝国突击队装甲配套的头盔,能够辅助穿戴者的瞄准,但是会导致使用者头部重心向前,十分阻碍日常工作。
-
-
- 7
-
- WULA_Synth_Armor_Technology
-
-
- Wula/Apparel/WULA_Assault_Troop_Helmet
-
-
- 10000
- 500
- 1
- 0
- 1
- 1
- 2.0
- 15
-
-
- -0.1
- -0.15
- 0.5
-
-
-
- Wula_Armor_Medium
-
- Wula/Apparel/WULA_Assault_Troop_Helmet
-
- 30
-
- 1
-
-
WULA_Knight_PowerArmor
@@ -474,7 +416,7 @@
ApparelNoble
- WULA_Synth_Armor_2_Technology
+ WULA_Synth_Armor_1_Technology
10
@@ -589,7 +531,7 @@
10
- WULA_Synth_Armor_2_Technology
+ WULA_Synth_Armor_1_Technology
Wula/Apparel/WULA_Knight_Helmet
diff --git a/1.6/1.6/Defs/ThingDefs_Misc/WULA_Flyover_Item.xml b/1.6/1.6/Defs/ThingDefs_Misc/WULA_Flyover_Item.xml
index 4004c679..30604387 100644
--- a/1.6/1.6/Defs/ThingDefs_Misc/WULA_Flyover_Item.xml
+++ b/1.6/1.6/Defs/ThingDefs_Misc/WULA_Flyover_Item.xml
@@ -1,13 +1,13 @@
- WULA_BattleShip
+ WULA_MotherShip
WulaFallenEmpire.FlyOver
Normal
RealtimeOnly
- Wula/FlyoverThing/WULA_BattleShip_Shadow
+ Wula/FlyoverThing/WULA_MotherShip_Shadow
Graphic_Single
TransparentPostLight
(100,250)
@@ -55,11 +55,6 @@
true
false
-
- WULA_Flyover_BaseBuilder
- true
- 3
-
BombardmentFacility
@@ -70,19 +65,144 @@
-
-
+
+ WULA_BattleShip
+
WulaFallenEmpire.FlyOver
Normal
RealtimeOnly
-
- Wula/FlyoverThing/WULA_Fighter_Shadow
+ Wula/FlyoverThing/WULA_BattleShip_Shadow
Graphic_Single
TransparentPostLight
- (40,20)
+ (70,100)
(195,195,195,45)
+
+ Wula/Weapon/WULA_Weapon_Empty
+ (0, 0)
+ 0
+ FlyOver/Flying
+
+
+
+
+ Wula/Weapon/WULA_Weapon_Empty
+ true
+ 0.8
+ 0
+ 0
+ 0
+ 0
+
+
+ false
+ false
+ false
+ true
+ 1
+ 50
+
+
+ true
+ false
+ false
+ false
+ MetaOverlays
+
+
+
+ 60
+ 帝国护航舰已抵达
+ 一艘帝国护航舰响应请求抵达殖民地上空!
+ PositiveEvent
+ true
+ true
+ false
+
+
+
+ BombardmentFacility
+
+
+
+
+
+ WULA_ConstructionShip
+
+ WulaFallenEmpire.FlyOver
+ Normal
+ RealtimeOnly
+
+ Wula/FlyoverThing/WULA_ConstructionShip_Shadow
+ Graphic_Single
+ TransparentPostLight
+ (70,200)
+ (195,195,195,45)
+
+
+ Wula/Weapon/WULA_Weapon_Empty
+ (0, 0)
+ 0
+ FlyOver/Flying
+
+
+
+
+ Wula/Weapon/WULA_Weapon_Empty
+ true
+ 0.8
+ 0
+ 0
+ 0
+ 0
+
+
+ false
+ false
+ false
+ true
+ 1
+ 50
+
+
+ true
+ false
+ false
+ false
+ MetaOverlays
+
+
+
+ 60
+ 帝国工程舰已抵达
+ 一艘帝国工程舰响应请求抵达殖民地上空!
+ PositiveEvent
+ true
+ true
+ false
+
+
+
+ FactoryFacility
+ BuildingdropperFacility
+
+
+
+
+
+
+ WulaFallenEmpire.FlyOver
+ Normal
+ RealtimeOnly
+
+
+
+ Wula/FlyoverThing/WULA_Fighter_Drone_Shadow
+ Graphic_Single
+ TransparentPostLight
+ (3,3)
+
false
0
@@ -112,43 +232,156 @@
false
false
MetaOverlays
-
-
- WULA_Flyover_Airstrike
- true
- 0
-
-
-
- WULA_Fighter_A
+
+ WULA_Fighter_Drone_A
-
- Bullet_WULA_Fighter_A_Rocket
- 50
+
+ Bullet_Beam_Fighter_Drone
+ 20
+ 50
+ 6
+ 0.1
+ 18
- 13
+ 2
0
0
0
Alternating
- 10
- 10
- 10
+ 0
+ 0
+ 0
Fixed
true
Mote_SparkSimple
+
+
+
+ Bullet_Beam_Fighter_Drone
+
+ Beam
+
+ Things/Projectile/Bullet_Small
+ Graphic_Single
+
+
+ Beam
+ 5
+ Mote_Beam_Fighter_Drone
+ 0.5
+ 0.5
+
+
+
+ Mote_Beam_Fighter_Drone
+ MoteDualAttached
+ MoteOverhead
+
+ 0.1
+ 0.1
+ 0.1
+ True
+ True
+
+ true
+
+ Things/Mote/GraserBeam
+ Graphic_MoteWithAgeSecs
+ MoteBeam
+
+ <_ExtraTexA>/Things/Mote/BeamSecondaryNoise_A
+ <_ExtraTexB>/Things/Mote/BeamSecondaryNoise_B
+ <_ScrollSpeedA>0
+ <_ScrollSpeedB>0
+ <_Intensity>2
+
+
+
+
+ WULA_Fighter_Drone_B
+
+
+ Bullet_Shell_Incendiary
+ 50
+
+
+ 2
+ 0
+ 0
+ 0
+ Alternating
+
+
+ 0
+ 0
+ 0
+ Fixed
+
+
+ true
+ Mote_SparkSimple
+
+
+
+
+
+ WulaFallenEmpire.FlyOver
+
+ Normal
+ RealtimeOnly
+
+
+ Wula/FlyoverThing/WULA_Fighter_Shadow
+ Graphic_Single
+ TransparentPostLight
+ (30,15)
+ (255,255,255,170)
+
+ false
+ 0
+
+ Wula/Weapon/WULA_Weapon_Empty
+ (0, 0)
+ 0
+ FlyOver/Flying
+
+
+
+
+ Wula/Weapon/WULA_Weapon_Empty
+ true
+ 0.8
+ 0
+ 0
+ 0
+ 0
+
+ true
+ 1
+ 20
+
+
+ true
+ false
+ false
+ false
+ MetaOverlays
+
+
+ WULA_Striker_A
+
- Bullet_WULA_RW_Fractal_RF
- 30
- 50
- 3
+ Bullet_WULA_Striker_A_Missile
+ 60
+ 85
+ 2
0.3
24
@@ -172,53 +405,50 @@
- Bullet_WULA_Fighter_A_Rocket
-
+ Bullet_WULA_Striker_A_Missile
+
- Wula/Projectile/WULA_Loitering_Munition
+ Wula/Projectile/WULA_Striker_Missile
Graphic_Single
+ (1.25,2.5)
WulaFallenEmpire.Projectile_ExplosiveWithTrail
- BombSuper
+ Bomb
180
30
1
2.0
- 4
+ 3
MortarBomb_Explode
0.5
- false
+ true
- WULA_GunTail_Plasma
- 3
+ WULA_Smoke_Tail
+ 1
-
- WULA_Fighter_B
+
+ WULA_Striker_B
-
- Bullet_WULA_RW_Fractal_RF
- 30
- 50
- 6
- 0.1
- -1
+
+ Bullet_WULA_Striker_B
+ 85
- 13
+ 11
0
0
0
Alternating
- 13
- 13
- 13
+ 2
+ 2
+ 2
Fixed
@@ -227,4 +457,242 @@
+
+ Bullet_WULA_Striker_B
+
+ WulaFallenEmpire.Projectile_ExplosiveWithTrail
+ Normal
+ True
+
+ Wula/Projectile/WULA_Bullet_ChargeLanceShot_Red
+ Graphic_Single
+ TransparentPostLight
+ 5
+
+
+
+
+ Bullet
+ 65
+ 220
+ 1
+ 2.5
+ Artillery_HitThickRoof
+ MortarBomb_Explode
+ MortarRound_PreImpact
+ MortarRound_Ambient
+ 10
+
+
+
+ WULA_GunTail_Lighting
+ 5
+
+
+
+
+ WULA_Striker_C
+
+
+ Bullet_Shell_EMP
+ 20
+
+
+ 11
+ 0
+ 0
+ 0
+ Alternating
+
+
+ 2
+ 2
+ 2
+ Fixed
+
+
+ true
+ Mote_SparkSimple
+
+
+
+
+
+ WulaFallenEmpire.FlyOver
+
+ Normal
+ RealtimeOnly
+
+
+ Wula/FlyoverThing/WULA_Bomber_Shadow
+ Graphic_Single
+ TransparentPostLight
+ (50,35)
+ (255,255,255,120)
+
+ false
+ 0
+
+ Wula/Weapon/WULA_Weapon_Empty
+ (0, 0)
+ 0
+ FlyOver/Flying
+
+
+
+
+ Wula/Weapon/WULA_Weapon_Empty
+ true
+ 0.8
+ 0
+ 0
+ 0
+ 0
+
+ true
+ 1
+ 20
+
+
+ true
+ false
+ false
+ false
+ MetaOverlays
+
+
+ WULA_Bomber_A
+
+
+ Bullet_WULA_Bomber_A_Bomb
+ 35
+
+
+ 11
+ 0
+ 0
+ 0
+ Alternating
+
+
+ 2
+ 2
+ 2
+ Fixed
+
+
+ true
+ Mote_SparkSimple
+
+
+
+
+ Bullet_WULA_Bomber_A_Bomb
+
+
+ Wula/Projectile/WULA_Shrapnel
+ Graphic_Single
+ (2,2.5)
+
+ WulaFallenEmpire.Projectile_ExplosiveWithTrail
+
+ Bomb
+ 25
+ 180
+ 2
+ 2.0
+ 8
+ MortarBomb_Explode
+ 0.5
+ true
+
+
+
+ WULA_Smoke_Tail
+ 1
+
+
+
+
+ WULA_Bomber_B
+
+
+ Bullet_Shell_Smoke
+ 35
+
+
+ 11
+ 0
+ 0
+ 0
+ Alternating
+
+
+ 2
+ 2
+ 2
+ Fixed
+
+
+ true
+ Mote_SparkSimple
+
+
+
+
+ WULA_Bomber_C
+
+
+ Bullet_WULA_Bomber_C_DrakMatterBomb
+ 35
+
+
+ 11
+ 0
+ 0
+ 0
+ Alternating
+
+
+ 2
+ 2
+ 2
+ Fixed
+
+
+ true
+ Mote_SparkSimple
+
+
+
+
+ Bullet_WULA_Bomber_C_DrakMatterBomb
+
+
+ Wula/Projectile/WULA_Striker_Missile
+ Graphic_Single
+ (3,5)
+
+ WulaFallenEmpire.Projectile_ExplosiveWithTrail
+
+ BombSuper
+ 15
+ 1200
+ 2
+ 2.0
+ 32
+ Explosion_GiantBomb
+ false
+ 0.5
+ true
+ GiantExplosion
+ CraterLarge
+
+
+
+ WULA_Smoke_Tail
+ 1
+
+
+
\ No newline at end of file
diff --git a/1.6/1.6/Defs/ThingDefs_Misc/WULA_Item.xml b/1.6/1.6/Defs/ThingDefs_Misc/WULA_Item.xml
new file mode 100644
index 00000000..bca2d957
--- /dev/null
+++ b/1.6/1.6/Defs/ThingDefs_Misc/WULA_Item.xml
@@ -0,0 +1,368 @@
+
+
+
+ WULA_Alloy
+
+ 由乌拉帝国工艺加工得到的高密度合金,是许多乌拉帝国装备的原材料。
+
+ Wula/Item/WULA_Neutronium
+ Graphic_Single
+
+ None
+ false
+ Metal_Drop
+ Metal_Drop
+ false
+ false
+
+ 2.5
+ 0.3
+ 1
+ 0.55
+ 0.7
+ 3
+ 0
+ 1
+ 1
+
+
+ ResourcesRaw
+
+ false
+ true
+
+
+ Metallic
+
+ Metal
+ 0
+ false
+ ConstructMetal
+ (105,105,105)
+ BulletImpact_Metal
+ MeleeHit_Metal_Sharp
+ MeleeHit_Metal_Blunt
+ Pawn_Melee_Punch_HitBuilding_Metal
+
+ 0
+
+
+ 1
+ 1
+ 0
+
+
+ Medium
+ 80
+ 100
+
+
+ WULA_Dark_Matter_Item
+
+ 由乌拉帝国技术完成封装的一小块暗物质,这种神秘物质具有许多似乎可以打破所谓自然法则的性质。\n\n注意:暗物质约束装置很脆弱,受到冲击时将引发大范围湮灭反应!
+
+ Wula/Item/WULA_Dark_Matter_Item
+ Graphic_Single
+
+ Normal
+ false
+ false
+ Metal_Drop
+ Metal_Drop
+ false
+ false
+
+ 1000
+ 0.01
+ 50
+
+
+ ResourcesRaw
+
+ false
+ Medium
+ 80
+ 1
+
+
+ 12
+ BombSuper
+ 1
+
+ Bullet
+ Arrow
+ ArrowHighVelocity
+
+ 0.333
+
+ 1
+ 1
+
+
+
+
+ WULA_Neutronium
+
+ 零素也称中子元素,是中子星的主要构成成分,相比常规合金更适合作为装甲和近战武器的铸造材料,乌拉帝国通过以暗物质驱动的科技进行材料压缩,可以人为地制造这种强大材料。
+
+ Wula/Item/WULA_Neutronium
+ Graphic_Single
+
+ None
+ false
+ Metal_Drop
+ Metal_Drop
+ false
+ false
+
+ 1
+ 1
+ 3
+ 3
+ 1
+ 0
+ 0
+ 2
+ 3
+
+
+ ResourcesRaw
+
+ false
+ true
+
+
+ Metallic
+
+ Metal
+ 0
+ false
+ ConstructMetal
+ (63, 74, 70)
+ BulletImpact_Metal
+ MeleeHit_Metal_Sharp
+ MeleeHit_Metal_Blunt
+ Pawn_Melee_Punch_HitBuilding_Metal
+
+ 0
+
+
+ 5
+ 0
+ 10
+ 10
+ 10
+ 1.1
+
+
+ Heavy
+ 200
+ 50
+
+
+
+ WULA_Charge_Cube
+
+ 被高度压缩的能源核心,是机械乌拉的能源系统唯一可接受的外部输入性能量来源。
+ ThingWithComps
+ Item
+ MapMeshOnly
+ true
+ false
+ true
+
+ Wula/Item/WULA_Charge_Cube
+ Graphic_Single
+
+ 30
+
+ 1
+ 50
+ 0
+ 0
+ 0.01
+ 24
+ 0.3
+ 450
+
+ Item
+ Rare
+ true
+
+ FoodMeals
+
+ true
+ 14
+
+ Liquor
+ 1
+ 1
+ 16
+ 270
+ NeverForNutrition
+ -1000
+ -1000
+ EatVegetarian
+ MechResurrectCast
+
+
+ WULA_ChargingHediff
+ 1.0
+
+
+
+ 200
+ None
+ Last
+ true
+ 1
+
+
+
+ Ingest
+ 从能量核心中摄取能量
+ true
+
+
+
+
+ 12.0
+
+
+
+
+ WULA_Charge_Cube_No_Power
+
+ 被使用过的乌拉帝国能源核心,需要重新充能。
+
+ Wula/Item/WULA_Charge_Cube_Without_Power
+ Graphic_Single
+
+ 30
+
+ 0.01
+ 24
+ 0.3
+ 450
+
+
+ ItemsMisc
+
+
+ 200
+ None
+
+
+
+
+ WULA_Soul_Wedge
+
+ 一种通过特殊手段将生命体灵魂抽离封装得到的物品,是乌拉帝国灵能理论中“灵魂量化”的集中体现,可为各种乌拉帝国灵能法杖充能,也可以直接作为金属成分加入锻造。
+
+ Wula/Item/WULA_Soul_Wedge
+ Graphic_Single
+
+ false
+ Metal_Drop
+ Metal_Drop
+ false
+ false
+ 500
+
+ 0.75
+ 0.01
+ 1.5
+ 1.5
+ 0.1
+ 0
+ 0
+ 1.2
+ 1.2
+
+
+ ResourcesRaw
+
+ false
+ true
+
+
+ Metallic
+
+ Metal
+ 0
+ false
+ ConstructMetal
+ (190, 120, 210)
+ BulletImpact_Metal
+ MeleeHit_Metal_Sharp
+ MeleeHit_Metal_Blunt
+ Pawn_Melee_Punch_HitBuilding_Metal
+
+ 1
+
+
+ 0.75
+ 0.5
+ 0
+ 2
+ 2
+ 1
+ 0.8
+
+
+
+ PsychicSensitivityFactor
+ 1.06
+ 1.08
+ 1.1
+ 1.13
+ 1.15
+ 1.17
+ 1.20
+
+
+
+
+ PsychicEntropyMaxOffset
+ 4
+ 6
+ 8
+ 11
+ 13
+ 15
+ 18
+
+
+ PsychicEntropyRecoveryRateOffset
+ 0.04
+ 0.04
+ 0.04
+ 0.04
+ 0.04
+ 0.04
+ 0.04
+
+
+
+ Medium
+ 80
+ 50
+
+
diff --git a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Remake_Weapon.xml b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Remake_Weapon.xml
index b007904d..eca26630 100644
--- a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Remake_Weapon.xml
+++ b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Remake_Weapon.xml
@@ -66,6 +66,9 @@
+
+ Weapon
+
Melee
@@ -432,6 +435,9 @@
+
+ Weapon
+
Shooting
diff --git a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml
index c9e0e5c2..50573e39 100644
--- a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml
+++ b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml
@@ -2,66 +2,6 @@
-
- WULA_WM_Panzer_Turret
-
- 由乌拉帝国的"萨克森"战车所装备的战车炮塔,可以从极远距离上精准地点杀高价值目标。
- None
- true
- Ultra
-
- Wula/Weapon/WULA_WM_Panzer_Turret
- Graphic_Single
- 3
-
- 0.33
-
- 150
- 1
- 2
- 2
- 2
-
-
-
- Verb_Shoot
- true
- Bullet_WULA_WM_Panzer_Turret
- 0
- 4
- 5.9
- 75
- 1
- 0.1
- Shot_TurretSniper
- GunTail_Heavy
- 18
-
-
-
-
- Bullet_WULA_WM_Panzer_Turret
-
- Projectile_Explosive
- Normal
- True
-
- Wula/Projectile/WULA_Bullet_ChargeLanceShot_Red
- Graphic_Single
- TransparentPostLight
- 3.4
-
-
- Bullet
- 385
- 220
- 5
- Explosion_Rocket
- 3.5
- 0.4
- 1
-
-
WULA_WM_Panzer_Autocannon
diff --git a/1.6/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml b/1.6/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml
index 4148e92f..d4ceae68 100644
--- a/1.6/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml
+++ b/1.6/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml
@@ -497,6 +497,12 @@
true
+ WULA_Latex_Catsuit
+ WULA_Pantyhose_White
+ WULA_Pantyhose_Black
+ WULA_Bodystocking_White
+ WULA_Bodystocking_Black
+ WULA_Maid_Uniform
Apparel_AdvancedHelmet
@@ -727,6 +733,9 @@
+
+ Mechanoid
+
true
diff --git a/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/Misc_Gameplay.xml b/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/Misc_Gameplay.xml
index 221854c6..3bf492b8 100644
--- a/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/Misc_Gameplay.xml
+++ b/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/Misc_Gameplay.xml
@@ -92,6 +92,10 @@
该空投地点顶部有屋顶,无法进行空投
被厚岩顶阻挡
被屋顶阻挡
+
+ 需要拥有-建筑空投设施-的战舰部署在殖民地轨道上才能空投
+ 需要拥有-建筑空投设施-的战舰部署在殖民地轨道上才能空投
+ 没有拥有-建筑空投设施-的战舰部署在殖民地轨道上
维护舱状态
@@ -173,17 +177,19 @@
空投成品
- 将乌拉帝国母舰和后勤舰上完成加工的所有物品通过空投舱投放到指定区域
+ 将乌拉帝国母舰和工程舰上完成加工的所有物品通过空投舱投放到指定区域
无法执行空投:工作台未就绪
没有可空投的物品
目标距离超出最大空投范围({0})
没有有效的空投落点。请选择另一个位置
无法分配物品到空投舱
成功空投了{0}个空投舱
+ 需要拥有-生产设施-的战舰部署在殖民地轨道上才能空投
+ 当前地图上没有拥有-生产设施-的战舰部署在殖民地轨道上,无法进行空投
发射战机
- 手动发射战机到全球战机库
+ 手动发射战机到战机库
启用自动发射
启用战机自动发射功能
取消自动发射
@@ -210,6 +216,7 @@
{0}件物资被舰队退回(随着下一次成品空投一起退回)
输入存储: {0}
输出存储: {0}
+ 舰队拒绝接收物资——里面包含了殖民者、动物、尸体或有毒垃圾
材质
为此武器选择材质
@@ -230,6 +237,12 @@
普遍性
前缀
+
+ 装备
+ 武器
+ 机械体
+ 请先选择分类
+
纳米修复能量消耗
纳米修复系统修复每点生命值所消耗的能量。数值越低,修复消耗越低。
diff --git a/1.6/Odyssey/Defs/ThingDefs_Buildings/Buildings_WULA_Odyssey.xml b/1.6/Odyssey/Defs/ThingDefs_Buildings/Buildings_WULA_Odyssey.xml
deleted file mode 100644
index 4d4c4c2f..00000000
--- a/1.6/Odyssey/Defs/ThingDefs_Buildings/Buildings_WULA_Odyssey.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
-
- Wula_DarkEnergy_FuelTank
-
- 乌拉帝国用于进行湮灭反应释放巨量能源并将其转化为逆重飞船飞行所需燃料的设备——它可以储存无限的能源,并且在真空环境下还能释放大量的电力。\n\n如果是想进入地表,请提前规划电源储存,非真空环境下内部的湮灭反应保险将启动以防止意外发生,这意味着在地表上该设施只生产燃料!
- Normal
-
- Wula/Building/Wula_DarkEnergy_FuelTank
- Graphic_Single
- (3,3.2)
- (0,0,0.2)
-
- false
-
-
- false
-
- 300
- 70
- 1
- -10
- 3000
-
- (3, 3)
-
- 400
- 8
- 1
-
- WULA_Buildings
-
-
- 12
- (177, 0, 31, 0)
- true
- true
-
-
- CompPowerTrader
- -36000
- true
- ChemfuelFiredGenerator_Ambience
-
-
- 0
- false
-
-
- -20
- 1000
- false
-
-
- AncientExostriderLeg
-
-
- 暗物质燃料
- 暗物质燃料
- false
- 1
- true
- false
- false
- false
- false
- 0.000001
-
-
- 2155
-
- WULA_Dark_Matter_Technology
-
-
-
\ No newline at end of file
diff --git a/Content/Sounds/Wula/WULA_MW_Mass_Drivers_Shootingsound.wav b/Content/Sounds/Wula/WULA_MW_Mass_Drivers_Shootingsound.wav
new file mode 100644
index 00000000..7ca9ec75
Binary files /dev/null and b/Content/Sounds/Wula/WULA_MW_Mass_Drivers_Shootingsound.wav differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Bodystocking.png b/Content/Textures/Wula/Apparel/WULA_Bodystocking.png
index f16e9218..d1d4920d 100644
Binary files a/Content/Textures/Wula/Apparel/WULA_Bodystocking.png and b/Content/Textures/Wula/Apparel/WULA_Bodystocking.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Bodystocking_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Bodystocking_Thin_east.png
index 417b2f1c..3a2602cf 100644
Binary files a/Content/Textures/Wula/Apparel/WULA_Bodystocking_Thin_east.png and b/Content/Textures/Wula/Apparel/WULA_Bodystocking_Thin_east.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Bodystocking_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Bodystocking_Thin_north.png
index 8590a3c0..88f7e8c7 100644
Binary files a/Content/Textures/Wula/Apparel/WULA_Bodystocking_Thin_north.png and b/Content/Textures/Wula/Apparel/WULA_Bodystocking_Thin_north.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Bodystocking_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Bodystocking_Thin_south.png
index 7ae32d04..38a5a724 100644
Binary files a/Content/Textures/Wula/Apparel/WULA_Bodystocking_Thin_south.png and b/Content/Textures/Wula/Apparel/WULA_Bodystocking_Thin_south.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Bodystocking_White.png b/Content/Textures/Wula/Apparel/WULA_Bodystocking_White.png
index f5c8c8f5..6df53a46 100644
Binary files a/Content/Textures/Wula/Apparel/WULA_Bodystocking_White.png and b/Content/Textures/Wula/Apparel/WULA_Bodystocking_White.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_east.png
index d67fbc1b..7affa0dc 100644
Binary files a/Content/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_east.png and b/Content/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_east.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_north.png
index 1001669a..e99edaf3 100644
Binary files a/Content/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_north.png and b/Content/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_north.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_south.png
index 9c6ce980..a1c13565 100644
Binary files a/Content/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_south.png and b/Content/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_south.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Latex_Catsuit.png b/Content/Textures/Wula/Apparel/WULA_Latex_Catsuit.png
new file mode 100644
index 00000000..fe30f61b
Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Latex_Catsuit.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Latex_Catsuit_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Latex_Catsuit_Thin_east.png
new file mode 100644
index 00000000..0e2bdcd2
Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Latex_Catsuit_Thin_east.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Latex_Catsuit_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Latex_Catsuit_Thin_north.png
new file mode 100644
index 00000000..b2c54b73
Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Latex_Catsuit_Thin_north.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Latex_Catsuit_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Latex_Catsuit_Thin_south.png
new file mode 100644
index 00000000..20570ad0
Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Latex_Catsuit_Thin_south.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Maid_Uniform.png b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform.png
index 5aa24c4d..dd66ce90 100644
Binary files a/Content/Textures/Wula/Apparel/WULA_Maid_Uniform.png and b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband.png b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband.png
index 448389c9..949e78e2 100644
Binary files a/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband.png and b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_east.png b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_east.png
index 2d96d39f..0e9d0b54 100644
Binary files a/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_east.png and b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_east.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_south.png b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_south.png
index 2ab174b1..19efa43f 100644
Binary files a/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_south.png and b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_south.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_east.png
index 602c2612..4eeea9dc 100644
Binary files a/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_east.png and b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_east.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_north.png
index 4ddf73b0..657c208f 100644
Binary files a/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_north.png and b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_north.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_south.png
index 7fafb6ab..7789a88c 100644
Binary files a/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_south.png and b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_south.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Nun_Uniform.png b/Content/Textures/Wula/Apparel/WULA_Nun_Uniform.png
deleted file mode 100644
index 4825897c..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Nun_Uniform.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_east.png
deleted file mode 100644
index c8e0e72a..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_east.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_north.png
deleted file mode 100644
index cb551883..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_north.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_south.png
deleted file mode 100644
index 537d2531..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_south.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_west.png b/Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_west.png
deleted file mode 100644
index 528337ed..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_west.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Nun_veil.png b/Content/Textures/Wula/Apparel/WULA_Nun_veil.png
deleted file mode 100644
index f8d0a3fb..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Nun_veil.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Nun_veil_east.png b/Content/Textures/Wula/Apparel/WULA_Nun_veil_east.png
deleted file mode 100644
index ee625315..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Nun_veil_east.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Nun_veil_north.png b/Content/Textures/Wula/Apparel/WULA_Nun_veil_north.png
deleted file mode 100644
index e7e2a133..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Nun_veil_north.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Nun_veil_south.png b/Content/Textures/Wula/Apparel/WULA_Nun_veil_south.png
deleted file mode 100644
index d328790a..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Nun_veil_south.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform.png b/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform.png
deleted file mode 100644
index e9715c12..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband.png b/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband.png
deleted file mode 100644
index ba61f761..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_east.png b/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_east.png
deleted file mode 100644
index bbbdae50..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_east.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_north.png b/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_north.png
deleted file mode 100644
index 7e0e03d7..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_north.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_south.png b/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_south.png
deleted file mode 100644
index b2ce67fb..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_south.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_east.png
deleted file mode 100644
index 7fce6b61..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_east.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_north.png
deleted file mode 100644
index 054e4b19..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_north.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_south.png
deleted file mode 100644
index be08a784..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_south.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_west.png b/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_west.png
deleted file mode 100644
index 44695531..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_west.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Pantyhose_Black.png b/Content/Textures/Wula/Apparel/WULA_Pantyhose_Black.png
new file mode 100644
index 00000000..e760da3b
Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Pantyhose_Black.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Pantyhose_Black_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Pantyhose_Black_Thin_east.png
new file mode 100644
index 00000000..1521d0db
Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Pantyhose_Black_Thin_east.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Pantyhose_Black_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Pantyhose_Black_Thin_north.png
new file mode 100644
index 00000000..89446f4e
Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Pantyhose_Black_Thin_north.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Pantyhose_Black_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Pantyhose_Black_Thin_south.png
new file mode 100644
index 00000000..c0f25e91
Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Pantyhose_Black_Thin_south.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Pantyhose_White.png b/Content/Textures/Wula/Apparel/WULA_Pantyhose_White.png
new file mode 100644
index 00000000..b7fe99d9
Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Pantyhose_White.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Pantyhose_White_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Pantyhose_White_Thin_east.png
new file mode 100644
index 00000000..b7506604
Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Pantyhose_White_Thin_east.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Pantyhose_White_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Pantyhose_White_Thin_north.png
new file mode 100644
index 00000000..bbc3bbf5
Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Pantyhose_White_Thin_north.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Pantyhose_White_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Pantyhose_White_Thin_south.png
new file mode 100644
index 00000000..8ea7e84a
Binary files /dev/null and b/Content/Textures/Wula/Apparel/WULA_Pantyhose_White_Thin_south.png differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Priest_Hat.png b/Content/Textures/Wula/Apparel/WULA_Priest_Hat.png
deleted file mode 100644
index c63dd4cd..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Priest_Hat.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Priest_Hat_east.png b/Content/Textures/Wula/Apparel/WULA_Priest_Hat_east.png
deleted file mode 100644
index 88b7f510..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Priest_Hat_east.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Priest_Hat_north.png b/Content/Textures/Wula/Apparel/WULA_Priest_Hat_north.png
deleted file mode 100644
index 352b4c04..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Priest_Hat_north.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Priest_Hat_south.png b/Content/Textures/Wula/Apparel/WULA_Priest_Hat_south.png
deleted file mode 100644
index 73f637a1..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Priest_Hat_south.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Priest_Uniform.png b/Content/Textures/Wula/Apparel/WULA_Priest_Uniform.png
deleted file mode 100644
index 4cfcaebb..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Priest_Uniform.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_east.png
deleted file mode 100644
index 8c4cf799..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_east.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_north.png
deleted file mode 100644
index 7a7371d5..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_north.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_south.png
deleted file mode 100644
index 2d1c1c27..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_south.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Qipao.png b/Content/Textures/Wula/Apparel/WULA_Qipao.png
deleted file mode 100644
index 75ad690e..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Qipao.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Qipao_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Qipao_Thin_east.png
deleted file mode 100644
index 7fb6de8c..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Qipao_Thin_east.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Qipao_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Qipao_Thin_north.png
deleted file mode 100644
index 5c14c2fa..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Qipao_Thin_north.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Qipao_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Qipao_Thin_south.png
deleted file mode 100644
index ce74d58e..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Qipao_Thin_south.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Sailor_Dress.png b/Content/Textures/Wula/Apparel/WULA_Sailor_Dress.png
deleted file mode 100644
index 4d117f23..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Sailor_Dress.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_east.png
deleted file mode 100644
index 891c31b1..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_east.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_north.png
deleted file mode 100644
index 6f3abeb1..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_north.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_south.png
deleted file mode 100644
index 9555613f..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_south.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Witch_Hat.png b/Content/Textures/Wula/Apparel/WULA_Witch_Hat.png
deleted file mode 100644
index e9806b4a..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Witch_Hat.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Witch_Hat_east.png b/Content/Textures/Wula/Apparel/WULA_Witch_Hat_east.png
deleted file mode 100644
index e5da1eba..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Witch_Hat_east.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Witch_Hat_north.png b/Content/Textures/Wula/Apparel/WULA_Witch_Hat_north.png
deleted file mode 100644
index fd46608b..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Witch_Hat_north.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Witch_Hat_south.png b/Content/Textures/Wula/Apparel/WULA_Witch_Hat_south.png
deleted file mode 100644
index bc371329..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Witch_Hat_south.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Witch_Uniform.png b/Content/Textures/Wula/Apparel/WULA_Witch_Uniform.png
deleted file mode 100644
index 30f5496e..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Witch_Uniform.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Witch_Uniform_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Witch_Uniform_Thin_east.png
deleted file mode 100644
index ffd0227c..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Witch_Uniform_Thin_east.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Witch_Uniform_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Witch_Uniform_Thin_north.png
deleted file mode 100644
index f10b504c..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Witch_Uniform_Thin_north.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_Witch_Uniform_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Witch_Uniform_Thin_south.png
deleted file mode 100644
index e4533569..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_Witch_Uniform_Thin_south.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_official_uniform.png b/Content/Textures/Wula/Apparel/WULA_official_uniform.png
deleted file mode 100644
index 549c0c8c..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_official_uniform.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_east.png
deleted file mode 100644
index 766b7e30..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_east.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_north.png
deleted file mode 100644
index 936024ba..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_north.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_south.png
deleted file mode 100644
index 912d3b97..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_south.png and /dev/null differ
diff --git a/Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_west.png b/Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_west.png
deleted file mode 100644
index 3a8e85f3..00000000
Binary files a/Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_west.png and /dev/null differ
diff --git a/Content/Textures/Wula/Building/WULA_Cube_Productor_BIO_south.png b/Content/Textures/Wula/Building/WULA_Cube_Productor_BIO_south.png
deleted file mode 100644
index 8f1068e5..00000000
Binary files a/Content/Textures/Wula/Building/WULA_Cube_Productor_BIO_south.png and /dev/null differ
diff --git a/Content/Textures/Wula/Building/WULA_Cube_Productor_Incoming.png b/Content/Textures/Wula/Building/WULA_Cube_Productor_Incoming.png
new file mode 100644
index 00000000..83da2f81
Binary files /dev/null and b/Content/Textures/Wula/Building/WULA_Cube_Productor_Incoming.png differ
diff --git a/Content/Textures/Wula/Building/WULA_Fake_Bomber_Beacon_Building.png b/Content/Textures/Wula/Building/WULA_Fake_Bomber_Beacon_Building.png
new file mode 100644
index 00000000..12b1d586
Binary files /dev/null and b/Content/Textures/Wula/Building/WULA_Fake_Bomber_Beacon_Building.png differ
diff --git a/Content/Textures/Wula/Building/WULA_Fake_Fighter_Drone_Building.png b/Content/Textures/Wula/Building/WULA_Fake_Fighter_Drone_Building.png
new file mode 100644
index 00000000..21f19680
Binary files /dev/null and b/Content/Textures/Wula/Building/WULA_Fake_Fighter_Drone_Building.png differ
diff --git a/Content/Textures/Wula/Building/WULA_Fake_Striker_Beacon_Building.png b/Content/Textures/Wula/Building/WULA_Fake_Striker_Beacon_Building.png
new file mode 100644
index 00000000..ffb5b925
Binary files /dev/null and b/Content/Textures/Wula/Building/WULA_Fake_Striker_Beacon_Building.png differ
diff --git a/Content/Textures/Wula/Building/WULA_Flyover_Beacon.png b/Content/Textures/Wula/Building/WULA_Flyover_Beacon.png
new file mode 100644
index 00000000..27b878ee
Binary files /dev/null and b/Content/Textures/Wula/Building/WULA_Flyover_Beacon.png differ
diff --git a/Content/Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_east.png b/Content/Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_east.png
deleted file mode 100644
index 38c15e66..00000000
Binary files a/Content/Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_east.png and /dev/null differ
diff --git a/Content/Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_north.png b/Content/Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_north.png
deleted file mode 100644
index 38c15e66..00000000
Binary files a/Content/Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_north.png and /dev/null differ
diff --git a/Content/Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_south.png b/Content/Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_south.png
deleted file mode 100644
index 38c15e66..00000000
Binary files a/Content/Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_south.png and /dev/null differ
diff --git a/Content/Textures/Wula/Building/WULA_Turret_Component.png b/Content/Textures/Wula/Building/WULA_Turret_Component.png
index 259c4676..50235d2c 100644
Binary files a/Content/Textures/Wula/Building/WULA_Turret_Component.png and b/Content/Textures/Wula/Building/WULA_Turret_Component.png differ
diff --git a/Content/Textures/Wula/Building/WULA_WM_Panzer_Autocannon.png b/Content/Textures/Wula/Building/WULA_WM_Panzer_Autocannon.png
deleted file mode 100644
index 955e178b..00000000
Binary files a/Content/Textures/Wula/Building/WULA_WM_Panzer_Autocannon.png and /dev/null differ
diff --git a/Content/Textures/Wula/Building/WULA_WeaponArmor_Productor_east.png b/Content/Textures/Wula/Building/WULA_WeaponArmor_Productor_east.png
deleted file mode 100644
index f6abb091..00000000
Binary files a/Content/Textures/Wula/Building/WULA_WeaponArmor_Productor_east.png and /dev/null differ
diff --git a/Content/Textures/Wula/Building/WULA_WeaponArmor_Productor_north.png b/Content/Textures/Wula/Building/WULA_WeaponArmor_Productor_north.png
deleted file mode 100644
index b823529a..00000000
Binary files a/Content/Textures/Wula/Building/WULA_WeaponArmor_Productor_north.png and /dev/null differ
diff --git a/Content/Textures/Wula/Building/WULA_WeaponArmor_Productor_south.png b/Content/Textures/Wula/Building/WULA_WeaponArmor_Productor_south.png
deleted file mode 100644
index b823529a..00000000
Binary files a/Content/Textures/Wula/Building/WULA_WeaponArmor_Productor_south.png and /dev/null differ
diff --git a/Content/Textures/Wula/Building/Wula_AI_Heavy_Panzer_Gunnery_Turret.png b/Content/Textures/Wula/Building/Wula_AI_Heavy_Panzer_Gunnery_Turret.png
deleted file mode 100644
index cafc70c7..00000000
Binary files a/Content/Textures/Wula/Building/Wula_AI_Heavy_Panzer_Gunnery_Turret.png and /dev/null differ
diff --git a/Content/Textures/Wula/Building/Wula_Base_ATGun_Turret.png b/Content/Textures/Wula/Building/Wula_Base_ATGun_Turret.png
new file mode 100644
index 00000000..1196e057
Binary files /dev/null and b/Content/Textures/Wula/Building/Wula_Base_ATGun_Turret.png differ
diff --git a/Content/Textures/Wula/Building/Wula_Base_ATGun_Turret_Incoming.png b/Content/Textures/Wula/Building/Wula_Base_ATGun_Turret_Incoming.png
new file mode 100644
index 00000000..61d01a76
Binary files /dev/null and b/Content/Textures/Wula/Building/Wula_Base_ATGun_Turret_Incoming.png differ
diff --git a/Content/Textures/Wula/Building/Wula_Base_ATGun_Turret_Weapon.png b/Content/Textures/Wula/Building/Wula_Base_ATGun_Turret_Weapon.png
new file mode 100644
index 00000000..38bce676
Binary files /dev/null and b/Content/Textures/Wula/Building/Wula_Base_ATGun_Turret_Weapon.png differ
diff --git a/Content/Textures/Wula/Building/Wula_Base_Laser_Turret.png b/Content/Textures/Wula/Building/Wula_Base_Laser_Turret.png
new file mode 100644
index 00000000..3f74bf92
Binary files /dev/null and b/Content/Textures/Wula/Building/Wula_Base_Laser_Turret.png differ
diff --git a/Content/Textures/Wula/Building/Wula_Base_Laser_Turret_Incoming.png b/Content/Textures/Wula/Building/Wula_Base_Laser_Turret_Incoming.png
new file mode 100644
index 00000000..f9a3d12a
Binary files /dev/null and b/Content/Textures/Wula/Building/Wula_Base_Laser_Turret_Incoming.png differ
diff --git a/Content/Textures/Wula/Building/Wula_Base_Laser_Turret_Weapon.png b/Content/Textures/Wula/Building/Wula_Base_Laser_Turret_Weapon.png
new file mode 100644
index 00000000..facd54ea
Binary files /dev/null and b/Content/Textures/Wula/Building/Wula_Base_Laser_Turret_Weapon.png differ
diff --git a/Content/Textures/Wula/Building/Wula_DarkEnergy_Generators.png b/Content/Textures/Wula/Building/Wula_DarkEnergy_Generators.png
new file mode 100644
index 00000000..5c9df94b
Binary files /dev/null and b/Content/Textures/Wula/Building/Wula_DarkEnergy_Generators.png differ
diff --git a/Content/Textures/Wula/Building/Wula_DarkEnergy_Generators_Incoming.png b/Content/Textures/Wula/Building/Wula_DarkEnergy_Generators_Incoming.png
new file mode 100644
index 00000000..f70fe075
Binary files /dev/null and b/Content/Textures/Wula/Building/Wula_DarkEnergy_Generators_Incoming.png differ
diff --git a/Content/Textures/Wula/Events/Portraits/WULA_Legion_1.png b/Content/Textures/Wula/Events/Portraits/WULA_Legion_1.png
index fccf58df..7ba32610 100644
Binary files a/Content/Textures/Wula/Events/Portraits/WULA_Legion_1.png and b/Content/Textures/Wula/Events/Portraits/WULA_Legion_1.png differ
diff --git a/Content/Textures/Wula/Events/Portraits/WULA_Legion_2.png b/Content/Textures/Wula/Events/Portraits/WULA_Legion_2.png
new file mode 100644
index 00000000..475aae40
Binary files /dev/null and b/Content/Textures/Wula/Events/Portraits/WULA_Legion_2.png differ
diff --git a/Content/Textures/Wula/Events/Portraits/WULA_Legion_3.png b/Content/Textures/Wula/Events/Portraits/WULA_Legion_3.png
new file mode 100644
index 00000000..ea212c2d
Binary files /dev/null and b/Content/Textures/Wula/Events/Portraits/WULA_Legion_3.png differ
diff --git a/Content/Textures/Wula/Events/Portraits/WULA_Legion_4.png b/Content/Textures/Wula/Events/Portraits/WULA_Legion_4.png
new file mode 100644
index 00000000..45378bab
Binary files /dev/null and b/Content/Textures/Wula/Events/Portraits/WULA_Legion_4.png differ
diff --git a/Content/Textures/Wula/Events/tile_large_bg.png b/Content/Textures/Wula/Events/tile_large_bg.png
index 51e97906..32a7cf6d 100644
Binary files a/Content/Textures/Wula/Events/tile_large_bg.png and b/Content/Textures/Wula/Events/tile_large_bg.png differ
diff --git a/Content/Textures/Wula/FlyoverThing/WULA_BattleShip_Shadow.png b/Content/Textures/Wula/FlyoverThing/WULA_BattleShip_Shadow.png
index d2de877d..31a6d373 100644
Binary files a/Content/Textures/Wula/FlyoverThing/WULA_BattleShip_Shadow.png and b/Content/Textures/Wula/FlyoverThing/WULA_BattleShip_Shadow.png differ
diff --git a/Content/Textures/Wula/FlyoverThing/WULA_Bomber_Shadow.png b/Content/Textures/Wula/FlyoverThing/WULA_Bomber_Shadow.png
new file mode 100644
index 00000000..8cbc7c94
Binary files /dev/null and b/Content/Textures/Wula/FlyoverThing/WULA_Bomber_Shadow.png differ
diff --git a/Content/Textures/Wula/FlyoverThing/WULA_ConstructionShip_Shadow.png b/Content/Textures/Wula/FlyoverThing/WULA_ConstructionShip_Shadow.png
new file mode 100644
index 00000000..23b351fc
Binary files /dev/null and b/Content/Textures/Wula/FlyoverThing/WULA_ConstructionShip_Shadow.png differ
diff --git a/Content/Textures/Wula/FlyoverThing/WULA_Fighter_Drone_Shadow.png b/Content/Textures/Wula/FlyoverThing/WULA_Fighter_Drone_Shadow.png
new file mode 100644
index 00000000..a9a91bc1
Binary files /dev/null and b/Content/Textures/Wula/FlyoverThing/WULA_Fighter_Drone_Shadow.png differ
diff --git a/Content/Textures/Wula/FlyoverThing/WULA_Fighter_Shadow.png b/Content/Textures/Wula/FlyoverThing/WULA_Fighter_Shadow.png
index 6aa6bd71..e855cb92 100644
Binary files a/Content/Textures/Wula/FlyoverThing/WULA_Fighter_Shadow.png and b/Content/Textures/Wula/FlyoverThing/WULA_Fighter_Shadow.png differ
diff --git a/Content/Textures/Wula/FlyoverThing/WULA_MotherShip_Shadow.png b/Content/Textures/Wula/FlyoverThing/WULA_MotherShip_Shadow.png
new file mode 100644
index 00000000..d2de877d
Binary files /dev/null and b/Content/Textures/Wula/FlyoverThing/WULA_MotherShip_Shadow.png differ
diff --git a/Content/Textures/Wula/Projectile/WULA_Striker_Missile.png b/Content/Textures/Wula/Projectile/WULA_Striker_Missile.png
new file mode 100644
index 00000000..84cabe88
Binary files /dev/null and b/Content/Textures/Wula/Projectile/WULA_Striker_Missile.png differ
diff --git a/Content/Textures/Wula/Storyteller/WULA_Anisia.png b/Content/Textures/Wula/Storyteller/WULA_Anisia.png
deleted file mode 100644
index 30b2f65c..00000000
Binary files a/Content/Textures/Wula/Storyteller/WULA_Anisia.png and /dev/null differ
diff --git a/Content/Textures/Wula/Storyteller/WULA_Anisia_TINY.png b/Content/Textures/Wula/Storyteller/WULA_Anisia_TINY.png
deleted file mode 100644
index 3dde208f..00000000
Binary files a/Content/Textures/Wula/Storyteller/WULA_Anisia_TINY.png and /dev/null differ
diff --git a/Content/Textures/Wula/Storyteller/WULA_Legion.png b/Content/Textures/Wula/Storyteller/WULA_Legion.png
index 0fe83e60..13088377 100644
Binary files a/Content/Textures/Wula/Storyteller/WULA_Legion.png and b/Content/Textures/Wula/Storyteller/WULA_Legion.png differ
diff --git a/Content/Textures/Wula/Storyteller/WULA_Legion_TINY.png b/Content/Textures/Wula/Storyteller/WULA_Legion_TINY.png
index c1f30154..96426aee 100644
Binary files a/Content/Textures/Wula/Storyteller/WULA_Legion_TINY.png and b/Content/Textures/Wula/Storyteller/WULA_Legion_TINY.png differ
diff --git a/Content/Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_south.png b/Content/Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_south.png
index a6a42e60..09835971 100644
Binary files a/Content/Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_south.png and b/Content/Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_south.png differ
diff --git a/Content/Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/normal_south.png b/Content/Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/normal_south.png
index 8b439715..28c73951 100644
Binary files a/Content/Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/normal_south.png and b/Content/Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/normal_south.png differ
diff --git a/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Bomber_BaseBomb.png b/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Bomber_BaseBomb.png
new file mode 100644
index 00000000..a2f6312c
Binary files /dev/null and b/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Bomber_BaseBomb.png differ
diff --git a/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Bomber_DarkMatterBomb.png b/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Bomber_DarkMatterBomb.png
new file mode 100644
index 00000000..b9ab9d2e
Binary files /dev/null and b/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Bomber_DarkMatterBomb.png differ
diff --git a/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Bomber_Smoke.png b/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Bomber_Smoke.png
new file mode 100644
index 00000000..6dc3efac
Binary files /dev/null and b/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Bomber_Smoke.png differ
diff --git a/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Fighter_Drone_Bomb.png b/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Fighter_Drone_Bomb.png
new file mode 100644
index 00000000..4e815752
Binary files /dev/null and b/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Fighter_Drone_Bomb.png differ
diff --git a/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Fighter_Drone_Laser.png b/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Fighter_Drone_Laser.png
new file mode 100644
index 00000000..3b1e7019
Binary files /dev/null and b/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Fighter_Drone_Laser.png differ
diff --git a/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Striker_EMP.png b/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Striker_EMP.png
new file mode 100644
index 00000000..3ecb249d
Binary files /dev/null and b/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Striker_EMP.png differ
diff --git a/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Striker_Missile.png b/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Striker_Missile.png
new file mode 100644
index 00000000..5bced97b
Binary files /dev/null and b/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Striker_Missile.png differ
diff --git a/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Striker_RailGun.png b/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Striker_RailGun.png
new file mode 100644
index 00000000..c1567fc0
Binary files /dev/null and b/Content/Textures/Wula/UI/Abilities/WULA_Spawn_Striker_RailGun.png differ
diff --git a/Content/Textures/Wula/UI/Commands/WULA_AbsorbDataPack.png b/Content/Textures/Wula/UI/Commands/WULA_AbsorbDataPack.png
new file mode 100644
index 00000000..598a44de
Binary files /dev/null and b/Content/Textures/Wula/UI/Commands/WULA_AbsorbDataPack.png differ
diff --git a/Content/Textures/Wula/UI/Commands/WULA_EjectDataPack.png b/Content/Textures/Wula/UI/Commands/WULA_EjectDataPack.png
new file mode 100644
index 00000000..5628d9cf
Binary files /dev/null and b/Content/Textures/Wula/UI/Commands/WULA_EjectDataPack.png differ
diff --git a/Content/Textures/Wula/UI/Commands/WULA_ShowRadius.png b/Content/Textures/Wula/UI/Commands/WULA_ShowRadius.png
new file mode 100644
index 00000000..0e23cefe
Binary files /dev/null and b/Content/Textures/Wula/UI/Commands/WULA_ShowRadius.png differ
diff --git a/Source/WulaFallenEmpire/BuildingComp/Building_TurretGunHasSpeed.cs b/Source/WulaFallenEmpire/BuildingComp/Building_TurretGunHasSpeed.cs
new file mode 100644
index 00000000..355306a7
--- /dev/null
+++ b/Source/WulaFallenEmpire/BuildingComp/Building_TurretGunHasSpeed.cs
@@ -0,0 +1,924 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using RimWorld;
+using UnityEngine;
+using Verse;
+using Verse.AI;
+using Verse.AI.Group;
+
+namespace WulaFallenEmpire
+{
+ public class ModExt_HasSpeedTurret : DefModExtension
+ {
+ public float speed = 1f;
+ }
+ ///
+ /// 非瞬时瞄准的炮塔建筑类
+ /// 继承自原版炮塔,增加了平滑旋转瞄准功能
+ ///
+ public class Building_TurretGunHasSpeed : Building_TurretGun
+ {
+ // 当前炮塔角度
+ public float curAngle;
+
+ ///
+ /// 旋转速度属性
+ /// 从Mod扩展配置中获取旋转速度,如果没有配置则使用默认值1f
+ ///
+ public float rotateSpeed
+ {
+ get
+ {
+ ModExt_HasSpeedTurret ext = this.ext;
+ return ext.speed;
+ }
+ }
+ ///
+ /// Mod扩展配置属性
+ /// 获取炮塔定义的Mod扩展配置
+ ///
+ public ModExt_HasSpeedTurret ext
+ {
+ get
+ {
+ return this.def.GetModExtension();
+ }
+ }
+
+ ///
+ /// 炮塔方向向量
+ /// 根据当前角度计算炮塔的朝向向量
+ ///
+ public Vector3 turretOrientation
+ {
+ get
+ {
+ return Vector3.forward.RotatedBy(this.curAngle);
+ }
+ }
+
+ ///
+ /// 目标角度差
+ /// 计算当前炮塔方向与目标方向之间的角度差
+ ///
+ public float deltaAngle
+ {
+ get
+ {
+ return (this.currentTargetInt == null) ? 0f : Vector3.SignedAngle(this.turretOrientation, (this.currentTargetInt.CenterVector3 - this.DrawPos).Yto0(), Vector3.up);
+ }
+ }
+
+ ///
+ /// 数据保存和加载
+ /// 重写ExposeData以保存和加载当前角度数据
+ ///
+ public override void ExposeData()
+ {
+ base.ExposeData();
+ Scribe_Values.Look(ref this.curAngle, "curAngle", 0f, false);
+ }
+
+ ///
+ /// 检查是否可以攻击目标(LocalTargetInfo重载)
+ ///
+ /// 目标信息
+ /// 是否可以攻击
+ private bool CanAttackTarget(LocalTargetInfo t)
+ {
+ return this.CanAttackTarget(t.CenterVector3);
+ }
+
+ ///
+ /// 检查是否可以攻击目标(Thing重载)
+ ///
+ /// 目标物体
+ /// 是否可以攻击
+ private bool CanAttackTarget(Thing t)
+ {
+ return this.CanAttackTarget(t.DrawPos);
+ }
+
+ ///
+ /// 检查是否可以攻击目标(Vector3重载)
+ /// 判断目标是否在当前炮塔的瞄准范围内
+ ///
+ /// 目标位置
+ /// 是否可以攻击
+ private bool CanAttackTarget(Vector3 t)
+ {
+ return Vector3.Angle(this.turretOrientation, (t - this.DrawPos).Yto0()) <= this.rotateSpeed;
+ }
+
+ ///
+ /// 每帧更新
+ /// 处理炮塔的旋转逻辑
+ ///
+ protected override void Tick()
+ {
+ // 如果炮塔处于激活状态且有目标
+ if (base.Active && this.currentTargetInt != null)
+ {
+ // 如果准备开火但角度差过大,延迟开火
+ if (this.burstWarmupTicksLeft == 1 && Mathf.Abs(this.deltaAngle) > this.rotateSpeed)
+ {
+ this.burstWarmupTicksLeft++;
+ }
+
+ // 根据角度差更新当前角度
+ this.curAngle += ((Mathf.Abs(this.deltaAngle) - this.rotateSpeed > 0f) ?
+ (Mathf.Sign(this.deltaAngle) * this.rotateSpeed) : this.deltaAngle);
+ }
+
+ base.Tick();
+ // 规范化角度值到0-360度范围
+ this.curAngle = this.Trim(this.curAngle);
+ }
+
+ ///
+ /// 角度规范化
+ /// 将角度值限制在0-360度范围内
+ ///
+ /// 输入角度
+ /// 规范化后的角度
+ protected float Trim(float angle)
+ {
+ if (angle > 360f)
+ {
+ angle -= 360f;
+ }
+ if (angle < 0f)
+ {
+ angle += 360f;
+ }
+ return angle;
+ }
+
+ ///
+ /// 绘制炮塔
+ /// 设置炮塔顶部的旋转角度
+ ///
+ /// 绘制位置
+ /// 是否翻转
+ protected override void DrawAt(Vector3 drawLoc, bool flip = false)
+ {
+ this.top.CurRotation = this.curAngle;
+ base.DrawAt(drawLoc, flip);
+ }
+
+ ///
+ /// 获取目标搜索器
+ /// 如果有人操作则返回操作者,否则返回炮塔自身
+ ///
+ /// 目标搜索器
+ private IAttackTargetSearcher TargSearcher()
+ {
+ if (this.mannableComp != null && this.mannableComp.MannedNow)
+ {
+ return this.mannableComp.ManningPawn;
+ }
+ else
+ {
+ return this;
+ }
+ }
+
+ ///
+ /// 检查目标是否有效
+ /// 过滤不适合攻击的目标
+ ///
+ /// 目标物体
+ /// 目标是否有效
+ private bool IsValidTarget(Thing t)
+ {
+ Pawn pawn = t as Pawn;
+ if (pawn != null)
+ {
+ // 玩家派系的炮塔不攻击囚犯
+ if (base.Faction == Faction.OfPlayer && pawn.IsPrisoner)
+ {
+ return false;
+ }
+
+ // 检查弹道是否会被厚屋顶阻挡
+ if (this.AttackVerb.ProjectileFliesOverhead())
+ {
+ RoofDef roofDef = base.Map.roofGrid.RoofAt(t.Position);
+ if (roofDef != null && roofDef.isThickRoof)
+ {
+ return false;
+ }
+ }
+
+ // 无人操作的机械炮塔不攻击友好机械单位
+ if (this.mannableComp == null)
+ {
+ return !GenAI.MachinesLike(base.Faction, pawn);
+ }
+
+ // 有人操作的炮塔不攻击玩家动物
+ if (pawn.RaceProps.Animal && pawn.Faction == Faction.OfPlayer)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ ///
+ /// 尝试寻找新目标
+ /// 重写目标选择逻辑,支持角度限制
+ ///
+ /// 新的目标信息
+ public override LocalTargetInfo TryFindNewTarget()
+ {
+ IAttackTargetSearcher attackTargetSearcher = this.TargSearcher();
+ Faction faction = attackTargetSearcher.Thing.Faction;
+ float range = this.AttackVerb.verbProps.range;
+
+ Building t;
+ // 50%概率优先攻击殖民者建筑(如果敌对且使用抛射武器)
+ if (Rand.Value < 0.5f && this.AttackVerb.ProjectileFliesOverhead() &&
+ faction.HostileTo(Faction.OfPlayer) &&
+ base.Map.listerBuildings.allBuildingsColonist.Where(delegate (Building x)
+ {
+ float minRange = this.AttackVerb.verbProps.EffectiveMinRange(x, this);
+ float distanceSquared = (float)x.Position.DistanceToSquared(this.Position);
+ return distanceSquared > minRange * minRange && distanceSquared < range * range;
+ }).TryRandomElement(out t))
+ {
+ return t;
+ }
+ else
+ {
+ // 设置目标扫描标志
+ TargetScanFlags targetScanFlags = TargetScanFlags.NeedThreat | TargetScanFlags.NeedAutoTargetable;
+
+ if (!this.AttackVerb.ProjectileFliesOverhead())
+ {
+ targetScanFlags |= TargetScanFlags.NeedLOSToAll;
+ targetScanFlags |= TargetScanFlags.LOSBlockableByGas;
+ }
+
+ if (this.AttackVerb.IsIncendiary_Ranged())
+ {
+ targetScanFlags |= TargetScanFlags.NeedNonBurning;
+ }
+
+ if (this.def.building.IsMortar)
+ {
+ targetScanFlags |= TargetScanFlags.NeedNotUnderThickRoof;
+ }
+
+ // 使用角度感知的目标查找器
+ return (Thing)AttackTargetFinderAngle.BestShootTargetFromCurrentPosition(
+ attackTargetSearcher, targetScanFlags, this.turretOrientation,
+ new Predicate(this.IsValidTarget), 0f, 9999f);
+ }
+ }
+ }
+ ///
+ /// 攻击目标查找器(角度优化版)
+ /// 提供基于角度优化的攻击目标选择功能
+ ///
+ public static class AttackTargetFinderAngle
+ {
+ // 友军误伤评分偏移量常量
+ private const float FriendlyFireScoreOffsetPerHumanlikeOrMechanoid = 18f; // 每人类或机械族的友军误伤分数偏移
+ private const float FriendlyFireScoreOffsetPerAnimal = 7f; // 每动物的友军误伤分数偏移
+ private const float FriendlyFireScoreOffsetPerNonPawn = 10f; // 每非pawn单位的友军误伤分数偏移
+ private const float FriendlyFireScoreOffsetSelf = 40f; // 对自己造成误伤的分数偏移
+ // 临时目标列表,用于缓存计算过程中的目标
+ private static List tmpTargets = new List(128);
+
+ // 可用射击目标及其分数的列表
+ private static List> availableShootingTargets = new List>();
+
+ // 临时存储目标分数的列表
+ private static List tmpTargetScores = new List();
+
+ // 临时存储是否可以向目标射击的列表
+ private static List tmpCanShootAtTarget = new List();
+ ///
+ /// 从当前位置寻找最佳射击目标
+ ///
+ /// 搜索者(攻击目标搜索器)
+ /// 目标扫描标志
+ /// 射击角度
+ /// 目标验证器(可选)
+ /// 最小距离(默认0)
+ /// 最大距离(默认9999)
+ /// 最佳攻击目标,如果没有则返回null
+ public static IAttackTarget BestShootTargetFromCurrentPosition(
+ IAttackTargetSearcher searcher,
+ TargetScanFlags flags,
+ Vector3 angle,
+ Predicate validator = null,
+ float minDistance = 0f,
+ float maxDistance = 9999f)
+ {
+ // 获取当前有效动词(武器)
+ Verb currentEffectiveVerb = searcher.CurrentEffectiveVerb;
+
+ // 检查是否有攻击动词
+ if (currentEffectiveVerb == null)
+ {
+ Log.Error("BestShootTargetFromCurrentPosition with " + searcher.ToStringSafe() + " who has no attack verb.");
+ return null;
+ }
+
+ // 计算实际的最小和最大距离,考虑武器的属性
+ float actualMinDistance = Mathf.Max(minDistance, currentEffectiveVerb.verbProps.minRange);
+ float actualMaxDistance = Mathf.Min(maxDistance, currentEffectiveVerb.verbProps.range);
+
+ // 调用主要的目标查找方法
+ return BestAttackTarget(
+ searcher,
+ flags,
+ angle,
+ validator,
+ actualMinDistance,
+ actualMaxDistance,
+ default(IntVec3),
+ float.MaxValue,
+ false);
+ }
+
+ ///
+ /// 查找最佳攻击目标(核心方法)
+ ///
+ /// 搜索者
+ /// 目标扫描标志
+ /// 射击角度
+ /// 目标验证器
+ /// 最小距离
+ /// 最大距离
+ /// 搜索中心点
+ /// 从中心点的最大移动半径
+ /// 是否可以攻击比有效最小距离更近的目标
+ /// 最佳攻击目标
+ public static IAttackTarget BestAttackTarget(
+ IAttackTargetSearcher searcher,
+ TargetScanFlags flags,
+ Vector3 angle,
+ Predicate validator = null,
+ float minDist = 0f,
+ float maxDist = 9999f,
+ IntVec3 locus = default(IntVec3),
+ float maxTravelRadiusFromLocus = float.MaxValue,
+ bool canTakeTargetsCloserThanEffectiveMinRange = true)
+ {
+ // 获取搜索者的Thing对象和当前有效动词
+ Thing searcherThing = searcher.Thing;
+ Verb verb = searcher.CurrentEffectiveVerb;
+
+ // 验证攻击动词是否存在
+ if (verb == null)
+ {
+ Log.Error("BestAttackTarget with " + searcher.ToStringSafe() + " who has no attack verb.");
+ return null;
+ }
+
+ // 初始化各种标志和参数
+ bool onlyTargetMachines = verb.IsEMP(); // 是否只瞄准机械单位(EMP武器)
+ float minDistSquared = minDist * minDist; // 最小距离的平方(用于距离比较优化)
+
+ // 计算从搜索中心点的最大距离平方
+ float maxLocusDist = maxTravelRadiusFromLocus + verb.verbProps.range;
+ float maxLocusDistSquared = maxLocusDist * maxLocusDist;
+
+ // LOS(视线)验证器,用于检查是否被烟雾阻挡
+ Predicate losValidator = null;
+ if ((flags & TargetScanFlags.LOSBlockableByGas) > TargetScanFlags.None)
+ {
+ losValidator = (IntVec3 vec3) => !vec3.AnyGas(searcherThing.Map, GasType.BlindSmoke);
+ }
+
+ // 获取潜在目标列表
+ tmpTargets.Clear();
+ tmpTargets.AddRange(searcherThing.Map.attackTargetsCache.GetPotentialTargetsFor(searcher));
+
+ // 移除非战斗人员(根据标志)
+ tmpTargets.RemoveAll(t => ShouldIgnoreNoncombatant(searcherThing, t, flags));
+
+ // 内部验证器函数
+ bool InnerValidator(IAttackTarget target, Predicate losValidator)
+ {
+ Thing targetThing = target.Thing;
+ if (target == searcher)
+ {
+ return false;
+ }
+
+ if (minDistSquared > 0f && (float)(searcherThing.Position - targetThing.Position).LengthHorizontalSquared < minDistSquared)
+ {
+ return false;
+ }
+
+ if (!canTakeTargetsCloserThanEffectiveMinRange)
+ {
+ float num3 = verb.verbProps.EffectiveMinRange(targetThing, searcherThing);
+ if (num3 > 0f && (float)(searcherThing.Position - targetThing.Position).LengthHorizontalSquared < num3 * num3)
+ {
+ return false;
+ }
+ }
+
+ if (maxTravelRadiusFromLocus < 9999f && (float)(targetThing.Position - locus).LengthHorizontalSquared > maxLocusDistSquared)
+ {
+ return false;
+ }
+
+ if (!searcherThing.HostileTo(targetThing))
+ {
+ return false;
+ }
+
+ if (validator != null && !validator(targetThing))
+ {
+ return false;
+ }
+
+
+ if ((flags & TargetScanFlags.NeedNotUnderThickRoof) != 0)
+ {
+ RoofDef roof = targetThing.Position.GetRoof(targetThing.Map);
+ if (roof != null && roof.isThickRoof)
+ {
+ return false;
+ }
+ }
+
+ if ((flags & TargetScanFlags.NeedLOSToAll) != 0)
+ {
+ if (losValidator != null && (!losValidator(searcherThing.Position) || !losValidator(targetThing.Position)))
+ {
+ return false;
+ }
+
+ if (!searcherThing.CanSee(targetThing))
+ {
+ if (target is Pawn)
+ {
+ if ((flags & TargetScanFlags.NeedLOSToPawns) != 0)
+ {
+ return false;
+ }
+ }
+ else if ((flags & TargetScanFlags.NeedLOSToNonPawns) != 0)
+ {
+ return false;
+ }
+ }
+ }
+
+ if (((flags & TargetScanFlags.NeedThreat) != 0 || (flags & TargetScanFlags.NeedAutoTargetable) != 0) && target.ThreatDisabled(searcher))
+ {
+ return false;
+ }
+
+ if ((flags & TargetScanFlags.NeedAutoTargetable) != 0 && !AttackTargetFinder.IsAutoTargetable(target))
+ {
+ return false;
+ }
+
+ if ((flags & TargetScanFlags.NeedActiveThreat) != 0 && !GenHostility.IsActiveThreatTo(target, searcher.Thing.Faction))
+ {
+ return false;
+ }
+
+ Pawn pawn = target as Pawn;
+ if (onlyTargetMachines && pawn != null && pawn.RaceProps.IsFlesh)
+ {
+ return false;
+ }
+
+ if ((flags & TargetScanFlags.NeedNonBurning) != 0 && targetThing.IsBurning())
+ {
+ return false;
+ }
+
+ if (searcherThing.def.race != null && (int)searcherThing.def.race.intelligence >= 2)
+ {
+ CompExplosive compExplosive = targetThing.TryGetComp();
+ if (compExplosive != null && compExplosive.wickStarted)
+ {
+ return false;
+ }
+ }
+
+ // 距离验证
+ if (!targetThing.Position.InHorDistOf(searcherThing.Position, maxDist))
+ return false;
+
+ // 最小距离验证
+ if (!canTakeTargetsCloserThanEffectiveMinRange &&
+ (float)(searcherThing.Position - targetThing.Position).LengthHorizontalSquared < minDistSquared)
+ return false;
+
+ // 中心点距离验证
+ if (locus.IsValid &&
+ (float)(locus - targetThing.Position).LengthHorizontalSquared > maxLocusDistSquared)
+ return false;
+
+ // 自定义验证器
+ if (validator != null && !validator(targetThing))
+ return false;
+
+ return true;
+ }
+
+ // 检查是否有可以直接射击的目标
+ bool hasDirectShootTarget = false;
+ for (int i = 0; i < tmpTargets.Count; i++)
+ {
+ IAttackTarget attackTarget = tmpTargets[i];
+ if (attackTarget.Thing.Position.InHorDistOf(searcherThing.Position, maxDist) &&
+ InnerValidator(attackTarget, losValidator) &&
+ CanShootAtFromCurrentPosition(attackTarget, searcher, verb))
+ {
+ hasDirectShootTarget = true;
+ break;
+ }
+ }
+
+ IAttackTarget bestTarget;
+
+ if (hasDirectShootTarget)
+ {
+ // 如果有可以直接射击的目标,使用基于分数的随机选择
+ tmpTargets.RemoveAll(x => !x.Thing.Position.InHorDistOf(searcherThing.Position, maxDist) || !InnerValidator(x, losValidator));
+ bestTarget = GetRandomShootingTargetByScore(tmpTargets, searcher, verb, angle);
+ }
+ else
+ {
+ // 否则使用最近的目标选择策略
+ bool needReachableIfCantHit = (flags & TargetScanFlags.NeedReachableIfCantHitFromMyPos) > TargetScanFlags.None;
+ bool needReachable = (flags & TargetScanFlags.NeedReachable) > TargetScanFlags.None;
+
+ Predicate reachableValidator;
+ if (!needReachableIfCantHit || needReachable)
+ {
+ reachableValidator = (Thing t) => InnerValidator((IAttackTarget)t, losValidator);
+ }
+ else
+ {
+ reachableValidator = (Thing t) => InnerValidator((IAttackTarget)t, losValidator) &&
+ CanShootAtFromCurrentPosition((IAttackTarget)t, searcher, verb);
+ }
+
+ bestTarget = (IAttackTarget)GenClosest.ClosestThing_Global(
+ searcherThing.Position,
+ tmpTargets,
+ maxDist,
+ reachableValidator,
+ null,
+ false);
+ }
+
+ tmpTargets.Clear();
+ return bestTarget;
+ }
+ ///
+ /// 检查是否应该忽略非战斗人员
+ ///
+ private static bool ShouldIgnoreNoncombatant(Thing searcherThing, IAttackTarget target, TargetScanFlags flags)
+ {
+ // 只对Pawn类型的目标进行判断
+ if (!(target is Pawn pawn))
+ return false;
+
+ // 如果是战斗人员,不忽略
+ if (pawn.IsCombatant())
+ return false;
+
+ // 如果设置了忽略非战斗人员标志,则忽略
+ if ((flags & TargetScanFlags.IgnoreNonCombatants) > TargetScanFlags.None)
+ return true;
+
+ // 如果看不到非战斗人员,则忽略
+ return !GenSight.LineOfSightToThing(searcherThing.Position, pawn, searcherThing.Map, false, null);
+ }
+
+ ///
+ /// 检查是否可以从当前位置射击目标
+ ///
+ private static bool CanShootAtFromCurrentPosition(IAttackTarget target, IAttackTargetSearcher searcher, Verb verb)
+ {
+ return verb != null && verb.CanHitTargetFrom(searcher.Thing.Position, target.Thing);
+ }
+
+ ///
+ /// 通过权重随机获取射击目标
+ ///
+ private static IAttackTarget GetRandomShootingTargetByScore(List targets, IAttackTargetSearcher searcher, Verb verb, Vector3 angle)
+ {
+ var availableTargets = GetAvailableShootingTargetsByScore(targets, searcher, verb, angle);
+ if (availableTargets.TryRandomElementByWeight(x => x.Second, out Pair result))
+ {
+ return result.First;
+ }
+ return null;
+ }
+
+ ///
+ /// 获取可用射击目标及其分数的列表
+ ///
+ private static List> GetAvailableShootingTargetsByScore(
+ List rawTargets,
+ IAttackTargetSearcher searcher,
+ Verb verb,
+ Vector3 angle)
+ {
+ availableShootingTargets.Clear();
+
+ if (rawTargets.Count == 0)
+ return availableShootingTargets;
+
+ // 初始化临时列表
+ tmpTargetScores.Clear();
+ tmpCanShootAtTarget.Clear();
+
+ float highestScore = float.MinValue;
+ IAttackTarget bestTarget = null;
+
+ // 第一轮遍历:计算基础分数并标记可射击目标
+ for (int i = 0; i < rawTargets.Count; i++)
+ {
+ tmpTargetScores.Add(float.MinValue);
+ tmpCanShootAtTarget.Add(false);
+
+ // 跳过搜索者自身
+ if (rawTargets[i] == searcher)
+ continue;
+
+ // 检查是否可以射击
+ bool canShoot = CanShootAtFromCurrentPosition(rawTargets[i], searcher, verb);
+ tmpCanShootAtTarget[i] = canShoot;
+
+ if (canShoot)
+ {
+ // 计算射击目标分数
+ float score = GetShootingTargetScore(rawTargets[i], searcher, verb, angle);
+ tmpTargetScores[i] = score;
+
+ // 更新最佳目标
+ if (bestTarget == null || score > highestScore)
+ {
+ bestTarget = rawTargets[i];
+ highestScore = score;
+ }
+ }
+ }
+
+ // 构建可用目标列表
+ for (int j = 0; j < rawTargets.Count; j++)
+ {
+ if (rawTargets[j] != searcher && tmpCanShootAtTarget[j])
+ {
+ availableShootingTargets.Add(new Pair(rawTargets[j], tmpTargetScores[j]));
+ }
+ }
+
+ return availableShootingTargets;
+ }
+
+ ///
+ /// 计算射击目标分数(核心评分算法)
+ ///
+ private static float GetShootingTargetScore(IAttackTarget target, IAttackTargetSearcher searcher, Verb verb, Vector3 angle)
+ {
+ float score = 60f; // 基础分数
+
+ // 距离因素:越近分数越高(最多40分)
+ float distance = (target.Thing.Position - searcher.Thing.Position).LengthHorizontal;
+ score -= Mathf.Min(distance, 40f);
+
+ // 目标正在瞄准自己:加分
+ if (target.TargetCurrentlyAimingAt == searcher.Thing)
+ score += 10f;
+
+ // 最近攻击目标:加分(如果最近攻击过这个目标)
+ if (searcher.LastAttackedTarget == target.Thing && Find.TickManager.TicksGame - searcher.LastAttackTargetTick <= 300)
+ score += 40f;
+
+ // 掩体因素:目标有掩体保护则减分
+ float blockChance = CoverUtility.CalculateOverallBlockChance(target.Thing.Position, searcher.Thing.Position, searcher.Thing.Map);
+ score -= blockChance * 10f;
+
+ // Pawn特定因素
+ if (target is Pawn pawnTarget)
+ {
+ // 非战斗人员减分
+ score -= NonCombatantScore(pawnTarget);
+
+ // 远程攻击目标特殊处理
+ if (verb.verbProps.ai_TargetHasRangedAttackScoreOffset != 0f &&
+ pawnTarget.CurrentEffectiveVerb != null &&
+ pawnTarget.CurrentEffectiveVerb.verbProps.Ranged)
+ {
+ score += verb.verbProps.ai_TargetHasRangedAttackScoreOffset;
+ }
+
+ // 倒地目标大幅减分
+ if (pawnTarget.Downed)
+ score -= 50f;
+ }
+
+ // 友军误伤因素
+ score += FriendlyFireBlastRadiusTargetScoreOffset(target, searcher, verb);
+ score += FriendlyFireConeTargetScoreOffset(target, searcher, verb);
+
+ // 角度因素:计算与理想角度的偏差
+ Vector3 targetDirection = (target.Thing.DrawPos - searcher.Thing.DrawPos).Yto0();
+ float angleDeviation = Vector3.Angle(angle, targetDirection);
+
+ // 防止除零错误
+ if (angleDeviation < 0.1f)
+ angleDeviation = 0.1f;
+
+ // 最终分数计算:考虑目标优先级因子和角度偏差
+ float finalScore = score * target.TargetPriorityFactor / angleDeviation;
+
+ // 确保返回正数
+ return Mathf.Max(finalScore, 0.01f);
+ }
+
+ ///
+ /// 计算非战斗人员分数
+ ///
+ private static float NonCombatantScore(Thing target)
+ {
+ if (!(target is Pawn pawn))
+ return 0f;
+
+ if (!pawn.IsCombatant())
+ return 50f; // 非战斗人员大幅减分
+
+ if (pawn.DevelopmentalStage.Juvenile())
+ return 25f; // 未成年人中等减分
+
+ return 0f; // 战斗成年人不减分
+ }
+
+ ///
+ /// 计算爆炸半径内的友军误伤分数偏移
+ ///
+ private static float FriendlyFireBlastRadiusTargetScoreOffset(IAttackTarget target, IAttackTargetSearcher searcher, Verb verb)
+ {
+ // 检查是否启用了避免友军误伤半径
+ if (verb.verbProps.ai_AvoidFriendlyFireRadius <= 0f)
+ return 0f;
+
+ Map map = target.Thing.Map;
+ IntVec3 targetPosition = target.Thing.Position;
+ int cellCount = GenRadial.NumCellsInRadius(verb.verbProps.ai_AvoidFriendlyFireRadius);
+ float friendlyFireScore = 0f;
+
+ // 遍历爆炸半径内的所有单元格
+ for (int i = 0; i < cellCount; i++)
+ {
+ IntVec3 checkCell = targetPosition + GenRadial.RadialPattern[i];
+
+ if (!checkCell.InBounds(map))
+ continue;
+
+ bool hasLineOfSight = true;
+ List thingsInCell = checkCell.GetThingList(map);
+
+ // 检查单元格内的所有物体
+ for (int j = 0; j < thingsInCell.Count; j++)
+ {
+ Thing thing = thingsInCell[j];
+
+ // 只关心攻击目标且不是当前目标
+ if (!(thing is IAttackTarget) || thing == target)
+ continue;
+
+ // 检查视线(只检查一次)
+ if (hasLineOfSight)
+ {
+ if (!GenSight.LineOfSight(targetPosition, checkCell, map, true, null, 0, 0))
+ break; // 没有视线,跳过这个单元格
+
+ hasLineOfSight = false;
+ }
+
+ // 计算误伤分数
+ float hitScore;
+ if (thing == searcher)
+ hitScore = FriendlyFireScoreOffsetSelf; // 击中自己
+ else if (!(thing is Pawn))
+ hitScore = FriendlyFireScoreOffsetPerNonPawn; // 非Pawn物体
+ else if (thing.def.race.Animal)
+ hitScore = FriendlyFireScoreOffsetPerAnimal; // 动物
+ else
+ hitScore = FriendlyFireScoreOffsetPerHumanlikeOrMechanoid; // 人类或机械族
+
+ // 根据敌对关系调整分数
+ if (!searcher.Thing.HostileTo(thing))
+ friendlyFireScore -= hitScore; // 友军:减分
+ else
+ friendlyFireScore += hitScore * 0.6f; // 敌军:小幅加分
+ }
+ }
+
+ return friendlyFireScore;
+ }
+
+ ///
+ /// 计算锥形范围内的友军误伤分数偏移
+ ///
+ private static float FriendlyFireConeTargetScoreOffset(IAttackTarget target, IAttackTargetSearcher searcher, Verb verb)
+ {
+ // 只对Pawn类型的搜索者进行计算
+ if (!(searcher.Thing is Pawn searcherPawn))
+ return 0f;
+
+ // 检查智能等级
+ if (searcherPawn.RaceProps.intelligence < Intelligence.ToolUser)
+ return 0f;
+
+ // 机械族不计算锥形误伤
+ if (searcherPawn.RaceProps.IsMechanoid)
+ return 0f;
+
+ // 只处理射击类动词
+ if (!(verb is Verb_Shoot shootVerb))
+ return 0f;
+
+ ThingDef projectileDef = shootVerb.verbProps.defaultProjectile;
+ if (projectileDef == null)
+ return 0f;
+
+ // 高空飞行的抛射物不计算锥形误伤
+ if (projectileDef.projectile.flyOverhead)
+ return 0f;
+
+ Map map = searcherPawn.Map;
+
+ // 获取射击报告
+ ShotReport report = ShotReport.HitReportFor(searcherPawn, verb, (Thing)target);
+
+ // 计算强制失误半径
+ float forcedMissRadius = Mathf.Max(
+ VerbUtility.CalculateAdjustedForcedMiss(verb.verbProps.ForcedMissRadius, report.ShootLine.Dest - report.ShootLine.Source),
+ 1.5f);
+
+ // 获取可能被误伤的所有单元格
+ IEnumerable potentialHitCells =
+ from dest in GenRadial.RadialCellsAround(report.ShootLine.Dest, forcedMissRadius, true)
+ where dest.InBounds(map)
+ select new ShootLine(report.ShootLine.Source, dest)
+ into line
+ from pos in line.Points().Concat(line.Dest).TakeWhile(pos => pos.CanBeSeenOverFast(map))
+ select pos;
+
+ potentialHitCells = potentialHitCells.Distinct();
+
+ float coneFriendlyFireScore = 0f;
+
+ // 计算锥形范围内的误伤分数
+ foreach (IntVec3 cell in potentialHitCells)
+ {
+ float interceptChance = VerbUtility.InterceptChanceFactorFromDistance(report.ShootLine.Source.ToVector3Shifted(), cell);
+
+ if (interceptChance <= 0f)
+ continue;
+
+ List thingsInCell = cell.GetThingList(map);
+
+ for (int i = 0; i < thingsInCell.Count; i++)
+ {
+ Thing thing = thingsInCell[i];
+
+ if (!(thing is IAttackTarget) || thing == target)
+ continue;
+
+ // 计算误伤分数
+ float hitScore;
+ if (thing == searcher)
+ hitScore = FriendlyFireScoreOffsetSelf;
+ else if (!(thing is Pawn))
+ hitScore = FriendlyFireScoreOffsetPerNonPawn;
+ else if (thing.def.race.Animal)
+ hitScore = FriendlyFireScoreOffsetPerAnimal;
+ else
+ hitScore = FriendlyFireScoreOffsetPerHumanlikeOrMechanoid;
+
+ // 根据拦截概率和敌对关系调整分数
+ hitScore *= interceptChance;
+ if (!searcher.Thing.HostileTo(thing))
+ hitScore = -hitScore; // 友军:减分
+ else
+ hitScore *= 0.6f; // 敌军:小幅加分
+
+ coneFriendlyFireScore += hitScore;
+ }
+ }
+
+ return coneFriendlyFireScore;
+ }
+ }
+}
diff --git a/Source/WulaFallenEmpire/BuildingComp/WULA_SkyfallerCaller/CompSkyfallerCaller.cs b/Source/WulaFallenEmpire/BuildingComp/WULA_SkyfallerCaller/CompSkyfallerCaller.cs
index 43a55886..35cb5a7e 100644
--- a/Source/WulaFallenEmpire/BuildingComp/WULA_SkyfallerCaller/CompSkyfallerCaller.cs
+++ b/Source/WulaFallenEmpire/BuildingComp/WULA_SkyfallerCaller/CompSkyfallerCaller.cs
@@ -12,10 +12,10 @@ namespace WulaFallenEmpire
public ThingDef skyfallerDef;
public bool destroyBuilding = true;
public int delayTicks = 0;
- public string requiredFlyOverType = "default"; // 需要的 FlyOver 类型
+ // 删除 requiredFlyOverType 字段
public bool allowThinRoof = true; // 允许砸穿薄屋顶
public bool allowThickRoof = false; // 是否允许在厚岩顶下空投
- public string requiredFlyOverLabel = "FlyOver"; // 显示给玩家的标签
+ // 删除 requiredFlyOverLabel 字段
public CompProperties_SkyfallerCaller()
{
@@ -33,49 +33,63 @@ namespace WulaFallenEmpire
public bool CanCall => !used && !calling;
- // 获取所需的 FlyOver 显示标签
- public string RequiredFlyOverLabel
- {
- get
- {
- // 优先使用建筑配置的显示标签
- if (!Props.requiredFlyOverLabel.NullOrEmpty())
- return Props.requiredFlyOverLabel;
-
- // 如果没有配置,回退到类型名称
- return Props.requiredFlyOverType;
- }
- }
+ // 固定的显示标签
+ public string RequiredFlyOverLabel => "建筑空投飞行器";
- // 检查是否有对应类型的 FlyOver
+ // 检查是否有拥有 BuildingdropperFacility 设施的 FlyOver
public bool HasRequiredFlyOver
{
get
{
if (parent?.Map == null) return false;
- // 查找地图上所有具有 FlyOverType 组件的物体
- List allThings = parent.Map.listerThings.AllThings;
- int flyOverCount = 0;
- int matchingTypeCount = 0;
-
- foreach (Thing thing in allThings)
+ try
{
- var typeComp = thing.TryGetComp();
- if (typeComp != null)
+ // 检查所有FlyOver类型的物体
+ var allFlyOvers = new List();
+ var dynamicObjects = parent.Map.dynamicDrawManager.DrawThings;
+ foreach (var thing in dynamicObjects)
{
- flyOverCount++;
- if (typeComp.FlyOverType == Props.requiredFlyOverType && typeComp.IsRequiredForDrop)
+ if (thing is FlyOver)
{
- matchingTypeCount++;
- Log.Message($"[SkyfallerCaller] Found required FlyOver of type: {Props.requiredFlyOverType} at {thing.Position}");
+ allFlyOvers.Add(thing);
}
}
+
+ Log.Message($"[SkyfallerCaller] Found {allFlyOvers.Count} FlyOvers on map");
+
+ foreach (var thing in allFlyOvers)
+ {
+ if (thing is FlyOver flyOver && !flyOver.Destroyed)
+ {
+ // 检查设施
+ var facilitiesComp = flyOver.GetComp();
+ if (facilitiesComp == null)
+ {
+ Log.Warning($"[SkyfallerCaller] FlyOver at {flyOver.Position} has no CompFlyOverFacilities");
+ continue;
+ }
+
+ if (facilitiesComp.HasFacility("BuildingdropperFacility"))
+ {
+ Log.Message($"[SkyfallerCaller] Found valid FlyOver at {flyOver.Position} with BuildingdropperFacility");
+ return true;
+ }
+ else
+ {
+ Log.Message($"[SkyfallerCaller] FlyOver at {flyOver.Position} missing BuildingdropperFacility. Has: {string.Join(", ", facilitiesComp.GetActiveFacilities())}");
+ }
+ }
+ }
+
+ Log.Message("[SkyfallerCaller] No FlyOver with BuildingdropperFacility found");
+ return false;
+ }
+ catch (System.Exception ex)
+ {
+ Log.Error($"[SkyfallerCaller] Error in HasRequiredFlyOver: {ex}");
+ return false;
}
-
- Log.Message($"[SkyfallerCaller] Searched {allThings.Count} things, found {flyOverCount} FlyOvers, {matchingTypeCount} matching type: {Props.requiredFlyOverType}");
-
- return matchingTypeCount > 0;
}
}
@@ -121,7 +135,7 @@ namespace WulaFallenEmpire
if (!HasRequiredFlyOver)
{
- Log.Message($"[SkyfallerCaller] Cannot call: missing required FlyOver type: {Props.requiredFlyOverType}");
+ Log.Message($"[SkyfallerCaller] Cannot call: missing required FlyOver with BuildingdropperFacility");
return false;
}
@@ -161,7 +175,7 @@ namespace WulaFallenEmpire
// 显示相应的错误消息
if (!HasRequiredFlyOver)
{
- Messages.Message("WULA_NoRequiredFlyOver".Translate(RequiredFlyOverLabel), parent, MessageTypeDefOf.RejectInput);
+ Messages.Message("WULA_NoBuildingDropperFlyOver".Translate(), parent, MessageTypeDefOf.RejectInput);
}
else if (!CheckRoofConditions)
{
@@ -272,7 +286,7 @@ namespace WulaFallenEmpire
if (!HasRequiredFlyOver)
{
- desc += $"\n{"WULA_RequiresFlyOver".Translate(RequiredFlyOverLabel)}";
+ desc += $"\n{"WULA_RequiresBuildingDropperFlyOver".Translate()}";
}
// 添加 null 检查
@@ -299,7 +313,7 @@ namespace WulaFallenEmpire
{
if (!HasRequiredFlyOver)
{
- return "WULA_NoRequiredFlyOver".Translate(RequiredFlyOverLabel);
+ return "WULA_NoBuildingDropperFlyOver".Translate();
}
if (!CheckRoofConditions)
@@ -343,7 +357,7 @@ namespace WulaFallenEmpire
// 添加条件信息
if (!HasRequiredFlyOver)
{
- status += $"\n{"WULA_MissingFlyOver".Translate(RequiredFlyOverLabel)}";
+ status += $"\n{"WULA_MissingBuildingDropperFlyOver".Translate()}";
}
// 添加 null 检查
diff --git a/Source/WulaFallenEmpire/Flyover/WULA_AircraftHangar/CompAircraftHangar.cs b/Source/WulaFallenEmpire/Flyover/WULA_AircraftHangar/CompAircraftHangar.cs
index 570d2250..aa04c07d 100644
--- a/Source/WulaFallenEmpire/Flyover/WULA_AircraftHangar/CompAircraftHangar.cs
+++ b/Source/WulaFallenEmpire/Flyover/WULA_AircraftHangar/CompAircraftHangar.cs
@@ -10,13 +10,13 @@ namespace WulaFallenEmpire
public ThingDef aircraftDef; // 对应的战机定义
public int aircraftCount = 1; // 起飞后提供的战机数量
public ThingDef skyfallerLeaving; // 起飞时的天空坠落者效果
-
+
// 新增:自动发射配置
public bool autoLaunchEnabled = false; // 是否启用自动发射
public int autoLaunchDelayTicks = 600; // 自动发射延迟(ticks,默认10秒)
public bool autoLaunchOnConstruction = true; // 建造完成后自动发射
public bool autoLaunchOnPowerOn = false; // 通电时自动发射
-
+
public CompProperties_AircraftHangar()
{
compClass = typeof(CompAircraftHangar);
@@ -26,16 +26,16 @@ namespace WulaFallenEmpire
public class CompAircraftHangar : ThingComp
{
public CompProperties_AircraftHangar Props => (CompProperties_AircraftHangar)props;
-
+
// 新增:自动发射状态
private bool autoLaunchScheduled = false;
private int autoLaunchTick = -1;
private bool hasLaunched = false;
-
+
public override void PostSpawnSetup(bool respawningAfterLoad)
{
base.PostSpawnSetup(respawningAfterLoad);
-
+
if (!respawningAfterLoad && Props.autoLaunchEnabled && Props.autoLaunchOnConstruction)
{
ScheduleAutoLaunch();
@@ -53,7 +53,7 @@ namespace WulaFallenEmpire
public override void CompTick()
{
base.CompTick();
-
+
// 处理自动发射
if (Props.autoLaunchEnabled && !hasLaunched)
{
@@ -94,7 +94,7 @@ namespace WulaFallenEmpire
autoLaunchScheduled = true;
autoLaunchTick = Find.TickManager.TicksGame + Props.autoLaunchDelayTicks;
-
+
Messages.Message("AircraftAutoLaunchScheduled".Translate(Props.aircraftDef.LabelCap, (Props.autoLaunchDelayTicks / 60f).ToString("F1")), parent, MessageTypeDefOf.NeutralEvent);
}
@@ -160,7 +160,7 @@ namespace WulaFallenEmpire
// 获取全局战机管理器
WorldComponent_AircraftManager aircraftManager = Find.World.GetComponent();
-
+
if (aircraftManager == null)
{
Log.Error("AircraftManagerNotFound".Translate());
@@ -169,10 +169,10 @@ namespace WulaFallenEmpire
// 立即向全局管理器注册战机
aircraftManager.AddAircraft(Props.aircraftDef, Props.aircraftCount, parent.Faction);
-
+
// 显示消息
Messages.Message("AircraftLaunched".Translate(Props.aircraftCount, Props.aircraftDef.LabelCap), parent, MessageTypeDefOf.PositiveEvent);
-
+
// 创建起飞效果(仅视觉效果)
if (Props.skyfallerLeaving != null)
{
@@ -195,25 +195,25 @@ namespace WulaFallenEmpire
// 创建 1 单位 Chemfuel 作为 Skyfaller 的内容物
Thing chemfuel = ThingMaker.MakeThing(ThingDefOf.Chemfuel);
chemfuel.stackCount = 1;
-
+
// 创建包含 Chemfuel 的 Skyfaller
Skyfaller skyfaller = SkyfallerMaker.MakeSkyfaller(Props.skyfallerLeaving, chemfuel);
-
+
// 设置起飞位置(建筑当前位置)
IntVec3 takeoffPos = parent.Position;
-
+
// 检查地图是否有效
if (parent.Map == null)
{
Log.Error("TakeoffEffectMapNull".Translate());
return;
}
-
+
// 生成 Skyfaller
GenSpawn.Spawn(skyfaller, takeoffPos, parent.Map);
-
+
Log.Message("TakeoffSkyfallerCreated".Translate(takeoffPos));
-
+
// 销毁原建筑
parent.Destroy(DestroyMode.Vanish);
}
diff --git a/Source/WulaFallenEmpire/Flyover/WULA_FlyOverType/CompProperties_FlyOverType.cs b/Source/WulaFallenEmpire/Flyover/WULA_FlyOverType/CompProperties_FlyOverType.cs
deleted file mode 100644
index c9243f0c..00000000
--- a/Source/WulaFallenEmpire/Flyover/WULA_FlyOverType/CompProperties_FlyOverType.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using Verse;
-
-namespace WulaFallenEmpire
-{
- public class CompProperties_FlyOverType : CompProperties
- {
- public int laneLevel = 0; // 航道等级
- public string flyOverType = "default"; // FlyOver 类型标识符
- public bool isRequiredForDrop = true; // 是否是需要用于空投的类型
-
- public CompProperties_FlyOverType()
- {
- compClass = typeof(CompFlyOverType);
- }
- }
-
- public class CompFlyOverType : ThingComp
- {
- private CompProperties_FlyOverType Props => (CompProperties_FlyOverType)props;
-
- public int LaneLevel => Props.laneLevel;
- public string FlyOverType => Props.flyOverType;
- public bool IsRequiredForDrop => Props.isRequiredForDrop;
-
- public override void PostExposeData()
- {
- base.PostExposeData();
- }
-
- public override string CompInspectStringExtra()
- {
- return $"FlyOver Type: {FlyOverType}, Lane Level: {LaneLevel}";
- }
- }
-}
diff --git a/Source/WulaFallenEmpire/Flyover/WULA_SpawnFlyOver/CompAbilityEffect_SpawnFlyOver.cs b/Source/WulaFallenEmpire/Flyover/WULA_SpawnFlyOver/CompAbilityEffect_SpawnFlyOver.cs
index 6b0f401d..8f07dfba 100644
--- a/Source/WulaFallenEmpire/Flyover/WULA_SpawnFlyOver/CompAbilityEffect_SpawnFlyOver.cs
+++ b/Source/WulaFallenEmpire/Flyover/WULA_SpawnFlyOver/CompAbilityEffect_SpawnFlyOver.cs
@@ -14,100 +14,10 @@ namespace WulaFallenEmpire
{
if (!base.CanApplyOn(target, dest))
return false;
- // 检查航道等级系统
- if (Props.useLaneLevelSystem)
- {
- string disableReason;
- if (!CanSpawnWithLaneLevelCheck(out disableReason))
- {
- return false;
- }
- }
return true;
}
- // 新增:航道等级检查逻辑
- private bool CanSpawnWithLaneLevelCheck(out string disableReason)
- {
- disableReason = null;
- Map map = parent.pawn.Map;
- if (map == null)
- return true;
- // 获取地图上所有的 FlyOver 物体
- var existingFlyOvers = map.listerThings.ThingsOfDef(Props.flyOverDef)
- .OfType()
- .Where(f => f.Spawned && !f.Destroyed)
- .ToList();
- // 获取当前技能的航道等级和类型
- int currentLaneLevel = Props.laneLevel;
- string currentFlyOverType = Props.flyOverTypeName;
- Log.Message($"Lane Level Check: Current level={currentLaneLevel}, type={currentFlyOverType}, existing flyovers={existingFlyOvers.Count}");
- // 规则1:航道等级0可以不受限制召唤
- if (currentLaneLevel == 0)
- {
- return true;
- }
- // 规则2:检查是否有更高航道等级的flyover存在
- var higherLevelFlyOvers = existingFlyOvers
- .Where(f => GetFlyOverLaneLevel(f) > currentLaneLevel)
- .ToList();
- if (higherLevelFlyOvers.Any())
- {
- disableReason = "Cannot summon: Higher lane level flyover exists";
- Log.Message($"Cannot summon: Found {higherLevelFlyOvers.Count} higher level flyovers");
- return false;
- }
- // 规则3:检查是否有相同航道等级和类型的flyover存在
- var sameTypeAndLevelFlyOvers = existingFlyOvers
- .Where(f => GetFlyOverLaneLevel(f) == currentLaneLevel &&
- GetFlyOverType(f) == currentFlyOverType)
- .ToList();
- if (sameTypeAndLevelFlyOvers.Any())
- {
- disableReason = $"Cannot summon: Same lane level and type flyover already exists";
- Log.Message($"Cannot summon: Found {sameTypeAndLevelFlyOvers.Count} same type and level flyovers");
- return false;
- }
- return true;
- }
- // 新增:获取FlyOver的航道等级
- private int GetFlyOverLaneLevel(FlyOver flyOver)
- {
- var comp = flyOver.GetComp();
- return comp?.LaneLevel ?? 0;
- }
- // 新增:获取FlyOver的类型
- private string GetFlyOverType(FlyOver flyOver)
- {
- var comp = flyOver.GetComp();
- return comp?.FlyOverType ?? "default";
- }
- // 新增:强制销毁低等级FlyOver
- private void DestroyLowerLevelFlyOvers()
- {
- Map map = parent.pawn.Map;
- if (map == null) return;
- var existingFlyOvers = map.listerThings.ThingsOfDef(Props.flyOverDef)
- .OfType()
- .Where(f => f.Spawned && !f.Destroyed)
- .ToList();
- int currentLaneLevel = Props.laneLevel;
- string currentFlyOverType = Props.flyOverTypeName;
- // 查找需要销毁的低等级FlyOver
- var flyOversToDestroy = existingFlyOvers
- .Where(f => GetFlyOverLaneLevel(f) < currentLaneLevel ||
- (GetFlyOverLaneLevel(f) == currentLaneLevel &&
- GetFlyOverType(f) != currentFlyOverType))
- .ToList();
- foreach (var flyOver in flyOversToDestroy)
- {
- Log.Message($"Destroying lower level flyover: Level={GetFlyOverLaneLevel(flyOver)}, Type={GetFlyOverType(flyOver)}");
- flyOver.EmergencyDestroy();
- }
- if (flyOversToDestroy.Count > 0)
- {
- Log.Message($"Destroyed {flyOversToDestroy.Count} lower level flyovers");
- }
- }
+ // 在 CompAbilityEffect_SpawnFlyOver.cs 中修改航道检查方法:
+ // 修改 DestroyLowerLevelFlyOvers 方法(现在由全局管理器处理):
public override void Apply(LocalTargetInfo target, LocalTargetInfo dest)
{
base.Apply(target, dest);
@@ -115,18 +25,6 @@ namespace WulaFallenEmpire
return;
try
{
- // 检查航道等级系统
- if (Props.useLaneLevelSystem)
- {
- string disableReason;
- if (!CanSpawnWithLaneLevelCheck(out disableReason))
- {
- Messages.Message(disableReason, MessageTypeDefOf.RejectInput);
- return;
- }
- // 强制销毁低等级FlyOver
- DestroyLowerLevelFlyOvers();
- }
Log.Message($"FlyOver skill activated by {parent.pawn.Label} at position {parent.pawn.Position}");
Log.Message($"Target cell: {target.Cell}, Dest: {dest.Cell}");
// 计算起始和结束位置
@@ -183,19 +81,6 @@ namespace WulaFallenEmpire
{
baseInfo = $"扇形监视: 约{Props.strafeWidth * 2 + 1}格宽度\n(具体参数在飞行物定义中)";
}
- // 添加航道等级信息
- if (Props.useLaneLevelSystem)
- {
- if (!string.IsNullOrEmpty(baseInfo))
- baseInfo += "\n";
- baseInfo += $"航道等级: {Props.laneLevel}";
- // 检查是否可以被召唤
- string disableReason;
- if (!CanSpawnWithLaneLevelCheck(out disableReason))
- {
- baseInfo += $"\n{disableReason}";
- }
- }
return baseInfo;
}
// 更新:验证方法,包含航道等级检查
@@ -207,19 +92,6 @@ namespace WulaFallenEmpire
return false;
if (!target.Cell.IsValid || !target.Cell.InBounds(parent.pawn.Map))
return false;
- // 航道等级检查
- if (Props.useLaneLevelSystem)
- {
- string disableReason;
- if (!CanSpawnWithLaneLevelCheck(out disableReason))
- {
- if (throwMessages)
- {
- Messages.Message(disableReason, MessageTypeDefOf.RejectInput);
- }
- return false;
- }
- }
return true;
}
// 更新:创建标准飞越方法,添加航道等级组件
@@ -241,19 +113,6 @@ namespace WulaFallenEmpire
);
flyOver.spawnContentsOnImpact = Props.dropContentsOnImpact;
flyOver.playFlyOverSound = Props.playFlyOverSound;
- // 设置航道等级信息
- if (Props.useLaneLevelSystem)
- {
- var laneComp = flyOver.GetComp();
- if (laneComp != null)
- {
- Log.Message($"FlyOver created with lane level: {Props.laneLevel}, type: {Props.flyOverTypeName}");
- }
- else
- {
- Log.Warning("FlyOver def does not have CompFlyOverType component!");
- }
- }
if (Props.customSound != null)
{
// 自定义音效逻辑
@@ -281,15 +140,6 @@ namespace WulaFallenEmpire
// 设置基本属性
flyOver.spawnContentsOnImpact = Props.dropContentsOnImpact;
flyOver.playFlyOverSound = Props.playFlyOverSound;
- // 设置航道等级信息
- if (Props.useLaneLevelSystem)
- {
- var laneComp = flyOver.GetComp();
- if (laneComp != null)
- {
- Log.Message($"Ground Strafing FlyOver created with lane level: {Props.laneLevel}, type: {Props.flyOverTypeName}");
- }
- }
// 获取扫射组件并设置预处理后的目标单元格
CompGroundStrafing strafingComp = flyOver.GetComp();
if (strafingComp != null)
@@ -344,15 +194,6 @@ namespace WulaFallenEmpire
// 设置基本属性
flyOver.spawnContentsOnImpact = Props.dropContentsOnImpact;
flyOver.playFlyOverSound = Props.playFlyOverSound;
- // 设置航道等级信息
- if (Props.useLaneLevelSystem)
- {
- var laneComp = flyOver.GetComp();
- if (laneComp != null)
- {
- Log.Message($"Sector Surveillance FlyOver created with lane level: {Props.laneLevel}, type: {Props.flyOverTypeName}");
- }
- }
Log.Message($"SectorSurveillance FlyOver created: {flyOver} from {startPos} to {endPos}");
}
// 新增:验证和优化飞行路径
diff --git a/Source/WulaFallenEmpire/Flyover/WULA_SpawnFlyOver/CompProperties_AbilitySpawnFlyOver.cs b/Source/WulaFallenEmpire/Flyover/WULA_SpawnFlyOver/CompProperties_AbilitySpawnFlyOver.cs
index 188d3a7e..7d268b2e 100644
--- a/Source/WulaFallenEmpire/Flyover/WULA_SpawnFlyOver/CompProperties_AbilitySpawnFlyOver.cs
+++ b/Source/WulaFallenEmpire/Flyover/WULA_SpawnFlyOver/CompProperties_AbilitySpawnFlyOver.cs
@@ -47,11 +47,6 @@ namespace WulaFallenEmpire
public bool showSectorPreview = true; // 是否显示扇形预览
public Color sectorPreviewColor = new Color(0.3f, 0.7f, 1f, 0.3f);
- // 航道等级系统配置
- public bool useLaneLevelSystem = false; // 是否使用航道等级系统
- public int laneLevel = 0; // 该技能的航道等级
- public string flyOverTypeName = "default"; // FlyOver类型名称
-
public CompProperties_AbilitySpawnFlyOver()
{
this.compClass = typeof(CompAbilityEffect_SpawnFlyOver);
diff --git a/Source/WulaFallenEmpire/GlobalWorkTable/Building_GlobalWorkTable.cs b/Source/WulaFallenEmpire/GlobalWorkTable/Building_GlobalWorkTable.cs
index a91d0dbf..b705581b 100644
--- a/Source/WulaFallenEmpire/GlobalWorkTable/Building_GlobalWorkTable.cs
+++ b/Source/WulaFallenEmpire/GlobalWorkTable/Building_GlobalWorkTable.cs
@@ -1,4 +1,4 @@
-// 在 Building_GlobalWorkTable.cs 中添加材质处理逻辑
+// Building_GlobalWorkTable.cs (修改版本)
using RimWorld;
using System.Collections.Generic;
using System.Linq;
@@ -73,7 +73,7 @@ namespace WulaFallenEmpire
public GlobalWorkTableAirdropExtension AirdropExtension =>
def.GetModExtension();
- // 新增:添加空投命令到技能栏
+ // 修改:添加空投命令到技能栏,添加工厂设施检查
public override IEnumerable GetGizmos()
{
foreach (Gizmo g in base.GetGizmos())
@@ -81,9 +81,12 @@ namespace WulaFallenEmpire
yield return g;
}
- // 只有在有输出物品时才显示空投按钮
+ // 只有在有输出物品且有工厂设施的飞行器时才显示空投按钮
var globalStorage = Find.World.GetComponent();
- if (globalStorage != null && globalStorage.outputStorage.Any(kvp => kvp.Value > 0))
+ bool hasOutputItems = globalStorage != null && globalStorage.outputStorage.Any(kvp => kvp.Value > 0);
+ bool hasFactoryFlyOver = HasFactoryFacilityFlyOver();
+
+ if (hasOutputItems && hasFactoryFlyOver)
{
yield return new Command_Action
{
@@ -91,9 +94,73 @@ namespace WulaFallenEmpire
defaultLabel = "WULA_AirdropProducts".Translate(),
defaultDesc = "WULA_AirdropProductsDesc".Translate(),
icon = ContentFinder.Get("Wula/UI/Commands/WULA_AirdropProducts"),
- disabledReason = "WULA_CannotAirdrop".Translate()
};
}
+ else if (hasOutputItems && !hasFactoryFlyOver)
+ {
+ yield return new Command_Action
+ {
+ action = () => Messages.Message("WULA_NoFactoryFlyOver".Translate(), MessageTypeDefOf.RejectInput),
+ defaultLabel = "WULA_AirdropProducts".Translate(),
+ defaultDesc = "WULA_NoFactoryFlyOverDesc".Translate(),
+ icon = ContentFinder.Get("Wula/UI/Commands/WULA_AirdropProducts"),
+ };
+ }
+ }
+
+ // 新增:检查是否有拥有FactoryFacility设施的飞行器
+ private bool HasFactoryFacilityFlyOver()
+ {
+ Map map = Map;
+ if (map == null) return false;
+
+ try
+ {
+ // 检查所有FlyOver类型的物体
+ var allFlyOvers = new List();
+ var dynamicObjects = map.dynamicDrawManager.DrawThings;
+ foreach (var thing in dynamicObjects)
+ {
+ if (thing is FlyOver)
+ {
+ allFlyOvers.Add(thing);
+ }
+ }
+
+ Log.Message($"[FactoryFacility Check] Found {allFlyOvers.Count} FlyOvers on map");
+
+ foreach (var thing in allFlyOvers)
+ {
+ if (thing is FlyOver flyOver && !flyOver.Destroyed)
+ {
+ // 检查设施
+ var facilitiesComp = flyOver.GetComp();
+ if (facilitiesComp == null)
+ {
+ Log.Warning($"[FactoryFacility Check] FlyOver at {flyOver.Position} has no CompFlyOverFacilities");
+ continue;
+ }
+
+ if (facilitiesComp.HasFacility("FactoryFacility"))
+ {
+ Log.Message($"[FactoryFacility Check] Found valid FlyOver at {flyOver.Position} with FactoryFacility");
+ return true;
+ }
+ else
+ {
+ Log.Message($"[FactoryFacility Check] FlyOver at {flyOver.Position} missing FactoryFacility. Has: {string.Join(", ", facilitiesComp.GetActiveFacilities())}");
+ }
+ }
+ }
+
+ Log.Message("[FactoryFacility Check] No FlyOver with FactoryFacility found");
+ return false;
+ }
+ catch (System.Exception ex)
+ {
+ Log.Error($"[FactoryFacility Check] Error in HasFactoryFacilityFlyOver: {ex}");
+ return false;
+ }
}
// 新增:开始空投目标选择
@@ -106,6 +173,14 @@ namespace WulaFallenEmpire
Messages.Message("WULA_NoProductsToAirdrop".Translate(), MessageTypeDefOf.RejectInput);
return;
}
+
+ // 检查是否有工厂设施的飞行器
+ if (!HasFactoryFacilityFlyOver())
+ {
+ Messages.Message("WULA_NoFactoryFlyOver".Translate(), MessageTypeDefOf.RejectInput);
+ return;
+ }
+
// 启动目标选择
Find.Targeter.BeginTargeting(new TargetingParameters
{
@@ -133,6 +208,13 @@ namespace WulaFallenEmpire
if (globalStorage == null)
return;
+ // 再次检查是否有工厂设施的飞行器
+ if (!HasFactoryFacilityFlyOver())
+ {
+ Messages.Message("WULA_NoFactoryFlyOver".Translate(), MessageTypeDefOf.RejectInput);
+ return;
+ }
+
// 获取空投参数
var airdropExt = AirdropExtension;
float maxRange = airdropExt?.maxRange ?? 50f;
diff --git a/Source/WulaFallenEmpire/GlobalWorkTable/CompLaunchable_ToGlobalStorage.cs b/Source/WulaFallenEmpire/GlobalWorkTable/CompLaunchable_ToGlobalStorage.cs
index b7549726..a99a070f 100644
--- a/Source/WulaFallenEmpire/GlobalWorkTable/CompLaunchable_ToGlobalStorage.cs
+++ b/Source/WulaFallenEmpire/GlobalWorkTable/CompLaunchable_ToGlobalStorage.cs
@@ -4,6 +4,7 @@ using UnityEngine;
using Verse;
using Verse.Sound;
using System.Text;
+using System.Linq;
namespace WulaFallenEmpire
{
@@ -11,6 +12,9 @@ namespace WulaFallenEmpire
{
public new CompProperties_Launchable_ToGlobalStorage Props => (CompProperties_Launchable_ToGlobalStorage)this.props;
+ // 获取垃圾屏蔽组件
+ public CompGarbageShield GarbageShieldComp => this.parent.GetComp();
+
public override IEnumerable CompGetGizmosExtra()
{
// 移除原有的发射按钮,替换为我们自己的
@@ -59,6 +63,30 @@ namespace WulaFallenEmpire
return;
}
+ // 检查垃圾屏蔽 - 如果启用了垃圾屏蔽并且有禁止物品,取消发射
+ if (GarbageShieldComp != null && GarbageShieldComp.GarbageShieldEnabled)
+ {
+ List forbiddenItems = GarbageShieldComp.GetForbiddenItems(transporter.innerContainer);
+ if (forbiddenItems.Count > 0)
+ {
+ // 显示取消发射消息
+ StringBuilder forbiddenList = new StringBuilder();
+ foreach (Thing item in forbiddenItems)
+ {
+ if (forbiddenList.Length > 0) forbiddenList.Append(", ");
+ forbiddenList.Append($"{item.LabelCap} x{item.stackCount}");
+ }
+
+ Messages.Message("WULA_LaunchCancelledDueToForbiddenItems".Translate(forbiddenList.ToString()),
+ this.parent, MessageTypeDefOf.RejectInput);
+
+ // 触发垃圾屏蔽UI事件
+ GarbageShieldComp.ProcessGarbageShieldTrigger(forbiddenItems);
+
+ return; // 取消发射
+ }
+ }
+
// 统计发送的物品
int inputItemsCount = 0;
int outputItemsCount = 0;
@@ -87,7 +115,8 @@ namespace WulaFallenEmpire
}
// 2. 显示发送结果消息
- string message = BuildTransferMessage(inputItemsCount, outputItemsCount, inputItemsList.ToString(), outputItemsList.ToString());
+ string message = BuildTransferMessage(inputItemsCount, outputItemsCount,
+ inputItemsList.ToString(), outputItemsList.ToString());
Messages.Message(message, this.parent, MessageTypeDefOf.PositiveEvent);
// 3. 清空容器,防止物品掉落
@@ -108,20 +137,13 @@ namespace WulaFallenEmpire
if (item.def.IsApparel)
return true;
- // 活着的Pawn
- //if (item is Pawn pawn && !pawn.Dead)
- // return true;
-
- // Pawn的尸体
- if (item.def.IsCorpse)
- return true;
-
// 其他物品发送到输入存储器
return false;
}
// 构建转移消息
- private string BuildTransferMessage(int inputCount, int outputCount, string inputList, string outputList)
+ private string BuildTransferMessage(int inputCount, int outputCount,
+ string inputList, string outputList)
{
StringBuilder message = new StringBuilder();
@@ -156,6 +178,11 @@ namespace WulaFallenEmpire
message.Append(": ").Append(outputList);
}
}
+ else
+ {
+ // 没有任何物品
+ message.Append("WULA_NoItemsProcessed".Translate());
+ }
return message.ToString();
}
diff --git a/Source/WulaFallenEmpire/GlobalWorkTable/CompProperties_GarbageShield.cs b/Source/WulaFallenEmpire/GlobalWorkTable/CompProperties_GarbageShield.cs
new file mode 100644
index 00000000..208ec24a
--- /dev/null
+++ b/Source/WulaFallenEmpire/GlobalWorkTable/CompProperties_GarbageShield.cs
@@ -0,0 +1,90 @@
+using RimWorld;
+using System.Collections.Generic;
+using System.Text;
+using UnityEngine;
+using Verse;
+
+namespace WulaFallenEmpire
+{
+ public class CompProperties_GarbageShield : CompProperties
+ {
+ public bool garbageShieldEnabled = false; // 通过XML配置启用/禁用
+ public string garbageShieldUIEventDefName; // 垃圾屏蔽触发时弹出的UI事件defName
+
+ public CompProperties_GarbageShield()
+ {
+ this.compClass = typeof(CompGarbageShield);
+ }
+ }
+
+ public class CompGarbageShield : ThingComp
+ {
+ public CompProperties_GarbageShield Props => (CompProperties_GarbageShield)this.props;
+
+ // 垃圾屏蔽状态完全由XML配置决定,不提供玩家切换
+ public bool GarbageShieldEnabled => Props.garbageShieldEnabled;
+
+ // 检查物品是否是被禁止的垃圾物品
+ public bool IsForbiddenItem(Thing thing)
+ {
+ if (!GarbageShieldEnabled) return false;
+
+ // 检查是否是殖民者
+ if (thing is Pawn pawn && pawn.IsColonist)
+ return true;
+
+ // 检查是否是尸体
+ if (thing.def.IsCorpse)
+ return true;
+
+ // 检查是否是有毒垃圾
+ if (IsToxicWaste(thing))
+ return true;
+
+ return false;
+ }
+
+ // 获取所有禁止物品
+ public List GetForbiddenItems(ThingOwner container)
+ {
+ List forbiddenItems = new List();
+
+ if (!GarbageShieldEnabled) return forbiddenItems;
+
+ foreach (Thing item in container)
+ {
+ if (IsForbiddenItem(item))
+ {
+ forbiddenItems.Add(item);
+ }
+ }
+
+ return forbiddenItems;
+ }
+
+ // 判断是否为有毒垃圾
+ private bool IsToxicWaste(Thing thing)
+ {
+ // 根据物品标签、类别或定义名称判断是否为有毒垃圾
+ return thing.def == ThingDefOf.Wastepack;
+ }
+
+ // 处理垃圾屏蔽触发并触发UI事件
+ public void ProcessGarbageShieldTrigger(List forbiddenItems)
+ {
+ if (forbiddenItems.Count > 0 && !string.IsNullOrEmpty(Props.garbageShieldUIEventDefName))
+ {
+ // 弹出指定的自定义UI
+ EventDef uiDef = DefDatabase.GetNamed(Props.garbageShieldUIEventDefName, false);
+ if (uiDef != null)
+ {
+ Find.WindowStack.Add(new Dialog_CustomDisplay(uiDef));
+ }
+ else
+ {
+ Log.Error($"[CompGarbageShield] Could not find EventDef named '{Props.garbageShieldUIEventDefName}'.");
+ }
+ }
+ }
+ }
+}
diff --git a/Source/WulaFallenEmpire/GlobalWorkTable/CompProperties_Launchable_ToGlobalStorage.cs b/Source/WulaFallenEmpire/GlobalWorkTable/CompProperties_Launchable_ToGlobalStorage.cs
index fe5c84be..24dc1f5e 100644
--- a/Source/WulaFallenEmpire/GlobalWorkTable/CompProperties_Launchable_ToGlobalStorage.cs
+++ b/Source/WulaFallenEmpire/GlobalWorkTable/CompProperties_Launchable_ToGlobalStorage.cs
@@ -7,10 +7,14 @@ namespace WulaFallenEmpire
{
public float fuelNeededToLaunch = 25f;
public SoundDef launchSound;
+
+ // 垃圾屏蔽配置 - 通过XML控制
+ public bool garbageShieldEnabled = false;
+ public string garbageShieldUIEventDefName = "Wula_UI_Legion_Reply_1";
public CompProperties_Launchable_ToGlobalStorage()
{
this.compClass = typeof(CompLaunchable_ToGlobalStorage);
}
}
-}
\ No newline at end of file
+}
diff --git a/Source/WulaFallenEmpire/GlobalWorkTable/CompProperties_ProductionCategory.cs b/Source/WulaFallenEmpire/GlobalWorkTable/CompProperties_ProductionCategory.cs
new file mode 100644
index 00000000..490d871a
--- /dev/null
+++ b/Source/WulaFallenEmpire/GlobalWorkTable/CompProperties_ProductionCategory.cs
@@ -0,0 +1,30 @@
+// CompProperties_ProductionCategory.cs
+using RimWorld;
+using Verse;
+
+namespace WulaFallenEmpire
+{
+ public enum ProductionCategory
+ {
+ Equipment, // 装备
+ Weapon, // 武器
+ Mechanoid // 机械体
+ }
+
+ public class CompProperties_ProductionCategory : CompProperties
+ {
+ public ProductionCategory category = ProductionCategory.Equipment;
+
+ public CompProperties_ProductionCategory()
+ {
+ this.compClass = typeof(CompProductionCategory);
+ }
+ }
+
+ public class CompProductionCategory : ThingComp
+ {
+ public CompProperties_ProductionCategory Props => (CompProperties_ProductionCategory)props;
+
+ public ProductionCategory Category => Props.category;
+ }
+}
diff --git a/Source/WulaFallenEmpire/GlobalWorkTable/ITab_GlobalBills.cs b/Source/WulaFallenEmpire/GlobalWorkTable/ITab_GlobalBills.cs
index 2b114dbf..92f9f930 100644
--- a/Source/WulaFallenEmpire/GlobalWorkTable/ITab_GlobalBills.cs
+++ b/Source/WulaFallenEmpire/GlobalWorkTable/ITab_GlobalBills.cs
@@ -14,86 +14,271 @@ namespace WulaFallenEmpire
private float viewHeight = 1000f;
private Vector2 scrollPosition;
private GlobalProductionOrder mouseoverOrder;
-
+
private static readonly Vector2 WinSize = new Vector2(420f, 480f);
+ // 分类按钮状态
+ private ProductionCategory? selectedCategory = null;
+
protected Building_GlobalWorkTable SelTable => (Building_GlobalWorkTable)base.SelThing;
+
public ITab_GlobalBills()
{
size = WinSize;
labelKey = "WULA_GlobalBillsTab";
tutorTag = "GlobalBills";
}
-
protected override void FillTab()
{
Rect mainRect = new Rect(0f, 0f, WinSize.x, WinSize.y).ContractedBy(10f);
-
+
// 标题
Text.Font = GameFont.Medium;
Widgets.Label(new Rect(mainRect.x, mainRect.y, mainRect.width, 30f), "WULA_GlobalProduction".Translate());
Text.Font = GameFont.Small;
-
- // 存储查看按钮 - 放在标题旁边
+
+ // 存储查看按钮
Rect storageButtonRect = new Rect(mainRect.xMax - 160f, mainRect.y, 120f, 25f);
DoStorageButton(storageButtonRect);
-
+
+ // 分类按钮区域
+ Rect categoryButtonsRect = new Rect(mainRect.x, mainRect.y + 35f, mainRect.width, 25f);
+ DoCategoryButtons(categoryButtonsRect);
+
// 上帝模式按钮区域
if (DebugSettings.godMode)
{
- Rect godModeButtonRect = new Rect(mainRect.x, mainRect.y + 35f, mainRect.width, 25f);
+ Rect godModeButtonRect = new Rect(mainRect.x, mainRect.y + 65f, mainRect.width, 25f);
DoGodModeButtons(godModeButtonRect);
}
-
- // 订单列表区域 - 调整位置
- float ordersRectY = DebugSettings.godMode ? mainRect.y + 65f : mainRect.y + 35f;
- Rect ordersRect = new Rect(mainRect.x, ordersRectY, mainRect.width, mainRect.height - (DebugSettings.godMode ? 110f : 80f));
+
+ // 订单列表区域
+ float ordersRectY = DebugSettings.godMode ? mainRect.y + 90f : mainRect.y + 65f;
+ Rect ordersRect = new Rect(mainRect.x, ordersRectY, mainRect.width, mainRect.height - (DebugSettings.godMode ? 130f : 100f));
mouseoverOrder = DoOrdersListing(ordersRect);
-
- // 添加订单按钮
+
+ // 添加订单按钮(现在显示选中的分类)
Rect addButtonRect = new Rect(mainRect.x, mainRect.yMax - 35f, mainRect.width, 30f);
- if (Widgets.ButtonText(addButtonRect, "WULA_AddProductionOrder".Translate()))
+ DoAddOrderButton(addButtonRect);
+ }
+ // 新增:分类按钮
+ private void DoCategoryButtons(Rect rect)
+ {
+ float buttonWidth = (rect.width - 10f) / 3f;
+
+ Rect equipmentRect = new Rect(rect.x, rect.y, buttonWidth, rect.height);
+ Rect weaponRect = new Rect(rect.x + buttonWidth + 5f, rect.y, buttonWidth, rect.height);
+ Rect mechanoidRect = new Rect(rect.x + (buttonWidth + 5f) * 2, rect.y, buttonWidth, rect.height);
+
+ // 装备按钮
+ string equipmentLabel = selectedCategory == ProductionCategory.Equipment ?
+ $"{"WULA_Equipment".Translate()}" :
+ "WULA_Equipment".Translate();
+
+ if (Widgets.ButtonText(equipmentRect, equipmentLabel))
{
- Find.WindowStack.Add(new FloatMenu(GenerateRecipeOptions()));
+ selectedCategory = selectedCategory == ProductionCategory.Equipment ? null : ProductionCategory.Equipment;
+ SoundDefOf.Click.PlayOneShotOnCamera();
+ }
+
+ // 武器按钮
+ string weaponLabel = selectedCategory == ProductionCategory.Weapon ?
+ $"{"WULA_Weapon".Translate()}" :
+ "WULA_Weapon".Translate();
+
+ if (Widgets.ButtonText(weaponRect, weaponLabel))
+ {
+ selectedCategory = selectedCategory == ProductionCategory.Weapon ? null : ProductionCategory.Weapon;
+ SoundDefOf.Click.PlayOneShotOnCamera();
+ }
+
+ // 机械体按钮
+ string mechanoidLabel = selectedCategory == ProductionCategory.Mechanoid ?
+ $"{"WULA_Mechanoid".Translate()}" :
+ "WULA_Mechanoid".Translate();
+
+ if (Widgets.ButtonText(mechanoidRect, mechanoidLabel))
+ {
+ selectedCategory = selectedCategory == ProductionCategory.Mechanoid ? null : ProductionCategory.Mechanoid;
+ SoundDefOf.Click.PlayOneShotOnCamera();
}
}
+ // 修改:添加订单按钮,显示当前选择的分类
+ private void DoAddOrderButton(Rect rect)
+ {
+ string buttonLabel = selectedCategory.HasValue ?
+ $"{"WULA_AddProductionOrder".Translate()} ({GetCategoryLabel(selectedCategory.Value)})" :
+ "WULA_AddProductionOrder".Translate();
- // 新增:存储查看按钮
+ if (Widgets.ButtonText(rect, buttonLabel))
+ {
+ Find.WindowStack.Add(new FloatMenu(GenerateRecipeOptions()));
+ SoundDefOf.Click.PlayOneShotOnCamera();
+ }
+
+ // 如果没有选择分类,显示提示
+ if (!selectedCategory.HasValue && Mouse.IsOver(rect))
+ {
+ TooltipHandler.TipRegion(rect, "WULA_SelectCategoryFirst".Translate());
+ }
+ }
+ // 获取分类标签
+ private string GetCategoryLabel(ProductionCategory category)
+ {
+ return category switch
+ {
+ ProductionCategory.Equipment => "WULA_Equipment".Translate(),
+ ProductionCategory.Weapon => "WULA_Weapon".Translate(),
+ ProductionCategory.Mechanoid => "WULA_Mechanoid".Translate(),
+ _ => "WULA_Unknown".Translate()
+ };
+ }
+ // 修改:根据选择的分类生成配方选项
+ private List GenerateRecipeOptions()
+ {
+ var options = new List();
+
+ // 如果没有选择分类,显示所有配方
+ if (!selectedCategory.HasValue)
+ {
+ foreach (var recipe in SelTable.def.AllRecipes)
+ {
+ if (recipe.AvailableNow && recipe.AvailableOnNow(SelTable))
+ {
+ options.Add(CreateRecipeOption(recipe));
+ }
+ }
+ }
+ else
+ {
+ // 根据选择的分类筛选配方
+ foreach (var recipe in SelTable.def.AllRecipes)
+ {
+ if (recipe.AvailableNow && recipe.AvailableOnNow(SelTable) &&
+ RecipeMatchesCategory(recipe, selectedCategory.Value))
+ {
+ options.Add(CreateRecipeOption(recipe));
+ }
+ }
+ }
+
+ if (options.Count == 0)
+ {
+ options.Add(new FloatMenuOption("WULA_NoAvailableRecipes".Translate(), null));
+ }
+
+ // 按显示优先级排序
+ options.SortByDescending(opt => opt.orderInPriority);
+
+ return options;
+ }
+ // 创建配方选项
+ private FloatMenuOption CreateRecipeOption(RecipeDef recipe)
+ {
+ string label = recipe.LabelCap;
+
+ // 添加分类标签
+ var category = GetRecipeCategory(recipe);
+ if (category.HasValue)
+ {
+ label += $" [{GetCategoryLabel(category.Value)}]";
+ }
+
+ return new FloatMenuOption(
+ label: label,
+ action: () =>
+ {
+ var newOrder = new GlobalProductionOrder
+ {
+ recipe = recipe,
+ targetCount = 1,
+ paused = true
+ };
+ SelTable.globalOrderStack.AddOrder(newOrder);
+ SoundDefOf.Click.PlayOneShotOnCamera();
+ },
+ shownItemForIcon: recipe.UIIconThing,
+ thingStyle: null,
+ forceBasicStyle: false,
+ priority: MenuOptionPriority.Default,
+ mouseoverGuiAction: null,
+ revalidateClickTarget: null,
+ extraPartWidth: 29f,
+ extraPartOnGUI: (Rect rect) =>
+ {
+ return Widgets.InfoCardButton(rect.x + 5f, rect.y + (rect.height - 24f) / 2f, recipe);
+ },
+ revalidateWorldClickTarget: null,
+ playSelectionSound: true,
+ orderInPriority: -recipe.displayPriority
+ );
+ }
+ // 检查配方是否匹配分类
+ private bool RecipeMatchesCategory(RecipeDef recipe, ProductionCategory category)
+ {
+ var recipeCategory = GetRecipeCategory(recipe);
+ return recipeCategory == category;
+ }
+ // 获取配方的分类
+ private ProductionCategory? GetRecipeCategory(RecipeDef recipe)
+ {
+ if (recipe.products == null || recipe.products.Count == 0)
+ return null;
+
+ ThingDef productDef = recipe.products[0].thingDef;
+ if (productDef == null)
+ return null;
+
+ // 检查产品是否有分类组件
+ var categoryComp = productDef.GetCompProperties();
+ if (categoryComp != null)
+ return categoryComp.category;
+
+ // 如果没有分类组件,根据产品类型推断
+ return InferCategoryFromThingDef(productDef);
+ }
+ // 根据ThingDef推断分类
+ private ProductionCategory? InferCategoryFromThingDef(ThingDef thingDef)
+ {
+ if (thingDef.IsMeleeWeapon || thingDef.IsRangedWeapon)
+ return ProductionCategory.Weapon;
+
+ if (thingDef.IsApparel || thingDef.equipmentType != EquipmentType.None)
+ return ProductionCategory.Equipment;
+
+ if (thingDef.race != null && thingDef.race.IsMechanoid)
+ return ProductionCategory.Mechanoid;
+
+ return null;
+ }
+ // 其余方法保持不变(DoStorageButton, DoGodModeButtons, DoOrdersListing, DoOrderRow 等)
private void DoStorageButton(Rect rect)
{
- // 绘制按钮
if (Widgets.ButtonText(rect, "WULA_ViewStorage".Translate()))
{
SoundDefOf.Click.PlayOneShotOnCamera();
}
-
- // 鼠标悬停时显示存储信息Tooltip
+
if (Mouse.IsOver(rect))
{
TooltipHandler.TipRegion(rect, GetStorageTooltip());
}
}
-
- // 新增:获取存储信息的Tooltip
private string GetStorageTooltip()
{
var globalStorage = Find.World.GetComponent();
if (globalStorage == null)
return "WULA_NoGlobalStorage".Translate();
-
StringBuilder sb = new StringBuilder();
-
// 输入存储(原材料)
sb.AppendLine("WULA_InputStorage".Translate() + ":");
sb.AppendLine();
-
var inputItems = globalStorage.inputStorage
.Where(kvp => kvp.Value > 0)
.OrderByDescending(kvp => kvp.Value)
.ThenBy(kvp => kvp.Key.label)
.ToList();
-
if (inputItems.Count == 0)
{
sb.AppendLine("WULA_NoItems".Translate());
@@ -105,19 +290,15 @@ namespace WulaFallenEmpire
sb.AppendLine($" {kvp.Value} {kvp.Key.LabelCap}");
}
}
-
sb.AppendLine();
-
// 输出存储(产品)
sb.AppendLine("WULA_OutputStorage".Translate() + ":");
sb.AppendLine();
-
var outputItems = globalStorage.outputStorage
.Where(kvp => kvp.Value > 0)
.OrderByDescending(kvp => kvp.Value)
.ThenBy(kvp => kvp.Key.label)
.ToList();
-
if (outputItems.Count == 0)
{
sb.AppendLine("WULA_NoItems".Translate());
@@ -129,7 +310,6 @@ namespace WulaFallenEmpire
sb.AppendLine($" {kvp.Value} {kvp.Key.LabelCap}");
}
}
-
return sb.ToString();
}
@@ -138,12 +318,12 @@ namespace WulaFallenEmpire
{
Rect button1Rect = new Rect(rect.x, rect.y, rect.width / 2 - 5f, rect.height);
Rect button2Rect = new Rect(rect.x + rect.width / 2 + 5f, rect.y, rect.width / 2 - 5f, rect.height);
-
+
if (Widgets.ButtonText(button1Rect, "GOD: Add Resources"))
{
AddTestResources();
}
-
+
if (Widgets.ButtonText(button2Rect, "GOD: Spawn Products"))
{
SpawnOutputProducts();
@@ -158,11 +338,11 @@ namespace WulaFallenEmpire
// 添加200钢铁
ThingDef steelDef = ThingDefOf.Steel;
globalStorage.AddToInputStorage(steelDef, 200);
-
+
// 添加100零部件
ThingDef componentDef = ThingDefOf.ComponentIndustrial;
globalStorage.AddToInputStorage(componentDef, 100);
-
+
Messages.Message("Added 200 Steel and 100 Components to global storage", MessageTypeDefOf.PositiveEvent);
}
}
@@ -175,15 +355,15 @@ namespace WulaFallenEmpire
Map map = SelTable.Map;
IntVec3 spawnCell = SelTable.Position;
int totalSpawned = 0;
-
+
// 复制列表以避免修改时枚举
var outputCopy = new Dictionary(globalStorage.outputStorage);
-
+
foreach (var kvp in outputCopy)
{
ThingDef thingDef = kvp.Key;
int count = kvp.Value;
-
+
if (count > 0)
{
// 创建物品并放置到地图上
@@ -192,7 +372,7 @@ namespace WulaFallenEmpire
int stackSize = Mathf.Min(count, thingDef.stackLimit);
Thing thing = ThingMaker.MakeThing(thingDef);
thing.stackCount = stackSize;
-
+
if (GenPlace.TryPlaceThing(thing, spawnCell, map, ThingPlaceMode.Near))
{
globalStorage.RemoveFromOutputStorage(thingDef, stackSize);
@@ -206,7 +386,7 @@ namespace WulaFallenEmpire
}
}
}
-
+
Messages.Message($"Spawned {totalSpawned} items at worktable location", MessageTypeDefOf.PositiveEvent);
}
}
@@ -214,28 +394,28 @@ namespace WulaFallenEmpire
private GlobalProductionOrder DoOrdersListing(Rect rect)
{
GlobalProductionOrder result = null;
-
+
Widgets.DrawMenuSection(rect);
Rect outRect = rect.ContractedBy(5f);
Rect viewRect = new Rect(0f, 0f, outRect.width - 16f, viewHeight);
-
+
Widgets.BeginScrollView(outRect, ref scrollPosition, viewRect);
-
+
float curY = 0f;
for (int i = 0; i < SelTable.globalOrderStack.orders.Count; i++)
{
var order = SelTable.globalOrderStack.orders[i];
-
+
// 增加订单行高度
Rect orderRect = new Rect(0f, curY, viewRect.width, 90f);
-
+
if (DoOrderRow(orderRect, order))
{
result = order;
}
-
+
curY += 95f; // 增加行间距
-
+
// 分隔线
if (i < SelTable.globalOrderStack.orders.Count - 1)
{
@@ -243,12 +423,12 @@ namespace WulaFallenEmpire
curY += 5f;
}
}
-
+
if (Event.current.type == EventType.Layout)
{
viewHeight = curY;
}
-
+
Widgets.EndScrollView();
return result;
}
@@ -387,53 +567,6 @@ namespace WulaFallenEmpire
return Mouse.IsOver(rect);
}
- // 简化:在添加订单时移除材质初始化
- private List GenerateRecipeOptions()
- {
- var options = new List();
- foreach (var recipe in SelTable.def.AllRecipes)
- {
- if (recipe.AvailableNow && recipe.AvailableOnNow(SelTable))
- {
- string label = recipe.LabelCap;
- options.Add(new FloatMenuOption(
- label: label,
- action: () =>
- {
- var newOrder = new GlobalProductionOrder
- {
- recipe = recipe,
- targetCount = 1,
- paused = true
- };
-
- SelTable.globalOrderStack.AddOrder(newOrder);
- SoundDefOf.Click.PlayOneShotOnCamera();
- },
- shownItemForIcon: recipe.UIIconThing,
- thingStyle: null,
- forceBasicStyle: false,
- priority: MenuOptionPriority.Default,
- mouseoverGuiAction: null,
- revalidateClickTarget: null,
- extraPartWidth: 29f,
- extraPartOnGUI: (Rect rect) =>
- {
- return Widgets.InfoCardButton(rect.x + 5f, rect.y + (rect.height - 24f) / 2f, recipe);
- },
- revalidateWorldClickTarget: null,
- playSelectionSound: true,
- orderInPriority: -recipe.displayPriority
- ));
- }
- }
- if (options.Count == 0)
- {
- options.Add(new FloatMenuOption("WULA_NoAvailableRecipes".Translate(), null));
- }
- return options;
- }
-
// 新增:立刻完成订单的方法
private void CompleteOrderImmediately(GlobalProductionOrder order)
{
@@ -446,7 +579,7 @@ namespace WulaFallenEmpire
// 检查是否有足够资源
bool hasEnoughResources = order.HasEnoughResources();
-
+
if (!hasEnoughResources)
{
// 上帝模式下,如果没有足够资源,显示确认对话框
@@ -478,13 +611,13 @@ namespace WulaFallenEmpire
// 计算需要完成的数量
int remainingCount = order.targetCount - order.currentCount;
-
+
if (remainingCount <= 0)
return;
// 尝试消耗资源(如果可能)
bool resourcesConsumed = order.ConsumeResources();
-
+
if (!resourcesConsumed)
{
Log.Message($"[GOD MODE] Could not consume resources for {order.recipe.defName}, completing without resource consumption");
diff --git a/Source/WulaFallenEmpire/Placeworker/CompProperties_CustomRadius.cs b/Source/WulaFallenEmpire/Placeworker/CompProperties_CustomRadius.cs
new file mode 100644
index 00000000..49c77dee
--- /dev/null
+++ b/Source/WulaFallenEmpire/Placeworker/CompProperties_CustomRadius.cs
@@ -0,0 +1,263 @@
+using RimWorld;
+using UnityEngine;
+using Verse;
+using System.Collections.Generic;
+using HarmonyLib;
+
+namespace WulaFallenEmpire
+{
+ // 自定义属性组件,用于存储半径和颜色信息
+ public class CompProperties_CustomRadius : CompProperties
+ {
+ public float radius = 10f;
+ public Color color = new Color(0.8f, 0.8f, 0.4f); // 默认浅黄色
+ public float radiusOffset = -2.1f; // 半径偏移量,与原始保持一致
+ public bool showInGUI = true; // 是否在GUI中显示切换选项
+ public string label = "Show Radius"; // 直接定义标签文本
+ public string description = "Toggle visibility of the custom radius overlay."; // 直接定义描述文本
+ public bool defaultVisible = true; // 默认是否可见
+
+ public CompProperties_CustomRadius()
+ {
+ this.compClass = typeof(CompCustomRadius);
+ }
+ }
+
+ // 实际的组件类
+ public class CompCustomRadius : ThingComp
+ {
+ private bool radiusVisible = true;
+
+ public CompProperties_CustomRadius Props
+ {
+ get
+ {
+ return (CompProperties_CustomRadius)this.props;
+ }
+ }
+
+ public float EffectiveRadius
+ {
+ get
+ {
+ return Props.radius + Props.radiusOffset;
+ }
+ }
+
+ public bool RadiusVisible
+ {
+ get { return radiusVisible && Props.showInGUI; }
+ set { radiusVisible = value; }
+ }
+
+ public override void Initialize(CompProperties props)
+ {
+ base.Initialize(props);
+ radiusVisible = Props.defaultVisible;
+ }
+
+ public override void PostExposeData()
+ {
+ base.PostExposeData();
+ Scribe_Values.Look(ref radiusVisible, "radiusVisible", Props.defaultVisible);
+ }
+
+ // 在检视面板中显示切换选项
+ public override IEnumerable CompGetGizmosExtra()
+ {
+ if (!Props.showInGUI) yield break;
+
+ // 创建切换 gizmo
+ Command_Toggle toggleCommand = new Command_Toggle();
+ toggleCommand.defaultLabel = Props.label;
+ toggleCommand.defaultDesc = Props.description;
+
+ // 尝试加载图标,如果失败则使用默认图标
+ try
+ {
+ toggleCommand.icon = ContentFinder.Get("Wula/UI/Commands/WULA_ShowRadius", false);
+ if (toggleCommand.icon == null)
+ {
+ // 使用一个简单的占位符图标
+ toggleCommand.icon = BaseContent.BadTex;
+ }
+ }
+ catch
+ {
+ toggleCommand.icon = BaseContent.BadTex;
+ }
+
+ toggleCommand.isActive = () => RadiusVisible;
+ toggleCommand.toggleAction = () => RadiusVisible = !RadiusVisible;
+
+ yield return toggleCommand;
+ }
+
+ // 获取绘制颜色(考虑透明度等)
+ public Color GetDrawColor()
+ {
+ return Props.color;
+ }
+ }
+
+ // 自定义放置工作器
+ public class PlaceWorker_CustomRadius : PlaceWorker
+ {
+ public override void DrawGhost(ThingDef def, IntVec3 center, Rot4 rot, Color ghostCol, Thing thing = null)
+ {
+ // 如果已经有物体存在,则检查其组件的可见性设置
+ if (thing != null)
+ {
+ CompCustomRadius comp = thing.TryGetComp();
+ if (comp == null || !comp.RadiusVisible)
+ return;
+ }
+
+ // 获取自定义半径组件属性
+ CompProperties_CustomRadius compProperties = def.GetCompProperties();
+ if (compProperties != null && compProperties.showInGUI)
+ {
+ float effectiveRadius = compProperties.radius + compProperties.radiusOffset;
+ if (effectiveRadius > 0f)
+ {
+ // 使用指定的颜色绘制圆环
+ Color drawColor = compProperties.color;
+ if (thing != null)
+ {
+ CompCustomRadius comp = thing.TryGetComp();
+ if (comp != null)
+ {
+ drawColor = comp.GetDrawColor();
+ }
+ }
+ GenDraw.DrawRadiusRing(center, effectiveRadius, drawColor);
+ }
+ }
+ }
+
+ // 可选:在验证放置位置时也考虑半径
+ public override AcceptanceReport AllowsPlacing(BuildableDef checkingDef, IntVec3 loc, Rot4 rot, Map map, Thing thingToIgnore = null, Thing thing = null)
+ {
+ // 这里可以添加额外的放置验证逻辑
+ // 例如检查半径内是否有不允许的建筑等
+
+ return true; // 默认允许放置
+ }
+ }
+
+ // 为已放置的建筑添加绘制支持
+ [StaticConstructorOnStartup]
+ public static class CustomRadiusRenderer
+ {
+ static CustomRadiusRenderer()
+ {
+ try
+ {
+ // 使用Harmony为MapInterface.MapInterfaceUpdate方法添加补丁
+ var harmony = new Harmony("WulaFallenEmpire.CustomRadius");
+
+ // 尝试不同的绘制方法
+ var mapInterfaceMethod = AccessTools.Method(typeof(MapInterface), "MapInterfaceUpdate");
+ if (mapInterfaceMethod != null)
+ {
+ harmony.Patch(mapInterfaceMethod,
+ postfix: new HarmonyMethod(typeof(CustomRadiusRenderer), nameof(Postfix_MapInterfaceUpdate)));
+ }
+ else
+ {
+ Log.Warning("[CustomRadius] Could not find MapInterface.MapInterfaceUpdate method");
+ }
+ }
+ catch (System.Exception ex)
+ {
+ Log.Error($"[CustomRadius] Error in static constructor: {ex}");
+ }
+ }
+
+ public static void Postfix_MapInterfaceUpdate()
+ {
+ try
+ {
+ if (Find.CurrentMap == null) return;
+
+ // 绘制所有带有自定义半径组件的已放置建筑
+ foreach (var thing in Find.CurrentMap.listerThings.AllThings)
+ {
+ if (thing.Spawned && thing.def.HasComp(typeof(CompCustomRadius)))
+ {
+ CompCustomRadius comp = thing.TryGetComp();
+ if (comp != null && comp.RadiusVisible)
+ {
+ float effectiveRadius = comp.EffectiveRadius;
+ if (effectiveRadius > 0f)
+ {
+ GenDraw.DrawRadiusRing(thing.Position, effectiveRadius, comp.GetDrawColor());
+ }
+ }
+ }
+ }
+ }
+ catch (System.Exception)
+ {
+ // 静默处理错误
+ }
+ }
+ }
+
+ // 为建筑选择时添加绘制支持
+ [StaticConstructorOnStartup]
+ public static class CustomRadiusSelectionRenderer
+ {
+ static CustomRadiusSelectionRenderer()
+ {
+ try
+ {
+ var harmony = new Harmony("WulaFallenEmpire.CustomRadiusSelection");
+
+ // 尝试为选择器绘制方法添加补丁
+ var selectionDrawMethod = AccessTools.Method(typeof(SelectionDrawer), "DrawSelectionOverlays");
+ if (selectionDrawMethod != null)
+ {
+ harmony.Patch(selectionDrawMethod,
+ postfix: new HarmonyMethod(typeof(CustomRadiusSelectionRenderer), nameof(Postfix_DrawSelectionOverlays)));
+ }
+ else
+ {
+ Log.Warning("[CustomRadius] Could not find SelectionDrawer.DrawSelectionOverlays method");
+ }
+ }
+ catch (System.Exception ex)
+ {
+ Log.Error($"[CustomRadius] Error in static constructor: {ex}");
+ }
+ }
+
+ public static void Postfix_DrawSelectionOverlays()
+ {
+ try
+ {
+ if (Find.Selector == null) return;
+
+ foreach (object selected in Find.Selector.SelectedObjectsListForReading)
+ {
+ if (selected is Thing thing && thing.Spawned && thing.def.HasComp(typeof(CompCustomRadius)))
+ {
+ CompCustomRadius comp = thing.TryGetComp();
+ if (comp != null && comp.RadiusVisible)
+ {
+ float effectiveRadius = comp.EffectiveRadius;
+ if (effectiveRadius > 0f)
+ {
+ GenDraw.DrawRadiusRing(thing.Position, effectiveRadius, comp.GetDrawColor());
+ }
+ }
+ }
+ }
+ }
+ catch
+ {
+ // 静默处理错误
+ }
+ }
+ }
+}
diff --git a/Source/WulaFallenEmpire/ThingComp/Comp_WeaponRenderDynamic.cs b/Source/WulaFallenEmpire/ThingComp/Comp_WeaponRenderDynamic.cs
index 5369e537..6f69bba3 100644
--- a/Source/WulaFallenEmpire/ThingComp/Comp_WeaponRenderDynamic.cs
+++ b/Source/WulaFallenEmpire/ThingComp/Comp_WeaponRenderDynamic.cs
@@ -1,4 +1,4 @@
-using HarmonyLib;
+using HarmonyLib;
using RimWorld;
using System;
using UnityEngine;
diff --git a/Source/WulaFallenEmpire/ThingComp/WULA_PersonaCore/CompExperienceCore.cs b/Source/WulaFallenEmpire/ThingComp/WULA_PersonaCore/CompExperienceCore.cs
index 3364d3f7..7de207e7 100644
--- a/Source/WulaFallenEmpire/ThingComp/WULA_PersonaCore/CompExperienceCore.cs
+++ b/Source/WulaFallenEmpire/ThingComp/WULA_PersonaCore/CompExperienceCore.cs
@@ -96,7 +96,7 @@ namespace WulaFallenEmpire
{
defaultLabel = "WULA_EjectDataPack".Translate(),
defaultDesc = "WULA_EjectDataPackDesc".Translate(),
- icon = ContentFinder.Get("UI/Commands/EjectDataPack"),
+ icon = ContentFinder.Get("Wula/UI/Commands/WULA_EjectDataPack"),
action = EjectDataPack
};
}
@@ -108,7 +108,7 @@ namespace WulaFallenEmpire
{
defaultLabel = "WULA_AbsorbDataPack".Translate(),
defaultDesc = "WULA_AbsorbDataPackDesc".Translate(),
- icon = ContentFinder.Get("UI/Commands/AbsorbDataPack"),
+ icon = ContentFinder.Get("Wula/UI/Commands/WULA_AbsorbDataPack"),
action = AbsorbDataPack
};
}
diff --git a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj
index edc9ecbc..b0f02265 100644
--- a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj
+++ b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj
@@ -73,6 +73,7 @@
+
@@ -101,7 +102,6 @@
-
@@ -111,6 +111,8 @@
+
+
@@ -160,6 +162,7 @@
+
diff --git a/美术与文本源文件/Wula/Apparel/WULA_Bodystocking_Thin_south.sai2 b/美术与文本源文件/Wula/Apparel/WULA_Bodystocking_Thin_south.sai2
index 4bff0a59..4ff4d634 100644
Binary files a/美术与文本源文件/Wula/Apparel/WULA_Bodystocking_Thin_south.sai2 and b/美术与文本源文件/Wula/Apparel/WULA_Bodystocking_Thin_south.sai2 differ
diff --git a/美术与文本源文件/Wula/Apparel/WULA_Bodystocking_White_Thin_south.sai2 b/美术与文本源文件/Wula/Apparel/WULA_Bodystocking_White_Thin_south.sai2
index 1ec56200..88d940d8 100644
Binary files a/美术与文本源文件/Wula/Apparel/WULA_Bodystocking_White_Thin_south.sai2 and b/美术与文本源文件/Wula/Apparel/WULA_Bodystocking_White_Thin_south.sai2 differ
diff --git a/美术与文本源文件/Wula/Apparel/WULA_Latex_Catsuit_Thin_south.sai2 b/美术与文本源文件/Wula/Apparel/WULA_Latex_Catsuit_Thin_south.sai2
new file mode 100644
index 00000000..58ce6076
Binary files /dev/null and b/美术与文本源文件/Wula/Apparel/WULA_Latex_Catsuit_Thin_south.sai2 differ
diff --git a/美术与文本源文件/Wula/Apparel/WULA_Maid_Uniform_Headband.sai2 b/美术与文本源文件/Wula/Apparel/WULA_Maid_Uniform_Headband.sai2
index fe332ecf..b49d8036 100644
Binary files a/美术与文本源文件/Wula/Apparel/WULA_Maid_Uniform_Headband.sai2 and b/美术与文本源文件/Wula/Apparel/WULA_Maid_Uniform_Headband.sai2 differ
diff --git a/美术与文本源文件/Wula/Apparel/WULA_Maid_Uniform_Thin_south.sai2 b/美术与文本源文件/Wula/Apparel/WULA_Maid_Uniform_Thin_south.sai2
index 0e51c798..54be1470 100644
Binary files a/美术与文本源文件/Wula/Apparel/WULA_Maid_Uniform_Thin_south.sai2 and b/美术与文本源文件/Wula/Apparel/WULA_Maid_Uniform_Thin_south.sai2 differ
diff --git a/美术与文本源文件/Wula/Apparel/WULA_Pantyhose_Black_Thin_south.sai2 b/美术与文本源文件/Wula/Apparel/WULA_Pantyhose_Black_Thin_south.sai2
new file mode 100644
index 00000000..fa092ae0
Binary files /dev/null and b/美术与文本源文件/Wula/Apparel/WULA_Pantyhose_Black_Thin_south.sai2 differ
diff --git a/美术与文本源文件/Wula/Apparel/WULA_Pantyhose_White_Thin_south.sai2 b/美术与文本源文件/Wula/Apparel/WULA_Pantyhose_White_Thin_south.sai2
new file mode 100644
index 00000000..ddc2ef8f
Binary files /dev/null and b/美术与文本源文件/Wula/Apparel/WULA_Pantyhose_White_Thin_south.sai2 differ
diff --git a/美术与文本源文件/Wula/Building/WULA_Cube_Productor.sai2 b/美术与文本源文件/Wula/Building/WULA_Cube_Productor.sai2
index b5db82c8..c1eba96b 100644
Binary files a/美术与文本源文件/Wula/Building/WULA_Cube_Productor.sai2 and b/美术与文本源文件/Wula/Building/WULA_Cube_Productor.sai2 differ
diff --git a/美术与文本源文件/Wula/Building/WULA_Fake_Fighter_Drone_Building.sai2 b/美术与文本源文件/Wula/Building/WULA_Fake_Fighter_Drone_Building.sai2
new file mode 100644
index 00000000..078381b2
Binary files /dev/null and b/美术与文本源文件/Wula/Building/WULA_Fake_Fighter_Drone_Building.sai2 differ
diff --git a/美术与文本源文件/Wula/Building/WULA_Flyover_Beacon.sai2 b/美术与文本源文件/Wula/Building/WULA_Flyover_Beacon.sai2
new file mode 100644
index 00000000..39720ead
Binary files /dev/null and b/美术与文本源文件/Wula/Building/WULA_Flyover_Beacon.sai2 differ
diff --git a/美术与文本源文件/Wula/Building/WULA_Heavy_War_Machine_Productor_south.sai2 b/美术与文本源文件/Wula/Building/WULA_Heavy_War_Machine_Productor_south.sai2
deleted file mode 100644
index a864c5fa..00000000
Binary files a/美术与文本源文件/Wula/Building/WULA_Heavy_War_Machine_Productor_south.sai2 and /dev/null differ
diff --git a/美术与文本源文件/Wula/Building/WULA_Turret.sai2 b/美术与文本源文件/Wula/Building/WULA_Turret.sai2
new file mode 100644
index 00000000..1d76c45f
Binary files /dev/null and b/美术与文本源文件/Wula/Building/WULA_Turret.sai2 differ
diff --git a/美术与文本源文件/Wula/Building/WULA_Turret_Component.sai2 b/美术与文本源文件/Wula/Building/WULA_Turret_Component.sai2
index ab1111c9..47c97f2b 100644
Binary files a/美术与文本源文件/Wula/Building/WULA_Turret_Component.sai2 and b/美术与文本源文件/Wula/Building/WULA_Turret_Component.sai2 differ
diff --git a/美术与文本源文件/Wula/Building/Wula_DarkEnergy_FuelTank.sai2 b/美术与文本源文件/Wula/Building/Wula_DarkEnergy_FuelTank.sai2
deleted file mode 100644
index 4ca93dab..00000000
Binary files a/美术与文本源文件/Wula/Building/Wula_DarkEnergy_FuelTank.sai2 and /dev/null differ
diff --git a/美术与文本源文件/Wula/Building/Wula_DarkEnergy_Generators.sai2 b/美术与文本源文件/Wula/Building/Wula_DarkEnergy_Generators.sai2
new file mode 100644
index 00000000..c90ac4a9
Binary files /dev/null and b/美术与文本源文件/Wula/Building/Wula_DarkEnergy_Generators.sai2 differ
diff --git a/美术与文本源文件/Wula/Flyover/WULA_BattleShip_Shadow.sai2 b/美术与文本源文件/Wula/Flyover/WULA_BattleShip_Shadow.sai2
index 3a506d98..660849e9 100644
Binary files a/美术与文本源文件/Wula/Flyover/WULA_BattleShip_Shadow.sai2 and b/美术与文本源文件/Wula/Flyover/WULA_BattleShip_Shadow.sai2 differ
diff --git a/美术与文本源文件/Wula/Flyover/WULA_Bomber_Shadow.sai2 b/美术与文本源文件/Wula/Flyover/WULA_Bomber_Shadow.sai2
new file mode 100644
index 00000000..8a9ae029
Binary files /dev/null and b/美术与文本源文件/Wula/Flyover/WULA_Bomber_Shadow.sai2 differ
diff --git a/美术与文本源文件/Wula/Flyover/WULA_ConstructionShip_Shadow.sai2 b/美术与文本源文件/Wula/Flyover/WULA_ConstructionShip_Shadow.sai2
new file mode 100644
index 00000000..4c29dd45
Binary files /dev/null and b/美术与文本源文件/Wula/Flyover/WULA_ConstructionShip_Shadow.sai2 differ
diff --git a/美术与文本源文件/Wula/Flyover/WULA_Fighter_Shadow.sai2 b/美术与文本源文件/Wula/Flyover/WULA_Fighter_Shadow.sai2
index a2161aed..cef586a8 100644
Binary files a/美术与文本源文件/Wula/Flyover/WULA_Fighter_Shadow.sai2 and b/美术与文本源文件/Wula/Flyover/WULA_Fighter_Shadow.sai2 differ
diff --git a/美术与文本源文件/Wula/Flyover/WULA_MotherShip_Shadow.sai2 b/美术与文本源文件/Wula/Flyover/WULA_MotherShip_Shadow.sai2
new file mode 100644
index 00000000..3a506d98
Binary files /dev/null and b/美术与文本源文件/Wula/Flyover/WULA_MotherShip_Shadow.sai2 differ
diff --git a/美术与文本源文件/Wula/Projectile/WULA_Striker_Missile.sai2 b/美术与文本源文件/Wula/Projectile/WULA_Striker_Missile.sai2
new file mode 100644
index 00000000..8b1ebfff
Binary files /dev/null and b/美术与文本源文件/Wula/Projectile/WULA_Striker_Missile.sai2 differ
diff --git a/美术与文本源文件/Wula/Storyteller/军团/1.png b/美术与文本源文件/Wula/Storyteller/军团/1.png
new file mode 100644
index 00000000..997b05ac
Binary files /dev/null and b/美术与文本源文件/Wula/Storyteller/军团/1.png differ
diff --git a/美术与文本源文件/Wula/Storyteller/军团/2.png b/美术与文本源文件/Wula/Storyteller/军团/2.png
new file mode 100644
index 00000000..7c944b5b
Binary files /dev/null and b/美术与文本源文件/Wula/Storyteller/军团/2.png differ
diff --git a/美术与文本源文件/Wula/Storyteller/军团/3.png b/美术与文本源文件/Wula/Storyteller/军团/3.png
new file mode 100644
index 00000000..5c7e0d9e
Binary files /dev/null and b/美术与文本源文件/Wula/Storyteller/军团/3.png differ
diff --git a/美术与文本源文件/Wula/Storyteller/军团/4.png b/美术与文本源文件/Wula/Storyteller/军团/4.png
new file mode 100644
index 00000000..f0e4a5e4
Binary files /dev/null and b/美术与文本源文件/Wula/Storyteller/军团/4.png differ
diff --git a/美术与文本源文件/Wula/Storyteller/军团/WULA_Legion_1.sai2 b/美术与文本源文件/Wula/Storyteller/军团/WULA_Legion_1.sai2
new file mode 100644
index 00000000..8342276b
Binary files /dev/null and b/美术与文本源文件/Wula/Storyteller/军团/WULA_Legion_1.sai2 differ
diff --git a/美术与文本源文件/Wula/UI/EventUI/新建画布2.sai2 b/美术与文本源文件/Wula/Storyteller/军团/新建画布2.sai2
similarity index 79%
rename from 美术与文本源文件/Wula/UI/EventUI/新建画布2.sai2
rename to 美术与文本源文件/Wula/Storyteller/军团/新建画布2.sai2
index 6669c884..8d9c2800 100644
Binary files a/美术与文本源文件/Wula/UI/EventUI/新建画布2.sai2 and b/美术与文本源文件/Wula/Storyteller/军团/新建画布2.sai2 differ
diff --git a/美术与文本源文件/Wula/Things/WulaSpecies/Heads/Average_Normal_south.sai2 b/美术与文本源文件/Wula/Things/WulaSpecies/Heads/Average_Normal_south.sai2
index 355ea085..055bea24 100644
Binary files a/美术与文本源文件/Wula/Things/WulaSpecies/Heads/Average_Normal_south.sai2 and b/美术与文本源文件/Wula/Things/WulaSpecies/Heads/Average_Normal_south.sai2 differ
diff --git a/美术与文本源文件/Wula/UI/Abilities/WULA_Spawn_Bomber_BaseBomb.sai2 b/美术与文本源文件/Wula/UI/Abilities/WULA_Spawn_Bomber_BaseBomb.sai2
new file mode 100644
index 00000000..cfee5c3f
Binary files /dev/null and b/美术与文本源文件/Wula/UI/Abilities/WULA_Spawn_Bomber_BaseBomb.sai2 differ
diff --git a/美术与文本源文件/Wula/UI/Abilities/WULA_Spawn_Fighter_Drone_Laser.sai2 b/美术与文本源文件/Wula/UI/Abilities/WULA_Spawn_Fighter_Drone_Laser.sai2
new file mode 100644
index 00000000..452fb98d
Binary files /dev/null and b/美术与文本源文件/Wula/UI/Abilities/WULA_Spawn_Fighter_Drone_Laser.sai2 differ
diff --git a/美术与文本源文件/Wula/UI/Abilities/WULA_Spawn_Striker_Missile.sai2 b/美术与文本源文件/Wula/UI/Abilities/WULA_Spawn_Striker_Missile.sai2
new file mode 100644
index 00000000..f5b302a9
Binary files /dev/null and b/美术与文本源文件/Wula/UI/Abilities/WULA_Spawn_Striker_Missile.sai2 differ
diff --git a/美术与文本源文件/Wula/UI/Commands/WULA_EjectDataPack.sai2 b/美术与文本源文件/Wula/UI/Commands/WULA_EjectDataPack.sai2
new file mode 100644
index 00000000..8579036c
Binary files /dev/null and b/美术与文本源文件/Wula/UI/Commands/WULA_EjectDataPack.sai2 differ
diff --git a/美术与文本源文件/Wula/UI/Commands/WULA_ShowRadius.sai2 b/美术与文本源文件/Wula/UI/Commands/WULA_ShowRadius.sai2
new file mode 100644
index 00000000..8da40969
Binary files /dev/null and b/美术与文本源文件/Wula/UI/Commands/WULA_ShowRadius.sai2 differ
diff --git a/美术与文本源文件/Wula/UI/EventUI/新建画布2.png b/美术与文本源文件/Wula/UI/EventUI/新建画布2.png
deleted file mode 100644
index 1d2880ea..00000000
Binary files a/美术与文本源文件/Wula/UI/EventUI/新建画布2.png and /dev/null differ
diff --git a/美术与文本源文件/Wula/UI/EventUI/新建画布22.png b/美术与文本源文件/Wula/UI/EventUI/新建画布22.png
deleted file mode 100644
index e3af9bea..00000000
Binary files a/美术与文本源文件/Wula/UI/EventUI/新建画布22.png and /dev/null differ