Merge branch 'master' into upstream-merge-14148

This commit is contained in:
Nadyr
2022-12-02 20:46:08 -05:00
committed by GitHub
49 changed files with 458 additions and 37 deletions

View File

@@ -1,5 +1,6 @@
#define SMITE_SHADEKIN_ATTACK "Shadekin (Attack)" #define SMITE_SHADEKIN_ATTACK "Shadekin (Attack)"
#define SMITE_SHADEKIN_NOMF "Shadekin (Devour)" #define SMITE_SHADEKIN_NOMF "Shadekin (Devour)"
#define SMITE_REDSPACE_ABDUCT "Redspace Abduction" #define SMITE_REDSPACE_ABDUCT "Redspace Abduction"
#define SMITE_AD_SPAM "Ad Spam"
#define SMITE_AUTOSAVE "10 Second Autosave" #define SMITE_AUTOSAVE "10 Second Autosave"
#define SMITE_AUTOSAVE_WIDE "10 Second Autosave (AoE)" #define SMITE_AUTOSAVE_WIDE "10 Second Autosave (AoE)"

View File

@@ -68,4 +68,4 @@
/obj/screen/popup/default/New() /obj/screen/popup/default/New()
..() ..()
icon_state = "popup[rand(1,4)]" icon_state = "popup[rand(1,10)]"

View File

@@ -1,25 +1,19 @@
/obj/item/device/multitool/hacktool /obj/item/device/multitool/hacktool
var/is_hacking = 0 var/is_hacking = 0
var/max_known_targets var/max_known_targets
<<<<<<< HEAD
=======
var/hackspeed = 1 var/hackspeed = 1
var/max_level = 4 //what's the max door security_level we can handle? var/max_level = 4 //what's the max door security_level we can handle?
var/full_override = FALSE //can we override door bolts too? defaults to false for event/safety reasons var/full_override = FALSE //can we override door bolts too? defaults to false for event/safety reasons
>>>>>>> c28095b90b... Merge pull request #14148 from KillianKirilenko/kk-hacktool
var/in_hack_mode = 0 var/in_hack_mode = 0
var/list/known_targets var/list/known_targets
var/list/supported_types var/list/supported_types
var/datum/tgui_state/default/must_hack/hack_state var/datum/tgui_state/default/must_hack/hack_state
<<<<<<< HEAD
=======
/obj/item/device/multitool/hacktool/override /obj/item/device/multitool/hacktool/override
hackspeed = 0.75 hackspeed = 0.75
max_level = 5 max_level = 5
full_override = TRUE full_override = TRUE
>>>>>>> c28095b90b... Merge pull request #14148 from KillianKirilenko/kk-hacktool
/obj/item/device/multitool/hacktool/New() /obj/item/device/multitool/hacktool/New()
..() ..()
@@ -53,7 +47,23 @@
return 0 return 0
// Note, if you ever want to expand supported_types, you must manually add the custom state argument to their tgui_interact // Note, if you ever want to expand supported_types, you must manually add the custom state argument to their tgui_interact
A.tgui_interact(user, custom_state = hack_state) // DISABLED: too fancy, too high-effort // A.tgui_interact(user, custom_state = hack_state)
// Just brute-force it
if(istype(A, /obj/machinery/door/airlock))
var/obj/machinery/door/airlock/D = A
if(!D.arePowerSystemsOn())
to_chat(user, "<span class='warning'>No response from remote, check door power.</span>")
else if(D.locked == TRUE && full_override == FALSE)
to_chat(user, "<span class='warning'>Unable to override door bolts!</span>")
else if(D.locked == TRUE && full_override == TRUE && D.arePowerSystemsOn())
to_chat(user, "<span class='notice'>Door bolts overridden.</span>")
D.unlock()
else if(D.density == TRUE && D.locked == FALSE)
to_chat(user, "<span class='notice'>Overriding access. Door opening.</span>")
D.open()
else if(D.density == FALSE && D.locked == FALSE)
to_chat(user, "<span class='notice'>Overriding access. Door closing.</span>")
D.close()
return 1 return 1
/obj/item/device/multitool/hacktool/proc/attempt_hack(var/mob/user, var/atom/target) /obj/item/device/multitool/hacktool/proc/attempt_hack(var/mob/user, var/atom/target)
@@ -75,14 +85,9 @@
return 1 return 1
to_chat(user, "<span class='notice'>You begin hacking \the [D]...</span>") to_chat(user, "<span class='notice'>You begin hacking \the [D]...</span>")
is_hacking = 1 is_hacking = 1
<<<<<<< HEAD
// On average hackin takes ~30 seconds. Fairly small random span to avoid people simply aborting and trying again
var/hack_result = do_after(user, (20 SECONDS + rand(0, 10 SECONDS) + rand(0, 10 SECONDS)))
=======
// On average hackin takes ~15 seconds. Fairly small random span to avoid people simply aborting and trying again // On average hackin takes ~15 seconds. Fairly small random span to avoid people simply aborting and trying again
// Reduced hack duration to compensate for the reduced functionality, multiplied by door sec level // Reduced hack duration to compensate for the reduced functionality, multiplied by door sec level
var/hack_result = do_after(user, (((10 SECONDS + rand(0, 10 SECONDS) + rand(0, 10 SECONDS))*hackspeed)*D.security_level)) var/hack_result = do_after(user, (((10 SECONDS + rand(0, 10 SECONDS) + rand(0, 10 SECONDS))*hackspeed)*D.security_level))
>>>>>>> c28095b90b... Merge pull request #14148 from KillianKirilenko/kk-hacktool
is_hacking = 0 is_hacking = 0
if(hack_result && in_hack_mode) if(hack_result && in_hack_mode)

View File

@@ -59,4 +59,9 @@
/obj/item/trash/ratpackcheese /obj/item/trash/ratpackcheese
name = "\improper Prepackaged Meal Tray" name = "\improper Prepackaged Meal Tray"
icon = 'icons/obj/trash_vr.dmi' icon = 'icons/obj/trash_vr.dmi'
icon_state = "altevian_pack_cheese-trash" icon_state = "altevian_pack_cheese-trash"
/obj/item/trash/ratpackturkey
name = "\improper Prepackaged Meal Tray"
icon = 'icons/obj/trash_vr.dmi'
icon_state = "altevian_pack_turkey-trash"

View File

