dogborg tweaks, so fuggin DUMB (#5202)
* apparantly you need shuttles, who knew * some tweaks Sprites need adjustments Janidogs need adjustments in UI * Hm, maybe a fix. Revert attempt to rename sprites * [MIRROR] Better Chat Squashing (#5193) * Merge pull request #35058 from uraniummeltdown/chatsquash Better Chat Squashing * Better Chat Squashing * [MIRROR] Sexy Solar Sprites (#5191) * replaced solar panel sprites with better ones * Sexy Solar Sprites * Automatic changelog generation for PR #5191 [ci skip] * [MIRROR] New Coffin Sprite (#5190) * coffins have a new sprite (#34995) * New Coffin Sprite * Automatic changelog generation for PR #5190 [ci skip] * [MIRROR] Makes fire colorful and anime (#5187) * Makes fire colorful and anime (#34977) * - Makes fire colorful and anime * - Updates light color on fires - Makes fire update color less often (1/7th as often) * - Changes the transition from blue to purple to be much more gradual, it starts at 40000 and peaks at 120000 Kelvin now - Changes fusion fire (>4 million Kelvin) to have a slight colorshift to it (It's just the druggy overlay). * - Moves fire above gas (and everything else) - Changes fire alpha for low temperature fires to compensate for items no longer rendering on top of fire * - Makes the new fire layer a define and makes sure it isn't above "Hyperspace Ripples" whatever that is * - Removes comment * - FIRE_LAYER is already defined for burning humans. * Makes fire colorful and anime * Automatic changelog generation for PR #5187 [ci skip] * [MIRROR] Expand Cyborg (#5183) * Expand Cyborg (#34958) * Expand Cyborg * i ded pls nerf * Oh sheet * Expand Cyborg * Automatic changelog generation for PR #5183 [ci skip] * [MIRROR] Cosmic Bedsheet (#5170) * adds cosmic space bedsheet * Cosmic Bedsheet * [MIRROR] The punisher no longer punishes ticker subsystems with delayed fires (#5174) * Merge pull request #34964 from MrStonedOne/patch-463 The punisher no longer punishes ticker subsystems with delayed fires * The punisher no longer punishes ticker subsystems with delayed fires * Fuck this I'm done with it
This commit is contained in:
@@ -62,6 +62,7 @@
|
||||
#define SPACEVINE_LAYER 4.8
|
||||
#define SPACEVINE_MOB_LAYER 4.9
|
||||
//#define FLY_LAYER 5 //For easy recordkeeping; this is a byond define
|
||||
#define GASFIRE_LAYER 5.05
|
||||
#define RIPPLE_LAYER 5.1
|
||||
|
||||
#define GHOST_LAYER 6
|
||||
|
||||
+14
-14
@@ -50,19 +50,19 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
|
||||
|
||||
//Human Overlays Indexes/////////
|
||||
//LOTS OF CIT CHANGES HERE. BE CAREFUL WHEN UPSTREAM ADDS MORE LAYERS
|
||||
#define MUTATIONS_LAYER 31 //mutations. Tk headglows, cold resistance glow, etc
|
||||
#define GENITALS_BEHIND_LAYER 30 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer
|
||||
#define BODY_BEHIND_LAYER 29 //certain mutantrace features (tail when looking south) that must appear behind the body parts
|
||||
#define BODYPARTS_LAYER 28 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag
|
||||
#define BODY_ADJ_LAYER 27 //certain mutantrace features (snout, body markings) that must appear above the body parts
|
||||
#define GENITALS_ADJ_LAYER 26
|
||||
#define BODY_LAYER 25 //underwear, undershirts, socks, eyes, lips(makeup)
|
||||
#define FRONT_MUTATIONS_LAYER 24 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes)
|
||||
#define DAMAGE_LAYER 23 //damage indicators (cuts and burns)
|
||||
#define UNIFORM_LAYER 22
|
||||
#define ID_LAYER 21
|
||||
#define SHOES_LAYER 20
|
||||
#define HANDS_PART_LAYER 19
|
||||
#define MUTATIONS_LAYER 30 //mutations. Tk headglows, cold resistance glow, etc
|
||||
#define GENITALS_BEHIND_LAYER 29 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer
|
||||
#define BODY_BEHIND_LAYER 28 //certain mutantrace features (tail when looking south) that must appear behind the body parts
|
||||
#define BODYPARTS_LAYER 27 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag
|
||||
#define BODY_ADJ_LAYER 26 //certain mutantrace features (snout, body markings) that must appear above the body parts
|
||||
#define GENITALS_ADJ_LAYER 25
|
||||
#define BODY_LAYER 24 //underwear, undershirts, socks, eyes, lips(makeup)
|
||||
#define FRONT_MUTATIONS_LAYER 23 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes)
|
||||
#define DAMAGE_LAYER 22 //damage indicators (cuts and burns)
|
||||
#define UNIFORM_LAYER 21
|
||||
#define ID_LAYER 20
|
||||
#define HANDS_PART_LAYER 20
|
||||
#define SHOES_LAYER 19
|
||||
#define GLOVES_LAYER 18
|
||||
#define EARS_LAYER 17
|
||||
#define SUIT_LAYER 16
|
||||
@@ -81,7 +81,7 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
|
||||
#define HANDS_LAYER 3
|
||||
#define BODY_FRONT_LAYER 2
|
||||
#define FIRE_LAYER 1 //If you're on fire
|
||||
#define TOTAL_LAYERS 31 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_;
|
||||
#define TOTAL_LAYERS 30 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_;
|
||||
|
||||
//Human Overlay Index Shortcuts for alternate_worn_layer, layers
|
||||
//Because I *KNOW* somebody will think layer+1 means "above"
|
||||
|
||||
@@ -351,7 +351,8 @@
|
||||
/obj/item/documents/syndicate,
|
||||
/obj/item/disk/nuclear,
|
||||
/obj/item/bombcore,
|
||||
/obj/item/grenade
|
||||
/obj/item/grenade,
|
||||
/obj/item/storage
|
||||
)
|
||||
|
||||
var/list/important_items = list(
|
||||
@@ -374,8 +375,10 @@
|
||||
/obj/item/documents/syndicate,
|
||||
/obj/item/disk/nuclear,
|
||||
/obj/item/bombcore,
|
||||
/obj/item/grenade
|
||||
/obj/item/grenade,
|
||||
/obj/item/storage
|
||||
)
|
||||
// Bags are prohibited from this due to the potential explotation of objects, same with brought
|
||||
|
||||
/obj/item/device/dogborg/sleeper/New()
|
||||
..()
|
||||
@@ -389,7 +392,7 @@
|
||||
hound = loc
|
||||
if(!proximity)
|
||||
return
|
||||
if(!ishuman(target))
|
||||
if(!iscarbon(target))
|
||||
return
|
||||
if(target.buckled)
|
||||
to_chat(user, "<span class='warning'>The user is buckled and can not be put into your [src.name].</span>")
|
||||
@@ -398,7 +401,7 @@
|
||||
to_chat(user, "<span class='warning'>Your [src.name] is already occupied.</span>")
|
||||
return
|
||||
user.visible_message("<span class='warning'>[hound.name] is carefully inserting [target.name] into their [src.name].</span>", "<span class='notice'>You start placing [target] into your [src]...</span>")
|
||||
if(!patient && ishuman(target) && !target.buckled && do_after (user, 50, target = target))
|
||||
if(!patient && iscarbon(target) && !target.buckled && do_after (user, 50, target = target))
|
||||
|
||||
if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
|
||||
return //If they moved away, you can't eat them.
|
||||
@@ -406,10 +409,10 @@
|
||||
if(patient) return //If you try to eat two people at once, you can only eat one.
|
||||
|
||||
else //If you don't have someone in you, proceed.
|
||||
if(!isslimeperson(target) && ("toxin" in injection_chems))
|
||||
if(!isjellyperson(target) && ("toxin" in injection_chems))
|
||||
injection_chems -= "toxin"
|
||||
injection_chems += "antitoxin"
|
||||
if(isslimeperson(target) && !("toxin" in injection_chems))
|
||||
if(isjellyperson(target) && !("toxin" in injection_chems))
|
||||
injection_chems -= "antitoxin"
|
||||
injection_chems += "toxin"
|
||||
target.forceMove(src)
|
||||
@@ -443,8 +446,8 @@
|
||||
if(length(contents) > 0)
|
||||
hound.visible_message("<span class='warning'>[hound.name] empties out their contents via their release port.</span>", "<span class='notice'>You empty your contents via your release port.</span>")
|
||||
if(target)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/person = target
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/person = target
|
||||
person.forceMove(get_turf(src))
|
||||
person.reset_perspective()
|
||||
else
|
||||
@@ -452,8 +455,8 @@
|
||||
T.loc = hound.loc
|
||||
else
|
||||
for(var/C in contents)
|
||||
if(ishuman(C))
|
||||
var/mob/living/carbon/human/person = C
|
||||
if(iscarbon(C))
|
||||
var/mob/living/carbon/person = C
|
||||
person.forceMove(get_turf(src))
|
||||
person.reset_perspective()
|
||||
else
|
||||
@@ -572,7 +575,6 @@
|
||||
hound.update_icons()
|
||||
//Return original patient
|
||||
return(patient)
|
||||
|
||||
//Check for a new patient
|
||||
else
|
||||
for(var/mob/living/carbon/human/C in contents)
|
||||
@@ -593,7 +595,6 @@
|
||||
if(cleaning && !patient)
|
||||
hound.sleeper_r = 1
|
||||
hound.sleeper_g = 0
|
||||
|
||||
//Couldn't find anyone, and not cleaning
|
||||
else if(!cleaning && !patient)
|
||||
hound.sleeper_r = 0
|
||||
@@ -607,18 +608,15 @@
|
||||
//Gurgleborg process
|
||||
/obj/item/device/dogborg/sleeper/proc/clean_cycle()
|
||||
testing("clean_cycle activated")
|
||||
//Sanity? Maybe not required. More like if indigestible person OOC escapes.
|
||||
//Sanity
|
||||
for(var/I in items_preserved)
|
||||
if(!(I in contents))
|
||||
items_preserved -= I
|
||||
|
||||
var/list/touchable_items = contents - items_preserved
|
||||
|
||||
if(cleaning_cycles)
|
||||
testing("clean_cycle being used")
|
||||
cleaning_cycles--
|
||||
cleaning = TRUE
|
||||
//Burn all the mobs or add them to the exclusion list
|
||||
for(var/mob/living/carbon/human/T in (touchable_items))
|
||||
if((T.status_flags & GODMODE) || !T.digestable)
|
||||
src.items_preserved += T
|
||||
@@ -626,13 +624,37 @@
|
||||
T.adjustBruteLoss(2)
|
||||
T.adjustFireLoss(3)
|
||||
update_gut()
|
||||
addtimer(CALLBACK(src, .proc/clean_cycle), 50)
|
||||
|
||||
var/atom/target = pick(touchable_items)
|
||||
if(iscarbon(target)) //Handle the target being a mob
|
||||
var/mob/living/carbon/T = target
|
||||
if(T.stat == DEAD && T.digestable) //Mob is now dead
|
||||
message_admins("[key_name(hound)] has digested [key_name(T)] as a dogborg. ([hound ? "<a href='?_src_=holder;adminplayerobservecoodjump=1;X=[hound.x];Y=[hound.y];Z=[hound.z]'>JMP</a>" : "null"])")
|
||||
to_chat(hound,"<span class='notice'>You feel your belly slowly churn around [T], breaking them down into a soft slurry to be used as power for your systems.</span>")
|
||||
to_chat(T,"<span class='notice'>You feel [hound]'s belly slowly churn around your form, breaking you down into a soft slurry to be used as power for [hound]'s systems.</span>")
|
||||
src.hound.cell.give(30000) //Fueeeeellll
|
||||
T.stop_sound_channel(CHANNEL_PRED)
|
||||
playsound(get_turf(hound),"death_pred",50,0,-6,0,channel=CHANNEL_PRED)
|
||||
T.stop_sound_channel(CHANNEL_PRED)
|
||||
T.playsound_local("death_prey",60)
|
||||
qdel(T)
|
||||
update_gut()
|
||||
//Handle the target being anything but a mob
|
||||
else if(isobj(target))
|
||||
var/obj/T = target
|
||||
if(T.type in important_items) //If the object is in the items_preserved global list
|
||||
src.items_preserved += T
|
||||
//If the object is not one to preserve
|
||||
else
|
||||
qdel(T)
|
||||
src.update_gut()
|
||||
src.hound.cell.give(10)
|
||||
else
|
||||
testing("clean_cycle resetted")
|
||||
testing("clean_cycle finished and reset")
|
||||
cleaning_cycles = initial(cleaning_cycles)
|
||||
cleaning = FALSE
|
||||
update_gut()
|
||||
to_chat(hound, "<span class='notice'>Your [src.name] chimes it ends its self-cleaning cycle.</span>")//Belly is entirely empty
|
||||
update_gut()
|
||||
|
||||
if(!length(contents))
|
||||
to_chat(hound, "<span class='notice'>Your [src.name] is now clean. Ending self-cleaning cycle.</span>")
|
||||
@@ -640,7 +662,7 @@
|
||||
update_gut()
|
||||
return
|
||||
|
||||
//sound effects
|
||||
//sound effects
|
||||
for(var/mob/living/M in contents)
|
||||
if(prob(50))
|
||||
M.stop_sound_channel(CHANNEL_PRED)
|
||||
@@ -648,42 +670,8 @@
|
||||
M.stop_sound_channel(CHANNEL_PRED)
|
||||
M.playsound_local("digest_prey",60)
|
||||
|
||||
|
||||
//Pick a random item to deal with (if there are any)
|
||||
var/atom/target = pick(touchable_items)
|
||||
|
||||
//Handle the target being a mob
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/T = target
|
||||
|
||||
//Mob is now dead
|
||||
if(T.stat == DEAD && T.digestable)
|
||||
message_admins("[key_name(hound)] has digested [key_name(T)] as a dogborg. ([hound ? "<a href='?_src_=holder;adminplayerobservecoodjump=1;X=[hound.x];Y=[hound.y];Z=[hound.z]'>JMP</a>" : "null"])")
|
||||
to_chat(hound,"<span class='notice'>You feel your belly slowly churn around [T], breaking them down into a soft slurry to be used as power for your systems.</span>")
|
||||
to_chat(T,"<span class='notice'>You feel [hound]'s belly slowly churn around your form, breaking you down into a soft slurry to be used as power for [hound]'s systems.</span>")
|
||||
src.hound.cell.give(30000) //Fueeeeellll
|
||||
T.stop_sound_channel(CHANNEL_PRED)
|
||||
playsound(get_turf(hound),"death_pred",50,0,-6,0,channel=CHANNEL_PRED)
|
||||
T.stop_sound_channel(CHANNEL_PRED)
|
||||
T.playsound_local("death_prey",60)
|
||||
qdel(T)
|
||||
src.update_gut()
|
||||
|
||||
//Handle the target being anything but a /mob/living/carbon/human
|
||||
else
|
||||
var/obj/T = target
|
||||
|
||||
//If the object is in the items_preserved global list //POLARISTODO
|
||||
|
||||
if(T.type in important_items)
|
||||
src.items_preserved += T
|
||||
|
||||
//If the object is not one to preserve
|
||||
else
|
||||
qdel(T)
|
||||
src.update_gut()
|
||||
src.hound.cell.give(10)
|
||||
return
|
||||
if(cleaning)
|
||||
addtimer(CALLBACK(src, .proc/clean_cycle), 50)
|
||||
|
||||
/obj/item/device/dogborg/sleeper/proc/inject_chem(chem)
|
||||
testing("inject chem triggered, checking power")
|
||||
@@ -729,8 +717,8 @@
|
||||
return
|
||||
if(target.anchored)
|
||||
return
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/brigman = target
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/brigman = target
|
||||
if (!brigman.devourable)
|
||||
to_chat(user, "The target registers an error code. Unable to insert into [src.name].")
|
||||
return
|
||||
@@ -796,10 +784,13 @@
|
||||
if(length(contents) > 11) //grow that tum after a certain junk amount
|
||||
hound.sleeper_r = 1
|
||||
hound.update_icons()
|
||||
else
|
||||
hound.sleeper_r = 0
|
||||
hound.update_icons()
|
||||
return
|
||||
|
||||
else if(ishuman(target))
|
||||
var/mob/living/carbon/human/trashman = target
|
||||
else if(iscarbon(target))
|
||||
var/mob/living/carbon/trashman = target
|
||||
if (!trashman.devourable)
|
||||
to_chat(user, "<span class='warning'>\The [target] registers an error code to your [src.name]</span>")
|
||||
return
|
||||
|
||||
@@ -517,7 +517,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
||||
queue_node.times_fired++
|
||||
|
||||
if (queue_node_flags & SS_TICKER)
|
||||
queue_node.next_fire = world.time + (world.tick_lag * (queue_node.wait + (queue_node.tick_overrun/100)))
|
||||
queue_node.next_fire = world.time + (world.tick_lag * queue_node.wait)
|
||||
else if (queue_node_flags & SS_POST_FIRE_TIMING)
|
||||
queue_node.next_fire = world.time + queue_node.wait + (world.tick_lag * (queue_node.tick_overrun/100))
|
||||
else if (queue_node_flags & SS_KEEP_TIMING)
|
||||
|
||||
@@ -387,3 +387,35 @@
|
||||
|
||||
R.make_shell(src)
|
||||
return TRUE
|
||||
|
||||
/obj/item/borg/upgrade/expand
|
||||
name = "borg expander"
|
||||
desc = "A cyborg resizer, it makes a cyborg huge."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
|
||||
/obj/item/borg/upgrade/expand/action(mob/living/silicon/robot/R)
|
||||
if(..())
|
||||
return
|
||||
|
||||
if(locate(/obj/item/borg/upgrade/expand, R))
|
||||
to_chat(usr, "<span class='notice'>This unit already has an expand module installed!</span>")
|
||||
return
|
||||
|
||||
R.notransform = TRUE
|
||||
var/prev_lockcharge = R.lockcharge
|
||||
R.SetLockdown(1)
|
||||
R.anchored = TRUE
|
||||
var/datum/effect_system/smoke_spread/smoke = new
|
||||
smoke.set_up(1, R.loc)
|
||||
smoke.start()
|
||||
sleep(2)
|
||||
for(var/i in 1 to 4)
|
||||
playsound(R, pick('sound/items/drill_use.ogg', 'sound/items/jaws_cut.ogg', 'sound/items/jaws_pry.ogg', 'sound/items/welder.ogg', 'sound/items/ratchet.ogg'), 80, 1, -1)
|
||||
sleep(12)
|
||||
if(!prev_lockcharge)
|
||||
R.SetLockdown(0)
|
||||
R.anchored = FALSE
|
||||
R.notransform = FALSE
|
||||
R.resize = 2
|
||||
R.update_transform()
|
||||
return TRUE
|
||||
|
||||
@@ -125,6 +125,7 @@
|
||||
/obj/structure/closet/coffin
|
||||
name = "coffin"
|
||||
desc = "It's a burial receptacle for the dearly departed."
|
||||
icon = 'goon/icons/obj/closet.dmi'
|
||||
icon_state = "coffin"
|
||||
resistance_flags = FLAMMABLE
|
||||
max_integrity = 70
|
||||
|
||||
@@ -50,14 +50,16 @@
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
icon = 'icons/effects/fire.dmi'
|
||||
icon_state = "1"
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
layer = GASFIRE_LAYER
|
||||
light_range = LIGHT_RANGE_FIRE
|
||||
light_color = LIGHT_COLOR_FIRE
|
||||
blend_mode = BLEND_ADD
|
||||
|
||||
var/volume = 125
|
||||
var/temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST
|
||||
var/just_spawned = TRUE
|
||||
var/bypassing = FALSE
|
||||
var/visual_update_tick = 0
|
||||
|
||||
/obj/effect/hotspot/Initialize()
|
||||
. = ..()
|
||||
@@ -96,6 +98,64 @@
|
||||
AT.fire_act(temperature, volume)
|
||||
return
|
||||
|
||||
/obj/effect/hotspot/proc/gauss_lerp(x, x1, x2)
|
||||
var/b = (x1 + x2) * 0.5
|
||||
var/c = (x2 - x1) / 6
|
||||
return NUM_E ** -((x - b) ** 2 / (2 * c) ** 2)
|
||||
|
||||
/obj/effect/hotspot/proc/update_color()
|
||||
cut_overlays()
|
||||
|
||||
var/heat_r = heat2colour_r(temperature)
|
||||
var/heat_g = heat2colour_g(temperature)
|
||||
var/heat_b = heat2colour_b(temperature)
|
||||
var/heat_a = 255
|
||||
var/greyscale_fire = 1 //This determines how greyscaled the fire is.
|
||||
|
||||
if(temperature < 5000) //This is where fire is very orange, we turn it into the normal fire texture here.
|
||||
var/normal_amt = gauss_lerp(temperature, 1000, 3000)
|
||||
heat_r = LERP(heat_r,255,normal_amt)
|
||||
heat_g = LERP(heat_g,255,normal_amt)
|
||||
heat_b = LERP(heat_b,255,normal_amt)
|
||||
heat_a -= gauss_lerp(temperature, -5000, 5000) * 128
|
||||
greyscale_fire -= normal_amt
|
||||
if(temperature > 40000) //Past this temperature the fire will gradually turn a bright purple
|
||||
var/purple_amt = temperature < LERP(40000,200000,0.5) ? gauss_lerp(temperature, 40000, 200000) : 1
|
||||
heat_r = LERP(heat_r,255,purple_amt)
|
||||
if(temperature > 200000 && temperature < 500000) //Somewhere at this temperature nitryl happens.
|
||||
var/sparkle_amt = gauss_lerp(temperature, 200000, 500000)
|
||||
var/mutable_appearance/sparkle_overlay = mutable_appearance('icons/effects/effects.dmi', "shieldsparkles")
|
||||
sparkle_overlay.blend_mode = BLEND_ADD
|
||||
sparkle_overlay.alpha = sparkle_amt * 255
|
||||
add_overlay(sparkle_overlay)
|
||||
if(temperature > 400000 && temperature < 1500000) //Lightning because very anime.
|
||||
var/mutable_appearance/lightning_overlay = mutable_appearance(icon, "overcharged")
|
||||
lightning_overlay.blend_mode = BLEND_ADD
|
||||
add_overlay(lightning_overlay)
|
||||
if(temperature > 4500000) //This is where noblium happens. Some fusion-y effects.
|
||||
var/fusion_amt = temperature < LERP(4500000,12000000,0.5) ? gauss_lerp(temperature, 4500000, 12000000) : 1
|
||||
var/mutable_appearance/fusion_overlay = mutable_appearance('icons/effects/tile_effects.dmi', "chem_gas")
|
||||
fusion_overlay.blend_mode = BLEND_ADD
|
||||
fusion_overlay.alpha = fusion_amt * 255
|
||||
var/mutable_appearance/rainbow_overlay = mutable_appearance('icons/mob/screen_gen.dmi', "druggy")
|
||||
rainbow_overlay.blend_mode = BLEND_ADD
|
||||
rainbow_overlay.alpha = fusion_amt * 255
|
||||
rainbow_overlay.appearance_flags = RESET_COLOR
|
||||
heat_r = LERP(heat_r,150,fusion_amt)
|
||||
heat_g = LERP(heat_g,150,fusion_amt)
|
||||
heat_b = LERP(heat_b,150,fusion_amt)
|
||||
add_overlay(fusion_overlay)
|
||||
add_overlay(rainbow_overlay)
|
||||
|
||||
set_light(l_color = rgb(LERP(250,heat_r,greyscale_fire),LERP(160,heat_g,greyscale_fire),LERP(25,heat_b,greyscale_fire)))
|
||||
|
||||
heat_r /= 255
|
||||
heat_g /= 255
|
||||
heat_b /= 255
|
||||
|
||||
color = list(LERP(0.3, 1, 1-greyscale_fire) * heat_r,0.3 * heat_g * greyscale_fire,0.3 * heat_b * greyscale_fire, 0.59 * heat_r * greyscale_fire,LERP(0.59, 1, 1-greyscale_fire) * heat_g,0.59 * heat_b * greyscale_fire, 0.11 * heat_r * greyscale_fire,0.11 * heat_g * greyscale_fire,LERP(0.11, 1, 1-greyscale_fire) * heat_b, 0,0,0)
|
||||
alpha = heat_a
|
||||
|
||||
#define INSUFFICIENT(path) (!location.air.gases[path] || location.air.gases[path][MOLES] < 0.5)
|
||||
/obj/effect/hotspot/process()
|
||||
if(just_spawned)
|
||||
@@ -142,6 +202,9 @@
|
||||
else
|
||||
icon_state = "1"
|
||||
|
||||
if((visual_update_tick++ % 7) == 0)
|
||||
update_color()
|
||||
|
||||
if(temperature > location.max_fire_temperature_sustained)
|
||||
location.max_fire_temperature_sustained = temperature
|
||||
|
||||
|
||||
@@ -43,12 +43,17 @@ img.icon {
|
||||
content: 'x';
|
||||
}
|
||||
.r {
|
||||
display: inline;
|
||||
padding: .2em .6em .3em;
|
||||
font-size: 75%;
|
||||
font-weight: 700;
|
||||
line-height: 1;
|
||||
color: #f00;
|
||||
display: inline-block;
|
||||
min-width: 0.5em;
|
||||
font-size: 0.7em;
|
||||
padding: 0.2em 0.3em;
|
||||
line-height: 1;
|
||||
color: white;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
vertical-align: middle;
|
||||
background-color: crimson;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
a {color: #0000ff;}
|
||||
|
||||
@@ -312,8 +312,14 @@ function output(message, flag) {
|
||||
{
|
||||
lastmessages.append($('<span/>', { 'class': 'r', 'text': 2}));
|
||||
}
|
||||
if(parseInt(lastmessages.css("font-size")) < 24) //Completely arbitrary max size
|
||||
lastmessages.css("font-size","+=2")
|
||||
var insertedBadge = $(lastmessages).find('.r');
|
||||
insertedBadge.animate({
|
||||
"font-size": "0.9em"
|
||||
}, 100, function() {
|
||||
insertedBadge.animate({
|
||||
"font-size": "0.7em"
|
||||
}, 100);
|
||||
});
|
||||
opts.messageCount--;
|
||||
handled = true;
|
||||
}
|
||||
|
||||
@@ -83,13 +83,13 @@
|
||||
H.endTailWag()
|
||||
|
||||
/mob/living/carbon/human/proc/is_wagging_tail()
|
||||
return (dna && dna.species && (("waggingtail_lizard" in dna.species.mutant_bodyparts) || ("waggingtail_human" in dna.species.mutant_bodyparts)))
|
||||
return (dna && dna.species && (("waggingtail_lizard" in dna.species.mutant_bodyparts) || ("waggingtail_human" in dna.species.mutant_bodyparts)|| ("mam_waggingtail" in dna.species.mutant_bodyparts)))
|
||||
|
||||
/datum/emote/living/carbon/human/wag/can_run_emote(mob/user, status_check = TRUE)
|
||||
if(!..())
|
||||
return FALSE
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.dna && H.dna.species && (("tail_lizard" in H.dna.species.mutant_bodyparts) || ("waggingtail_lizard" in H.dna.species.mutant_bodyparts) || ("tail_human" in H.dna.species.mutant_bodyparts) || ("waggingtail_human" in H.dna.species.mutant_bodyparts)))
|
||||
if(H.dna && H.dna.species && (("tail_lizard" in H.dna.species.mutant_bodyparts) || ("waggingtail_lizard" in H.dna.species.mutant_bodyparts) || ("tail_human" in H.dna.species.mutant_bodyparts) || ("waggingtail_human" in H.dna.species.mutant_bodyparts)|| ("mam_tail" in H.dna.species.mutant_bodyparts) || ("mam_waggingtail" in H.dna.species.mutant_bodyparts)))
|
||||
return TRUE
|
||||
|
||||
/datum/emote/living/carbon/human/wag/select_message_type(mob/user)
|
||||
|
||||
@@ -506,7 +506,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
|
||||
/datum/species/proc/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour)
|
||||
var/list/bodyparts_to_add = mutant_bodyparts.Copy()
|
||||
var/list/relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER, BODY_TAUR_LAYER)
|
||||
var/list/relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER, BODY_TAUR_LAYER, ABOVE_BODY_ADJ_LAYER, UNDER_BODY_ADJ_LAYER)
|
||||
var/list/standing = list()
|
||||
|
||||
H.remove_overlay(BODY_BEHIND_LAYER)
|
||||
@@ -514,6 +514,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.remove_overlay(BODY_FRONT_LAYER)
|
||||
//CITADEL EDIT - Do not forget to add this to relevent_layers list just above too!
|
||||
H.remove_overlay(BODY_TAUR_LAYER)
|
||||
H.remove_overlay(ABOVE_BODY_ADJ_LAYER)
|
||||
H.remove_overlay(ABOVE_BODY_FRONT_LAYER)
|
||||
H.remove_overlay(ABOVE_BODY_BEHIND_LAYER)
|
||||
//END EDIT
|
||||
|
||||
if(!mutant_bodyparts)
|
||||
return
|
||||
@@ -797,7 +801,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
I.color = "#[H.dna.features["mcolor3"]]"
|
||||
if(HAIR)
|
||||
if(hair_color == "mutcolor")
|
||||
I.color = "#[H.dna.features["mcolor"]]"
|
||||
I.color = "#[H.dna.features["mcolor3"]]"
|
||||
else
|
||||
I.color = "#[H.hair_color]"
|
||||
if(FACEHAIR)
|
||||
@@ -834,7 +838,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
else
|
||||
I.color = "#[H.dna.features["mcolor3"]]"
|
||||
if(HAIR)
|
||||
if(hair_color == "mutcolor")
|
||||
if(hair_color == "mutcolor3")
|
||||
I.color = "#[H.dna.features["mcolor"]]"
|
||||
else
|
||||
I.color = "#[H.hair_color]"
|
||||
@@ -846,7 +850,9 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.apply_overlay(BODY_ADJ_LAYER)
|
||||
H.apply_overlay(BODY_FRONT_LAYER)
|
||||
H.apply_overlay(BODY_TAUR_LAYER) // CITADEL EDIT
|
||||
|
||||
H.apply_overlay(ABOVE_BODY_ADJ_LAYER)
|
||||
H.apply_overlay(ABOVE_BODY_FRONT_LAYER)
|
||||
H.apply_overlay(ABOVE_BODY_BEHIND_LAYER)
|
||||
|
||||
//This exists so sprite accessories can still be per-layer without having to include that layer's
|
||||
//number in their sprite name, which causes issues when those numbers change.
|
||||
@@ -858,9 +864,16 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
return "ADJ"
|
||||
if(BODY_FRONT_LAYER)
|
||||
return "FRONT"
|
||||
//CITADEL EDIT
|
||||
if(BODY_TAUR_LAYER)
|
||||
return "TAUR"
|
||||
|
||||
if(ABOVE_BODY_ADJ_LAYER)
|
||||
return "ABADJ"
|
||||
if(ABOVE_BODY_FRONT_LAYER)
|
||||
return "ABFRONT"
|
||||
if(ABOVE_BODY_BEHIND_LAYER)
|
||||
return "ABBEHIND"
|
||||
//END EDIT
|
||||
|
||||
/datum/species/proc/spec_life(mob/living/carbon/human/H)
|
||||
if(NOBREATH in species_traits)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/obj/machinery/power/solar
|
||||
name = "solar panel"
|
||||
desc = "A solar panel. Generates electricity when in contact with sunlight."
|
||||
icon = 'icons/obj/power.dmi'
|
||||
icon = 'goon/icons/obj/power.dmi'
|
||||
icon_state = "sp_base"
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
@@ -181,7 +181,7 @@
|
||||
/obj/item/solar_assembly
|
||||
name = "solar panel assembly"
|
||||
desc = "A solar panel assembly kit, allows constructions of a solar panel, or with a tracking circuit board, a solar tracker."
|
||||
icon = 'icons/obj/power.dmi'
|
||||
icon = 'goon/icons/obj/power.dmi'
|
||||
icon_state = "sp_base"
|
||||
item_state = "electropack"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/obj/machinery/power/tracker
|
||||
name = "solar tracker"
|
||||
desc = "A solar directional tracker."
|
||||
icon = 'icons/obj/power.dmi'
|
||||
icon = 'goon/icons/obj/power.dmi'
|
||||
icon_state = "tracker"
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
|
||||
@@ -696,6 +696,15 @@
|
||||
construction_time = 120
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_upgrade_expand
|
||||
name = "Cyborg Upgrade (Expand)"
|
||||
id = "borg_upgrade_expand"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/borg/upgrade/expand
|
||||
materials = list(MAT_METAL=200000, MAT_TITANIUM=5000)
|
||||
construction_time = 120
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/boris_ai_controller
|
||||
name = "B.O.R.I.S. AI-Cyborg Remote Control Module"
|
||||
id = "borg_ai_control"
|
||||
|
||||
@@ -214,7 +214,7 @@
|
||||
display_name = "Cyborg Upgrades: Utility"
|
||||
description = "Utility upgrades for cybogs."
|
||||
prereq_ids = list("engineering", "cyborg")
|
||||
design_ids = list("borg_upgrade_holding", "borg_upgrade_lavaproof", "borg_upgrade_thrusters", "borg_upgrade_selfrepair")
|
||||
design_ids = list("borg_upgrade_holding", "borg_upgrade_lavaproof", "borg_upgrade_thrusters", "borg_upgrade_selfrepair", "borg_upgrade_expand")
|
||||
research_cost = 2500
|
||||
export_price = 5000
|
||||
|
||||
|
||||
Reference in New Issue
Block a user