Merge pull request #3178 from VOREStation/aro-sync

Polaris Sync
This commit is contained in:
Aronai Sieyes
2018-03-05 18:26:24 -05:00
committed by GitHub
131 changed files with 321018 additions and 5223 deletions
@@ -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)
+5
View File
@@ -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!"
+2 -2
View File
@@ -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."
+12
View File
@@ -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
*/
+1 -1
View File
@@ -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
+6
View File
@@ -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 -3
View File
@@ -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()
+1
View File
@@ -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."
+1 -1
View File
@@ -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
+6
View File
@@ -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
View File
@@ -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()
+10 -2
View File
@@ -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
-8
View File
@@ -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