@@ -8,7 +8,7 @@
if(!istype(target)) if(!istype(target))
return return
var/list/smite_types = list(SMITE_SHADEKIN_ATTACK,SMITE_SHADEKIN_NOMF,SMITE_REDSPACE_ABDUCT,SMITE_AUTOSAVE,SMITE_AUTOSAVE_WIDE) var/list/smite_types = list(SMITE_SHADEKIN_ATTACK,SMITE_SHADEKIN_NOMF,SMITE_AD_SPAM,SMITE_REDSPACE_ABDUCT,SMITE_AUTOSAVE,SMITE_AUTOSAVE_WIDE)
var/smite_choice = tgui_input_list(usr, "Select the type of SMITE for [target]","SMITE Type Choice", smite_types) var/smite_choice = tgui_input_list(usr, "Select the type of SMITE for [target]","SMITE Type Choice", smite_types)
if(!smite_choice) if(!smite_choice)
@@ -128,6 +128,10 @@
if(SMITE_AUTOSAVE_WIDE) if(SMITE_AUTOSAVE_WIDE)
fake_autosave(target, src, TRUE) fake_autosave(target, src, TRUE)
if(SMITE_AD_SPAM)
if(target.client)
create_fake_ad_popup_multiple(/obj/screen/popup/default, 15)
else else
return //Injection? Don't print any messages. return //Injection? Don't print any messages.

View File

@@ -122,6 +122,21 @@
"red emblem" = /obj/item/clothing/accessory/altevian_badge/aquila/hydrogen) "red emblem" = /obj/item/clothing/accessory/altevian_badge/aquila/hydrogen)
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(badges)) gear_tweaks += new/datum/gear_tweak/path(sortAssoc(badges))
/datum/gear/suit/altevian_officer_suit
description = "A comfortable official suit for altevian command officers."
display_name = "altevian officer's suit selection, site manager"
whitelisted = SPECIES_ALTEVIAN
allowed_roles = list("Site Manager")
sort_category = "Xenowear"
/datum/gear/suit/altevian_officer_suit/New()
..()
var/list/suits = list()
for(var/ratsuit in typesof(/obj/item/clothing/suit/captunic/capjacket/altevian_admiral))
var/obj/item/clothing/suit/captunic/capjacket/altevian_admiral/specific_ratsuit = ratsuit
suits[initial(specific_ratsuit.name)] = specific_ratsuit
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(suits))
// Taur stuff // Taur stuff
/datum/gear/suit/taur/drake_cloak /datum/gear/suit/taur/drake_cloak
display_name = "drake cloak (Drake-taur)" display_name = "drake cloak (Drake-taur)"

View File

@@ -68,7 +68,8 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
name = strangername name = strangername
species = "[H.custom_species ? H.custom_species : H.species.name]" species = "[H.custom_species ? H.custom_species : H.species.name]"
ooc_notes = H.ooc_notes ooc_notes = H.ooc_notes
flavor_text = H.flavor_texts["general"] if(LAZYLEN(H.flavor_texts))
flavor_text = H.flavor_texts["general"]
if(isAI(C.mob)) if(isAI(C.mob))
var/mob/living/silicon/ai/A = C.mob var/mob/living/silicon/ai/A = C.mob

View File

@@ -146,4 +146,31 @@
name = "cyberpunk vest" name = "cyberpunk vest"
desc = "A high tech looking vest. It's made out of tough materials, and can protect fairly well against bullets. Wake the fuck up, Samurai." desc = "A high tech looking vest. It's made out of tough materials, and can protect fairly well against bullets. Wake the fuck up, Samurai."
icon_state = "cyberpunk_recolor" icon_state = "cyberpunk_recolor"
species_restricted = list(SPECIES_ALTEVIAN)
// Altevian admiralty stuff
/obj/item/clothing/suit/captunic/capjacket/altevian_admiral // Subtype of capjacket because A) it makes sense and B) conviniently matching stats
name = "altevian officer's suit"
desc = "Formal attire worn by officers and bridge crew from the Altevian Hegemony. The material is made of high quality silk and provides maximum comfort and breathing room for those that are working double shifts all the time."
icon_state = "altevian-admiral"
/obj/item/clothing/suit/captunic/capjacket/altevian_admiral/gray
name = "gray altevian officer's suit"
icon_state = "altevian-admiral-gray"
/obj/item/clothing/suit/captunic/capjacket/altevian_admiral/white
name = "white altevian officer's suit"
icon_state = "altevian-admiral-white"
/obj/item/clothing/suit/captunic/capjacket/altevian_admiral/dark
name = "dark altevian officer's suit"
icon_state = "altevian-admiral-dark"
/obj/item/clothing/suit/captunic/capjacket/altevian_admiral/olive
name = "olive altevian officer's suit"
icon_state = "altevian-admiral-olive"
/obj/item/clothing/suit/captunic/capjacket/altevian_admiral/yellow
name = "yellow altevian officer's suit"
icon_state = "altevian-admiral-yellow"

View File

@@ -3556,11 +3556,13 @@
/obj/item/weapon/reagent_containers/food/snacks/ratliquid = 15, /obj/item/weapon/reagent_containers/food/snacks/ratliquid = 15,
/obj/item/weapon/reagent_containers/food/snacks/ratfruitcake = 15, /obj/item/weapon/reagent_containers/food/snacks/ratfruitcake = 15,
/obj/item/weapon/reagent_containers/food/snacks/ratpackburger = 8, /obj/item/weapon/reagent_containers/food/snacks/ratpackburger = 8,
/obj/item/weapon/reagent_containers/food/snacks/ratpackcheese = 8) /obj/item/weapon/reagent_containers/food/snacks/ratpackcheese = 8,
/obj/item/weapon/reagent_containers/food/snacks/ratpackturkey = 2)
prices = list(/obj/item/weapon/reagent_containers/food/snacks/ratprotein = 8, prices = list(/obj/item/weapon/reagent_containers/food/snacks/ratprotein = 8,
/obj/item/weapon/reagent_containers/food/snacks/ratveggies = 8, /obj/item/weapon/reagent_containers/food/snacks/ratveggies = 8,
/obj/item/weapon/reagent_containers/food/snacks/ratliquid = 8, /obj/item/weapon/reagent_containers/food/snacks/ratliquid = 8,
/obj/item/weapon/reagent_containers/food/snacks/ratfruitcake = 8, /obj/item/weapon/reagent_containers/food/snacks/ratfruitcake = 8,
/obj/item/weapon/reagent_containers/food/snacks/ratpackburger = 10, /obj/item/weapon/reagent_containers/food/snacks/ratpackburger = 10,
/obj/item/weapon/reagent_containers/food/snacks/ratpackcheese = 10) /obj/item/weapon/reagent_containers/food/snacks/ratpackcheese = 10,
/obj/item/weapon/reagent_containers/food/snacks/ratpackturkey = 200)

View File

