Merge remote-tracking branch 'upstream/master' into rp-markings-attempt-two
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
. = ..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user