Wild West Props (#34376)

* Wild West Props

* finish

* bug testing
This commit is contained in:
Kurfursten
2023-12-24 03:44:17 -06:00
committed by GitHub
parent 0c13316d2b
commit ab4115a552
19 changed files with 419 additions and 9 deletions

View File

@@ -3,7 +3,7 @@
#define REAGENT_STATE_GAS 3
#define FOOD_METABOLISM 0.4
#define REAGENTS_OVERDOSE 30
#define REM REAGENTS_EFFECT_MULTIPLIER
#define REM REAGENTS_EFFECT_MULTIPLIER //0.5
// Use in chem.flags.
#define CHEMFLAG_DISHONORABLE 1
@@ -524,6 +524,7 @@
#define CAFFEINE "caffeine"
#define MIMOSA "mimosa"
#define LEMONDROP "lemondrop"
#define FEVERFEW "feverfew"
#define ACRYLIC "acrylic"
#define ACETONE "acetone"

View File

@@ -203,6 +203,7 @@ var/list/global/id_cards = list()
var/registered_name = "Unknown" // The name registered_name on the card
slot_flags = SLOT_ID
var/show_biometrics = TRUE //Necessary to display the below stats
var/blood_type = "\[UNSET\]"
var/dna_hash = "\[UNSET\]"
var/fingerprint_hash = "\[UNSET\]"
@@ -236,12 +237,13 @@ var/list/global/id_cards = list()
user.show_message(text("The current assignment on the card is [assignment]."),1)
else
user.show_message(text("No assignment has been set. Use an identification computer to edit."),1)
if (dna_hash == "\[UNSET\]")
user.show_message(text("No biometric data referenced. Use a body scanner at Medbay to imprint."),1)
else
user.show_message("Blood Type: [blood_type].",1)
user.show_message("DNA: [dna_hash].",1)
user.show_message("Fingerprint: [fingerprint_hash].",1)
if(show_biometrics)
if (dna_hash == "\[UNSET\]")
user.show_message(text("No biometric data referenced. Use a body scanner at Medbay to imprint."),1)
else
user.show_message("Blood Type: [blood_type].",1)
user.show_message("DNA: [dna_hash].",1)
user.show_message("Fingerprint: [fingerprint_hash].",1)
if(dchip && dchip.stamped.len)
to_chat(user,"<span class='bad'>It has a demotion modchip with the following stamps: [english_list(uniquenamelist(dchip.stamped))].</span>")

View File

@@ -735,6 +735,16 @@
block = HEADACHEBLOCK
..()
/obj/item/weapon/dnainjector/nofail/eat
name = "DNA-Injector (Eat)"
desc = "Now I am become gut, devourer of worlds."
datatype = DNA2_BUF_SE
value = 0xFFF
/obj/item/weapon/dnainjector/nofail/eat/initialize()
block = EATBLOCK
..()
/obj/item/weapon/dnainjector/nofail/antiepi
name = "DNA-Injector (Anti-Epi.)"
desc = "Will fix you up from shaking the room."

View File

@@ -272,7 +272,8 @@ var/global/list/dockinglights = list()
/obj/machinery/docklight/New()
..()
dockinglights += src
if(!triggered) //don't add the permanently-on lights
dockinglights += src
/obj/machinery/docklight/Destroy()
dockinglights -= src
@@ -292,3 +293,10 @@ var/global/list/dockinglights = list()
<ul>
<li>[format_tag("ID Tag","id_tag")]</li>
</ul>"}
/obj/machinery/docklight/alwayson
triggered = 1
/obj/machinery/docklight/alwayson/New()
..()
update_icon()

View File

@@ -221,6 +221,9 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
if(reagents.has_reagent(CLOTTING_AGENT) || reagents.has_reagent(BIOFOAM)) //Clotting agent and biofoam stop bleeding entirely
blood_factor = 0
if(reagents.has_reagent(FEVERFEW)) //A powerful anticoagulant that overrides clotting agents
blood_factor = 1
if(bodytemperature < 170) //Cryo stops bleeding entirely
blood_factor = 0

View File

@@ -90,6 +90,15 @@
max_shells = 3
silencer_offset = list(22,5)
/obj/item/weapon/gun/projectile/shotgun/pump/combat/pistol
name = "shotgun pistol"
desc = "Even shortier than the combat shorty."
icon_state = "scshotgun"
w_class = W_CLASS_SMALL
slot_flags = SLOT_BELT
max_shells = 1
silencer_offset = list(22,5)
//this is largely hacky and bad :( -Pete
/obj/item/weapon/gun/projectile/shotgun/doublebarrel
name = "double-barreled shotgun"

View File

@@ -1263,3 +1263,14 @@ var/list/laser_tag_vests = list(/obj/item/clothing/suit/tag/redtag, /obj/item/cl
smoke.set_up(3, 0, T)
smoke.start()
return 1
/obj/item/projectile/beam/armawhip
name = "bullwhip"
icon = 'icons/obj/projectiles.dmi'
icon_state = "whip"
fire_sound = 'sound/weapons/whip_crack.ogg'
travel_range = 5
damage = 10
damage_type = BRUTE
pass_flags = PASSTABLE
eyeblur = 0

View File

@@ -14,7 +14,11 @@
SHC = (for(components of recipe) total_SHC *= component SHC)
*///NO DON'T DO THAT, IF YOU'RE NOT SURE JUST KEEP IT AT WATER'S. IF YOU GET SOMETHING ABOVE 10 LET ALONE IN THE HUNDREDS YOU'RE PROBABLY DOING SOMETHING VERY WRONG
NO DON'T DO THAT, IF YOU'RE NOT SURE JUST KEEP IT AT WATER'S. IF YOU GET SOMETHING ABOVE 10 LET ALONE IN THE HUNDREDS YOU'RE PROBABLY DOING SOMETHING VERY WRONG
It is very common to use REAGENTS_METABOLISM (0.2) or REM / REGEANTS_EFFECT_MULTIPLIER (0.5) in this file.
*/
/datum/reagent
var/name = "Reagent"
@@ -6129,6 +6133,20 @@ var/procizine_tolerance = 0
color = "#D9C0E7" //rgb: 217, 192, 231
custom_metabolism = 0.1
//Anticoagulant. Great for helping the body fight off viruses but makes one vulnerable to pain, bleeding, and brute damage.
/datum/reagent/antipathogenic/feverfew
name = "Feverfew"
id = FEVERFEW
description = "Feverfew is a natural anticoagulant useful in fending off viruses, but it leaves one vulnerable to pain and bleeding."
color = "#b5651d"
pain_resistance = -25
data = list ("threshold" = 80)
/datum/reagent/feverfew/on_mob_life(var/mob/living/M)
if(..())
return 1
M.adjustBruteLoss(5 * REM) //2.5 per tick, human healing is around 1.5~2 so this is just barely noticable
/datum/reagent/caffeine
name = "Caffeine"
id = CAFFEINE

View File

@@ -545,3 +545,14 @@ var/global/list/valid_random_food_types = existing_typesof(/obj/item/weapon/reag
desc = pick("Whichever nerves were keeping it wriggling have been ripped off by now.", "It's a lot more foul smelling once you bite into it.", "There's some slimy substance leaking out of it.", "Was this really a good idea?")
else
desc = pick("There's barely anything left of it.", "It could have lived happily in your brain, you know.", "It was only here to help.", "Poor thing.", "You monster.", "At least it's nutritious.")
/obj/item/weapon/reagent_containers/food/snacks/meat/bullmeat
name = "carne de lidia"
desc = "En algunos lugares, la tauromaquia es incruenta. Aqui no."
icon_state = "bearmeat"
/obj/item/weapon/reagent_containers/food/snacks/meat/bullmeat/New()
..()
reagents.add_reagent(NUTRIMENT, 12)
reagents.add_reagent(BICARIDINE, 5)
bitesize = 3

View File

@@ -515,6 +515,14 @@
..()
reagents.add_reagent(ARITHRAZINE, 10)
/obj/item/weapon/reagent_containers/pill/lithotorcrazine
name = "lithotorcrazine pill"
desc = "Shields the body against radiation buildup, but does not cure it. Lasts around 5 minutes."
icon_state = "pill38"
/obj/item/weapon/reagent_containers/pill/lithotorcrazine/New()
..()
reagents.add_reagent(LITHOTORCRAZINE, 30)
/obj/item/weapon/reagent_containers/pill/nanofloxacin
name = "nanofloxacin pill"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 126 KiB

BIN
icons/turf/meat.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@@ -0,0 +1,328 @@
//Turf
/turf/unsimulated/wall/meat
name = "?"
desc = null
icon = 'icons/turf/meat.dmi'
icon_state = "meat255"
/turf/unsimulated/wall/meat/canSmoothWith()
return null
/turf/unsimulated/wall/guts
name = "guts"
desc = "Some kind of twisting intestinal layers."
icon = 'icons/turf/meat.dmi'
icon_state = "guts0"
walltype = "guts"
/turf/unsimulated/wall/guts/canSmoothWith()
var/static/list/smoothables = list(/turf/unsimulated/wall/guts)
return smoothables
/turf/simulated/floor/plating/flesh
name = "?"
desc = null
icon = 'icons/turf/meat.dmi'
icon_state = "flesh"
/turf/simulated/floor/plating/flesh/New()
..()
var/image/img = image('icons/turf/rock_overlay.dmi', "flesh_overlay",layer = SIDE_LAYER)
img.pixel_x = -4*PIXEL_MULTIPLIER
img.pixel_y = -4*PIXEL_MULTIPLIER
img.plane = relative_plane(ABOVE_TURF_PLANE)
overlays += img
//Objects
/obj/item/voucher/free_item/scrip
name = "scrip"
desc = "Redeem at a Deepvein Trust vendor."
freebies = list()
vend_amount = 1
single_items = 1
shred_on_use = 1
/obj/item/voucher/free_item/scrip/liberator
name = "liberator scrip"
freebies = list(/obj/item/weapon/gun/energy/laser/liberator)
/obj/item/voucher/free_item/scrip/drill
name = "drill scrip"
freebies = list(/obj/item/weapon/pickaxe/drill)
/obj/item/voucher/free_item/scrip/lazarus
name = "lazarus scrip"
freebies = list(/obj/item/weapon/lazarus_injector)
/obj/item/voucher/free_item/scrip/rifle
name = "rifle scrip"
freebies = list(/obj/item/weapon/gun/projectile/hecate/hunting)
/obj/item/voucher/free_item/scrip/sausage
name = "sausage scrip"
freebies = list(/obj/item/weapon/reagent_containers/food/snacks/sausage)
/obj/item/voucher/free_item/scrip/threefiftyseven
name = ".357 scrip"
freebies = list(/obj/item/ammo_storage/box/a357)
/obj/machinery/vending/deepvein
name = "\improper Deepvein Trust Company Store"
desc = "Use your 'wages' here!"
product_slogans = list(
"Please have your scrip ready for vending."
)
product_ads = list(
"Insert scrip."
)
vend_reply = "Scrip, scip, lovely scrip!"
icon_state = "mining"
vouched = list(
/obj/item/weapon/pickaxe/drill = 10,
/obj/item/weapon/lazarus_injector = 10,
/obj/item/weapon/gun/energy/laser/liberator = 10,
/obj/item/weapon/gun/projectile/hecate/hunting = 10,
/obj/item/weapon/reagent_containers/food/snacks/sausage = 10,
/obj/item/ammo_storage/box/a357 = 20
)
/obj/item/weapon/card/id/deputy
name = "deputy badge"
desc = "A metal star that signifies one as a friend of Old Zounds. You're my favorite deputy."
assignment = "Deputy"
icon_state = "deputystar"
//access = list(access_deputy)
show_biometrics = FALSE
/obj/machinery/media/jukebox/folk
name = "Old Timey Jukebox"
change_cost = 0
playlist_id="folk"
// Must be defined on your server.
playlists=list(
"folk" = "House Specials"
)
/obj/structure/uraninitecrystal
name = "glowing crystal"
icon = 'icons/obj/mining.dmi'
icon_state = "crystal"
light_color = "#00FF00"
anchored = TRUE
var/lit = 0
/obj/structure/uraninitecrystal/New()
..()
set_light(2, l_color = light_color)
/obj/structure/uraninitecrystal/bullet_act()
rad_pulse(10)
/obj/structure/uraninitecrystal/kick_act()
shake(1, 3)
rad_pulse(10)
/obj/structure/uraninitecrystal/ex_act()
rad_pulse(4)
..()
/obj/structure/uraninitecrystal/proc/rad_pulse(remaining)
lit += remaining
lit = clamp(0,lit,40)
if(!lit)
set_light(2, l_color = light_color)
return
set_light(6, l_color = light_color)
emitted_harvestable_radiation(get_turf(src), 20, range = 5)
for(var/mob/living/carbon/M in view(src,3))
var/rads = 50 * sqrt( 1 / (get_dist(M, src) + 1) )
M.apply_radiation(round(rads/2),RAD_EXTERNAL)
spawn(2 SECONDS)
rad_pulse(-2) //After 2 seconds, recurse with decrement
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/dorf/New()
..()
reagents.add_reagent(MANLYDORF, 50)
on_reagent_change()
/obj/structure/cartrail
name = "rail"
desc = "A hunk of shaped metal."
icon = 'icons/obj/mining.dmi'
icon_state = "rail"
/obj/structure/rustycart
name = "rusty cart"
desc = "This isn't going anywhere fast."
//old icon and state in 'icons/obj/vehicles.dmi' "mining_cart"
icon = 'icons/obj/storage/storage.dmi'
icon_state = "miningcar"
anchored = TRUE
density = TRUE
/obj/structure/flora/desert
icon = 'icons/obj/flora/ausflora.dmi'
shovelaway = TRUE
/obj/structure/flora/desert/barrelcactus
name = "barrel cactus"
desc = "That's a barrel. Wait, no."
anchored = TRUE
icon_state = "barrelcactus_1"
/obj/structure/flora/desert/barrelcactus/New()
..()
icon_state = "barrelcactus_[rand(1,2)]"
/obj/structure/flora/desert/barrelcactus/Crossed(atom/movable/AM)
..()
if(iscarbon(AM))
var/mob/living/carbon/L = AM
L.reagents.add_reagent(FEVERFEW,3) //This will take 15 ticks to clear, doing about 22 brute (but brute regens easily)
to_chat(L, "<span class='danger'>You prick yourself on \the [src].</span>")
/obj/structure/flora/desert/saguaro
name = "saguaro cactus"
desc = "The space saguaro gets its name from the Earth saguaro, which comes from an indigenous Opata word that refers to saguaros."
density = TRUE
pass_flags_self = PASSTABLE | PASSGLASS
anchored = TRUE
icon_state = "saguaro_1"
/obj/structure/flora/desert/saguaro/Bumped(atom/movable/AM)
..()
if(iscarbon(AM))
var/mob/living/carbon/L = AM
L.reagents.add_reagent(FEVERFEW,3)
to_chat(L, "<span class='danger'>You prick yourself on \the [src].</span>")
/obj/structure/flora/desert/saguaro/New()
..()
icon_state = "saguaro_[rand(1,2)]"
/obj/structure/flora/desert/tumbleweed
name = "tumbleweed"
desc = "Please, just tumble away. You might need my help some day. Tumble away."
icon_state = "tumbleweed"
/obj/structure/flora/desert/tumbleweed/New()
..()
processing_objects += src
/obj/structure/flora/desert/tumbleweed/Destroy()
processing_objects -= src
..()
/obj/structure/flora/desert/tumbleweed/process()
if(prob(98))
return
throw_at(get_turf(pick(orange(7,src))), 10,2)
/obj/structure/sarcophagus
name = "sarcophagus"
desc = "Although often associated with Egyptians, sarcophagus is a Greek word meaning 'eater of flesh'. It refers to any stone burial receptacle."
density = TRUE
anchored = TRUE
icon = 'icons/obj/stationobjs.dmi'
icon_state = "morguestone"
///////////////Effects//////////////
/obj/effect/floating_candle
name = "floating candle"
desc = "The ghost of a candle? This is extremely cursed."
icon = 'icons/obj/candle.dmi'
icon_state = "floatcandle"
anchored = TRUE
/obj/effect/floating_candle/New()
..()
set_light(4, 2, LIGHT_COLOR_CYAN)
/obj/effect/tractorbeam
name = "tractor beam"
desc = "???"
icon = null
icon_state = null
anchored = TRUE
density = TRUE
var/turf/endpoint
/obj/effect/tractorbeam/New()
..()
set_light(4, 8, LIGHT_COLOR_HALOGEN)
for(var/obj/effect/landmark/L in landmarks_list)
if(L.name == "tractor beam")
endpoint = get_turf(L)
break
/obj/effect/tractorbeam/Bumped(atom/movable/AM)
AM.forceMove(endpoint)
if(ismob(AM))
AM << 'sound/music/xfiles.ogg'
to_chat(AM, "<span class='warning'>Gravity seems to lapse as you float into the sky!</span>")
//Landmarks
/obj/effect/landmark/respawner/desert
name = "Wild West respawner"
///Spells
/mob/living/proc/mountup()
for(var/spell/mountup/M in spell_list)
M.cast(src,src)
return
/spell/mountup
name = "Mount Up"
desc = "Mount a steed."
charge_max = 0
spell_flags = 0
cast_delay = 2 SECONDS
var/obj/effect/overlay/my_overlay
var/active = FALSE
var/remembered_speed
/spell/mountup/New()
..()
my_overlay = new /obj/effect/overlay/horsebroom_mount
/spell/mountup/choose_targets(var/mob/user = usr)
return list(user)
/spell/mountup/perform(mob/user = usr, skipcharge = 0, list/target_override)
cast_delay = active ? 0 : initial(cast_delay)
..()
/spell/mountup/cast(var/list/targets, var/mob/user)
if(!active)
var/choosefile = pick('sound/items/jinglebell1.ogg','sound/items/jinglebell2.ogg','sound/items/jinglebell3.ogg')
playsound(user, choosefile, 100, 1)
user.register_event(/event/damaged, src, nameof(src::dismount()))
user.overlays.Add(my_overlay)
active = TRUE
if(istype(user,/mob/living/simple_animal))
var/mob/living/simple_animal/SA = user
remembered_speed = SA.speed
SA.speed = max(0.6, SA.speed-0.4)
else
dismount()
/spell/mountup/proc/dismount(kind, amount)
var/mob/living/user = src.holder
playsound(user, 'sound/voice/cow.ogg', 100, 1)
user.overlays.Remove(my_overlay)
user.unregister_event(/event/damaged, src, nameof(src::dismount()))
active = FALSE
if(istype(user,/mob/living/simple_animal))
var/mob/living/simple_animal/SA = user
SA.speed = remembered_speed
/obj/effect/overlay/horsebroom_mount
name = "steed"
icon = 'icons/mob/in-hand/left/items_lefthand.dmi'
icon_state = "horsebroom0"
layer = VEHICLE_LAYER
plane = FLOAT_PLANE + 2
mouse_opacity = 0 // Probably does nothing on overlays

BIN
sound/music/xfiles.ogg Normal file

Binary file not shown.

View File

@@ -2916,5 +2916,6 @@
#include "maps\RandomZLevels\stationCollision.dm"
#include "maps\RandomZLevels\tomb.dm"
#include "maps\RandomZLevels\wildwest.dm"
#include "maps\RandomZLevels\wildwest_props.dm"
#include "maps\wheelstation\areas.dm"
// END_INCLUDE