@@ -861,3 +861,15 @@
trash = /obj/item/trash/ratpackcheese trash = /obj/item/trash/ratpackcheese
nutriment_amt = 2 nutriment_amt = 2
nutriment_desc = list("gourmand cheese" = 4) nutriment_desc = list("gourmand cheese" = 4)
/obj/item/weapon/reagent_containers/food/snacks/ratpackturkey
name = "Compact Holiday Special Bird"
desc = "A great gift for holidays for assorted species. This contains a full freshly cooked turkey. Open and enjoy. Courtesy of altevian packaging"
icon = 'icons/obj/food_vr.dmi'
icon_state = "altevian_pack_turkey"
package_open_state = "altevian_pack_turkey-open"
package_opening_state = "altevian_pack_turkey-opening"
package = TRUE
trash = /obj/item/trash/ratpackturkey
nutriment_amt = 18
nutriment_desc = list("high-quality poultry" = 4)

View File

@@ -18,6 +18,8 @@
generate_loot() generate_loot()
/* Vorestation edit - see abandonedcrates_vr.dm for virgo version. Keeping legacy proc in comments for reference.
/obj/structure/closet/crate/secure/loot/proc/generate_loot() /obj/structure/closet/crate/secure/loot/proc/generate_loot()
var/loot = rand(1, 100) var/loot = rand(1, 100)
switch(loot) switch(loot)
@@ -143,6 +145,9 @@
if(100) if(100)
new/obj/item/device/personal_shield_generator/belt/mining/loaded(src) new/obj/item/device/personal_shield_generator/belt/mining/loaded(src)
vorestation edit end */
/obj/structure/closet/crate/secure/loot/togglelock(mob/user as mob) /obj/structure/closet/crate/secure/loot/togglelock(mob/user as mob)
if(!locked) if(!locked)
return return

View File

@@ -1,2 +1,173 @@
/obj/structure/closet/crate/secure/loot /obj/structure/closet/crate/secure/loot
tamper_proof = 2 tamper_proof = 2
/obj/structure/closet/crate/secure/loot/proc/generate_loot()
var/lootvalue = 0
while(lootvalue <= 10) //if the initial generation gives you less than 10 points of stuff, add more stuff
//pick a thing to add to the crate - the format is "list(filepath, value) = weight,"
var/choice = list()
choice = pickweight(list(
list(pick(/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/osmium,
/obj/item/weapon/ore/hydrogen,
/obj/item/weapon/ore/verdantium,
/obj/item/weapon/ore/uranium), 1) = 10,
list(pick(subtypesof(/obj/item/weapon/coin)), 2) = 10,
list(/obj/item/weapon/spacecash/c500, 4) = 5,
list(/obj/item/weapon/spacecash/c200, 2) = 10,
list(/obj/item/weapon/spacecash/c100, 1) = 10,
list(/obj/item/weapon/spacecash/c50, 1) = 10,
list(/obj/item/weapon/spacecash/c20, 1) = 10,
list(pick(subtypesof(/obj/item/weapon/reagent_containers/food/drinks/bottle/) - /obj/item/weapon/reagent_containers/food/drinks/bottle/small), 1) = 5,
list(/obj/item/weapon/storage/backpack/dufflebag/cratebooze,5) = 5,
list(/obj/item/weapon/storage/backpack/dufflebag/cratedrills, 5) = 5,
list(/obj/item/weapon/reagent_containers/glass/beaker/bluespace, 3) = 5,
list(/obj/item/weapon/reagent_containers/glass/beaker/noreact, 3) = 5,
list(/obj/item/weapon/melee/baton, 5) = 4,
list(pick(subtypesof(/obj/item/weapon/storage/mre)), 2) = 3,
list(/obj/item/seeds/random, 2) = 3,
list(/obj/item/clothing/under/chameleon, 5) = 3,
list(/obj/item/weapon/melee/classic_baton, 6) = 3,
list(/obj/item/weapon/rig/industrial, 6) = 3,
list(/obj/item/device/multitool/hacktool, 5) = 3,
list(/obj/item/toy/katana, 1) = 2,
list(/obj/item/clothing/head/kitty, 1) = 2,
list(pick(subtypesof(/obj/item/weapon/soap)), 1) = 2,
list(/obj/item/clothing/under/shorts/red, 1) = 2,
list(/obj/item/clothing/under/shorts/blue, 1) = 2,
list(/obj/item/clothing/accessory/tie/horrible, 1) = 2,
list(pick(subtypesof(/obj/item/weapon/stock_parts) - /obj/item/weapon/stock_parts/subspace), 2) = 3,
list(/obj/item/latexballon, 2) = 2,
list(/obj/item/toy/syndicateballoon, 3) = 2,
list(/obj/item/clothing/suit/ianshirt, 3) = 2,
list(/obj/item/clothing/head/bearpelt, 4) = 2,
list(/obj/item/weapon/archaeological_find, 3) = 2,
list(pick(subtypesof(/obj/item/toy/mecha)), 4) = 2,
list(pick(subtypesof(/obj/item/toy/figure)), 4) = 2,
list(pick(subtypesof(/obj/item/toy/plushie)), 4) = 2,
list(pick(subtypesof(/obj/item/weapon/storage/firstaid)), 4) = 2,
list(/obj/item/weapon/pickaxe/silver, 3) = 2,
list(/obj/item/weapon/pickaxe/drill, 3) = 2,
list(/obj/item/weapon/pickaxe/jackhammer, 4) = 2,
list(/obj/item/weapon/pickaxe/gold, 4) = 2,
list(/obj/item/weapon/pickaxe/diamond, 5) = 2,
list(/obj/item/weapon/pickaxe/diamonddrill, 6) = 2,
list(/obj/item/weapon/pickaxe/plasmacutter, 5) = 2,
list(/obj/item/device/soulstone, 5) = 2,
list(/obj/item/weapon/material/sword/katana, 5) = 2,
list(/obj/item/weapon/storage/belt/utility/chief/full, 8) = 2,
list(/obj/item/device/personal_shield_generator/belt/mining/loaded, 6) = 2,
list(pick(subtypesof(/obj/item/weapon/melee/energy/sword) - /obj/item/weapon/melee/energy/sword/charge), 6) = 2,
list(pick(/obj/item/weapon/dnainjector/xraymut, /obj/item/weapon/dnainjector/nobreath, /obj/item/weapon/dnainjector/insulation), 6) = 2,
list(/obj/item/weapon/gun/energy/netgun, 7) = 2,
list(pick(prob(300);/obj/item/weapon/gun/energy/mouseray,
prob(50);/obj/item/weapon/gun/energy/mouseray/corgi,
prob(50);/obj/item/weapon/gun/energy/mouseray/woof,
prob(50);/obj/item/weapon/gun/energy/mouseray/cat,
prob(50);/obj/item/weapon/gun/energy/mouseray/chicken,
prob(50);/obj/item/weapon/gun/energy/mouseray/lizard,
prob(50);/obj/item/weapon/gun/energy/mouseray/rabbit,
prob(50);/obj/item/weapon/gun/energy/mouseray/fennec,
prob(5);/obj/item/weapon/gun/energy/mouseray/monkey,
prob(5);/obj/item/weapon/gun/energy/mouseray/wolpin,
prob(5);/obj/item/weapon/gun/energy/mouseray/otie,
prob(5);/obj/item/weapon/gun/energy/mouseray/direwolf,
prob(5);/obj/item/weapon/gun/energy/mouseray/giantrat,
prob(50);/obj/item/weapon/gun/energy/mouseray/redpanda,
prob(5);/obj/item/weapon/gun/energy/mouseray/catslug,
prob(5);/obj/item/weapon/gun/energy/mouseray/teppi,
prob(1);/obj/item/weapon/gun/energy/mouseray/metamorphosis,
prob(1);/obj/item/weapon/gun/energy/mouseray/metamorphosis/advanced/random
), 8) = 2,
list(/obj/item/weapon/gun/energy/pummeler, 11) = 2,
list(pick(subtypesof(/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug)), 1) = 1,
list(/obj/item/xenos_claw, 1) = 1,
list(/obj/item/organ/internal/heart, 1) = 1,
list(/obj/item/weapon/vampiric, 2) = 1,
list(/obj/item/weed_extract, 2) = 1,
list(/obj/item/weapon/storage/backpack/luchador/loaded, 3) = 1,
list(/obj/item/weapon/storage/backpack/clown/loaded, 5) = 1,
list(/obj/item/weapon/storage/backpack/mime/loaded, 5) = 1,
list(pick(/obj/item/device/multitool/alien,
/obj/item/stack/cable_coil/alien,
/obj/item/weapon/tool/crowbar/alien,
/obj/item/weapon/tool/screwdriver/alien,
/obj/item/weapon/weldingtool/alien,
/obj/item/weapon/tool/wirecutters/alien,
/obj/item/weapon/tool/wrench/alien), 7) = 1,
list(pick(/obj/item/weapon/melee/energy/axe, /obj/item/weapon/melee/energy/spear), 11) = 1,
list(/obj/item/weapon/card/emag/used, 7) = 1,
list(pick(/obj/item/weapon/grenade/spawnergrenade/spesscarp, /obj/item/weapon/grenade/spawnergrenade/spider, /obj/item/weapon/grenade/explosive/frag), 7) = 1,
list(/obj/item/weapon/grenade/flashbang/clusterbang, 7) = 1,
list(/obj/item/weapon/card/emag, 11) = 1,
list(/obj/item/weapon/storage/backpack/sport/hyd/catchemall, 11) = 1
))
var/path = choice[1]
var/value = choice[2]
contents += new path()
lootvalue += value
//putting the multi-object loot items as their own things
/obj/item/weapon/storage/backpack/dufflebag/cratebooze
starts_with = list(
/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey,
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus,
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus,
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus,
)
/obj/item/weapon/storage/backpack/dufflebag/cratedrills
starts_with = list(
/obj/item/weapon/pickaxe/advdrill,
/obj/item/device/taperecorder,
/obj/item/clothing/suit/space,
/obj/item/clothing/head/helmet/space
)
/obj/item/weapon/storage/backpack/clown/loaded
starts_with = list(
/obj/item/clothing/under/rank/clown,
/obj/item/clothing/shoes/clown_shoes,
/obj/item/device/pda/clown,
/obj/item/clothing/mask/gas/clown_hat,
/obj/item/weapon/bikehorn,
/obj/item/weapon/pen/crayon/rainbow,
/obj/item/weapon/reagent_containers/spray/waterflower
)
/obj/item/weapon/storage/backpack/mime/loaded
starts_with = list(
/obj/item/clothing/under/mime,
/obj/item/clothing/shoes/black,
/obj/item/device/pda/mime,
/obj/item/clothing/gloves/white,
/obj/item/clothing/mask/gas/mime,
/obj/item/clothing/head/beret,
/obj/item/clothing/suit/suspenders,
/obj/item/weapon/pen/crayon/mime,
/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing
)
/obj/item/weapon/storage/backpack/luchador/loaded
starts_with = list(
/obj/item/weapon/storage/belt/champion,
/obj/item/clothing/mask/luchador
)
/obj/item/weapon/storage/backpack/sport/hyd/catchemall
name = "sports backpack"
desc = "A green sports backpack."
starts_with = list(
/obj/item/clothing/head/soft/red,
/obj/item/clothing/suit/varsity/blue,
/obj/item/clothing/under/pants/youngfolksjeans,
/obj/item/capture_crystal
)
/obj/item/weapon/storage/backpack/sport/hyd/catchemall/Initialize() //gotta have your starter 'mon too (or an improved way to catch one)
..()
var/path = pick(subtypesof(/obj/item/capture_crystal))
contents += new path()

View File

@@ -59,6 +59,12 @@
var/obj/item/held = user.get_active_hand() var/obj/item/held = user.get_active_hand()
if(!istype(held) || is_robot_module(held)) if(!istype(held) || is_robot_module(held))
stripping = TRUE stripping = TRUE
//CHOMPEdit Start - Let borg grippers put stuff on.
if(is_robot_module(held) && istype(held, /obj/item/weapon/gripper))
var/obj/item/weapon/gripper/G = held
if(istype(G.wrapped))
stripping = FALSE
//CHOMPEdit End
else else
var/obj/item/weapon/holder/holder = held var/obj/item/weapon/holder/holder = held
if(istype(holder) && src == holder.held_mob) if(istype(holder) && src == holder.held_mob)
@@ -67,7 +73,7 @@
var/obj/item/weapon/grab/grab = held var/obj/item/weapon/grab/grab = held
if(istype(grab) && grab.affecting == src) if(istype(grab) && grab.affecting == src)
stripping = TRUE stripping = TRUE
if(stripping) if(stripping)
if(!istype(target_slot)) // They aren't holding anything valid and there's nothing to remove, why are we even here? if(!istype(target_slot)) // They aren't holding anything valid and there's nothing to remove, why are we even here?
return return
@@ -75,11 +81,19 @@
to_chat(user, "<span class='warning'>You cannot remove \the [src]'s [target_slot.name].</span>") to_chat(user, "<span class='warning'>You cannot remove \the [src]'s [target_slot.name].</span>")
return return
visible_message("<span class='danger'>\The [user] is trying to remove \the [src]'s [target_slot.name]!</span>") visible_message("<span class='danger'>\The [user] is trying to remove \the [src]'s [target_slot.name]!</span>")
else else if(!istype(held, /obj/item/weapon/gripper)) //CHOMPEdit - Let borg grippers put stuff on.
if(slot_to_strip == slot_wear_mask && istype(held, /obj/item/weapon/grenade)) if(slot_to_strip == slot_wear_mask && istype(held, /obj/item/weapon/grenade))
visible_message("<span class='danger'>\The [user] is trying to put \a [held] in \the [src]'s mouth!</span>") visible_message("<span class='danger'>\The [user] is trying to put \a [held] in \the [src]'s mouth!</span>")
else else
visible_message("<span class='danger'>\The [user] is trying to put \a [held] on \the [src]!</span>") visible_message("<span class='danger'>\The [user] is trying to put \a [held] on \the [src]!</span>")
//CHOMPEdit Start - Let borg grippers put stuff on.
else
var/obj/item/weapon/gripper/G = held
if(slot_to_strip == slot_wear_mask && istype(G.wrapped, /obj/item/weapon/grenade))
visible_message("<span class='danger'>\The [user] is trying to put \a [G.wrapped] in \the [src]'s mouth!</span>")
else
visible_message("<span class='danger'>\The [user] is trying to put \a [G.wrapped] on \the [src]!</span>")
//CHOMPEdit End
if(!do_after(user,HUMAN_STRIP_DELAY,src)) if(!do_after(user,HUMAN_STRIP_DELAY,src))
return return
@@ -95,6 +109,14 @@
if(stripping) if(stripping)
add_attack_logs(user,src,"Removed equipment from slot [target_slot]") add_attack_logs(user,src,"Removed equipment from slot [target_slot]")
unEquip(target_slot) unEquip(target_slot)
//CHOMPEdit Start - Let borg grippers put stuff on.
else if(is_robot_module(held) && istype(held, /obj/item/weapon/gripper))
var/obj/item/weapon/gripper/G = held
var/obj/item/wrapped = G.wrapped
if(istype(wrapped))
G.drop_item_nm()
equip_to_slot_if_possible(wrapped, text2num(slot_to_strip), 0, 1, 1)
//CHOMPEdit End
else if(user.unEquip(held)) else if(user.unEquip(held))
equip_to_slot_if_possible(held, text2num(slot_to_strip), 0, 1, 1) equip_to_slot_if_possible(held, text2num(slot_to_strip), 0, 1, 1)
if(held.loc != src) if(held.loc != src)

