mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-30 07:26:39 +01:00
@@ -7,9 +7,4 @@
|
||||
|
||||
/datum/gear/ears/headphones
|
||||
display_name = "headphones"
|
||||
path = /obj/item/clothing/ears/earmuffs/headphones
|
||||
/* VOREStation Edit - Make languages great again
|
||||
/datum/gear/ears/translator
|
||||
display_name = "universal translator, ear"
|
||||
path = /obj/item/device/universal_translator/ear
|
||||
cost = 8*/
|
||||
path = /obj/item/clothing/ears/earmuffs/headphones
|
||||
@@ -141,6 +141,14 @@
|
||||
display_name = "cowboy boots"
|
||||
path = /obj/item/clothing/shoes/boots/cowboy
|
||||
|
||||
/datum/gear/shoes/cowboy/classic
|
||||
display_name = "classic cowboy boots"
|
||||
path = /obj/item/clothing/shoes/boots/cowboy/classic
|
||||
|
||||
/datum/gear/shoes/cowboy/snakeskin
|
||||
display_name = "snakeskin cowboy boots"
|
||||
path = /obj/item/clothing/shoes/boots/cowboy/snakeskin
|
||||
|
||||
/datum/gear/shoes/jungle
|
||||
display_name = "jungle boots"
|
||||
path = /obj/item/clothing/shoes/boots/jungle
|
||||
|
||||
@@ -90,6 +90,14 @@
|
||||
display_name = "trenchcoat, grey"
|
||||
path = /obj/item/clothing/suit/storage/trench/grey
|
||||
|
||||
datum/gear/suit/duster
|
||||
display_name = "cowboy duster"
|
||||
path = /obj/item/clothing/suit/storage/duster
|
||||
|
||||
/datum/gear/suit/duster/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/suit/hazard_vest
|
||||
display_name = "hazard vest selection"
|
||||
path = /obj/item/clothing/suit/storage/hazardvest
|
||||
|
||||
@@ -448,4 +448,12 @@
|
||||
|
||||
/datum/gear/uniform/bathrobe
|
||||
display_name = "bathrobe"
|
||||
path = /obj/item/clothing/under/bathrobe
|
||||
path = /obj/item/clothing/under/bathrobe
|
||||
|
||||
/datum/gear/uniform/flamenco
|
||||
display_name = "flamenco dress"
|
||||
path = /obj/item/clothing/under/dress/flamenco
|
||||
|
||||
/datum/gear/uniform/westernbustle
|
||||
display_name = "western bustle"
|
||||
path = /obj/item/clothing/under/dress/westernbustle
|
||||
@@ -121,11 +121,6 @@
|
||||
slot = "implant"
|
||||
exploitable = 1
|
||||
|
||||
/datum/gear/utility/translator
|
||||
display_name = "universal translator"
|
||||
path = /obj/item/device/universal_translator
|
||||
cost = 8
|
||||
|
||||
/datum/gear/utility/pen
|
||||
display_name = "Fountain Pen"
|
||||
path = /obj/item/weapon/pen/fountain
|
||||
@@ -138,3 +133,12 @@
|
||||
/datum/gear/utility/wheelchair/color/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/utility/umbrella
|
||||
display_name = "Umbrella"
|
||||
path = /obj/item/weapon/melee/umbrella
|
||||
cost = 3
|
||||
|
||||
/datum/gear/utility/umbrella/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
@@ -292,6 +292,11 @@
|
||||
desc = "Because justice isn't going to dispense itself."
|
||||
icon_state = "cowboy_wide"
|
||||
|
||||
/obj/item/clothing/head/cowboy_hat/small
|
||||
name = "small cowboy hat"
|
||||
desc = "For the tiniest of cowboys."
|
||||
icon_state = "cowboy_small"
|
||||
|
||||
/obj/item/clothing/head/witchwig
|
||||
name = "witch costume wig"
|
||||
desc = "Eeeee~heheheheheheh!"
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
icon_state = "seal-secgen"
|
||||
|
||||
/obj/item/clothing/gloves/ring/seal/mason
|
||||
name = "masonic ring"
|
||||
name = "\improper Masonic ring"
|
||||
desc = "The Square and Compasses feature prominently on this Masonic ring."
|
||||
icon_state = "seal-masonic"
|
||||
|
||||
@@ -82,4 +82,4 @@
|
||||
|
||||
/obj/item/clothing/gloves/ring/seal/signet/proc/change_name(var/signet_name = "Unknown")
|
||||
name = "[signet_name]'s signet ring"
|
||||
desc = "A signet ring belonging to [signet_name], for when you're too sophisticated to sign letters."
|
||||
desc = "A signet ring belonging to [signet_name], for when you're too sophisticated to sign letters."
|
||||
|
||||
@@ -11,6 +11,18 @@
|
||||
desc = "Lacking a durasteel horse to ride."
|
||||
icon_state = "cowboy"
|
||||
|
||||
/obj/item/clothing/shoes/boots/cowboy/classic
|
||||
name = "classic cowboy boots"
|
||||
desc = "A classic looking pair of durable cowboy boots."
|
||||
icon_state = "cowboy_classic"
|
||||
item_state_slots = list(slot_r_hand_str = "leather", slot_l_hand_str = "leather")
|
||||
|
||||
/obj/item/clothing/shoes/boots/cowboy/snakeskin
|
||||
name = "snakeskin cowboy boots"
|
||||
desc = "A pair of cowboy boots made from python skin."
|
||||
icon_state = "cowboy_snakeskin"
|
||||
item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white")
|
||||
|
||||
/obj/item/clothing/shoes/boots/jackboots
|
||||
name = "jackboots"
|
||||
desc = "Standard-issue Security combat boots for combat scenarios or combat situations. All combat, all the time."
|
||||
|
||||
@@ -348,6 +348,14 @@ obj/item/clothing/suit/storage/toggle/peacoat
|
||||
addblends = "peacoat_a"
|
||||
item_state_slots = list(slot_r_hand_str = "peacoat", slot_l_hand_str = "peacoat")
|
||||
flags_inv = HIDEHOLSTER
|
||||
|
||||
/obj/item/clothing/suit/storage/duster
|
||||
name = "cowboy duster"
|
||||
desc = "A duster commonly seen on cowboys from Earth's late 1800's."
|
||||
icon_state = "duster"
|
||||
blood_overlay_type = "coat"
|
||||
allowed = list(/obj/item/weapon/tank/emergency/oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter)
|
||||
flags_inv = HIDEHOLSTER
|
||||
/*
|
||||
* stripper
|
||||
*/
|
||||
|
||||
@@ -41,6 +41,23 @@
|
||||
user.do_attack_animation(M)
|
||||
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //to prevent spam
|
||||
|
||||
// Sheriff Badge (toy)
|
||||
/obj/item/clothing/accessory/badge/sheriff
|
||||
name = "sheriff badge"
|
||||
desc = "This town ain't big enough for the two of us, pardner."
|
||||
icon_state = "sheriff"
|
||||
item_state = "goldbadge"
|
||||
|
||||
/obj/item/clothing/accessory/badge/sheriff/attack_self(mob/user as mob)
|
||||
user.visible_message("[user] shows their sheriff badge. There's a new sheriff in town!",\
|
||||
"You flash the sheriff badge to everyone around you!")
|
||||
|
||||
/obj/item/clothing/accessory/badge/sheriff/attack(mob/living/carbon/human/M, mob/living/user)
|
||||
if(isliving(user))
|
||||
user.visible_message("<span class='danger'>[user] invades [M]'s personal space, the sheriff badge into their face!.</span>","<span class='danger'>You invade [M]'s personal space, thrusting the sheriff badge into their face insistently.</span>")
|
||||
user.do_attack_animation(M)
|
||||
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //to prevent spam
|
||||
|
||||
//.Holobadges.
|
||||
/obj/item/clothing/accessory/badge/holo
|
||||
name = "holobadge"
|
||||
@@ -129,4 +146,4 @@
|
||||
new /obj/item/clothing/accessory/badge/holo/hos(src)
|
||||
new /obj/item/clothing/accessory/badge/holo/cord(src)
|
||||
..()
|
||||
return
|
||||
return
|
||||
|
||||
@@ -394,6 +394,16 @@
|
||||
desc = "A red dress that sweeps to the side."
|
||||
icon_state = "red_swept_dress"
|
||||
|
||||
/obj/item/clothing/under/dress/flamenco
|
||||
name = "flamenco dress"
|
||||
desc = "A Mexican flamenco dress."
|
||||
icon_state = "flamenco"
|
||||
|
||||
/obj/item/clothing/under/dress/westernbustle
|
||||
name = "western bustle"
|
||||
desc = "A western bustle dress from Earth's late 1800's."
|
||||
icon_state = "westernbustle"
|
||||
|
||||
/*
|
||||
* wedding stuff
|
||||
*/
|
||||
|
||||
@@ -145,7 +145,7 @@ proc/spawn_money(var/sum, spawnloc, mob/living/carbon/human/human_user as mob)
|
||||
return
|
||||
|
||||
/obj/item/weapon/spacecash/ewallet
|
||||
name = "Charge card"
|
||||
name = "charge card"
|
||||
icon_state = "efundcard"
|
||||
desc = "A card that holds an amount of money."
|
||||
var/owner_name = "" //So the ATM can set it so the EFTPOS can put a valid name on transactions.
|
||||
|
||||
@@ -68,6 +68,18 @@
|
||||
name = "stack of wood"
|
||||
type_to_spawn = /obj/item/stack/material/wood
|
||||
|
||||
/obj/fiftyspawner/sifwood
|
||||
name = "stack of alien wood"
|
||||
type_to_spawn = /obj/item/stack/material/wood/sif
|
||||
|
||||
/obj/fiftyspawner/log
|
||||
name = "stack of logs"
|
||||
type_to_spawn = /obj/item/stack/material/log
|
||||
|
||||
/obj/fiftyspawner/log
|
||||
name = "stack of alien logs"
|
||||
type_to_spawn = /obj/item/stack/material/log/sif
|
||||
|
||||
/obj/fiftyspawner/cloth
|
||||
name = "stack of cloth"
|
||||
type_to_spawn = /obj/item/stack/material/cloth
|
||||
|
||||
@@ -667,6 +667,12 @@ var/list/name_to_material
|
||||
icon_base = "dungeon"
|
||||
icon_colour = "#FFFFFF"
|
||||
|
||||
/material/alienalloy/bedrock
|
||||
name = "bedrock"
|
||||
display_name = "impassable rock"
|
||||
icon_base = "rock"
|
||||
icon_colour = "#FFFFFF"
|
||||
|
||||
/material/alienalloy/alium
|
||||
name = "alium"
|
||||
display_name = "alien"
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
var/supported = 0
|
||||
var/active = 0
|
||||
var/list/resource_field = list()
|
||||
var/obj/item/device/radio/intercom/faultreporter = new /obj/item/device/radio/intercom{channels=list("Supply")}(null)
|
||||
|
||||
var/ore_types = list(
|
||||
"hematite" = /obj/item/weapon/ore/iron,
|
||||
@@ -60,7 +61,7 @@
|
||||
if(!active) return
|
||||
|
||||
if(!anchored || !use_cell_power())
|
||||
system_error("system configuration or charge error")
|
||||
system_error("System configuration or charge error.")
|
||||
return
|
||||
|
||||
if(need_update_field)
|
||||
@@ -85,7 +86,10 @@
|
||||
harvesting.has_resources = 0
|
||||
harvesting.resources = null
|
||||
resource_field -= harvesting
|
||||
harvesting = pick(resource_field)
|
||||
if(resource_field.len) // runtime protection
|
||||
harvesting = pick(resource_field)
|
||||
else
|
||||
harvesting = null
|
||||
|
||||
if(!harvesting) return
|
||||
|
||||
@@ -95,7 +99,7 @@
|
||||
for(var/metal in ore_types)
|
||||
|
||||
if(contents.len >= capacity)
|
||||
system_error("insufficient storage space")
|
||||
system_error("Insufficient storage space.")
|
||||
active = 0
|
||||
need_player_check = 1
|
||||
update_icon()
|
||||
@@ -131,12 +135,19 @@
|
||||
active = 0
|
||||
need_player_check = 1
|
||||
update_icon()
|
||||
system_error("Resources depleted.")
|
||||
|
||||
/obj/machinery/mining/drill/attack_ai(var/mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/mining/drill/attackby(obj/item/O as obj, mob/user as mob)
|
||||
if(!active)
|
||||
if(istype(O, /obj/item/device/multitool))
|
||||
var/newtag = text2num(sanitizeSafe(input(user, "Enter new ID number or leave empty to cancel.", "Assign ID number") as text, 4))
|
||||
if(newtag)
|
||||
name = "[initial(name)] #[newtag]"
|
||||
to_chat(user, "<span class='notice'>You changed the drill ID to: [newtag]</span>")
|
||||
return
|
||||
if(default_deconstruction_screwdriver(user, O))
|
||||
return
|
||||
if(default_deconstruction_crowbar(user, O))
|
||||
@@ -234,6 +245,7 @@
|
||||
|
||||
if(error)
|
||||
src.visible_message("<span class='notice'>\The [src] flashes a '[error]' warning.</span>")
|
||||
faultreporter.autosay(error, src.name, "Supply")
|
||||
need_player_check = 1
|
||||
active = 0
|
||||
update_icon()
|
||||
|
||||
@@ -5,6 +5,7 @@ var/list/mining_overlay_cache = list()
|
||||
name = "impassable rock"
|
||||
icon = 'icons/turf/walls.dmi'
|
||||
icon_state = "rock-dark"
|
||||
density = 1
|
||||
|
||||
/turf/simulated/mineral //wall piece
|
||||
name = "rock"
|
||||
|
||||
@@ -1557,13 +1557,13 @@
|
||||
return species.fire_icon_state
|
||||
|
||||
// Called by job_controller. Makes drones start with a permit, might be useful for other people later too.
|
||||
/mob/living/carbon/human/equip_post_job() //Drone Permit moved to equip_survival_gear()
|
||||
/mob/living/carbon/human/equip_post_job()
|
||||
var/braintype = get_FBP_type()
|
||||
if(braintype == FBP_DRONE)
|
||||
var/turf/T = get_turf(src)
|
||||
var/obj/item/clothing/accessory/permit/drone/permit = new(T)
|
||||
permit.set_name(real_name)
|
||||
equip_to_appropriate_slot(permit) // If for some reason it can't find room, it'll still be on the floor.
|
||||
equip_to_slot_or_del(permit, slot_in_backpack)
|
||||
|
||||
/mob/living/carbon/human/proc/update_icon_special(var/mutable_appearance/ma, var/update_icons = TRUE) //For things such as teshari hiding and whatnot.
|
||||
if(hiding) // Hiding? Carry on.
|
||||
@@ -1575,4 +1575,4 @@
|
||||
//Can put special species icon update proc calls here, if any are ever invented.
|
||||
|
||||
if(update_icons)
|
||||
update_icons()
|
||||
update_icons()
|
||||
|
||||
@@ -17,31 +17,23 @@ core parts. The key difference is that when we generate overlays we do not gener
|
||||
versions. Instead, we generate both and store them in two fixed-length lists, both using the same list-index
|
||||
(The indexes are in update_icons.dm): Each list for humans is (at the time of writing) of length 19.
|
||||
This will hopefully be reduced as the system is refined.
|
||||
|
||||
var/overlays_lying[19] //For the lying down stance
|
||||
var/overlays_standing[19] //For the standing stance
|
||||
|
||||
When we call update_icons, the 'lying' variable is checked and then the appropriate list is assigned to our overlays!
|
||||
That in itself uses a tiny bit more memory (no more than all the ridiculous lists the game has already mind you).
|
||||
|
||||
On the other-hand, it should be very CPU cheap in comparison to the old system.
|
||||
In the old system, we updated all our overlays every life() call, even if we were standing still inside a crate!
|
||||
or dead!. 25ish overlays, all generated from scratch every second for every xeno/human/monkey and then applied.
|
||||
More often than not update_clothing was being called a few times in addition to that! CPU was not the only issue,
|
||||
all those icons had to be sent to every client. So really the cost was extremely cumulative. To the point where
|
||||
update_clothing would frequently appear in the top 10 most CPU intensive procs during profiling.
|
||||
|
||||
Another feature of this new system is that our lists are indexed. This means we can update specific overlays!
|
||||
So we only regenerate icons when we need them to be updated! This is the main saving for this system.
|
||||
|
||||
In practice this means that:
|
||||
everytime you fall over, we just switch between precompiled lists. Which is fast and cheap.
|
||||
Everytime you do something minor like take a pen out of your pocket, we only update the in-hand overlay
|
||||
etc...
|
||||
|
||||
|
||||
There are several things that need to be remembered:
|
||||
|
||||
> Whenever we do something that should cause an overlay to update (which doesn't use standard procs
|
||||
( i.e. you do something like l_hand = /obj/item/something new(src) )
|
||||
You will need to call the relevant update_inv_* proc:
|
||||
@@ -61,12 +53,9 @@ There are several things that need to be remembered:
|
||||
update_inv_back()
|
||||
update_inv_handcuffed()
|
||||
update_inv_wear_mask()
|
||||
|
||||
All of these are named after the variable they update from. They are defined at the mob/ level like
|
||||
update_clothing was, so you won't cause undefined proc runtimes with usr.update_inv_wear_id() if the usr is a
|
||||
slime etc. Instead, it'll just return without doing any work. So no harm in calling it for slimes and such.
|
||||
|
||||
|
||||
> There are also these special cases:
|
||||
update_mutations() //handles updating your appearance for certain mutations. e.g TK head-glows
|
||||
UpdateDamageIcon() //handles damage overlays for brute/burn damage //(will rename this when I geta round to it)
|
||||
@@ -74,7 +63,6 @@ There are several things that need to be remembered:
|
||||
update_hair() //Handles updating your hair overlay (used to be update_face, but mouth and
|
||||
...eyes were merged into update_body)
|
||||
update_targeted() // Updates the target overlay when someone points a gun at you
|
||||
|
||||
> All of these procs update our overlays_lying and overlays_standing, and then call update_icons() by default.
|
||||
If you wish to update several overlays at once, you can set the argument to 0 to disable the update and call
|
||||
it manually:
|
||||
@@ -82,25 +70,20 @@ There are several things that need to be remembered:
|
||||
update_inv_head(0)
|
||||
update_inv_l_hand(0)
|
||||
update_inv_r_hand() //<---calls update_icons()
|
||||
|
||||
or equivillantly:
|
||||
update_inv_head(0)
|
||||
update_inv_l_hand(0)
|
||||
update_inv_r_hand(0)
|
||||
update_icons()
|
||||
|
||||
> If you need to update all overlays you can use regenerate_icons(). it works exactly like update_clothing used to.
|
||||
|
||||
> I reimplimented an old unused variable which was in the code called (coincidentally) var/update_icon
|
||||
It can be used as another method of triggering regenerate_icons(). It's basically a flag that when set to non-zero
|
||||
will call regenerate_icons() at the next life() call and then reset itself to 0.
|
||||
The idea behind it is icons are regenerated only once, even if multiple events requested it.
|
||||
|
||||
This system is confusing and is still a WIP. It's primary goal is speeding up the controls of the game whilst
|
||||
reducing processing costs. So please bear with me while I iron out the kinks. It will be worth it, I promise.
|
||||
If I can eventually free var/lying stuff from the life() process altogether, stuns/death/status stuff
|
||||
will become less affected by lag-spikes and will be instantaneous! :3
|
||||
|
||||
If you have any questions/constructive-comments/bugs-to-report/or have a massivly devestated butt...
|
||||
Please contact me on #coderbus IRC. ~Carn x
|
||||
*/
|
||||
@@ -423,24 +406,20 @@ var/global/list/damage_icon_parts = list()
|
||||
var/icon/temp = part.get_icon(skeleton)
|
||||
//That part makes left and right legs drawn topmost and lowermost when human looks WEST or EAST
|
||||
//And no change in rendering for other parts (they icon_position is 0, so goes to 'else' part)
|
||||
if(part.icon_position == RIGHT)
|
||||
if(part.icon_position & (LEFT | RIGHT))
|
||||
var/icon/temp2 = new('icons/mob/human.dmi',"blank")
|
||||
var/icon/temp3 = new('icons/mob/human.dmi',"blank")
|
||||
temp2.Insert(new/icon(temp,dir=NORTH),dir=NORTH)
|
||||
temp2.Insert(new/icon(temp,dir=SOUTH),dir=SOUTH)
|
||||
temp2.Insert(new/icon(temp,dir=EAST),dir=EAST)
|
||||
if(!(part.icon_position & LEFT))
|
||||
temp2.Insert(new/icon(temp,dir=EAST),dir=EAST)
|
||||
if(!(part.icon_position & RIGHT))
|
||||
temp2.Insert(new/icon(temp,dir=WEST),dir=WEST)
|
||||
base_icon.Blend(temp2, ICON_OVERLAY)
|
||||
temp3.Insert(new/icon(temp,dir=WEST),dir=WEST)
|
||||
base_icon.Blend(temp3, ICON_UNDERLAY)
|
||||
else if(part.icon_position == LEFT)
|
||||
var/icon/temp2 = new('icons/mob/human.dmi',"blank")
|
||||
var/icon/temp3 = new('icons/mob/human.dmi',"blank")
|
||||
temp2.Insert(new/icon(temp,dir=NORTH),dir=NORTH)
|
||||
temp2.Insert(new/icon(temp,dir=SOUTH),dir=SOUTH)
|
||||
temp2.Insert(new/icon(temp,dir=WEST),dir=WEST)
|
||||
base_icon.Blend(temp2, ICON_OVERLAY)
|
||||
temp3.Insert(new/icon(temp,dir=EAST),dir=EAST)
|
||||
base_icon.Blend(temp3, ICON_UNDERLAY)
|
||||
if(part.icon_position & LEFT)
|
||||
temp2.Insert(new/icon(temp,dir=EAST),dir=EAST)
|
||||
if(part.icon_position & RIGHT)
|
||||
temp2.Insert(new/icon(temp,dir=WEST),dir=WEST)
|
||||
base_icon.Blend(temp2, ICON_UNDERLAY)
|
||||
else if(part.icon_position & UNDER)
|
||||
base_icon.Blend(temp, ICON_UNDERLAY)
|
||||
else
|
||||
@@ -947,7 +926,7 @@ var/global/list/damage_icon_parts = list()
|
||||
else
|
||||
overlays_standing[SHOES_LAYER] = null
|
||||
overlays_standing[SHOES_LAYER_ALT] = null
|
||||
if(update_icons) update_icons()
|
||||
if(update_icons) update_icons_layers()
|
||||
|
||||
/mob/living/carbon/human/update_inv_s_store(var/update_icons=1)
|
||||
if(QDESTROYING(src))
|
||||
@@ -1612,4 +1591,4 @@ var/global/list/damage_icon_parts = list()
|
||||
#undef TARGETED_LAYER
|
||||
#undef FIRE_LAYER
|
||||
#undef WATER_LAYER
|
||||
#undef TOTAL_LAYERS
|
||||
#undef TOTAL_LAYERS
|
||||
@@ -5,7 +5,7 @@
|
||||
// Default hivebot is melee, and a bit more meaty, so it can meatshield for their ranged friends.
|
||||
/mob/living/simple_animal/hostile/hivebot
|
||||
name = "hivebot"
|
||||
desc = "A robot. It appears to be somewhat reslient, but lacking a true weapon."
|
||||
desc = "A robot. It appears to be somewhat resilient, but lacks a true weapon."
|
||||
icon = 'icons/mob/hivebot.dmi'
|
||||
icon_state = "basic"
|
||||
icon_living = "basic"
|
||||
@@ -45,10 +45,10 @@
|
||||
"No threats found.",
|
||||
"Error: No targets found."
|
||||
)
|
||||
emote_hear = list("humms ominously", "whirrs softly", "grinds a gear")
|
||||
emote_hear = list("hums ominously", "whirrs softly", "grinds a gear")
|
||||
emote_see = list("looks around the area", "turns from side to side")
|
||||
say_understood = list("Affirmative.", "Positive")
|
||||
say_cannot = list("Denied.", "Negative")
|
||||
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.")
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
// Melee like the base type, but more fragile.
|
||||
/mob/living/simple_animal/hostile/hivebot/swarm
|
||||
name = "swarm hivebot"
|
||||
desc = "A robot. It looks fragile and weak"
|
||||
desc = "A robot. It looks fragile and weak"
|
||||
maxHealth = 1 LASERS_TO_KILL
|
||||
health = 1 LASERS_TO_KILL
|
||||
melee_damage_lower = 3
|
||||
@@ -86,7 +86,7 @@
|
||||
// Shoots EMPs, to screw over other robots.
|
||||
/mob/living/simple_animal/hostile/hivebot/range/ion
|
||||
name = "engineering hivebot"
|
||||
desc = "A robot. It has a tool which emits focused electromagnetic pulses, which are deadly to other synthetic adverseries."
|
||||
desc = "A robot. It has a tool which emits focused electromagnetic pulses, which are deadly to synthetic adverseries."
|
||||
projectiletype = /obj/item/projectile/ion/small //VOREStation Edit
|
||||
projectilesound = 'sound/weapons/Laser.ogg'
|
||||
icon_living = "engi"
|
||||
@@ -97,7 +97,7 @@
|
||||
// Shoots deadly lasers.
|
||||
/mob/living/simple_animal/hostile/hivebot/range/laser
|
||||
name = "laser hivebot"
|
||||
desc = "A robot. It has an energy weapon."
|
||||
desc = "A robot. It has an energy weapon."
|
||||
projectiletype = /obj/item/projectile/beam/blue
|
||||
projectilesound = 'sound/weapons/Laser.ogg'
|
||||
maxHealth = 2 LASERS_TO_KILL
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//Corgi
|
||||
/mob/living/simple_animal/corgi
|
||||
name = "\improper corgi"
|
||||
name = "corgi"
|
||||
real_name = "corgi"
|
||||
desc = "It's a corgi."
|
||||
intelligence_level = SA_ANIMAL
|
||||
@@ -96,8 +96,8 @@
|
||||
sleep(1)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/corgi
|
||||
name = "Corgi meat"
|
||||
desc = "Tastes like... well you know..."
|
||||
name = "corgi meat"
|
||||
desc = "Tastes like... well, you know..."
|
||||
|
||||
/mob/living/simple_animal/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
|
||||
if(istype(O, /obj/item/weapon/newspaper))
|
||||
@@ -137,7 +137,7 @@
|
||||
|
||||
|
||||
/mob/living/simple_animal/corgi/puppy
|
||||
name = "\improper corgi puppy"
|
||||
name = "corgi puppy"
|
||||
real_name = "corgi"
|
||||
desc = "It's a corgi puppy."
|
||||
icon_state = "puppy"
|
||||
@@ -170,7 +170,7 @@
|
||||
//Lisa already has a cute bow!
|
||||
/mob/living/simple_animal/corgi/Lisa/Topic(href, href_list)
|
||||
if(href_list["remove_inv"] || href_list["add_inv"])
|
||||
usr << "<font color='red'>[src] already has a cute bow!</font>"
|
||||
to_chat(usr, "<font color='red'>[src] already has a cute bow!</font>")
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -208,7 +208,7 @@
|
||||
|
||||
//Technically this should be like, its own file or something or a subset of dog but whatever. Not a coder.
|
||||
/mob/living/simple_animal/corgi/tamaskan
|
||||
name = "\improper tamaskan"
|
||||
name = "tamaskan"
|
||||
real_name = "tamaskan"
|
||||
desc = "It's a tamaskan."
|
||||
icon_state = "tamaskan"
|
||||
|
||||
@@ -78,6 +78,7 @@ Nurse Family
|
||||
var/atom/cocoon_target
|
||||
var/egg_inject_chance = 5
|
||||
|
||||
// VOREStation Edit - Keep Nurse Hat Spiders
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse/medical
|
||||
desc = "Furry and beige, it makes you shudder to look at it. This one has brilliant green eyes and a tiny nurse hat."
|
||||
icon_state = "nursemed"
|
||||
@@ -88,7 +89,7 @@ Nurse Family
|
||||
melee_damage_upper = 16
|
||||
poison_type = "tramadol"
|
||||
poison_chance = 15
|
||||
|
||||
// VOREStation Edit End
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse/queen
|
||||
desc = "Absolutely gigantic, this creature is horror itself."
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
parent_organ = BP_TORSO
|
||||
clone_source = TRUE
|
||||
|
||||
/obj/item/orgam/internal/brain/slime/is_open_container()
|
||||
/obj/item/organ/internal/brain/slime/is_open_container()
|
||||
return 1
|
||||
|
||||
/obj/item/organ/internal/brain/golem
|
||||
|
||||
@@ -306,6 +306,12 @@
|
||||
owner.custom_pain("A jolt of pain surges through your [name]!",1)
|
||||
owner.eye_blurry += 20 //Specific level 2 'feature
|
||||
|
||||
/obj/item/organ/external/head/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, /obj/item/toy/plushie) || istype(I, /obj/item/organ/external/head))
|
||||
user.visible_message("<span class='notice'>[user] makes \the [I] kiss \the [src]!.</span>", \
|
||||
"<span class='notice'>You make \the [I] kiss \the [src]!.</span>")
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/external/head/skrell
|
||||
eye_icon = "skrell_eyes_s"
|
||||
|
||||
|
||||
+15
-15
@@ -296,33 +296,33 @@ datum/weather/sif
|
||||
flight_failure_modifier = 15
|
||||
transition_chances = list(
|
||||
WEATHER_RAIN = 45,
|
||||
WEATHER_STORM = 10,
|
||||
WEATHER_HAIL = 40,
|
||||
WEATHER_STORM = 40,
|
||||
WEATHER_HAIL = 10,
|
||||
WEATHER_OVERCAST = 5
|
||||
)
|
||||
|
||||
/datum/weather/sif/hail/process_effects()
|
||||
for(var/mob/living/L in living_mob_list)
|
||||
if(L.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(L)
|
||||
for(var/mob/living/carbon/human/H in living_mob_list)
|
||||
if(H.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(H)
|
||||
if(!T.outdoors)
|
||||
continue // They're indoors, so no need to pelt them with ice.
|
||||
|
||||
// If they have an open umbrella, it'll guard from rain
|
||||
if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella))
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||
if(istype(H.get_active_hand(), /obj/item/weapon/melee/umbrella))
|
||||
var/obj/item/weapon/melee/umbrella/U = H.get_active_hand()
|
||||
if(U.open)
|
||||
to_chat(L, "<span class='notice'>Hail patters gently onto your umbrella.</span>")
|
||||
to_chat(H, "<span class='notice'>Hail patters gently onto your umbrella.</span>")
|
||||
continue
|
||||
else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand()
|
||||
else if(istype(H.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
|
||||
var/obj/item/weapon/melee/umbrella/U = H.get_inactive_hand()
|
||||
if(U.open)
|
||||
to_chat(L, "<span class='notice'>Hail patters gently onto your umbrella.</span>")
|
||||
to_chat(H, "<span class='notice'>Hail patters gently onto your umbrella.</span>")
|
||||
continue
|
||||
|
||||
var/target_zone = pick(BP_ALL)
|
||||
var/amount_blocked = L.run_armor_check(target_zone, "melee")
|
||||
var/amount_soaked = L.get_armor_soak(target_zone, "melee")
|
||||
var/amount_blocked = H.run_armor_check(target_zone, "melee")
|
||||
var/amount_soaked = H.get_armor_soak(target_zone, "melee")
|
||||
|
||||
if(amount_blocked >= 100)
|
||||
continue // No need to apply damage.
|
||||
@@ -330,8 +330,8 @@ datum/weather/sif
|
||||
if(amount_soaked >= 10)
|
||||
continue // No need to apply damage.
|
||||
|
||||
L.apply_damage(rand(5, 10), BRUTE, target_zone, amount_blocked, amount_soaked, used_weapon = "hail")
|
||||
to_chat(L, "<span class='warning'>The hail raining down on you [L.can_feel_pain() ? "hurts" : "damages you"]!</span>")
|
||||
H.apply_damage(rand(5, 10), BRUTE, target_zone, amount_blocked, amount_soaked, used_weapon = "hail")
|
||||
to_chat(H, "<span class='warning'>The hail smacks into you!</span>")
|
||||
|
||||
/datum/weather/sif/blood_moon
|
||||
name = "blood moon"
|
||||
|
||||
@@ -1809,11 +1809,19 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user as mob)
|
||||
icon_state = "monkeycube"
|
||||
desc = "Just add water!"
|
||||
user << "You unwrap the cube."
|
||||
to_chat(user, "You unwrap the cube.")
|
||||
wrapped = 0
|
||||
flags |= OPENCONTAINER
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/On_Consume(var/mob/M)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.visible_message("<span class='warning'>A screeching creature bursts out of [M]'s chest!</span>")
|
||||
var/obj/item/organ/external/organ = H.get_organ(BP_TORSO)
|
||||
organ.take_damage(50, 0, 0, "Animal escaping the ribcage")
|
||||
Expand()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/on_reagent_change()
|
||||
if(reagents.has_reagent("water"))
|
||||
Expand()
|
||||
|
||||
@@ -1790,9 +1790,17 @@ CIRCUITS BELOW
|
||||
name = "handheld translator"
|
||||
id = "translator"
|
||||
req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 2000)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 3000)
|
||||
build_path = /obj/item/device/universal_translator
|
||||
sort_string = "HABBA"
|
||||
sort_string = "HABQA"
|
||||
|
||||
/datum/design/item/ear_translator
|
||||
name = "earpiece translator"
|
||||
id = "ear_translator"
|
||||
req_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 5) //It's been hella miniaturized.
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 2000, "gold" = 1000)
|
||||
build_path = /obj/item/device/universal_translator/ear
|
||||
sort_string = "HABQB"
|
||||
|
||||
/* Uncomment if someone makes these buildable
|
||||
/datum/design/circuit/general_alert
|
||||
|
||||
@@ -92,14 +92,6 @@
|
||||
build_path = /obj/item/device/perfect_tele
|
||||
sort_string = "HABAF"
|
||||
|
||||
/datum/design/item/translator/ear
|
||||
name = "handheld translator (ear)"
|
||||
id = "translator_ear"
|
||||
req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 2000)
|
||||
build_path = /obj/item/device/universal_translator/ear
|
||||
sort_string = "HABBB"
|
||||
|
||||
/datum/design/item/nif
|
||||
name = "nanite implant framework"
|
||||
id = "nif"
|
||||
|
||||
@@ -19,6 +19,24 @@
|
||||
else
|
||||
set_light(3, 3, "#33CC33")
|
||||
|
||||
/obj/machinery/crystal/ice //slightly more thematic crystals
|
||||
name = "ice crystal"
|
||||
desc = "A large crystalline ice formation."
|
||||
icon_state = "icecrystal2"
|
||||
|
||||
/obj/machinery/crystal/ice/New()
|
||||
if(prob(10))
|
||||
icon_state = "crystal"
|
||||
set_light(5, 5, "#33CC33")
|
||||
if(prob(10))
|
||||
icon_state = "crystal2"
|
||||
set_light(5, 5, "#CC00CC")
|
||||
if(prob(30))
|
||||
icon_state = "icecrystal1"
|
||||
set_light(5, 5, "#C4FFFF")
|
||||
else
|
||||
set_light(5, 5, "#C4FFFF")
|
||||
|
||||
//large finds
|
||||
/*
|
||||
obj/machinery/syndicate_beacon
|
||||
|
||||
Reference in New Issue
Block a user