Merge remote-tracking branch 'upstream/master' into rp-markings-attempt-two

This commit is contained in:
timothyteakettle
2021-05-14 01:59:32 +01:00
99 changed files with 4046 additions and 1393 deletions
+46
View File
@@ -96,6 +96,7 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list(
/client/proc/cmd_select_equipment,
/client/proc/cmd_admin_gib_self,
/client/proc/drop_bomb,
/client/proc/drop_wave_explosion,
/client/proc/set_dynex_scale,
/client/proc/drop_dynex_bomb,
/client/proc/cinematic,
@@ -550,6 +551,51 @@ GLOBAL_PROTECT(admin_verbs_hideable)
log_admin("[key_name(usr)] created an admin explosion at [epicenter.loc].")
SSblackbox.record_feedback("tally", "admin_verb", 1, "Drop Bomb") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/drop_wave_explosion()
set category = "Special Verbs"
set name = "Drop Wave Explosion"
set desc = "Cause an explosive shockwave at your location."
var/power = input(src, "Wave initial power", "Power", 50) as num|null
if(isnull(power))
return
var/falloff = input(src, "Wave innate falloff factor", "Falloff", EXPLOSION_DEFAULT_FALLOFF_MULTIPLY) as num|null
if(isnull(falloff))
return
falloff = max(0, falloff)
if(falloff > 1)
to_chat(src, "<span class='danger'>Aborting: Falloff cannot be higher tahn 1.")
return
var/constant = input(src, "Wave innate falloff constant", "Constant", EXPLOSION_DEFAULT_FALLOFF_SUBTRACT) as num|null
if(isnull(constant))
return
if(constant < 0)
to_chat(src, "<span class='danger'>Aborting: Falloff constant cannot be less than 0.")
return
var/fire = input(src, "Probability per tile of fire?", "Fire Probability", 0) as num|null
if(isnull(fire))
return
var/speed = input(src, "Speed in ticks to wait between cycles? 0 for fast as possible", "Wait", 0) as num|null
if(isnull(speed))
return
var/block_resistance = input(src, "DANGEROUS: Block resistance? USE 1 IF YOU DO NOT KNOW WHAT YOU ARE DOING.", "Block Negation", 1) as num|null
if(isnull(block_resistance))
return
block_resistance = max(0, block_resistance)
if(power > 500)
var/sure = alert(src, "Explosion power is extremely high. Are you absolutely sure?", "Uhh...", "No", "Yes")
if(sure != "Yes")
return
// point of no return
var/turf/target = get_turf(mob)
if(!target)
to_chat(src, "<span class='danger'>Cannot proceed. Not on turf.</span>")
return
message_admins("[ADMIN_LOOKUPFLW(usr)] creating an admin explosion at [target.loc].")
log_admin("[key_name(usr)] created an admin explosion at [target.loc].")
SSblackbox.record_feedback("tally", "admin_verb", 1, "Drop Wave Explosion") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
wave_explosion(target, power, falloff, constant, null, fire, speed = speed, block_resistance = block_resistance)
/client/proc/drop_dynex_bomb()
set category = "Admin.Fun"
set name = "Drop DynEx Bomb"
+20
View File
@@ -571,6 +571,26 @@ Traitors and the like can also be revived with the previous role mostly intact.
message_admins("[key_name_admin(src)] has created a command report")
SSblackbox.record_feedback("tally", "admin_verb", 1, "Create Command Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_make_priority_announcement()
set category = "Admin.Events"
set name = "Make Priority Announcement"
if(!check_rights(R_ADMIN))
return
var/input = input(usr, "Enter a priority announcement. Ensure it makes sense IC.", "What?", "") as message|null
if(!input)
return
var/title = input(src, "What should the title be?", "What?","") as text|null
var/special_name = input(src, "Who is making the announcement?", "Who?", "") as text|null
priority_announce(input, title, sender_override = special_name)
log_admin("[key_name(src)] has sent a priority announcement: [input]")
message_admins("[key_name_admin(src)] has made a priority announcement")
SSblackbox.record_feedback("tally", "admin_verb", 1, "Make Priority Announcement") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_change_command_name()
set category = "Admin.Events"
set name = "Change Command Name"
@@ -115,7 +115,7 @@
skewee.visible_message("<span class='warning'>[skewee] painfully slides back down [src].</span>")
if(skewee.stat >= UNCONSCIOUS)
return //by ratvar, no more spamming my deadchat, holy fuck
skewee.say("Oof, ouch owwie!!", forced = "fail brass skewer removal")
skewee.emote("pain")
return
skewee.visible_message("<span class='danger'>[skewee] comes free of [src] with a squelching pop!</span>", \
"<span class='boldannounce'>You come free of [src]!</span>")
@@ -62,13 +62,24 @@
/datum/action/innate/heretic_shatter/IsAvailable()
if(IS_HERETIC(holder) || IS_HERETIC_MONSTER(holder))
return TRUE
return ..()
else
return FALSE
/datum/action/innate/heretic_shatter/Activate()
if(do_after(holder,10, target = holder))
var/turf/safe_turf = find_safe_turf(zlevels = sword.z, extended_safety_checks = TRUE)
if(!sword || QDELETED(sword))
return
if(!IsAvailable()) //Never trust the user.
return
var/swordz = (get_turf(sword))?.z //SHOULD usually have a turf but if it doesn't better be prepared.
if(!swordz)
to_chat(holder, "<span class='warning'>[sword] flickers but remains in place, as do you...</span>")
return
var/turf/safe_turf = find_safe_turf(zlevels = swordz, extended_safety_checks = TRUE)
if(!safe_turf)
to_chat(holder, "<span class='warning'>[sword] flickers but remains in place, as do you...</span>")
return
do_teleport(holder,safe_turf,forceMove = TRUE,channel=TELEPORT_CHANNEL_MAGIC)
to_chat(holder,"<span class='warning'>You feel a gust of energy flow through your body... the Rusted Hills heard your call...</span>")
qdel(sword)
@@ -633,7 +633,7 @@ This is here to make the tiles around the station mininuke change when it's arme
AddComponent(/datum/component/stationloving, !fake)
/obj/item/disk/nuclear/process()
++process_tick
process_tick++
if(fake)
STOP_PROCESSING(SSobj, src)
CRASH("A fake nuke disk tried to call process(). Who the fuck and how the fuck")
@@ -650,7 +650,7 @@ This is here to make the tiles around the station mininuke change when it's arme
disk_comfort_level++
if(disk_comfort_level >= 2) //Sleep tight, disky.
if(process_tick % 30)
if(!(process_tick % 30))
visible_message("<span class='notice'>[src] sleeps soundly. Sleep tight, disky.</span>")
if(last_disk_move < world.time - 5000 && prob((world.time - 5000 - last_disk_move)*0.0001))
var/datum/round_event_control/operative/loneop = locate(/datum/round_event_control/operative) in SSevents.control
@@ -177,6 +177,9 @@
/mob/living/simple_animal/revenant/ex_act(severity, target)
return 1 //Immune to the effects of explosions.
/mob/living/simple_animal/revenant/wave_ex_act(power, datum/wave_explosion/explosion, dir)
return power
/mob/living/simple_animal/revenant/blob_act(obj/structure/blob/B)
return //blah blah blobs aren't in tune with the spirit world, or something.
@@ -79,31 +79,27 @@
if (atmos_adjacent_turfs)
adjacent_turfs = atmos_adjacent_turfs.Copy()
else
adjacent_turfs = list()
return list() // don't bother checking diagonals, diagonals are going to be cardinal checks anyways.
if (!alldir)
return adjacent_turfs
var/turf/curloc = src
for (var/direction in GLOB.diagonals_multiz)
var/matchingDirections = 0
var/turf/S = get_step_multiz(curloc, direction)
if(!S)
var/turf/other
var/turf/mid
for (var/d in GLOB.diagonals)
other = get_step(src, d)
if(!other)
continue
// NS step
mid = get_step(src, NSCOMPONENT(d))
if((mid in adjacent_turfs) && (get_step(mid, EWCOMPONENT(d)) in adjacent_turfs))
adjacent_turfs += other
continue
// EW step
mid = get_step(src, EWCOMPONENT(d))
if((mid in adjacent_turfs) && (get_step(mid, NSCOMPONENT(d)) in adjacent_turfs))
adjacent_turfs += other
continue
for (var/checkDirection in GLOB.cardinals_multiz)
var/turf/checkTurf = get_step(S, checkDirection)
if(!S.atmos_adjacent_turfs || !S.atmos_adjacent_turfs[checkTurf])
continue
if (adjacent_turfs[checkTurf])
matchingDirections++
if (matchingDirections >= 2)
adjacent_turfs += S
break
return adjacent_turfs
/atom/proc/air_update_turf(command = 0)
-1
View File
@@ -240,7 +240,6 @@
desc = "Hey kid.. c'mere. Boss says we need to offload these, to any buyer, no questions asked. You pay us, we give you three of these guns, no strings attached. Locks are to ensure they get to PAYING customers."
cost = 2000
contraband = TRUE
can_private_buy = TRUE
contains = list(/obj/item/storage/fancy/cigarettes/derringer/smuggled,
/obj/item/storage/fancy/cigarettes/derringer/smuggled,
/obj/item/storage/fancy/cigarettes/derringer/smuggled,
+1 -3
View File
@@ -89,10 +89,8 @@
/datum/outfit/pirate/space
suit = /obj/item/clothing/suit/space/pirate
head = /obj/item/clothing/head/helmet/space/pirate/bandana
mask = /obj/item/clothing/mask/breath
suit_store = /obj/item/tank/internals/oxygen
ears = /obj/item/radio/headset/syndicate
id = /obj/item/card/id
id = /obj/item/card/id/pirate
/datum/outfit/pirate/space/captain
head = /obj/item/clothing/head/helmet/space/pirate
+4 -7
View File
@@ -206,6 +206,7 @@
icon_screen = "syndishuttle"
icon_keyboard = "syndie_key"
light_color = LIGHT_COLOR_RED
req_access = list(ACCESS_SYNDICATE)
possible_destinations = "pirateship_away;pirateship_home;pirateship_custom"
/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/pirate
@@ -214,8 +215,8 @@
shuttleId = "pirateship"
lock_override = CAMERA_LOCK_STATION
shuttlePortId = "pirateship_custom"
x_offset = 9
y_offset = 0
x_offset = 11
y_offset = 1
see_hidden = FALSE
/obj/docking_port/mobile/pirate
@@ -224,11 +225,7 @@
rechargeTime = 3 MINUTES
/obj/machinery/suit_storage_unit/pirate
suit_type = /obj/item/clothing/suit/space
helmet_type = /obj/item/clothing/head/helmet/space
mask_type = /obj/item/clothing/mask/breath
storage_type = /obj/item/tank/jetpack/void
// storage_type = /obj/item/tank/internals/oxygen
storage_type = /obj/item/tank/jetpack/carbondioxide
/obj/machinery/loot_locator
name = "Booty Locator"
+15 -8
View File
@@ -17,24 +17,29 @@
announceWhen = rand(4, 60)
supernova = new
SSsun.suns += supernova
if(prob(20))
power = rand(5,100) / 100
else
power = rand(5,5000) / 100
switch(rand(1,5))
if(1)
power = rand(5,100) / 100
if(2)
power = rand(5,500) / 100
if(3)
power = rand(5,1000) / 100
if(4, 5)
power = rand(5,5000) / 100
supernova.azimuth = rand(0, 359)
supernova.power_mod = 0
/datum/round_event/supernova/announce()
var/message = "Our tachyon-doppler array has detected a supernova in your vicinity. Peak flux from the supernova estimated to be [round(power,0.1)] times current solar flux. [power > 1 ? "Short burts of radiation may be possible, so please prepare accordingly." : ""]"
var/message = "[station_name()]: Our tachyon-doppler array has detected a supernova in your vicinity. Peak flux from the supernova estimated to be [round(power,0.1)] times current solar flux; if the supernova is close to your sun in the sky, your solars may receive this as a power boost.[power > 1 ? " Short burts of radiation may be possible, so please prepare accordingly." : ""] We hope you enjoy the light."
if(prob(power * 25))
priority_announce(message)
priority_announce(message, sender_override = "Nanotrasen Meteorology Division")
else
print_command_report(message)
/datum/round_event/supernova/start()
supernova.power_mod = 0.001 * power
var/explosion_size = rand(1000000000, 999999999)
var/explosion_size = rand(1000000000, 10000000000)
var/turf/epicenter = get_turf_in_angle(supernova.azimuth, SSmapping.get_station_center(), round(world.maxx * 0.45))
for(var/array in GLOB.doppler_arrays)
var/obj/machinery/doppler_array/A = array
@@ -51,13 +56,15 @@
supernova.power_mod = min(supernova.power_mod*1.2, power)
if(activeFor > endWhen-10)
supernova.power_mod /= 4
if(prob(round(supernova.power_mod)) && prob(5) && storm_count < 5 && !SSweather.get_weather_by_type(/datum/weather/rad_storm))
if(prob(round(supernova.power_mod*2)) && prob(3) && storm_count < 5 && !SSweather.get_weather_by_type(/datum/weather/rad_storm))
SSweather.run_weather(/datum/weather/rad_storm/supernova)
storm_count++
/datum/round_event/supernova/end()
SSsun.suns -= supernova
qdel(supernova)
priority_announce("The supernova's flux is now negligible. Radiation storms have ceased. Have a pleasant shift, [station_name()], and thank you for bearing with nature.",
sender_override = "Nanotrasen Meteorology Division")
/datum/weather/rad_storm/supernova
weather_duration_lower = 50
@@ -26,6 +26,17 @@
else
..()
/obj/item/reagent_containers/food/snacks/flatdough/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/kitchen/unrollingpin))
if(isturf(loc))
new /obj/item/reagent_containers/food/snacks/dough(loc)
to_chat(user, "<span class='notice'>You unflatten [src].</span>")
qdel(src)
else
to_chat(user, "<span class='warning'>You need to put [src] on a surface to undo the rolling!</span>")
else
..()
// sliceable into 3xdoughslices
/obj/item/reagent_containers/food/snacks/flatdough
@@ -98,6 +109,17 @@
else
..()
/obj/item/reagent_containers/food/snacks/piedough/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/kitchen/unrollingpin))
if(isturf(loc))
new /obj/item/reagent_containers/food/snacks/cakebatter(loc)
to_chat(user, "<span class='notice'>You unflatten [src].</span>")
qdel(src)
else
to_chat(user, "<span class='warning'>You need to put [src] on a surface to undo the rolling!</span>")
else
..()
/obj/item/reagent_containers/food/snacks/piedough
name = "pie dough"
desc = "Cook it to get a pie."
@@ -604,6 +604,14 @@
mix_message = "You hear faint sounds of gears turning as it mixes."
mix_sound = 'sound/machines/clockcult/steam_whoosh.ogg'
/datum/chemical_reaction/pinotmort
name = "Pinot Mort"
id = /datum/reagent/consumable/ethanol/pinotmort
results = list(/datum/reagent/consumable/ethanol/pinotmort = 4)
required_reagents = list(/datum/reagent/ash = 2, /datum/reagent/consumable/ethanol/lizardwine = 1, /datum/reagent/consumable/vitfro = 1)
mix_message = "You hear an undescribable scream as it mixes... You're not sure how to feel about this."
mix_sound = 'sound/effects/tendril_destroyed.ogg'
/datum/chemical_reaction/quadruplesec
name = "Quadruple Sec"
id = /datum/reagent/consumable/ethanol/quadruple_sec
@@ -206,6 +206,9 @@
/mob/living/simple_animal/hostile/retaliate/clown/insane/ex_act()
return
/mob/living/simple_animal/hostile/retaliate/clown/insane/wave_ex_act(power, datum/wave_explosion/explosion, dir)
return power
/mob/living/simple_animal/hostile/retaliate/clown/insane/Life()
timer--
if(target)
@@ -13,13 +13,15 @@
var/offset
while((offset = SSmapping.level_trait(other_z, ZTRAIT_DOWN)))
other_z += offset
if(other_z in .)
break // no infinite loops
. += other_z
other_z = center_z
while((offset = SSmapping.level_trait(other_z, ZTRAIT_UP)))
other_z += offset
if(other_z in .)
break // no infinite loops
. += other_z
return .
/proc/get_dir_multiz(turf/us, turf/them)
us = get_turf(us)
@@ -46,4 +48,4 @@
/turf/proc/below()
return get_step_multiz(src, DOWN)
@@ -67,6 +67,13 @@
matrixed_sections = MATRIX_RED_GREEN
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
/datum/sprite_accessory/ears/bunnyalt
name = "Bunny (Vegas)"
icon_state = "bunnyalt"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
/datum/sprite_accessory/ears/cat
name = "Cat"
icon_state = "cat"
@@ -258,6 +265,11 @@
icon_state = "bunny"
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/ears/mam_ears/bunnyalt
name = "Bunny (Vegas)"
icon_state = "bunnyalt"
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/ears/mam_ears/cat
name = "Cat"
icon_state = "cat"
+4
View File
@@ -13,6 +13,10 @@
/obj/effect/dummy/phased_mob/slaughter/ex_act()
return
/obj/effect/dummy/phased_mob/slaughter/wave_ex_act(power, datum/wave_explosion/explosion, dir)
return power
/obj/effect/dummy/phased_mob/slaughter/bullet_act()
return BULLET_ACT_FORCE_PIERCE
+3
View File
@@ -46,6 +46,9 @@
/mob/living/brain/ex_act() //you cant blow up brainmobs because it makes transfer_to() freak out when borgs blow up.
return
/mob/living/brain/wave_ex_act(power, datum/wave_explosion/explosion, dir)
return power
/mob/living/brain/blob_act(obj/structure/blob/B)
return
+1 -1
View File
@@ -370,7 +370,7 @@
breakouttime = 50
visible_message("<span class='warning'>[src] is trying to break [I]!</span>")
to_chat(src, "<span class='notice'>You attempt to break [I]... (This will take around 5 seconds and you need to stand still.)</span>")
if(do_after(src, breakouttime, 0, target = src))
if(do_after(src, breakouttime, 0, target = src, required_mobility_flags = MOBILITY_RESIST))
clear_cuffs(I, cuff_break)
else
to_chat(src, "<span class='warning'>You fail to break [I]!</span>")
@@ -1083,6 +1083,17 @@
. = ..()
set_species(race)
/mob/living/carbon/human/get_tooltip_data()
var/t_He = p_they(TRUE)
var/t_is = p_are()
. = list()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
if(skipface || get_visible_name() == "Unknown")
. += "You can't make out what species they are."
else
. += "[t_He] [t_is] a [dna.custom_species ? dna.custom_species : dna.species.name]"
SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, usr, .)
/mob/living/carbon/human/species/abductor
race = /datum/species/abductor
@@ -77,6 +77,8 @@
var/last_fire_update
var/hardcore_survival_score = 0
tooltips = TRUE
/// Unarmed parry data for human
/datum/block_parry_data/unarmed/human
parry_respect_clickdelay = TRUE
@@ -1,5 +1,5 @@
/datum/species/mammal
name = "Anthromorph"
name = "Anthropomorph"
id = SPECIES_MAMMAL
default_color = "4B4B4B"
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,HORNCOLOR,WINGCOLOR,HAS_FLESH,HAS_BONE)
@@ -20,7 +20,7 @@
allowed_limb_ids = list("mammal","aquatic","avian")
/datum/species/mammal/synthetic
name = "Synthetic Anthromorph"
name = "Synthetic Anthropomorph"
id = SPECIES_MAMMAL_SYNTHETIC
species_traits = list(MUTCOLORS,NOTRANSSTING,EYECOLOR,LIPS,HAIR,ROBOTIC_LIMBS,HAS_FLESH,HAS_BONE,WINGCOLOR,HORNCOLOR)
@@ -1,5 +1,5 @@
/datum/species/insect
name = "Anthromorphic Insect"
name = "Anthropomorphic Insect"
id = SPECIES_INSECT
say_mod = "chitters"
default_color = "00FF00"
@@ -1,5 +1,5 @@
/datum/species/fly
name = "Anthromorphic Fly"
name = "Anthropomorphic Fly"
id = SPECIES_FLY
say_mod = "buzzes"
species_traits = list(NOEYES,HAS_FLESH,HAS_BONE)
@@ -1,6 +1,6 @@
/datum/species/lizard
// Reptilian humanoids with scaled skin and tails.
name = "Anthromorphic Lizard"
name = "Anthropomorphic Lizard"
id = SPECIES_LIZARD
say_mod = "hisses"
default_color = "00FF00"
@@ -1,5 +1,5 @@
/datum/species/mush //mush mush codecuck
name = "Anthromorphic Mushroom"
name = "Anthropomorphic Mushroom"
id = SPECIES_MUSHROOM
mutant_bodyparts = list("caps" = "Round")
@@ -1,6 +1,6 @@
/datum/species/pod
// A mutation caused by a human being ressurected in a revival pod. These regain health in light, and begin to wither in darkness.
name = "Anthromorphic Plant"
name = "Anthropomorphic Plant"
id = SPECIES_POD
default_color = "59CE00"
species_traits = list(MUTCOLORS,EYECOLOR,CAN_SCAR,HAS_FLESH,HAS_BONE)
@@ -71,7 +71,7 @@
H.emote("spin")
/datum/species/pod/pseudo_weak
name = "Anthromorphic Plant"
name = "Anthropomorphic Plant"
id = SPECIES_POD_WEAK
species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,MUTCOLORS,CAN_SCAR,HAS_FLESH,HAS_BONE)
mutant_bodyparts = list("mcolor" = "FFFFFF","mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "mam_body_markings" = list(), "taur" = "None", "legs" = "Normal Legs")
@@ -438,6 +438,12 @@
return
..()
/mob/living/wave_ex_act(power, datum/wave_explosion/explosion, dir)
if(power > EXPLOSION_POWER_NORMAL_MOB_GIB)
gib()
adjustBruteLoss(EXPLOSION_POWER_STANDARD_SCALE_MOB_DAMAGE(power, explosion.mob_damage_mod))
return power
//Looking for irradiate()? It's been moved to radiation.dm under the rad_act() for mobs.
/mob/living/acid_act(acidpwr, acid_volume)
@@ -1,5 +1,4 @@
/mob/living/silicon/examine(mob/user) //Displays a silicon's laws to ghosts
. = ..()
if(laws && isobserver(user))
. += "<b>[src] has the following laws:</b>"
for(var/law in laws.get_law_list(include_zeroth = TRUE))
@@ -48,6 +48,9 @@
. += "<span class='warning'>It doesn't seem to be responding.</span>"
if(DEAD)
. += "<span class='deadsay'>It looks like its system is corrupted and requires a reset.</span>"
SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, usr, .)
. += "*---------*</span>"
. += ..()
@@ -1326,3 +1326,18 @@
var/datum/computer_file/program/robotact/program = modularInterface.get_robotact()
if(program)
program.force_full_update()
/mob/living/silicon/robot/get_tooltip_data()
var/t_He = p_they(TRUE)
var/t_is = p_are()
. = list()
var/borg_type = module ? module : "Default"
//This isn't even used normally, but if that ever changes, just uncomment this
/* var/obj/item/borg_chameleon/chameleon = locate() in src
if(!chameleon)
chameleon = locate() in src.module
if(chameleon?.active)
borg_type = "Engineering"
*/
. += "[t_He] [t_is] a [borg_type] unit"
SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, usr, .)
@@ -125,3 +125,5 @@
var/sleeper_g
var/sleeper_r
var/sleeper_nv
tooltips = TRUE
+2 -2
View File
@@ -59,8 +59,8 @@
/mob/living/silicon/ComponentInitialize()
. = ..()
AddElement(/datum/element/flavor_text, _name = "Silicon Flavor Text", _save_key = "silicon_flavor_text")
AddElement(/datum/element/flavor_text, "", "Temporary Flavor Text", "This should be used only for things pertaining to the current round!")
AddElement(/datum/element/flavor_text, _name = "Silicon Flavor Text", _always_show = TRUE, _save_key = "silicon_flavor_text")
AddElement(/datum/element/flavor_text, "", "Temporary Flavor Text", "This should be used only for things pertaining to the current round!", _always_show = TRUE)
AddElement(/datum/element/flavor_text, _name = "OOC Notes", _addendum = "Put information on ERP/vore/lewd-related preferences here. THIS SHOULD NOT CONTAIN REGULAR FLAVORTEXT!!", _always_show = TRUE, _save_key = "ooc_notes", _examine_no_preview = TRUE)
/mob/living/silicon/med_hud_set_health()
@@ -280,6 +280,9 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
if(3)
adjustBruteLoss(30)
/mob/living/simple_animal/hostile/guardian/wave_ex_act(power, datum/wave_explosion/explosion, dir)
adjustBruteLoss(EXPLOSION_POWER_STANDARD_SCALE_MOB_DAMAGE(power, explosion.mob_damage_mod * 0.33))
/mob/living/simple_animal/hostile/guardian/gib()
if(summoner)
to_chat(summoner, "<span class='danger'><B>Your [src] was blown up!</span></B>")
@@ -149,6 +149,9 @@
if(EXPLODE_LIGHT)
adjustBruteLoss(50)
/mob/living/simple_animal/hostile/megafauna/wave_ex_act(power, datum/wave_explosion/explosion, dir)
adjustBruteLoss(EXPLOSION_POWER_STANDARD_SCALE_MOB_DAMAGE(power, explosion.mob_damage_mod) / 2)
/// Sets the next time the megafauna can use a melee or ranged attack, in deciseconds
/mob/living/simple_animal/hostile/megafauna/proc/SetRecoveryTime(buffer_time, ranged_buffer_time)
recovery_time = world.time + buffer_time
@@ -59,6 +59,13 @@
if(3)
adjustBruteLoss(110)
/mob/living/simple_animal/hostile/asteroid/basilisk/wave_ex_act(power, datum/wave_explosion/explosion, dir)
. = ..()
if(power > EXPLOSION_POWER_NORMAL_MOB_GIB)
gib()
else
adjustBruteLoss(EXPLOSION_POWER_STANDARD_SCALE_MOB_DAMAGE(power, explosion.mob_damage_mod))
//Watcher
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher
name = "watcher"
@@ -130,11 +130,11 @@
QDEL_NULL(sord)
return ..()
/mob/living/simple_animal/hostile/syndicate/melee/bullet_act(obj/item/projectile/Proj)
if(prob(25))
return ..()
visible_message("<span class='danger'>[src] blocks [Proj] with its shield!</span>")
return BULLET_ACT_BLOCK
/mob/living/simple_animal/hostile/syndicate/melee/sword/bullet_act(obj/item/projectile/Proj)
if(prob(50))
visible_message("<span class='danger'>[src] blocks [Proj] with its shield!</span>")
return BULLET_ACT_BLOCK
return ..()
/mob/living/simple_animal/hostile/syndicate/melee/sword/space
icon_state = "syndicate_space_sword"
+1 -1
View File
@@ -152,7 +152,7 @@
else
//dot product of sun and panel -- Lambert's Cosine Law
cur_pow = cos(azimuth_current - sun_azimuth) * sun.power_mod
cur_pow = clamp(round(cur_pow, 0.01), 0, 1)
cur_pow = clamp(round(cur_pow, 0.01), 0, sun.power_mod)
total_flux += cur_pow
/obj/machinery/power/solar/process()
@@ -60,6 +60,13 @@
desc = "Designed to quickly reload revolvers. These rounds are manufactured within extremely tight tolerances, making them easy to show off trickshots with."
ammo_type = /obj/item/ammo_casing/c38/match
/obj/item/ammo_box/g4570
name = "ammo box (.45-70 GOVT)"
desc = "Brought to you at great expense,this box contains 10 more .45-70 GOVT bullets."
ammo_type = /obj/item/ammo_casing/g4570
icon_state = "45box"
max_ammo = 10
/obj/item/ammo_box/c9mm
name = "ammo box (9mm)"
icon_state = "9mmbox"
@@ -3,28 +3,17 @@
ammo_type = /obj/item/ammo_casing/c38
caliber = "38"
max_ammo = 2
multiload = FALSE
/obj/item/ammo_box/magazine/internal/derringer/ammo_count(countempties = 1)
if (!countempties)
var/boolets = 0
for(var/obj/item/ammo_casing/bullet in stored_ammo)
if(bullet.BB)
boolets++
return boolets
else
return ..()
/obj/item/ammo_box/magazine/internal/derringer/a357
name = "\improper derringer muzzle"
ammo_type = /obj/item/ammo_casing/a357
caliber = "357"
max_ammo = 2
multiload = FALSE
multiload = 0
/obj/item/ammo_box/magazine/internal/derringer/g4570
name = "\improper derringer muzzle"
ammo_type = /obj/item/ammo_casing/g4570
caliber = "45-70g"
max_ammo = 2
multiload = FALSE
multiload = 0
@@ -3,16 +3,14 @@
desc = "A easily concealable derringer. Uses .38 ammo"
icon = 'icons/obj/guns/projectile.dmi'
icon_state = "derringer"
flags_1 = CONDUCT_1
mag_type = /obj/item/ammo_box/magazine/internal/derringer
fire_delay = 5
obj_flags = UNIQUE_RENAME
fire_sound = 'sound/weapons/revolvershot.ogg'
casing_ejector = FALSE
w_class = WEIGHT_CLASS_TINY
/obj/item/gun/ballistic/derringer/Initialize()
..()
transform *= 0.8 //Spriter too lazy to make icons smaller than default revolvers, local coder hacks in solution.
/obj/item/gun/ballistic/derringer/get_ammo(countchambered = FALSE, countempties = TRUE)
var/boolets = 0 //legacy var name maturity
if (chambered && countchambered)
@@ -27,7 +25,7 @@
return
var/num_loaded = magazine.attackby(A, user, params, 1)
if(num_loaded)
to_chat(user, "<span class='notice'>You load [num_loaded] shell\s into \the [src].</span>")
to_chat(user, "<span class='notice'>You load [num_loaded] bullet\s into \the [src].</span>")
playsound(user, 'sound/weapons/bulletinsert.ogg', 60, 1)
A.update_icon()
update_icon()
@@ -1490,6 +1490,25 @@ All effects don't start immediately, but rather get worse over time; the rate is
M.stuttering = min(M.stuttering + 3, 3)
..()
/datum/reagent/consumable/ethanol/pinotmort
name = "Pinot Mort"
description = "If you just can't get enough of lavaland."
color = rgb(167, 36, 36)
boozepwr = 20
quality = DRINK_FANTASTIC
taste_description = "death, ash and lizards"
glass_icon_state = "pinotmort"
glass_name = "Pinot Mort"
glass_desc = "The taste of Lavaland served in a legion skull. You feel like you might regret drinking this."
value = REAGENT_VALUE_UNCOMMON
/datum/reagent/consumable/ethanol/pinotmort/on_mob_life(mob/living/carbon/M)
if((islizard(M) && M.mind.assigned_role == "Ash Walker") || ispodperson(M) && M.mind.assigned_role == "Lifebringer" || isgolem(M))
M.heal_bodypart_damage(1, 1)
M.adjustBruteLoss(-2,0)
. = 1
return ..()
/datum/reagent/consumable/ethanol/triple_sec
name = "Triple Sec"
description = "A sweet and vibrant orange liqueur."
@@ -44,6 +44,26 @@
desc = "A small bottle. Contains epinephrine - used to stabilize patients."
list_reagents = list(/datum/reagent/medicine/epinephrine = 30)
/obj/item/reagent_containers/glass/bottle/bicaridine
name = "bicaridine bottle"
desc = "A small bottle. Contains bicaridine - used to treat brute damage."
list_reagents = list(/datum/reagent/medicine/bicaridine = 30)
/obj/item/reagent_containers/glass/bottle/kelotane
name = "kelotane bottle"
desc = "A small bottle. Contains kelotane - used to treat burn damage."
list_reagents = list(/datum/reagent/medicine/kelotane = 30)
/obj/item/reagent_containers/glass/bottle/antitoxin
name = "anti-toxin bottle"
desc = "A small bottle. Contains anti-toxin - used to treat minor poisoning."
list_reagents = list(/datum/reagent/medicine/antitoxin = 30)
/obj/item/reagent_containers/glass/bottle/dexalin
name = "dexalin bottle"
desc = "A small bottle. Contains dexalin - used to treat minor suffocation."
list_reagents = list(/datum/reagent/medicine/dexalin = 30)
/obj/item/reagent_containers/glass/bottle/toxin
name = "toxin bottle"
desc = "A small bottle of toxins. Do not drink, it is poisonous."
@@ -108,5 +108,8 @@
/obj/effect/dummy/phased_mob/spell_jaunt/ex_act(blah)
return
/obj/effect/dummy/phased_mob/spell_jaunt/wave_ex_act(power, datum/wave_explosion/explosion, dir)
return power
/obj/effect/dummy/phased_mob/spell_jaunt/bullet_act(blah)
return BULLET_ACT_FORCE_PIERCE
@@ -90,6 +90,9 @@
/obj/effect/dummy/phased_mob/shadow/ex_act()
return
/obj/effect/dummy/phased_mob/shadow/wave_ex_act(power, datum/wave_explosion/explosion, dir)
return power
/obj/effect/dummy/phased_mob/shadow/bullet_act()
return BULLET_ACT_FORCE_PIERCE
@@ -751,7 +751,6 @@
//phase 2
var/static/regex/awoo_words = regex("howl|awoo|bark")
var/static/regex/nya_words = regex("nya|meow|mewl")
var/static/regex/sleep_words = regex("sleep|slumber|rest")
var/static/regex/strip_words = regex("strip|derobe|nude|at ease|suit off")
var/static/regex/walk_words = regex("slow down|walk")
var/static/regex/run_words = regex("run|speed up")
@@ -1096,17 +1095,6 @@
H.emote("me", EMOTE_VISIBLE, "lets out a nya!")
E.cooldown += 1
//SLEEP
else if((findtext(message, sleep_words)))
for(var/mob/living/carbon/C in listeners)
var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall)
switch(E.phase)
if(2 to INFINITY)
C.Sleeping(45 * power_multiplier)
E.cooldown += 10
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "<span class='notice'>Drowsiness suddenly overwhelms you as you fall asleep!</b></span>"), 5)
to_chat(user, "<span class='notice'><i>You send [C] to sleep.</i></span>")
//STRIP
else if((findtext(message, strip_words)))
for(var/V in listeners)
+31 -2
View File
@@ -51,7 +51,7 @@ Notes:
/datum/tooltip/proc/show(atom/movable/thing, params = null, title = null, content = null, theme = "default", special = "none")
if (!thing || !params || (!title && !content) || !owner || !isnum(world.icon_size))
return 0
return FALSE
if (!init)
//Initialize some vars
init = 1
@@ -83,7 +83,7 @@ Notes:
if (queueHide)
hide()
return 1
return TRUE
/datum/tooltip/proc/hide()
@@ -122,4 +122,33 @@ Notes:
if(user.client && user.client.tooltips)
user.client.tooltips.hide()
/**
* # `get_tooltip_data()`
*
* If set, will return a list for the tooltip (that will also be put together in a `Join()`)
* However, if returning `null`, falls back to default behavior, which is `examine(src)`, and it will definitely include
* images since it is the default behavior
*
* Though no tooltips will be created for atoms that have `tooltips = FALSE`
*/
/atom/movable/proc/get_tooltip_data()
return
/atom/movable/MouseEntered(location, control, params)
. = ..()
if(tooltips)
if(!QDELETED(src))
var/list/examine_list = examine(src)
var/get_tooltip_data = get_tooltip_data()
if(length(get_tooltip_data))
examine_list = get_tooltip_data
var/examine_data = examine_list.Join("<br />")
openToolTip(usr, src, params, title = name, content = examine_data)
/atom/movable/MouseExited(location, control, params)
. = ..()
closeToolTip(usr)
/client/MouseDown(object, location, control, params)
closeToolTip(usr)
. = ..()
+3 -3
View File
@@ -65,12 +65,12 @@
.hisgrace .wrap {border-color: #7C1414;}
.hisgrace .content {color: #15D512; border-color: #9D1414; background-color: #861414;}
/* TG: Themes */
/* ScreenUI */
.midnight .wrap {border-color: #2B2B33;}
.midnight .content {color: #6087A0; border-color: #2B2B33; background-color: #36363C;}
.plasmafire .wrap {border-color: #21213D;}
.plasmafire .content {color: #FFA800 ; border-color: #21213D; background-color:#1D1D36;}
@@ -85,7 +85,7 @@
.clockwork .wrap {border-color: #170800;}
.clockwork .content {color: #B18B25; border-color: #000000; background-color: #5F380E;}
</style>
</head>
@@ -7,6 +7,13 @@
// Ammunition
/datum/uplink_item/ammo/derringer
name = "Ammo Box - .45-70 GOVT"
desc = "Contains 10 additional .45-70 GOVT rounds. Caliber is exceedingly rare, and thus, comes at a premium."
item = /obj/item/ammo_box/g4570
cost = 5
include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/ammo/pistol
name = "10mm Handgun Magazine"
desc = "An additional 8-round 10mm magazine; compatible with the Stechkin Pistol. These rounds \
@@ -9,7 +9,7 @@
/datum/uplink_item/stealthy_weapons/telescopicbat
name = "Telescopic Baseball Bat"
desc = "A robust telescopic baseball bat that hits like a truck and can be consealed when collapsed."
desc = "A robust telescopic baseball bat that hits like a truck and can be concealed when collapsed."
item = /obj/item/melee/baseball_bat/telescopic
cost = 2
@@ -49,7 +49,7 @@
name = "Compact Derringer"
desc = "An easily concealable handgun capable of firing .357 rounds. Comes in an inconspicuious packet of cigarettes with additional munitions."
item = /obj/item/storage/fancy/cigarettes/derringer
cost = 8
cost = 6
surplus = 30
/datum/uplink_item/stealthy_weapons/derringerpack/purchase(mob/user, datum/component/uplink/U)
@@ -57,7 +57,7 @@
item = /obj/item/storage/fancy/cigarettes/derringer/gold
..()
/datum/uplink_item/stalthy_weapons/derringerpack_nukie
/datum/uplink_item/stealthy_weapons/derringerpack_nukie
name = "Antique Derringer"
desc = "An easy to conceal, yet extremely deadly handgun, capable of firing .45-70 Govt rounds. Comes in a unique pack of cigarettes with additional munitions."
item = /obj/item/storage/fancy/cigarettes/derringer/midworld
+1
View File
@@ -8,6 +8,7 @@
/obj/item/kitchen/fork = 6,
/obj/item/kitchen/knife = 6,
/obj/item/kitchen/rollingpin = 4,
/obj/item/kitchen/unrollingpin = 4,
/obj/item/reagent_containers/food/drinks/drinkingglass = 8,
/obj/item/clothing/suit/apron/chef = 2,
/obj/item/storage/box/cups = 2,