Merge remote-tracking branch 'upstream/master' into funnylore

This commit is contained in:
Dahlular
2021-07-06 08:17:26 -06:00
186 changed files with 9568 additions and 7332 deletions
@@ -22,3 +22,8 @@
description = "<span class='warning'>I feel like I'm held together by flimsy string, and could fall apart at any moment!</span>\n"
mood_change = -4
timeout = 2 MINUTES
/datum/mood_event/copium
description = "<span class='nicegreen'>Things are going to be okay, right?</span>\n"
mood_change = 3
timeout = 3 MINUTES
@@ -40,7 +40,7 @@ GLOBAL_DATUM_INIT(lore_terminal_controller, /datum/lore_controller, new)
/obj/machinery/computer/lore_terminal/proc/get_entries()
for(var/X in GLOB.lore_terminal_controller.entries)
var/datum/lore_entry/instance = X
if(instance.access_tag == access_tag)
if(instance.access_tag == access_tag || instance.access_tag == "all")
entries += instance
/obj/machinery/computer/lore_terminal/attack_hand(mob/user)
@@ -198,7 +198,7 @@ SPECIAL KEYS RESPOND AS FOLLOWS:
` = newline (br) (AKA when you press enter)
~ = horizontal line (hr)
= bullet point
= bullet point //Bullet points are not working? - archie
*/
@@ -208,7 +208,13 @@ SPECIAL KEYS RESPOND AS FOLLOWS:
path = "lore_entries/welcome.txt"
access_tag = "kncommon"
/datum/lore_entry/station/meltdown_proceedures
/datum/lore_entry/all
name = "nuclear_authdisk_instructions.mail"
title = "Handling the Nuclear Authentication Disk and You!"
content = "SYSADMIN -> allcrew@seegnet.kin. RE: The Nuclear Authentication Disk. ` Greetings staff members! We're aware of the questions you have in regards to the Nuclear Authentication disk. The disk itself contains the codes needed to unlock nuclear devices used in a Nuclear Emergency and trigger a station self-destruction sequence. ` It is the duty of every member of this crew to take responsibility for the disk in the off chance that station command is currently absent. ` Even though Layenia itself is a mobile facility and prevents Disk Triangulation in most circumstances, it is still important to hold onto the disk even when not needed- it is a good formality and keeps things secure! ` If the disk location is unknown, look for a red pinpointer, the Head of Security and the Captain should always have one in their offices or lockers. These will help you locate the disk. ` If the disk is in enemy hands, call all hands on deck immediately and order a red alert. ` ` Protect the disk with your life, for the lives of the station's crew depend on it. Stay safe through vigilance."
access_tag = "all"
/datum/lore_entry/all/meltdown_proceedures
name = "meltdown_proceedures.mail"
title = "Emergency proceedures regarding nuclear meltdowns:"
path = "lore_entries/meltdowns.txt"
+3 -2
View File
@@ -39,7 +39,8 @@
/obj/effect/collapse,
/obj/effect/particle_effect/ion_trails,
/obj/effect/dummy/phased_mob,
/obj/effect/immovablerod
/obj/effect/immovablerod,
/obj/effect/crystalline_reentry
)) //Gotta make sure certain things can phase through it otherwise the railings also block them.
/obj/structure/railing/CanPass(atom/movable/mover, turf/target)
@@ -158,4 +159,4 @@
else
usr.forceMove(get_turf(src))
usr.visible_message("<span class='warning'>[user] climbed over \the [src]!</span>")
usr.visible_message("<span class='warning'>[user] climbed over \the [src]!</span>")
@@ -111,3 +111,59 @@
/obj/effect/mob_spawn/human/exiled/special(mob/living/carbon/human/new_spawn)
ADD_TRAIT(new_spawn,TRAIT_EXEMPT_HEALTH_EVENTS,GHOSTROLE_TRAIT)
//Villagers: Once a group of servants that worshiped their 'Gods-Kings', but now finally free after their overlords have abandoned the planet.
/obj/effect/mob_spawn/human/villager
name = "used bed"
desc = "Still warm."
mob_name = "villager"
job_description = "Villagers"
icon = 'icons/obj/objects.dmi'
icon_state = "bed"
roundstart = FALSE
death = FALSE
mob_species = /datum/species/human
short_desc = "You're finally free."
flavour_text = "After the God-Kings have abandoned the land, your people are finally free from their oppression. \
Still, the reasons for their departure are a mystery, and now your people need to work together to survive in this world."
assignedrole = "Free villager"
mirrorcanloadappearance = TRUE
/obj/effect/mob_spawn/human/villager/Initialize(mapload)
. = ..()
var/arrpee = rand(1,3)
switch(arrpee)
if(1)
flavour_text += "You were a guard, serving your gods to keep control of you own people. \
Now that they left, you work to defend the village."
outfit.head = /obj/item/clothing/head/pharaoh
outfit.uniform = /obj/item/clothing/under/mummy
outfit.suit = /obj/item/clothing/suit/nemes
outfit.shoes = /obj/item/clothing/shoes/sandal
outfit.back = /obj/item/storage/backpack/satchel/leather
outfit.implants = list(/obj/item/implant/exile) //Made it so they cannot simply exit through the gateway at will.
if(2)
flavour_text += "You were a farmer, working extensively for years in the field to feed your people. \
The work hasn't changed much since the departure of the gods..."
outfit.head = /obj/item/clothing/head/rice_hat
outfit.uniform = /obj/item/clothing/under/mummy
outfit.suit = /obj/item/clothing/suit/nemes
outfit.shoes = /obj/item/clothing/shoes/sandal
outfit.back = /obj/item/storage/backpack/satchel/leather
outfit.implants = list(/obj/item/implant/exile) //Made it so they cannot simply exit through the gateway at will.
if(3)
flavour_text += "You were a servant, doing any necessary work that was thrown at you. \
At least it gave you experience in a bit of everything, which can be useful in these new times."
outfit.uniform = /obj/item/clothing/under/mummy
outfit.suit = /obj/item/clothing/suit/nemes
outfit.shoes = /obj/item/clothing/shoes/sandal
outfit.back = /obj/item/storage/backpack/satchel/leather
outfit.implants = list(/obj/item/implant/exile) //Made it so they cannot simply exit through the gateway at will.
/obj/effect/mob_spawn/human/villager/Destroy()
new/obj/structure/bed(get_turf(src))
return ..()
/obj/effect/mob_spawn/human/villager/special(mob/living/carbon/human/new_spawn)
ADD_TRAIT(new_spawn,TRAIT_EXEMPT_HEALTH_EVENTS,GHOSTROLE_TRAIT)
+33
View File
@@ -0,0 +1,33 @@
/datum/emote/living/chirp
key = "chirp"
key_third_person = "chirps!"
message = "chirps!"
emote_type = EMOTE_AUDIBLE
muzzle_ignore = FALSE
restraint_check = FALSE
mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
/datum/emote/living/chirp/run_emote(mob/living/user, params)
if(!(. = ..()))
return
if(user.nextsoundemote >= world.time)
return
user.nextsoundemote = world.time + 7
playsound(user, 'sound/voice/chirp.ogg', 50, 1, -1)
/datum/emote/living/caw
key = "caw"
key_third_person = "caws!"
message = "caws!"
emote_type = EMOTE_AUDIBLE
muzzle_ignore = FALSE
restraint_check = FALSE
mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
/datum/emote/living/caw/run_emote(mob/living/user, params)
if(!(. = ..()))
return
if(user.nextsoundemote >= world.time)
return
user.nextsoundemote = world.time + 7
playsound(user, 'sound/voice/caw.ogg', 50, 1, -1)
+124 -103
View File
@@ -33,25 +33,26 @@
wander = TRUE
minbodytemp = 250 //weak to cold
maxbodytemp = 1500
pressure_resistance = 600
pressure_resistance = 1200
sight = SEE_MOBS
var/unstealth = FALSE
var/stealthed = TRUE
var/knockdown_people = 1
var/playerTransformCD = 50
var/playerTfTime
var/static/mimic_blacklisted_transform_items = typecacheof(list(
/obj/item/projectile,
/obj/item/radio/intercom))
/obj/item/radio/intercom,
/mob/living/simple_animal/bot))
var/playstyle_string = "<span class='boldannounce'>You are a mimic</span></b>, a tricky creature that can take the form of \
almost any item nearby by shift-clicking it. While morphed, you move slowly and do less damage. \
Finally, you can restore yourself to your original form while morphed by shift-clicking yourself. \
Attacking carbon lifeforms will heal you at the cost of destructuring their DNA.</b>"
Attacking carbon lifeforms will heal you at the cost of destructuring their DNA. \
You can also change your form to that of simple animals, but be wary that anyone examining you can \
find out.</b>"
/mob/living/simple_animal/hostile/hs13mimic/Initialize()
. = ..()
// When initialized, make sure they take the form of something.
unstealth = FALSE
trytftorandomobject()
trytftorandomobject() // When initialized, make sure they take the form of something.
/mob/living/simple_animal/hostile/hs13mimic/Login()
. = ..()
@@ -60,26 +61,37 @@
/mob/living/simple_animal/hostile/hs13mimic/attack_hand(mob/living/carbon/human/M)
. = ..()
trigger()
if(stealthed && stat == CONSCIOUS)
if(M.a_intent == INTENT_HELP)//They're trying to pick us up! We tricked them boys! *plays runescape sea shanty*
target = M
guaranteedknockdown(M)
trigger() // Bring our friends if any!
/mob/living/simple_animal/hostile/hs13mimic/AttackingTarget()
. = ..()
if(iscarbon(target))
var/mob/living/carbon/C = target
if(unstealth == FALSE && knockdown_people && .) //Guaranteed knockdown if we get the first hit while disguised. Typically, only players can do this since NPC mimics transform first before attacking.
unstealth = TRUE
restore()
C.Knockdown(40)
C.visible_message("<span class='danger'>\The [src] knocks down \the [C]!</span>", \
"<span class='userdanger'>\The [src] knocks you down!</span>")
else if(knockdown_people && . && prob(15))
C.Knockdown(40)
C.visible_message("<span class='danger'>\The [src] knocks down \the [C]!</span>", \
if(.)
if(stealthed && knockdown_people) //Guaranteed knockdown if we get the first hit while disguised. Typically, only players can do this since NPC mimics transform first before attacking.
restore()
C.Knockdown(40)
C.visible_message("<span class='danger'>\The [src] knocks down \the [C]!</span>", \
"<span class='userdanger'>\The [src] knocks you down!</span>")
if(C.nutrition >= 15)
C.nutrition -= (rand(7,15)) //They lose 7-15 nutrition
adjustBruteLoss(-3) //We heal 3 damage
C.adjustCloneLoss(rand(2,4)) //They also take a bit of cellular damage.
else if(knockdown_people && prob(15))
C.Knockdown(40)
C.visible_message("<span class='danger'>\The [src] knocks down \the [C]!</span>", \
"<span class='userdanger'>\The [src] knocks you down!</span>")
if(C.nutrition >= 15)
C.nutrition -= (rand(7,15)) //They lose 7-15 nutrition
adjustBruteLoss(-3) //We heal 3 damage
C.adjustCloneLoss(rand(2,4)) //They also take a bit of cellular damage.
if(isanimal(target))
var/mob/living/simple_animal/A = target
if(.)
if(stealthed)
restore()
if(A.stat == CONSCIOUS)
adjustBruteLoss(-3) //We heal 3 damage
/mob/living/simple_animal/hostile/hs13mimic/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
trigger()
@@ -88,95 +100,97 @@
/mob/living/simple_animal/hostile/hs13mimic/FindTarget()
. = ..()
if(.)
trigger()
else if(!target && unstealth)
trigger() //We have a target! Trigger!
else if(!target && !stealthed) //Has no target, isn't stealthed, let's search for an object to transform
trytftorandomobject()
/mob/living/simple_animal/hostile/hs13mimic/death(gibbed)
restore()
restore() //We died. Restore form.
. = ..()
/mob/living/simple_animal/hostile/hs13mimic/med_hud_set_health()
if(!unstealth)
if(stealthed)
var/image/holder = hud_list[HEALTH_HUD]
holder.icon_state = null
return //we hide medical hud while morphed
..()
/mob/living/simple_animal/hostile/hs13mimic/med_hud_set_status()
if(!unstealth)
if(stealthed)
var/image/holder = hud_list[STATUS_HUD]
holder.icon_state = null
return //we hide medical hud while morphed
..()
/mob/living/simple_animal/hostile/hs13mimic/proc/Mimictransform() //The list of default things to transform needs to be bigger, consider this in the future.
/mob/living/simple_animal/hostile/hs13mimic/proc/mimicTransformList() //The list of default things to transform needs to be bigger, consider this in the future.
var/transformitem = rand(1,100)
medhudupdate()
if(unstealth == FALSE)
wander = FALSE
vision_range = initial(vision_range)
switch(transformitem)
if(1 to 10)
name = "drinking glass"
icon = 'icons/obj/drinks.dmi'
icon_state = "glass_empty"
desc = "Your standard drinking glass."
if(11 to 20)
name = "insulated gloves"
icon = 'icons/obj/clothing/gloves.dmi'
icon_state = "yellow"
desc = "These gloves will protect the wearer from electric shock."
if(21 to 30)
name = "Private Security Officer"
desc = "A cardboard cutout of a private security officer."
icon = 'icons/obj/cardboard_cutout.dmi'
icon_state = "cutout_ntsec"
if(31 to 40)
name = "pen"
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "pen"
desc = "It's a black ink pen, modified for use with both paper and Nanotransen-brand Digital-Readpads™!"
if(41 to 50)
name = "newspaper"
desc = "An issue of The Griffon, the newspaper circulating aboard Kin.Co Space Stations."
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "newspaper"
if(51 to 60)
name = "toolbox"
desc = "Danger. Very robust."
icon = 'icons/obj/storage.dmi'
icon_state = "red"
if(61 to 70)
name = "emergency oxygen tank"
desc = "Used for emergencies. Contains very little oxygen, so try to conserve it until you actually need it."
icon = 'icons/obj/tank.dmi'
icon_state = "emergency"
if(71 to 80)
name = "drinking glass"
icon = 'icons/obj/drinks.dmi'
icon_state = "glass_empty"
desc = "Your standard drinking glass."
if(81 to 90)
name = "fleshlight"
icon = 'hyperstation/icons/obj/fleshlight.dmi'
icon_state = "fleshlight_totallynotamimic"
desc = "A sex toy disguised as a flashlight, used to stimulate someones penis, complete with colour changing sleeve."
if(91 to 100)
icon = 'modular_citadel/icons/obj/genitals/dildo.dmi'
switch(rand(1,3)) //switch within a switch hmmmmmmmmmm
if(1)
icon_state = "dildo_knotted_2"
name = "small knotted dildo"
if(2)
icon_state = "dildo_flared_4"
name = "huge flared dildo"
if(3)
icon_state = "dildo_knotted_3"
name = "big knotted dildo"
desc = "Floppy!"
else
restore()
wander = FALSE
vision_range = initial(vision_range)
switch(transformitem)
if(1 to 10)
name = "drinking glass"
icon = 'icons/obj/drinks.dmi'
icon_state = "glass_empty"
desc = "Your standard drinking glass."
if(11 to 20)
name = "insulated gloves"
icon = 'icons/obj/clothing/gloves.dmi'
icon_state = "yellow"
desc = "These gloves will protect the wearer from electric shock."
if(21 to 30)
name = "Private Security Officer"
desc = "A cardboard cutout of a private security officer."
icon = 'icons/obj/cardboard_cutout.dmi'
icon_state = "cutout_ntsec"
if(31 to 40)
name = "pen"
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "pen"
desc = "It's a black ink pen, modified for use with both paper and Nanotransen-brand Digital-Readpads™!"
if(41 to 50)
name = "newspaper"
desc = "An issue of The Griffon, the newspaper circulating aboard Kin.Co Space Stations."
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "newspaper"
if(51 to 60)
name = "toolbox"
desc = "Danger. Very robust."
icon = 'icons/obj/storage.dmi'
icon_state = "red"
if(61 to 70)
name = "emergency oxygen tank"
desc = "Used for emergencies. Contains very little oxygen, so try to conserve it until you actually need it."
icon = 'icons/obj/tank.dmi'
icon_state = "emergency"
if(71 to 80)
name = "drinking glass"
icon = 'icons/obj/drinks.dmi'
icon_state = "glass_empty"
desc = "Your standard drinking glass."
if(81 to 90)
name = "fleshlight"
icon = 'hyperstation/icons/obj/fleshlight.dmi'
icon_state = "fleshlight_totallynotamimic"
desc = "A sex toy disguised as a flashlight, used to stimulate someones penis, complete with colour changing sleeve."
if(91 to 100)
icon = 'modular_citadel/icons/obj/genitals/dildo.dmi'
switch(rand(1,3)) //switch within a switch hmmmmmmmmmm
if(1)
icon_state = "dildo_knotted_2"
name = "small knotted dildo"
if(2)
icon_state = "dildo_flared_4"
name = "huge flared dildo"
if(3)
icon_state = "dildo_knotted_3"
name = "big knotted dildo"
desc = "Floppy!"
/mob/living/simple_animal/hostile/hs13mimic/proc/guaranteedknockdown(mob/living/carbon/human/M)
M.Knockdown(40)
M.visible_message("<span class='danger'>\The [src] knocks down \the [M]!</span>", \
"<span class='userdanger'>\The [src] tricks you, knocking you down!</span>")
/mob/living/simple_animal/hostile/hs13mimic/proc/medhudupdate()
med_hud_set_health()
@@ -184,6 +198,7 @@
/mob/living/simple_animal/hostile/hs13mimic/proc/restore()
//back to normal mimic sprite
stealthed = FALSE
medhudupdate()
name = initial(name)
icon = 'hyperstation/icons/mobs/mimic.dmi'
@@ -194,10 +209,9 @@
vision_range = 9
/mob/living/simple_animal/hostile/hs13mimic/proc/trigger()
if(unstealth == FALSE && !stat)
unstealth = TRUE
if(stealthed && stat == CONSCIOUS)
visible_message("<span class='danger'>The [src] Reveals itself to be a Mimic!</span>")
Mimictransform()
restore()
playsound(loc, 'hyperstation/sound/creatures/mimictransform.ogg', 75, TRUE)
triggerOthers(target) // Friends too!
@@ -208,7 +222,7 @@
C.trigger()
/mob/living/simple_animal/hostile/hs13mimic/proc/trytftorandomobject()
unstealth = FALSE
stealthed = TRUE
medhudupdate()
var/list/obj/item/listItems = list()
for(var/obj/item/I in oview(9,src.loc))
@@ -223,32 +237,39 @@
icon_state = changedReference.icon_state
desc = changedReference.desc
else
Mimictransform()
mimicTransformList() //Couldn't find any valid items, let's go for the default list then.
/mob/living/simple_animal/hostile/hs13mimic/proc/allowed(atom/movable/A)
return !is_type_in_typecache(A, mimic_blacklisted_transform_items) && (isitem(A))
return !is_type_in_typecache(A, mimic_blacklisted_transform_items) && (isitem(A) || isanimal(A))
/mob/living/simple_animal/hostile/hs13mimic/ShiftClickOn(atom/movable/A) //if by any chance a player takes control of them
if(playerTfTime <= world.time && !stat)
//Player control code
/mob/living/simple_animal/hostile/hs13mimic/ShiftClickOn(atom/movable/A)
if(playerTfTime <= world.time && stat == CONSCIOUS)
if(A == src)
restore()
playerTfTime = world.time + playerTransformCD
return
if(istype(A) && allowed(A))
unstealth = FALSE
stealthed = TRUE
SEND_SOUND(src, sound('hyperstation/sound/creatures/mimictransform.ogg',volume=50))
name = A.name
icon = A.icon
icon_state = A.icon_state
desc = A.desc
speed = 5
playerTfTime = world.time + playerTransformCD
if(isanimal(A))
var/mob/living/simple_animal/animal = A
icon_state = animal.icon_living
desc += "<span class='warning'> But something about it seems wrong...</span>"
else
to_chat(src, "<span class='warning'>You need to wait a little longer before you can shift into something else!</span>")
..()
//Event control
/datum/round_event_control/mimic_infestation
name = "Mimic Infestation"
typepath = /datum/round_event/mimic_infestation
@@ -271,7 +292,7 @@
/area/engine/atmospherics_engine,
/area/engine/engineering/reactor_core,
/area/engine/engineering/reactor_control,
/area/ai_monitored/turret_protected/ai,
/area/ai_monitored/turret_protected,
/area/layenia/cloudlayer,
/area/asteroid/nearstation,
/area/science/server,
@@ -337,7 +358,7 @@
return WAITING_FOR_SOMETHING
notify_ghosts("A group of mimics has spawned in [pickedArea]!", source=pickedArea, action=NOTIFY_ATTACK, flashwindow = FALSE)
while(spawncount >= 1 && validTurfs.len)
while(spawncount > 0 && validTurfs.len)
var/turf/pickedTurf = pick_n_take(validTurfs)
var/spawn_type = /mob/living/simple_animal/hostile/hs13mimic
spawn_atom_to_turf(spawn_type, pickedTurf, 1, FALSE)
@@ -131,11 +131,8 @@
return ..()
/obj/effect/crystalline_reentry/proc/complete_trajectory()
//We hit what we wanted to hit, time to go
special_target = null
destination = get_edge_target_turf(src, dir)
walk(src,0)
walk_towards(src, destination, 1)
//We hit what we wanted to hit, time to go boom!
collision_effect()
/obj/effect/crystalline_reentry/ex_act(severity, target)
return 0
@@ -147,8 +144,9 @@
return
/obj/effect/crystalline_reentry/Bump(atom/clong)
asteroidhealth = asteroidhealth - rand(7,14)
if(!special_target)//If it has a special target, THERE ARE NO BRAKES ON THE ADMINBUS, BABY
asteroidhealth = asteroidhealth - rand(7,14)
if(prob(10))
playsound(src, 'sound/effects/bang.ogg', 50, 1)
audible_message("<span class='danger'>You hear a BONK!</span>")
@@ -177,19 +175,6 @@
qdel(other)
if(asteroidhealth <= 0)
collision_effect()
atmos_spawn_air("water_vapor=1000;TEMP=0") //brr
switch(rand(1,100))
if(1 to 20)
var/obj/structure/spawner/crystalline/M = new(src.loc)
visible_message("<span class='danger'>A [M] emerges from the asteroid's rubble!</span>")
if(prob(50) && tendrilnotify)
priority_announce("Unknown organic entities have been detected in the vincinity of [station_name()]. General caution is advised.", "General Alert")
if(21 to 99)
visible_message("The asteroid collapses into nothing...")
if(100)
var/mob/living/simple_animal/bot/hugbot/M = new(src.loc)
visible_message("<span class='danger'>A [M] emerges from the asteroid's rubble! Wait... What?</span>")
qdel(src)
else
atmos_spawn_air("water_vapor=75;TEMP=0") //brr
@@ -198,6 +183,8 @@
if(ishuman(L))
var/mob/living/carbon/human/H = L
H.adjustBruteLoss(160)
if(special_target && loc == get_turf(special_target)) // just in case. Otherwise the asteroid can stop if it penetrates someone that is standing exactly on that spot and that is bad
complete_trajectory()
/obj/effect/crystalline_reentry/proc/make_debris()
for(var/throws = dropamt, throws > 0, throws--)
@@ -218,6 +205,19 @@
var/dist = get_dist(M.loc, src.loc)
shake_camera(M, dist > 20 ? 2 : 4, dist > 20 ? 1 : 3)
M.playsound_local(src.loc, null, 50, 1, random_frequency, 10, S = meteor_sound)
atmos_spawn_air("water_vapor=1250;TEMP=0") //brr
switch(rand(1,100))
if(1 to 30)
var/obj/structure/spawner/crystalline/M = new(src.loc)
visible_message("<span class='danger'>A [M] emerges from the asteroid's rubble!</span>")
if(prob(50) && tendrilnotify)
priority_announce("Unknown organic entities have been detected in the vincinity of [station_name()]. General caution is advised.", "General Alert")
if(31 to 99)
visible_message("The asteroid collapses into nothing...")
if(100)
var/mob/living/simple_animal/bot/hugbot/M = new(src.loc)
visible_message("<span class='danger'>A [M] emerges from the asteroid's rubble! Wait... What?</span>")
qdel(src)
/obj/effect/crystalline_reentry/notendrilalert
tendrilnotify = FALSE
@@ -5,7 +5,7 @@
#define COOLANT_OUTPUT_GATE airs[3]
#define RBMK_TEMPERATURE_OPERATING 640 //Celsius
#define RBMK_TEMPERATURE_CRITICAL 800 //At this point the entire ship/station is alerted to a meltdown. This may need altering
#define RBMK_TEMPERATURE_CRITICAL 810 //At this point the entire ship/station is alerted to a meltdown. This may need altering
#define RBMK_TEMPERATURE_MELTDOWN 900
#define RBMK_NO_COOLANT_TOLERANCE 5 //How many process()ing ticks the reactor can sustain without coolant before slowly taking damage
@@ -338,8 +338,8 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
handle_alerts() //Let's check if they're about to die, and let them know.
update_icon()
radiation_pulse(src, temperature*radioactivity_spice_multiplier)
if(power >= 90 && world.time >= next_flicker) //You're overloading the reactor. Give a more subtle warning that power is getting out of control.
next_flicker = world.time + 1.5 MINUTES
if(power >= 93 && world.time >= next_flicker) //You're overloading the reactor. Give a more subtle warning that power is getting out of control.
next_flicker = world.time + 2 MINUTES
for(var/obj/machinery/light/L in GLOB.machines)
if(prob(25) && L.z == z) //If youre running the reactor cold though, no need to flicker the lights.
L.flicker()
@@ -581,6 +581,14 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
. = ..()
addtimer(CALLBACK(src, .proc/link_to_reactor), 10 SECONDS)
/obj/machinery/computer/reactor/wrench_act(mob/living/user, obj/item/I)
to_chat(user, "<span class='notice'>You start [anchored ? "un" : ""]securing [name]...</span>")
if(I.use_tool(src, user, 40, volume=75))
to_chat(user, "<span class='notice'>You [anchored ? "un" : ""]secure [name].</span>")
setAnchored(!anchored)
return TRUE
return FALSE
/obj/machinery/computer/reactor/proc/link_to_reactor()
for(var/obj/machinery/atmospherics/components/trinary/nuclear_reactor/asdf in GLOB.machines)
if(asdf.id && asdf.id == id)
@@ -9,14 +9,16 @@
if(istype(I))
to_chat(user, "<span class='notice'>You add the reactor's ID to \the [src]>")
src.id = I.buffer
link_to_reactor()
return TRUE
/obj/machinery/atmospherics/components/trinary/nuclear_reactor/cargo // easier on the brain
/obj/machinery/atmospherics/components/trinary/nuclear_reactor/cargo/New()
id = rand(1, 1000000) // cmon, what are the chances?
. = ..()
id = rand(1, 9999999) // cmon, what are the chances? The chances are... Very low friend... But maybe we can make this a bit better.
// Cargo varients can be wrenched down and don't start linked to the default RMBK reactor
// Cargo variants can be wrenched down and don't start linked to the default RMBK reactor
/obj/machinery/computer/reactor/control_rods/cargo
anchored = FALSE
@@ -29,3 +31,7 @@
/obj/machinery/computer/reactor/fuel_rods/cargo
anchored = FALSE
id = null
/obj/item/paper/fluff/rbmkcargo
name = "Nuclear Reactor Instructions"
info = "Make sure a 5x5 area is completely clear of pipes, cables and machinery when using the beacon. Those will be provided automatically with the beacon's bluespace decompression. Use a multitool on the reactor then on the computers provided to link them together. Also make sure the reactor has a proper pipeline filled with cooling gas before inserting fuel rods. Good luck!"
@@ -6,6 +6,3 @@
nutriment_factor = 5 * REAGENTS_METABOLISM
metabolization_rate = 1 * REAGENTS_METABOLISM
taste_description = "sweetness"
/datum/reagent/consumable/alienhoney/on_mob_life(mob/living/carbon/M)
..()
@@ -0,0 +1,29 @@
/datum/reagent/medicine/copium
name = "copium"
description = "A heavy scented substance meant to help one deal with loss."
reagent_state = LIQUID
color = "#a8707e"
overdose_threshold = 21
metabolization_rate = 0.75 * REAGENTS_METABOLISM
pH = 4
/datum/reagent/medicine/copium/on_mob_life(mob/living/carbon/M)
var/datum/component/mood/mood = M.GetComponent(/datum/component/mood)
if(mood.sanity <= SANITY_NEUTRAL && current_cycle >= 5)
mood.setSanity(min(mood.sanity+5, SANITY_NEUTRAL))
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "copium", /datum/mood_event/copium)
..()
/datum/reagent/medicine/copium/overdose_process(mob/living/carbon/M) //copious amounts of copium
M.blur_eyes(10)
if(prob(50))
M.adjustToxLoss(1, 0)
if(prob(5))
M.say(pick("That's okay. Things are going to be okay.", "This is fine.", "I'm okay with the events that are unfolding currently.", "World of Spacecraft is still a good game...", "I'm winning.", "Diesels are far more powerful."))
if(prob(5))
M.emote("me", 1, "seems to be crying.")
if(prob(4))
M.emote("me", 1, "falls over, crying.")
M.Knockdown(40)
//To-do: /datum/reagent/medicine/seethium
@@ -0,0 +1,6 @@
/datum/chemical_reaction/copium
name = "copium"
id = /datum/reagent/medicine/copium
results = list(/datum/reagent/medicine/copium = 5)
required_reagents = list(/datum/reagent/medicine/mannitol = 2, /datum/reagent/water = 1, /datum/reagent/medicine/epinephrine = 1, /datum/reagent/consumable/sugar = 1)
required_temp = 266
+1 -1
View File
@@ -49,7 +49,7 @@ mob/living/get_effective_size()
src.update_mobsize()
//Going to change the health and speed values too
src.remove_movespeed_modifier(MOVESPEED_ID_SIZE)
src.add_movespeed_modifier(MOVESPEED_ID_SIZE, multiplicative_slowdown = (abs(size_multiplier - 1) * 0.8 ))
src.add_movespeed_modifier(MOVESPEED_ID_SIZE, multiplicative_slowdown = (abs(size_multiplier - 1) * 0.4 ))
var/healthmod_old = ((previous_size * 75) - 75) //Get the old value to see what we must change.
var/healthmod_new = ((size_multiplier * 75) - 75) //A size of one would be zero. Big boys get health, small ones lose health.
var/healthchange = healthmod_new - healthmod_old //Get ready to apply the new value, and subtract the old one. (Negative values become positive)
+7 -5
View File
@@ -7,6 +7,7 @@
flag = "laser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
//TO DO: make the size ray have a selection of a minimum size and maximum size, rather than two modes.
/obj/item/projectile/sizelaser/shrinkray
icon_state="bluelaser"
@@ -66,8 +67,9 @@
//Gun
/obj/item/gun/energy/laser/sizeray
name = "size ray"
icon_state = "bluetag"
desc = "Debug size manipulator. You probably shouldn't have this!"
icon = 'icons/obj/guns/energy.dmi'
icon_state = "sizeshrink"
desc = "An extremely-dangerous, almost-illegal size-altering device. You've either stolen this, or have the permits for it."
item_state = null
ammo_type = list(/obj/item/ammo_casing/energy/laser/shrinkray, /obj/item/ammo_casing/energy/laser/growthray)
selfcharge = EGUN_SELFCHARGE
@@ -77,10 +79,10 @@
attackby(obj/item/W, mob/user)
if(W==src)
if(icon_state=="bluetag")
icon_state="redtag"
if(icon_state=="sizeshrink")
icon_state="sizegrow"
ammo_type = list(/obj/item/ammo_casing/energy/laser/growthray)
else
icon_state="bluetag"
icon_state="sizeshrink"
ammo_type = list(/obj/item/ammo_casing/energy/laser/shrinkray)
return ..()
+7
View File
@@ -164,6 +164,13 @@
C.adjustArousalLoss(20)
M.adjustArousalLoss(20)
M.do_jitter_animation() //make your partner shake too!
if (M.getArousalLoss() >= 100 && ishuman(M) && prob(5))//Why not have a probability to cum when someone's getting nailed with max arousal?~
if(V.is_exposed()) //Oh yea, if vagina is not exposed, the climax will not cause a spill
M.mob_climax_outside(V, spillage = TRUE)
else
M.mob_climax_outside(V, spillage = FALSE)
if (C.getArousalLoss() >= 100 && ishuman(C) && C.has_dna())
var/mob/living/carbon/human/O = C