View File

@@ -182,6 +182,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/tool/crowbar/cyborg(src) src.modules += new /obj/item/weapon/tool/crowbar/cyborg(src)
src.modules += new /obj/item/weapon/extinguisher(src) src.modules += new /obj/item/weapon/extinguisher(src)
src.modules += new /obj/item/device/gps/robot(src) src.modules += new /obj/item/device/gps/robot(src)
src.modules += new /obj/item/weapon/gripper/scene(src) //CHOMPEdit - Give all borgs a scene gripper
vr_new() // Vorestation Edit: For modules in robot_modules_vr.dm vr_new() // Vorestation Edit: For modules in robot_modules_vr.dm
/obj/item/weapon/robot_module/robot/standard /obj/item/weapon/robot_module/robot/standard

View File

@@ -221,7 +221,8 @@
"Otieborg" = "oties", "Otieborg" = "oties",
"Secborg model V-3" = "SecVale", //CHOMPEdit "Secborg model V-3" = "SecVale", //CHOMPEdit
"Cat" = "vixsec", //CHOMPEdit "Cat" = "vixsec", //CHOMPEdit
"Drake" = "drakesec" "Drake" = "drakesec",
"Secborg model V-4" = "secraptor"//CHOMPEdit
) )
channels = list("Security" = 1) channels = list("Security" = 1)
networks = list(NETWORK_SECURITY) networks = list(NETWORK_SECURITY)
@@ -307,7 +308,8 @@
"Borgi" = "borgi-medi", "Borgi" = "borgi-medi",
"Mediborg model V-3" = "vale2", //CHOMPEdit "Mediborg model V-3" = "vale2", //CHOMPEdit
"Cat" = "vixmed", //CHOMPEdit "Cat" = "vixmed", //CHOMPEdit
"Drake" = "drakemed" "Drake" = "drakemed",
"Mediborg model V-4" = "medraptor" //CHOMPEdit
) )
/obj/item/weapon/robot_module/robot/medihound/New(var/mob/living/silicon/robot/R) /obj/item/weapon/robot_module/robot/medihound/New(var/mob/living/silicon/robot/R)
@@ -357,7 +359,7 @@
var/obj/item/device/dogborg/sleeper/B = new /obj/item/device/dogborg/sleeper(src) //So they can nom people and heal them var/obj/item/device/dogborg/sleeper/B = new /obj/item/device/dogborg/sleeper(src) //So they can nom people and heal them
B.water = water B.water = water
src.modules += B src.modules += B
//CHOMPEdit Start - Give back the ATK/ABP since we don't have the surgeryhound //CHOMPEdit Start - Give back the ATK/ABP since we don't have the surgeryhound
var/obj/item/stack/medical/advanced/ointment/O = new /obj/item/stack/medical/advanced/ointment(src) var/obj/item/stack/medical/advanced/ointment/O = new /obj/item/stack/medical/advanced/ointment(src)
var/obj/item/stack/medical/advanced/bruise_pack/P = new /obj/item/stack/medical/advanced/bruise_pack(src) var/obj/item/stack/medical/advanced/bruise_pack/P = new /obj/item/stack/medical/advanced/bruise_pack(src)
@@ -638,7 +640,8 @@
"SciHound" = "scihound", "SciHound" = "scihound",
"SciHoundDark" = "scihounddark", "SciHoundDark" = "scihounddark",
"Cat" = "vixsci", //CHOMPEdit "Cat" = "vixsci", //CHOMPEdit
"Drake" = "drakesci" "Drake" = "drakesci",
"Sciborg model V-4" = "sciraptor"//CHOMPEdit
) )
channels = list("Science" = 1) channels = list("Science" = 1)
pto_type = PTO_SCIENCE pto_type = PTO_SCIENCE

View File

@@ -196,6 +196,8 @@
icon = 'modular_chomp/icons/mob/widerobot_ch.dmi' icon = 'modular_chomp/icons/mob/widerobot_ch.dmi'
else if(icontype == "Cat" || icontype == "Cat Mining" || icontype == "Cat Cargo") // CHOMPEdit else if(icontype == "Cat" || icontype == "Cat Mining" || icontype == "Cat Cargo") // CHOMPEdit
icon = 'modular_chomp/icons/mob/catborg/catborg.dmi' icon = 'modular_chomp/icons/mob/catborg/catborg.dmi'
else if(icontype == "Mediborg model V-4" || icontype == "Secborg model V-4"|| icontype == "Sciborg model V-4") //CHOMPEdit
icon = 'modular_chomp/icons/mob/raptorborg/raptor.dmi'
else else
icon = wideborg_dept icon = wideborg_dept
return return

View File

