From 776cfe884f4f639f6b90c897ae0b2c245bf6cc1d Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 22 Jan 2025 01:03:43 +0100 Subject: [PATCH 1/3] Add Batonbot and Disablerbot --- .../interaction-popup-component.ftl | 4 + .../Entities/Clothing/Head/helmets.yml | 1 + .../Entities/Markers/Spawners/bots.yml | 28 +++++++ .../Entities/Mobs/NPCs/batonbot.yml | 75 +++++++++++++++++ .../Entities/Mobs/NPCs/disablerbot.yml | 78 ++++++++++++++++++ .../Weapons/Guns/Battery/battery_guns.yml | 1 + .../Entities/Objects/Weapons/security.yml | 3 + Resources/Prototypes/NPCs/batonbot.yml | 12 +++ Resources/Prototypes/NPCs/disablerbot.yml | 9 ++ .../Recipes/Crafting/Graphs/bots/batonbot.yml | 28 +++++++ .../Crafting/Graphs/bots/disablerbot.yml | 28 +++++++ .../Prototypes/Recipes/Crafting/bots.yml | 26 ++++++ Resources/Prototypes/tags.yml | 9 ++ .../Silicon/Bots/batonbot.rsi/batonbot.png | Bin 0 -> 1233 bytes .../Mobs/Silicon/Bots/batonbot.rsi/meta.json | 20 +++++ .../Bots/disablerbot.rsi/disablerbot.png | Bin 0 -> 1308 bytes .../Silicon/Bots/disablerbot.rsi/meta.json | 20 +++++ 17 files changed, 342 insertions(+) create mode 100644 Resources/Prototypes/Entities/Mobs/NPCs/batonbot.yml create mode 100644 Resources/Prototypes/Entities/Mobs/NPCs/disablerbot.yml create mode 100644 Resources/Prototypes/NPCs/batonbot.yml create mode 100644 Resources/Prototypes/NPCs/disablerbot.yml create mode 100644 Resources/Prototypes/Recipes/Crafting/Graphs/bots/batonbot.yml create mode 100644 Resources/Prototypes/Recipes/Crafting/Graphs/bots/disablerbot.yml create mode 100644 Resources/Textures/Mobs/Silicon/Bots/batonbot.rsi/batonbot.png create mode 100644 Resources/Textures/Mobs/Silicon/Bots/batonbot.rsi/meta.json create mode 100644 Resources/Textures/Mobs/Silicon/Bots/disablerbot.rsi/disablerbot.png create mode 100644 Resources/Textures/Mobs/Silicon/Bots/disablerbot.rsi/meta.json diff --git a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl index 4792db3e5fa..5ae4696cf3b 100644 --- a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl +++ b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl @@ -63,12 +63,16 @@ petting-success-cleanbot = You pet {THE($target)} on {POSS-ADJ($target)} damp me petting-success-medibot = You pet {THE($target)} on {POSS-ADJ($target)} sterile metal head. petting-success-recycler = You pet {THE($target)} on {POSS-ADJ($target)} mildly threatening steel exterior. petting-success-gladiabot = You pet {THE($target)} on {POSS-ADJ($target)} vicious cardboard head. +petting-success-batonbot = You pet {THE($target)} on {POSS-ADJ($target)} protective metal head. +petting-success-disablerbot = You pet {THE($target)} on {POSS-ADJ($target)} protective metal head. petting-failure-honkbot = You reach out to pet {THE($target)}, but {SUBJECT($target)} honks in refusal! petting-failure-cleanbot = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy mopping! petting-failure-mimebot = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy miming! petting-failure-medibot = You reach out to pet {THE($target)}, but {POSS-ADJ($target)} syringe nearly stabs your hand! petting-failure-gladiabot = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} only wants to fight! +petting-failure-batonbot = You reach out to pet {THE($target)}, but {SUBJECT($target)} nearly prods you with its baton! +petting-failure-disablerbot = You reach out to pet {THE($target)}, but {SUBJECT($target)} angrily waves its weapon at you! ## Rattling fences diff --git a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml index 009c2ef784e..36ba7017fff 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml @@ -22,6 +22,7 @@ - type: Tag tags: - WhitelistChameleon + - ClothingHeadHelmetBasic # Floof -- Batonbot & Disablerbot recipes #Mercenary Helmet - type: entity diff --git a/Resources/Prototypes/Entities/Markers/Spawners/bots.yml b/Resources/Prototypes/Entities/Markers/Spawners/bots.yml index 9f0823f48ea..e46bf38f11a 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/bots.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/bots.yml @@ -26,3 +26,31 @@ prototypes: - MobCleanBot +- type: entity + name: disablerbot spawner + id: SpawnMobDisablerBot + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: Mobs/Silicon/Bots/disablerbot.rsi + state: disablerbot + - type: ConditionalSpawner + prototypes: + - MobDisablerBot + +- type: entity + name: batonbot spawner + id: SpawnMobBatonBot + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: Mobs/Silicon/Bots/batonbot.rsi + state: batonbot + - type: ConditionalSpawner + prototypes: + - MobBatonBot + diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/batonbot.yml b/Resources/Prototypes/Entities/Mobs/NPCs/batonbot.yml new file mode 100644 index 00000000000..a422509faf2 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/NPCs/batonbot.yml @@ -0,0 +1,75 @@ +- type: entity + parent: MobSiliconBase + id: MobBatonBot + name: batonbot + description: Defends the station from hostile wildlife. + components: + - type: Sprite + sprite: Mobs/Silicon/Bots/batonbot.rsi + state: batonbot + - type: Construction + graph: BatonBot + node: bot + - type: SentienceTarget + flavorKind: station-event-random-sentience-flavor-mechanical + - type: UseDelay + delay: 1 + - type: NpcFactionMember + factions: + - NanoTrasen + - type: CombatMode + - type: Stunbaton + energyPerUse: 0 + - type: MeleeWeapon + altDisarm: false + soundHit: + path: /Audio/Weapons/egloves.ogg + angle: 0 + animation: WeaponArcPunch + damage: + types: + Shock: 4 + - type: StaminaDamageOnHit + damage: 20 + sound: /Audio/Weapons/egloves.ogg + - type: MobThresholds + thresholds: + 0: Alive + 120: Dead + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 110 + behaviors: + - !type:TriggerBehavior + - trigger: + !type:DamageTrigger + damage: 120 + behaviors: + - !type:SpawnEntitiesBehavior + spawn: + ProximitySensor: + min: 1 + max: 1 + - !type:SpawnEntitiesBehavior + spawn: + Stunbaton: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: MovementSpeedModifier + baseWalkSpeed: 2 + baseSprintSpeed: 3 + - type: HTN + rootTask: + task: BatonbotCompound + blackboard: + AttackDelayDeviation: !type:Single + 0.3 + - type: InteractionPopup + interactSuccessString: petting-success-batonbot + interactFailureString: petting-failure-batonbot + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/disablerbot.yml b/Resources/Prototypes/Entities/Mobs/NPCs/disablerbot.yml new file mode 100644 index 00000000000..ca3014710d3 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/NPCs/disablerbot.yml @@ -0,0 +1,78 @@ +- type: entity + parent: MobSiliconBase + id: MobDisablerBot + name: disablerbot + description: Defends the station from hostile wildlife. + components: + - type: Sprite + sprite: Mobs/Silicon/Bots/disablerbot.rsi + state: disablerbot + - type: Construction + graph: DisablerBot + node: bot + - type: SentienceTarget + flavorKind: station-event-random-sentience-flavor-mechanical + - type: UseDelay + delay: 1 + - type: NpcFactionMember + factions: + - NanoTrasen + - type: CombatMode + - type: BatterySelfRecharger + autoRecharge: true + autoRechargeRate: 300 + - type: Battery + maxCharge: 10000 + startingCharge: 10000 + - type: Gun + fireRate: 1 + minAngle: 2 + maxAngle: 10 + angleIncrease: 2 + angleDecay: 5 + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/taser2.ogg + - type: ProjectileBatteryAmmoProvider + proto: BulletDisablerSmg + fireCost: 1 + - type: MobThresholds + thresholds: + 0: Alive + 120: Dead + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 110 + behaviors: + - !type:TriggerBehavior + - trigger: + !type:DamageTrigger + damage: 120 + behaviors: + - !type:SpawnEntitiesBehavior + spawn: + ProximitySensor: + min: 1 + max: 1 + - !type:SpawnEntitiesBehavior + spawn: + WeaponDisabler: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: MovementSpeedModifier + baseWalkSpeed: 2 + baseSprintSpeed: 3 + - type: HTN + rootTask: + task: DisablerbotCompound + blackboard: + AttackDelayDeviation: !type:Single + 0.3 + - type: InteractionPopup + interactSuccessString: petting-success-disablerbot + interactFailureString: petting-failure-disablerbot + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index 228b8313073..2e23c870c47 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -438,6 +438,7 @@ tags: - Taser - Sidearm + - WeaponDisabler # Floof - Disablerbot recipe - type: Sprite sprite: Objects/Weapons/Guns/Battery/disabler.rsi layers: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/security.yml b/Resources/Prototypes/Entities/Objects/Weapons/security.yml index 1b07eab9faf..047b30cc9cf 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/security.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/security.yml @@ -9,6 +9,9 @@ layers: - state: stunbaton_off map: [ "enum.ToggleVisuals.Layer" ] + - type: Tag + tags: + - Stunbaton # Floof - Batonbot recipe - type: Stunbaton energyPerUse: 50 - type: ItemToggle diff --git a/Resources/Prototypes/NPCs/batonbot.yml b/Resources/Prototypes/NPCs/batonbot.yml new file mode 100644 index 00000000000..9169f2a3245 --- /dev/null +++ b/Resources/Prototypes/NPCs/batonbot.yml @@ -0,0 +1,12 @@ +- type: htnCompound + id: BatonbotCompound + branches: + - tasks: + - !type:HTNPrimitiveTask + operator: !type:UtilityOperator + proto: NearbyMeleeTargets + - !type:HTNCompoundTask + task: MeleeAttackTargetCompound + - tasks: + - !type:HTNCompoundTask + task: IdleCompound diff --git a/Resources/Prototypes/NPCs/disablerbot.yml b/Resources/Prototypes/NPCs/disablerbot.yml new file mode 100644 index 00000000000..6e0ce231d24 --- /dev/null +++ b/Resources/Prototypes/NPCs/disablerbot.yml @@ -0,0 +1,9 @@ +- type: htnCompound + id: DisablerbotCompound + branches: + - tasks: + - !type:HTNCompoundTask + task: InnateRangedCombatCompound + - tasks: + - !type:HTNCompoundTask + task: IdleCompound diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/bots/batonbot.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/bots/batonbot.yml new file mode 100644 index 00000000000..a5bbdc322f2 --- /dev/null +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/bots/batonbot.yml @@ -0,0 +1,28 @@ +- type: constructionGraph + id: BatonBot + start: start + graph: + - node: start + edges: + - to: bot + steps: + - tag: ProximitySensor + icon: + sprite: Objects/Misc/proximity_sensor.rsi + state: icon + name: proximity sensor + doAfter: 2 + - tag: Stunbaton + icon: + sprite: Objects/Weapons/Melee/stunbaton.rsi + state: stunbaton_on + name: stunbaton + doAfter: 2 + - tag: ClothingHeadHelmetBasic + icon: + sprite: DeltaV/Clothing/Head/Helmets/security.rsi + state: icon + name: Security Helmet + doAfter: 2 + - node: bot + entity: MobBatonBot diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/bots/disablerbot.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/bots/disablerbot.yml new file mode 100644 index 00000000000..e56c37d31f1 --- /dev/null +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/bots/disablerbot.yml @@ -0,0 +1,28 @@ +- type: constructionGraph + id: DisablerBot + start: start + graph: + - node: start + edges: + - to: bot + steps: + - tag: ProximitySensor + icon: + sprite: Objects/Misc/proximity_sensor.rsi + state: icon + name: Proximity sensor + doAfter: 2 + - tag: WeaponDisabler + icon: + sprite: Objects/Weapons/Guns/Battery/disabler.rsi + state: base + name: Disabler + doAfter: 2 + - tag: ClothingHeadHelmetBasic + icon: + sprite: DeltaV/Clothing/Head/Helmets/security.rsi + state: icon + name: Security Helmet + doAfter: 2 + - node: bot + entity: MobDisablerBot diff --git a/Resources/Prototypes/Recipes/Crafting/bots.yml b/Resources/Prototypes/Recipes/Crafting/bots.yml index 64106f663f1..9424da69409 100644 --- a/Resources/Prototypes/Recipes/Crafting/bots.yml +++ b/Resources/Prototypes/Recipes/Crafting/bots.yml @@ -88,3 +88,29 @@ icon: sprite: Mobs/Silicon/Bots/gladiabot.rsi state: gladiabot + +- type: construction + name: batonbot + id: batonbot + graph: BatonBot + startNode: start + targetNode: bot + category: construction-category-utilities + objectType: Item + description: Defends the station from hostile wildlife. + icon: + sprite: Mobs/Silicon/Bots/batonbot.rsi + state: batonbot + +- type: construction + name: disablerbot + id: disablerbot + graph: DisablerBot + startNode: start + targetNode: bot + category: construction-category-utilities + objectType: Item + description: Defends the station from hostile wildlife. + icon: + sprite: Mobs/Silicon/Bots/disablerbot.rsi + state: disablerbot diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 63de742d050..a8ed7a91c13 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -1377,3 +1377,12 @@ - type: Tag id: BrassKnuckles + +- type: Tag + id: WeaponDisabler + +- type: Tag + id: Stunbaton + +- type: Tag + id: ClothingHeadHelmetBasic diff --git a/Resources/Textures/Mobs/Silicon/Bots/batonbot.rsi/batonbot.png b/Resources/Textures/Mobs/Silicon/Bots/batonbot.rsi/batonbot.png new file mode 100644 index 0000000000000000000000000000000000000000..b063645cd127fe316560e83e8037006f5e96005b GIT binary patch literal 1233 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F5M?jcysy3fAP*9@8HKHUqKdq!Zu_%=xATcwqM9n999M?Mpgz!Aj=DgrJ-z)Ycv>{!QxCnwjm=Eg8-0@ z0^-be7O;30kPQMn<%|q3m=QFZr3^r+3G56kK$QkY#s-WFAf|$BWL*F;X$p`H0!%=2 znZPQ8EG>X6s4hbT1CZ>ySGp3%&H#lOm>WD@978gk-_G#$5q1f5b&!=1RBJq8MF)#o`wPg#LJ32uq&s zkaWq}l0ovjZ~CiEZ;qeYwrTobRej^nW!CTQKd0S(%PcQ1zdkU6duL4FSH5X%*Q(m| z4-_-5<9~SIXUODLhh_$Fm~DOd?9T3(okgyE;no4X|17pvd@QnBzq2oF-3et~2l*Pk z_$KqasTYp@X7Tay5xBP1HLAhxhl38ss|>w`OCK8Vj!~WHv0H+4A%9(iU^sSZvz3(J`8*Z$W)o*|cwS3q%eyKVDL^ z+daQ`;=zNC94t&%1Vj%0zVWDZ^B0MYzKwOae|8mCPn^6_Vot~Lhfll1OV&I;bv5zF z#%*l(KUY@C&A2TR&FJ<;Dd51TQ(Q5-emBJaJ^s4=`-07jojn?^BzH{yDEs3_=FDyG ze4)#Jd{FU@wtIGc?u1*6w&v^ZFZs#K)_mc{4VT&z*TN*dmI}SKul{$X>}$uAh7hfz zRSbXs{(bU#dVbE9`ImFo8ra*vx7Z)T)zfo#r!VtEubmGi{w~@fW?*T#^1-SNsd`;g z?|02AJD}B(QEF!x@!K1e_SoYG+w7e?1`nfcryC!=tCl9X~WzL^k~L zewh?o{$YJmr1rlSz1n999M?Mpgz!Aj=DgrJ-z)Ycv>{!QxCnwjm=Eg8-0@ z0^-be7O;30kPQMn<%|q3m=QFZr3^r+3G56kK$QkY#s-WFAf|$BWL*F;X$p`H0!%=2 znZPQ8EG>X6s4hbT1CZ>ySGp3%&H#lOm`{7UIEG|6znyX4TO?5A_<5bQ6|S$cDsB95chMW&-V0u-FV(xeHH4x&Hq6|q*0}n{ zES-f@uAMEO9eI7uOl#}aZ%@}eD5!sX=I1%v^s?`A7cN}jFp;_M6dx~t|M&hEKg<#` zm_(jC#Kp+)%dbO-$g3qCI=gRsy64e7*Zsx>&ezk1rQo;Pyt5<*a)c9PzV9S;{2^MVM-z|Uq zv(miBzvt5H3yFSyd=fltyV@+~`fZ3>8xRx2qc-_ualNKWIm1e=vyYXOl@@55iK(gW zZ#X-R$+Pq0JazZyC*Hi#$-QXV^jWOC^;@I|*MWSy<1zv@w>E4r(9pJKn;5u0vu?)f zERVW6I~G>fK<9v#3&+K-Pi=YpUX*8AoxqFt@0TlmSQgz>`r+ooh95^HV~@I@W(}@}ynNpW7R{2SZV7n`*1Q> zTk@Rnt}I4gUS1hH(QSW3T(jc1_Ln)F>I{0$VeIzr!Cd2@@ApF(y)FnkG3W;Tn93~O zsOBInP{0_Y5bx;14dN(hIjq0_I;Yur$%+RZugXiF?r&I>?aG=^dmtop+1JJ=M@&MM zLawvx9r!NcygP|0|H{b^Embqj%SYzq$tsYz)$@4P~x#`+m6mwf7pkouyrX z;0vF1b{Fp4IrFDnM_WO&YcYFpY>I}Cj?Td;wdNvXHLcIr&ns*yX6b)?@#4jKzZja7 z-jwaGXJTPVmzBNypvZFPlO-WVJ6;Iv-!<*&(^UVt3$|~cuIV(9p{F*$z?T1#y7PyM zbF26te7uv-=p^xD;rXwO(- Date: Wed, 22 Jan 2025 11:40:19 +0100 Subject: [PATCH 2/3] Increase price so the bot won't be worth less than its parts dropped --- Resources/Prototypes/Entities/Mobs/NPCs/disablerbot.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/disablerbot.yml b/Resources/Prototypes/Entities/Mobs/NPCs/disablerbot.yml index ca3014710d3..7718306813a 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/disablerbot.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/disablerbot.yml @@ -4,6 +4,8 @@ name: disablerbot description: Defends the station from hostile wildlife. components: + - type: StaticPrice + price: 545 - type: Sprite sprite: Mobs/Silicon/Bots/disablerbot.rsi state: disablerbot From 8489de199ad17e35f07829a979950f72d9635f15 Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 22 Jan 2025 18:13:46 +0100 Subject: [PATCH 3/3] Lower HP a little --- Resources/Prototypes/Entities/Mobs/NPCs/batonbot.yml | 6 +++--- Resources/Prototypes/Entities/Mobs/NPCs/disablerbot.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/batonbot.yml b/Resources/Prototypes/Entities/Mobs/NPCs/batonbot.yml index a422509faf2..0e85f7538eb 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/batonbot.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/batonbot.yml @@ -35,17 +35,17 @@ - type: MobThresholds thresholds: 0: Alive - 120: Dead + 60: Dead - type: Destructible thresholds: - trigger: !type:DamageTrigger - damage: 110 + damage: 50 behaviors: - !type:TriggerBehavior - trigger: !type:DamageTrigger - damage: 120 + damage: 60 behaviors: - !type:SpawnEntitiesBehavior spawn: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/disablerbot.yml b/Resources/Prototypes/Entities/Mobs/NPCs/disablerbot.yml index 7718306813a..d0470e09b32 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/disablerbot.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/disablerbot.yml @@ -40,17 +40,17 @@ - type: MobThresholds thresholds: 0: Alive - 120: Dead + 60: Dead - type: Destructible thresholds: - trigger: !type:DamageTrigger - damage: 110 + damage: 50 behaviors: - !type:TriggerBehavior - trigger: !type:DamageTrigger - damage: 120 + damage: 60 behaviors: - !type:SpawnEntitiesBehavior spawn: