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_NOMF "Shadekin (Devour)"
#define SMITE_REDSPACE_ABDUCT "Redspace Abduction"
#define SMITE_AD_SPAM "Ad Spam"
#define SMITE_AUTOSAVE "10 Second Autosave"
#define SMITE_AUTOSAVE_WIDE "10 Second Autosave (AoE)"

View File

@@ -68,4 +68,4 @@
/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
var/is_hacking = 0
var/max_known_targets
<<<<<<< HEAD
=======
var/hackspeed = 1
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
>>>>>>> c28095b90b... Merge pull request #14148 from KillianKirilenko/kk-hacktool
var/in_hack_mode = 0
var/list/known_targets
var/list/supported_types
var/datum/tgui_state/default/must_hack/hack_state
<<<<<<< HEAD
=======
/obj/item/device/multitool/hacktool/override
hackspeed = 0.75
max_level = 5
full_override = TRUE
>>>>>>> c28095b90b... Merge pull request #14148 from KillianKirilenko/kk-hacktool
/obj/item/device/multitool/hacktool/New()
..()
@@ -53,7 +47,23 @@
return 0
// 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
/obj/item/device/multitool/hacktool/proc/attempt_hack(var/mob/user, var/atom/target)
@@ -75,14 +85,9 @@
return 1
to_chat(user, "<span class='notice'>You begin hacking \the [D]...</span>")
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
// 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))
>>>>>>> c28095b90b... Merge pull request #14148 from KillianKirilenko/kk-hacktool
is_hacking = 0
if(hack_result && in_hack_mode)

View File

@@ -60,3 +60,8 @@
name = "\improper Prepackaged Meal Tray"
icon = 'icons/obj/trash_vr.dmi'
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))
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)
if(!smite_choice)
@@ -128,6 +128,10 @@
if(SMITE_AUTOSAVE_WIDE)
fake_autosave(target, src, TRUE)
if(SMITE_AD_SPAM)
if(target.client)
create_fake_ad_popup_multiple(/obj/screen/popup/default, 15)
else
return //Injection? Don't print any messages.

View File

@@ -122,6 +122,21 @@
"red emblem" = /obj/item/clothing/accessory/altevian_badge/aquila/hydrogen)
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
/datum/gear/suit/taur/drake_cloak
display_name = "drake cloak (Drake-taur)"

View File

@@ -68,7 +68,8 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
name = strangername
species = "[H.custom_species ? H.custom_species : H.species.name]"
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))
var/mob/living/silicon/ai/A = C.mob

View File