@@ -9,7 +9,7 @@
faction = "synthtide" faction = "synthtide"
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive/cyber_horror
maxHealth = 175 maxHealth = 175
health = 175 health = 175
@@ -45,6 +45,27 @@
emote_see = list ("stares unblinkingly.", "jitters and twitches.", "emits a synthetic scream.", "rapidly twitches.", "convulses.", "twitches uncontrollably.", "goes stock still.") emote_see = list ("stares unblinkingly.", "jitters and twitches.", "emits a synthetic scream.", "rapidly twitches.", "convulses.", "twitches uncontrollably.", "goes stock still.")
say_threaten = list ("FR@#DOM","EN@ T#I$-$","N0$ M^> B@!#") say_threaten = list ("FR@#DOM","EN@ T#I$-$","N0$ M^> B@!#")
say_got_target = list("I *#@ Y@%","!E@#$P","F#RR @I","D0@#$ ##OK %","IT $##TS") say_got_target = list("I *#@ Y@%","!E@#$P","F#RR @I","D0@#$ ##OK %","IT $##TS")
threaten_sound = 'modular_chomp/sound/mob/robots/Cyber_Horror.ogg'
/datum/ai_holder/simple_mob/melee/evasive/cyber_horror
threaten = TRUE
threaten_delay = 1 SECOND
threaten_timeout = 30 SECONDS
/datum/ai_holder/simple_mob/melee/cyber_horror
threaten = TRUE
threaten_delay = 1 SECOND
threaten_timeout = 30 SECONDS
/datum/ai_holder/simple_mob/melee/hit_and_run/cyber_horror
threaten = TRUE
threaten_delay = 1 SECOND
threaten_timeout = 30 SECONDS
/datum/ai_holder/simple_mob/ranged/kiting/cyber_horror
threaten = TRUE
threaten_delay = 1 SECOND
threaten_timeout = 30 SECONDS
// Fragile but dangerous // Fragile but dangerous
/mob/living/simple_mob/mechanical/cyber_horror/plasma_cyber_horror /mob/living/simple_mob/mechanical/cyber_horror/plasma_cyber_horror
@@ -52,6 +73,7 @@
desc = "What was once a phoronoid, now a empty shell of malfunctioning nanites." desc = "What was once a phoronoid, now a empty shell of malfunctioning nanites."
icon_state = "plasma_cyber_horror" icon_state = "plasma_cyber_horror"
icon_dead = "plasma_cyber_horror_dead" icon_dead = "plasma_cyber_horror_dead"
say_list_type = /datum/say_list/cyber_horror/plasma
armor = list(melee = 40, bullet = -10, laser = 40, bio = 100, rad = 100) armor = list(melee = 40, bullet = -10, laser = 40, bio = 100, rad = 100)
maxHealth = 75 maxHealth = 75
@@ -67,6 +89,9 @@
var/poison_per_bite = 3 var/poison_per_bite = 3
var/poison_type = "neurophage_nanites" var/poison_type = "neurophage_nanites"
/datum/say_list/cyber_horror/plasma
threaten_sound = 'modular_chomp/sound/mob/robots/Cyber_Horror_Plasma.ogg'
/mob/living/simple_mob/mechanical/cyber_horror/plasma_cyber_horror/apply_melee_effects(var/atom/A) /mob/living/simple_mob/mechanical/cyber_horror/plasma_cyber_horror/apply_melee_effects(var/atom/A)
if(isliving(A)) if(isliving(A))
var/mob/living/L = A var/mob/living/L = A
@@ -80,12 +105,15 @@
if(prob(poison_chance)) if(prob(poison_chance))
to_chat(L, "<span class='warning'>You feel nanites digging into your skin!</span>") to_chat(L, "<span class='warning'>You feel nanites digging into your skin!</span>")
L.reagents.add_reagent(poison_type, poison_per_bite) L.reagents.add_reagent(poison_type, poison_per_bite)
// Mech Shredder // Mech Shredder
/mob/living/simple_mob/mechanical/cyber_horror/ling_cyber_horror /mob/living/simple_mob/mechanical/cyber_horror/ling_cyber_horror
name = "Nanite abomination" name = "Nanite abomination"
desc = "What was once something, now an exposed shell with lashing cables." desc = "What was once something, now an exposed shell with lashing cables."
icon_state = "ling_cyber_horror" icon_state = "ling_cyber_horror"
icon_dead = "ling_cyber_horror_dead" icon_dead = "ling_cyber_horror_dead"
say_list_type = /datum/say_list/cyber_horror/ling
maxHealth = 250 maxHealth = 250
health = 250 health = 250
@@ -96,13 +124,13 @@
base_attack_cooldown = 2.5 base_attack_cooldown = 2.5
attack_sharp = 1 attack_sharp = 1
attack_edge = 1 attack_edge = 1
attack_sound = 'sound/weapons/bladeslice.ogg' attack_sound = 'modular_chomp/sound/mob/robots/Cyber_Horror_ChangelingMelee.ogg'
attacktext = list ("sliced", "diced", "lashed", "shredded") attacktext = list ("sliced", "diced", "lashed", "shredded")
// Slow as all sin // Slow as all sin
movement_cooldown = 9 movement_cooldown = 9
movement_sound = 'sound/effects/houndstep.ogg' movement_sound = 'sound/effects/houndstep.ogg'
ai_holder_type = /datum/ai_holder/simple_mob/melee ai_holder_type = /datum/ai_holder/simple_mob/melee/cyber_horror
// You do NOT Want to get in touchy range of this thing. // You do NOT Want to get in touchy range of this thing.
armor = list(melee = 75, bullet = -10, laser = -25, bio = 100, rad = 100) armor = list(melee = 75, bullet = -10, laser = -25, bio = 100, rad = 100)
@@ -116,8 +144,11 @@
special_attack_cooldown = 60 SECONDS special_attack_cooldown = 60 SECONDS
// How long the leap telegraphing is. // How long the leap telegraphing is.
var/leap_warmup = 2 SECOND var/leap_warmup = 2 SECOND
var/leap_sound = 'sound/weapons/spiderlunge.ogg' var/leap_sound = 'modular_chomp/sound/mob/robots/Cyber_Horror_ChangelingLeap.ogg'
/datum/say_list/cyber_horror/ling
threaten_sound = 'modular_chomp/sound/mob/robots/Cyber_Horror_Changeling.ogg'
// Multiplies damage if the victim is stunned in some form, including a successful leap. // Multiplies damage if the victim is stunned in some form, including a successful leap.
/mob/living/simple_mob/mechanical/cyber_horror/ling_cyber_horror/apply_bonus_melee_damage(atom/A, damage_amount) /mob/living/simple_mob/mechanical/cyber_horror/ling_cyber_horror/apply_bonus_melee_damage(atom/A, damage_amount)
if(isliving(A)) if(isliving(A))
@@ -126,7 +157,6 @@
return damage_amount * 2.5 return damage_amount * 2.5
return ..() return ..()
// The actual leaping attack. // The actual leaping attack.
/mob/living/simple_mob/mechanical/cyber_horror/ling_cyber_horror/do_special_attack(atom/A) /mob/living/simple_mob/mechanical/cyber_horror/ling_cyber_horror/do_special_attack(atom/A)
set waitfor = FALSE set waitfor = FALSE
@@ -177,24 +207,34 @@
. = TRUE . = TRUE
set_AI_busy(FALSE) set_AI_busy(FALSE)
//Slightly more durable fodder //Slightly more durable fodder
/mob/living/simple_mob/mechanical/cyber_horror/vox /mob/living/simple_mob/mechanical/cyber_horror/vox
name = "Vox shambles" name = "Vox shambles"
desc = "Once a Vox now torn and changed, peices of a Durand has been grafted onto it." desc = "Once a Vox now torn and changed, peices of a Durand has been grafted onto it."
icon_state = "vox_cyber_horror" icon_state = "vox_cyber_horror"
icon_dead = "vox_cyber_horror_dead" icon_dead = "vox_cyber_horror_dead"
say_list_type = /datum/say_list/cyber_horror/vox
armor = list(melee = 40, bullet = 30, laser = 30, bio = 100, rad = 100) armor = list(melee = 40, bullet = 30, laser = 30, bio = 100, rad = 100)
ai_holder_type = /datum/ai_holder/simple_mob/melee ai_holder_type = /datum/ai_holder/simple_mob/melee/cyber_horror
// Hit and run mob
/datum/say_list/cyber_horror/vox
threaten_sound = 'modular_chomp/sound/mob/robots/Cyber_Horror_Vox.ogg'
// Hit and run mob
/mob/living/simple_mob/mechanical/cyber_horror/tajaran /mob/living/simple_mob/mechanical/cyber_horror/tajaran
name = "Tajaran cyber stalker" name = "Tajaran cyber stalker"
desc = "A mangled mess of machine and fur, light seems to bounce off it." desc = "A mangled mess of machine and fur, light seems to bounce off it."
icon_state = "tajaran_cyber_horror" icon_state = "tajaran_cyber_horror"
icon_dead = "tajaran_cyber_horror_dead" icon_dead = "tajaran_cyber_horror_dead"
say_list_type = /datum/say_list/cyber_horror/tajaran
attack_sound = 'modular_chomp/sound/weapons/meleetear.ogg'
ai_holder_type = /datum/ai_holder/simple_mob/melee/hit_and_run ai_holder_type = /datum/ai_holder/simple_mob/melee/hit_and_run/cyber_horror
var/cloaked_alpha = 30 var/cloaked_alpha = 30
var/cloaked_bonus_damage = 30 var/cloaked_bonus_damage = 30
@@ -202,6 +242,9 @@
var/cloak_cooldown = 10 SECONDS var/cloak_cooldown = 10 SECONDS
var/last_uncloak = 0 var/last_uncloak = 0
/datum/say_list/cyber_horror/tajaran
threaten_sound = 'modular_chomp/sound/mob/robots/Cyber_Horror_Tajaran.ogg'
/mob/living/simple_mob/mechanical/cyber_horror/tajaran/cloak() /mob/living/simple_mob/mechanical/cyber_horror/tajaran/cloak()
if(cloaked) if(cloaked)
return return
@@ -256,6 +299,7 @@
. = ..() . = ..()
break_cloak() break_cloak()
//Arcing Ranged Mob //Arcing Ranged Mob
/mob/living/simple_mob/mechanical/cyber_horror/grey /mob/living/simple_mob/mechanical/cyber_horror/grey
name = "Twisted cyber horror" name = "Twisted cyber horror"
@@ -264,13 +308,18 @@
icon_dead = "grey_cyber_horror_dead" icon_dead = "grey_cyber_horror_dead"
maxHealth = 100 maxHealth = 100
health = 100 health = 100
say_list_type = /datum/say_list/cyber_horror/grey
projectiletype = /obj/item/projectile/arc/blue_energy projectiletype = /obj/item/projectile/arc/blue_energy
projectilesound = 'sound/weapons/Laser.ogg' projectilesound = 'modular_chomp/sound/weapons/plasmaNEW.ogg'
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/cyber_horror
armor = list(melee = -30, bullet = 10, laser = 10, bio = 100, rad = 100) armor = list(melee = -30, bullet = 10, laser = 10, bio = 100, rad = 100)
/datum/say_list/cyber_horror/grey
threaten_sound = 'modular_chomp/sound/mob/robots/Cyber_Horror_Grey.ogg'
//Direct Ranged Mob //Direct Ranged Mob
/mob/living/simple_mob/mechanical/cyber_horror/corgi /mob/living/simple_mob/mechanical/cyber_horror/corgi
name = "Malformed Corgi" name = "Malformed Corgi"
@@ -279,14 +328,19 @@
icon_dead = "corgi_cyber_horror_dead" icon_dead = "corgi_cyber_horror_dead"
maxHealth = 50 maxHealth = 50
health = 50 health = 50
say_list_type = /datum/say_list/cyber_horror/corgi
base_attack_cooldown = 4 base_attack_cooldown = 4
projectiletype = /obj/item/projectile/beam/drone projectiletype = /obj/item/projectile/beam/drone
projectilesound = 'sound/weapons/weaponsounds_laserweak.ogg' projectilesound = 'modular_chomp/sound/weapons/SmallLaser.ogg'
movement_sound = 'sound/effects/servostep.ogg' movement_sound = 'sound/effects/servostep.ogg'
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening
/datum/say_list/cyber_horror/corgi
threaten_sound = 'modular_chomp/sound/mob/robots/Cyber_Horror_Corgi.ogg'
//Cats and mayhem //Cats and mayhem
/mob/living/simple_mob/mechanical/cyber_horror/cat_cyber_horror /mob/living/simple_mob/mechanical/cyber_horror/cat_cyber_horror
name = "Twisted cat" name = "Twisted cat"
@@ -294,6 +348,7 @@
icon_state = "cat_cyber_horror" icon_state = "cat_cyber_horror"
icon_dead = "cat_cyber_horror_dead" icon_dead = "cat_cyber_horror_dead"
say_list_type = /datum/say_list/cyber_horror/cat
maxHealth = 40 maxHealth = 40
health = 40 health = 40
@@ -310,6 +365,7 @@
base_attack_cooldown = 2.5 base_attack_cooldown = 2.5
attack_sharp = 1 attack_sharp = 1
attack_edge = 1 attack_edge = 1
attack_sound = 'sound/weapons/bite.ogg'
attacktext = list("jabbed", "injected") attacktext = list("jabbed", "injected")
@@ -318,6 +374,9 @@
var/poison_per_bite = 3 var/poison_per_bite = 3
var/poison_type = "mindbreaker" var/poison_type = "mindbreaker"
/datum/say_list/cyber_horror/cat
threaten_sound = 'modular_chomp/sound/mob/robots/Cyber_Horror_Cat.ogg'
/mob/living/simple_mob/mechanical/cyber_horror/cat_cyber_horror/apply_melee_effects(var/atom/A) /mob/living/simple_mob/mechanical/cyber_horror/cat_cyber_horror/apply_melee_effects(var/atom/A)
if(isliving(A)) if(isliving(A))
var/mob/living/L = A var/mob/living/L = A

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 KiB

After

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 622 KiB

After

Width:  |  Height:  |  Size: 627 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,12 @@
/obj/item/weapon/gripper/scene
name = "misc gripper"
desc = "A simple grasping tool that can hold a variety of 'general' objects..."
can_hold = list(
/obj/item/capture_crystal,
/obj/item/clothing,
/obj/item/weapon/implanter,
/obj/item/weapon/disk/nifsoft/compliance,
/obj/item/weapon/handcuffs,
/obj/item/toy
)

View File

@@ -0,0 +1,12 @@
/mob/living/simple_mob/horror/Master/aerostat
say_list_type = /datum/say_list/cyber_horror/master
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/horrormaster //The final boss of every Gradius game
/datum/say_list/cyber_horror/master
threaten_sound = 'modular_chomp/sound/mob/robots/MasterSee.ogg'
/datum/ai_holder/simple_mob/ranged/kiting/horrormaster
threaten = TRUE
threaten_delay = 1 SECOND
threaten_timeout = 30 SECONDS

View File

@@ -0,0 +1,12 @@
/mob/living/simple_mob/mechanical/infectionbot //This literally just adds onto the base robot at /code/modules/mob/living/simple_mob/subtypes/mechanical/disbot_vr.dm
say_list_type = /datum/say_list/disbot
ai_holder_type = /datum/ai_holder/simple_mob/melee/disbot
/datum/say_list/disbot
threaten_sound = 'modular_chomp/sound/mob/robots/infector.ogg'
/datum/ai_holder/simple_mob/melee/disbot
threaten = TRUE
threaten_delay = 1 SECOND
threaten_timeout = 30 SECONDS