@@ -147,3 +147,30 @@
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"
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/ratfruitcake = 15,
/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,
/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/ratfruitcake = 8,
/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
nutriment_amt = 2
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()
/* 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()
var/loot = rand(1, 100)
switch(loot)
@@ -143,6 +145,9 @@
if(100)
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)
if(!locked)
return

View File

@@ -1,2 +1,173 @@
/obj/structure/closet/crate/secure/loot
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()
if(!istype(held) || is_robot_module(held))
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
var/obj/item/weapon/holder/holder = held
if(istype(holder) && src == holder.held_mob)
@@ -75,11 +81,19 @@
to_chat(user, "<span class='warning'>You cannot remove \the [src]'s [target_slot.name].</span>")
return
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))
visible_message("<span class='danger'>\The [user] is trying to put \a [held] in \the [src]'s mouth!</span>")
else
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))
return
@@ -95,6 +109,14 @@
if(stripping)
add_attack_logs(user,src,"Removed equipment from slot [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))
equip_to_slot_if_possible(held, text2num(slot_to_strip), 0, 1, 1)
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/extinguisher(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
/obj/item/weapon/robot_module/robot/standard

View File

@@ -221,7 +221,8 @@
"Otieborg" = "oties",
"Secborg model V-3" = "SecVale", //CHOMPEdit
"Cat" = "vixsec", //CHOMPEdit
"Drake" = "drakesec"
"Drake" = "drakesec",
"Secborg model V-4" = "secraptor"//CHOMPEdit
)
channels = list("Security" = 1)
networks = list(NETWORK_SECURITY)
@@ -307,7 +308,8 @@
"Borgi" = "borgi-medi",
"Mediborg model V-3" = "vale2", //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)
@@ -638,7 +640,8 @@
"SciHound" = "scihound",
"SciHoundDark" = "scihounddark",
"Cat" = "vixsci", //CHOMPEdit
"Drake" = "drakesci"
"Drake" = "drakesci",
"Sciborg model V-4" = "sciraptor"//CHOMPEdit
)
channels = list("Science" = 1)
pto_type = PTO_SCIENCE

View File

@@ -196,6 +196,8 @@
icon = 'modular_chomp/icons/mob/widerobot_ch.dmi'
else if(icontype == "Cat" || icontype == "Cat Mining" || icontype == "Cat Cargo") // CHOMPEdit
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
icon = wideborg_dept
return

View File

@@ -9,7 +9,7 @@
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
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.")
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")
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
/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."
icon_state = "plasma_cyber_horror"
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)
maxHealth = 75
@@ -67,6 +89,9 @@
var/poison_per_bite = 3
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)
if(isliving(A))
var/mob/living/L = A
@@ -80,12 +105,15 @@
if(prob(poison_chance))
to_chat(L, "<span class='warning'>You feel nanites digging into your skin!</span>")
L.reagents.add_reagent(poison_type, poison_per_bite)
// Mech Shredder
/mob/living/simple_mob/mechanical/cyber_horror/ling_cyber_horror
name = "Nanite abomination"
desc = "What was once something, now an exposed shell with lashing cables."
icon_state = "ling_cyber_horror"
icon_dead = "ling_cyber_horror_dead"
say_list_type = /datum/say_list/cyber_horror/ling
maxHealth = 250
health = 250
@@ -96,13 +124,13 @@
base_attack_cooldown = 2.5
attack_sharp = 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")
// Slow as all sin
movement_cooldown = 9
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.
armor = list(melee = 75, bullet = -10, laser = -25, bio = 100, rad = 100)
@@ -116,7 +144,10 @@
special_attack_cooldown = 60 SECONDS
// How long the leap telegraphing is.
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.
/mob/living/simple_mob/mechanical/cyber_horror/ling_cyber_horror/apply_bonus_melee_damage(atom/A, damage_amount)
@@ -126,7 +157,6 @@
return damage_amount * 2.5
return ..()
// The actual leaping attack.
/mob/living/simple_mob/mechanical/cyber_horror/ling_cyber_horror/do_special_attack(atom/A)
set waitfor = FALSE
@@ -177,24 +207,34 @@
. = TRUE
set_AI_busy(FALSE)
//Slightly more durable fodder
/mob/living/simple_mob/mechanical/cyber_horror/vox
name = "Vox shambles"
desc = "Once a Vox now torn and changed, peices of a Durand has been grafted onto it."
icon_state = "vox_cyber_horror"
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)
ai_holder_type = /datum/ai_holder/simple_mob/melee
// Hit and run mob
ai_holder_type = /datum/ai_holder/simple_mob/melee/cyber_horror
/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
name = "Tajaran cyber stalker"
desc = "A mangled mess of machine and fur, light seems to bounce off it."
icon_state = "tajaran_cyber_horror"
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_bonus_damage = 30
@@ -202,6 +242,9 @@
var/cloak_cooldown = 10 SECONDS
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()
if(cloaked)
return
@@ -256,6 +299,7 @@
. = ..()
break_cloak()
//Arcing Ranged Mob
/mob/living/simple_mob/mechanical/cyber_horror/grey
name = "Twisted cyber horror"
@@ -264,13 +308,18 @@
icon_dead = "grey_cyber_horror_dead"
maxHealth = 100
health = 100
say_list_type = /datum/say_list/cyber_horror/grey
projectiletype = /obj/item/projectile/arc/blue_energy
projectilesound = 'sound/weapons/Laser.ogg'
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting
projectilesound = 'modular_chomp/sound/weapons/plasmaNEW.ogg'
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/cyber_horror
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
/mob/living/simple_mob/mechanical/cyber_horror/corgi
name = "Malformed Corgi"
@@ -279,14 +328,19 @@
icon_dead = "corgi_cyber_horror_dead"
maxHealth = 50
health = 50
say_list_type = /datum/say_list/cyber_horror/corgi
base_attack_cooldown = 4
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'
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
/mob/living/simple_mob/mechanical/cyber_horror/cat_cyber_horror
name = "Twisted cat"
@@ -294,6 +348,7 @@
icon_state = "cat_cyber_horror"
icon_dead = "cat_cyber_horror_dead"
say_list_type = /datum/say_list/cyber_horror/cat
maxHealth = 40
health = 40
@@ -310,6 +365,7 @@
base_attack_cooldown = 2.5
attack_sharp = 1
attack_edge = 1
attack_sound = 'sound/weapons/bite.ogg'
attacktext = list("jabbed", "injected")
@@ -318,6 +374,9 @@
var/poison_per_bite = 3
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)
if(isliving(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\traits\negative.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\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\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_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\greatwolf.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\vore.dm"