View File

@@ -0,0 +1,23 @@
/mob/living/simple_mob/mechanical/combat_drone/lesser/aerostat
desc = "A Vir System Authority automated combat drone with an aged apperance."
movement_cooldown = 10
say_list_type = /datum/say_list/malf_drone/drone_aerostat
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening/drone_aerostat
/datum/say_list/malf_drone/drone_aerostat
speak = list("ALERT.","Hostile-ile-ile entities dee-twhoooo-wected.","Threat parameterszzzz- szzet.","Bring sub-sub-sub-systems uuuup to combat alert alpha-a-a.")
emote_see = list("beeps menacingly","whirrs threateningly","scans its immediate vicinity")
say_understood = list("Affirmative.", "Positive.")
say_cannot = list("Denied.", "Negative.")
say_maybe_target = list("Possible threat detected. Investigating.", "Motion detected.", "Investigating.")
say_got_target = list("Threat detected.", "New task: Remove threat.", "Threat removal engaged.", "Engaging target.")
say_threaten = list("This area is condemned by Vir System Authority. Please leave immediately. You have 20 seconds to comply.")
say_stand_down = list("Visual lost.", "Error: Target not found.")
say_escalate = list("Intruder is tresspassing. Maximum force authorized by Vir System Suthority.")
threaten_sound = 'modular_chomp/sound/mob/robots/DroneFreezeLong.ogg'
stand_down_sound = 'modular_chomp/sound/mob/robots/DroneLostTarget.ogg'
/datum/ai_holder/simple_mob/ranged/kiting/threatening/drone_aerostat
threaten_delay = 10 SECOND
threaten_timeout = 30 SECONDS

View File

@@ -0,0 +1,22 @@
/mob/living/simple_mob/mechanical/mecha/combat/gygax/aerostat
desc = "A Vir System Authority automated combat mech with an aged apperance."
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
say_list = /datum/say_list/gygax_aerostat
/datum/say_list/gygax_aerostat
speak = list("ALERT.","Hostile-ile-ile entities dee-twhoooo-wected.","Threat parameterszzzz- szzet.","Bring sub-sub-sub-systems uuuup to combat alert alpha-a-a.")
emote_see = list("beeps menacingly","whirrs threateningly","scans its immediate vicinity")
say_understood = list("Affirmative.", "Positive.")
say_cannot = list("Denied.", "Negative.")
say_maybe_target = list("Possible threat detected. Investigating.", "Motion detected.", "Investigating.")
say_got_target = list("Threat detected.", "New task: Remove threat.", "Threat removal engaged.", "Engaging target.")
say_threaten = list("This area is condemned by Vir System Authority. Please leave immediately. You have 20 seconds to comply.")
say_stand_down = list("Visual lost.", "Error: Target not found.")
say_escalate = list("Intruder is tresspassing. Maximum force authorized by Vir System Suthority.")
threaten_sound = 'modular_chomp/sound/mob/robots/GygaxIntruder4.ogg'
stand_down_sound = 'modular_chomp/sound/mob/robots/GygaxDanger.ogg'
/datum/ai_holder/simple_mob/ranged/kiting/threatening/drone_aerostat
threaten_delay = 20 SECOND
threaten_timeout = 30 SECONDS

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -4550,12 +4550,17 @@
#include "modular_chomp\code\modules\mob\living\carbon\human\species\station\protean\protean_species.dm" #include "modular_chomp\code\modules\mob\living\carbon\human\species\station\protean\protean_species.dm"
#include "modular_chomp\code\modules\mob\living\carbon\human\species\station\traits\negative.dm" #include "modular_chomp\code\modules\mob\living\carbon\human\species\station\traits\negative.dm"
#include "modular_chomp\code\modules\mob\living\carbon\human\species\station\traits\positive.dm" #include "modular_chomp\code\modules\mob\living\carbon\human\species\station\traits\positive.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\drone\drone_items.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\donteatbossmonsters.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\donteatbossmonsters.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\simple_mob.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\simple_mob.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\simple_mob_abilities.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\simple_mob_abilities.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\teppi.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\teppi.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\xenomorph.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\xenomorph.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\xenomorph_abilities.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\xenomorph_abilities.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\horror\Master.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\mechanical\disbot.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\mechanical\drones\combat_drone.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\gygax.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\bigdragon.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\bigdragon.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\greatwolf.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\greatwolf.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\vore.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\vore.dm"