mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-09 16:14:13 +00:00
Buddha mode + Hell (#33328)
* Buddha mode * devilish * HELLISH * tidy * fixes * find a way to do this that doesnt make server be kill * turn it off for now so we can test better * lag-free method * oh this too * basis of this part * fixes * fixes * fixes * fixes * cap on this to stop possible lag * fix * Allows admins to ghost if buddha'd * New way of getting things * More basic stuff * More stuff * actual way to do it * in practice * hell freezes over * cursed dice edition * tweaking this so it can be turned off if it breaks * disabilities, removing rendundant thing with floor * Limbs and final proc sorting * better like this * better like this * better like this * in setup cause it lags during game * better logging * restructured code, buddhas cannot be gibbed * this too * this too * this too * this too * finally right bantype * removed limit * hell is now a dungeon for performance * hell is now a dungeon for performance * hell is now a dungeon for performance * removes unused zlevel now * area * new sneding * new sending * fixes proc name * uses this db call instead for ease of testing, confirms pref copying works anyways, revert to old one if necessary * testing one for now * better scope Co-authored-by: SECBATON GRIFFON <sage>
This commit is contained in:
@@ -615,6 +615,7 @@ var/list/global_mutations = list() // list of hidden mutation things
|
||||
#define UNPACIFIABLE 16 //Immune to pacify effects.
|
||||
#define GODMODE 4096
|
||||
#define FAKEDEATH 8192 //Replaces stuff like changeling.changeling_fakedeath
|
||||
#define BUDDHAMODE 16384
|
||||
#define XENO_HOST 32768 //Tracks whether we're gonna be a baby alien's mummy.
|
||||
#define ALWAYS_CRIT 65536
|
||||
|
||||
|
||||
@@ -148,6 +148,7 @@
|
||||
var/ban_legacy_system = 0 //Defines whether the server uses the legacy banning system with the files in /data or the SQL system. Config option in config.txt
|
||||
var/use_age_restriction_for_jobs = 0 //Do jobs use account age restrictions? --requires database
|
||||
|
||||
var/bans_shown_in_hell_limit = 1 //Amount of permabanned players that show up in hell --requires database
|
||||
var/simultaneous_pm_warning_timeout = 100
|
||||
|
||||
var/use_recursive_explosions //Defines whether the server uses recursive or circular explosions.
|
||||
@@ -266,6 +267,9 @@
|
||||
if ("use_age_restriction_for_jobs")
|
||||
config.use_age_restriction_for_jobs = 1
|
||||
|
||||
if ("bans_shown_in_hell_limit")
|
||||
config.bans_shown_in_hell_limit = text2num(value)
|
||||
|
||||
if ("jobs_have_minimal_access")
|
||||
config.jobs_have_minimal_access = 1
|
||||
|
||||
|
||||
@@ -29,12 +29,12 @@ var/datum/subsystem/map/SSmap
|
||||
|
||||
for(var/i = 0, i < max_secret_rooms, i++)
|
||||
make_mining_asteroid_secret()
|
||||
|
||||
|
||||
//hobo shack generation, one shack will spawn, 1/3 chance of two shacks
|
||||
generate_hoboshack()
|
||||
if (rand(1,3) == 3)
|
||||
generate_hoboshack()
|
||||
|
||||
|
||||
log_startup_progress("Calling post on zLevels, letting them know they can do zlevel specific stuff...")
|
||||
var/watch_prim = start_watch()
|
||||
for(var/datum/zLevel/z in map.zLevels)
|
||||
|
||||
@@ -148,6 +148,7 @@
|
||||
body += {"<option value='?_src_=vars;give_spell=\ref[D]'>Give Spell</option>
|
||||
<option value='?_src_=vars;give_disease2=\ref[D]'>Give New Disease</option>
|
||||
<option value='?_src_=vars;godmode=\ref[D]'>Toggle Godmode</option>
|
||||
<option value='?_src_=vars;buddhamode=\ref[D]'>Toggle Buddha Mode</option>
|
||||
<option value='?_src_=vars;build_mode=\ref[D]'>Toggle Build Mode</option>
|
||||
<option value='?_src_=vars;drop_everything=\ref[D]'>Drop Everything</option>
|
||||
<option value='?_src_=vars;regenerateicons=\ref[D]'>Regenerate Icons</option>
|
||||
@@ -612,6 +613,18 @@ function loadPage(list) {
|
||||
src.cmd_admin_godmode(M)
|
||||
href_list["datumrefresh"] = href_list["godmode"]
|
||||
|
||||
else if(href_list["buddhamode"])
|
||||
if(!check_rights(R_REJUVENATE))
|
||||
return
|
||||
|
||||
var/mob/M = locate(href_list["buddhamode"])
|
||||
if(!istype(M))
|
||||
to_chat(usr, "This can only be used on instances of type /mob")
|
||||
return
|
||||
|
||||
src.cmd_admin_buddhamode(M)
|
||||
href_list["datumrefresh"] = href_list["buddhamode"]
|
||||
|
||||
else if(href_list["gib"])
|
||||
if(!check_rights(0))
|
||||
return
|
||||
|
||||
@@ -11,6 +11,7 @@ var/list/datum/map_element/map_elements = list()
|
||||
var/load_at_once = TRUE //If true, lag reduction methods will not be applied when this is loaded, freezing atmos and mob simulations until the map element is loaded.
|
||||
|
||||
var/turf/location //Lower left turf of the map element
|
||||
var/list/spawned_atoms = list()
|
||||
|
||||
var/width //Width of the map element, in turfs
|
||||
var/height //Height of the map element, in turfs
|
||||
@@ -54,9 +55,9 @@ var/list/datum/map_element/map_elements = list()
|
||||
if(file_path)
|
||||
var/file = file(file_path)
|
||||
if(isfile(file))
|
||||
var/list/L = maploader.load_map(file, z, x, y, src, rotation, overwrite, clipmin_x, clipmax_x, clipmin_y, clipmax_y, clipmin_z, clipmax_z)
|
||||
initialize(L)
|
||||
return L
|
||||
spawned_atoms = maploader.load_map(file, z, x, y, src, rotation, overwrite, clipmin_x, clipmax_x, clipmin_y, clipmax_y, clipmin_z, clipmax_z)
|
||||
initialize(spawned_atoms)
|
||||
return spawned_atoms
|
||||
else //No file specified - empty map element
|
||||
//These variables are usually set by the map loader. Here we have to set them manually
|
||||
initialize(list()) //Initialize with an empty list
|
||||
|
||||
@@ -2993,3 +2993,8 @@ var/list/the_station_areas = list (
|
||||
icon_state = "mommishuttle"
|
||||
|
||||
//END Island
|
||||
|
||||
/area/hell
|
||||
name = "\improper HELL"
|
||||
requires_power = 0
|
||||
dynamic_lighting = 0
|
||||
|
||||
@@ -185,7 +185,7 @@
|
||||
target.resurrect()
|
||||
|
||||
target.tod = null
|
||||
target.stat = UNCONSCIOUS
|
||||
target.stat = target.status_flags & BUDDHAMODE ? CONSCIOUS : UNCONSCIOUS
|
||||
target.regenerate_icons()
|
||||
target.update_canmove()
|
||||
target.flash_eyes(visual = 1)
|
||||
|
||||
@@ -127,6 +127,10 @@
|
||||
else
|
||||
for(var/datum/organ/external/E in h.organs) //Being a catbeast doesn't exempt you from getting a curse just because you cannot turn into a catbeast again.
|
||||
E.droplimb(1)
|
||||
if(prob(1))
|
||||
to_chat(user, "<span class=sinister><B>You have been damned directly to hell! </span></B>")
|
||||
h.death()
|
||||
send_to_hedoublehockeysticks(h)
|
||||
if(2 to 5)
|
||||
to_chat(user, "<span class=sinister><B>It could be worse, but not much worse! Enjoy your curse! </span></B>")
|
||||
h.flash_eyes(visual = 1)
|
||||
|
||||
@@ -70,8 +70,9 @@
|
||||
M.Paralyse(time)
|
||||
else
|
||||
M.Stun(time)
|
||||
M.stat = UNCONSCIOUS
|
||||
M.visible_message("<span class='danger'>\The [M] has been knocked unconscious by \the [user]!</span>", "<span class='danger'>You have been knocked unconscious!</span>", "<span class='warning'>You hear someone fall.</span>")
|
||||
if(!(M.status_flags & BUDDHAMODE))
|
||||
M.stat = UNCONSCIOUS
|
||||
M.visible_message("<span class='danger'>\The [M] has been knocked unconscious by \the [user]!</span>", "<span class='danger'>You have been knocked unconscious!</span>", "<span class='warning'>You hear someone fall.</span>")
|
||||
else
|
||||
M.visible_message("<span class='warning'>\The [user] tried to knock \the [M] unconcious!</span>", "<span class='warning'>\The [user] tried to knock you unconcious!</span>")
|
||||
M.eye_blurry += 3
|
||||
|
||||
@@ -155,7 +155,7 @@ var/obj/structure/dorfpod/center/dorfpod
|
||||
H.adjustBrainLoss(rand(20,30))
|
||||
H.check_mutations = TRUE
|
||||
H.Paralyse(4)
|
||||
H.stat = UNCONSCIOUS
|
||||
H.stat = H.status_flags & BUDDHAMODE ? CONSCIOUS : UNCONSCIOUS
|
||||
H.updatehealth()
|
||||
|
||||
has_been_shade.Remove(clonemind)
|
||||
@@ -209,4 +209,4 @@ var/obj/structure/dorfpod/center/dorfpod
|
||||
domutcheck(H)
|
||||
|
||||
|
||||
#undef DORF_RESPAWN_COOLDOWN
|
||||
#undef DORF_RESPAWN_COOLDOWN
|
||||
|
||||
@@ -85,3 +85,23 @@
|
||||
..()
|
||||
|
||||
color = "#FFFFFF"
|
||||
|
||||
/turf/unsimulated/floor/brimstone
|
||||
icon_state = "ironsand1"
|
||||
|
||||
/turf/unsimulated/floor/brimstone/New()
|
||||
..()
|
||||
if(Holiday == APRIL_FOOLS_DAY)
|
||||
ChangeTurf(/turf/unsimulated/floor/snow) // hell froze over
|
||||
return
|
||||
icon_state = "ironsand[rand(1,15)]"
|
||||
overlays.Cut()
|
||||
var/image/fire = image('icons/effects/fire.dmi', "[rand(1,3)]")
|
||||
fire.blend_mode = BLEND_ADD
|
||||
fire.layer = TURF_FIRE_LAYER
|
||||
fire.plane = ABOVE_TURF_PLANE
|
||||
overlays += fire
|
||||
|
||||
/turf/unsimulated/floor/brimstone/Destroy()
|
||||
overlays.Cut()
|
||||
..()
|
||||
|
||||
@@ -189,6 +189,7 @@ var/list/admin_verbs_debug = list(
|
||||
/client/proc/debug_reagents,
|
||||
/client/proc/create_awaymission,
|
||||
/client/proc/make_invulnerable,
|
||||
/client/proc/send_to_heck,
|
||||
/client/proc/cmd_admin_dump_delprofile,
|
||||
/client/proc/mob_list,
|
||||
/client/proc/cure_disease,
|
||||
@@ -1252,6 +1253,57 @@ var/list/admin_verbs_mod = list(
|
||||
createRandomZlevel(override, AM, usr)
|
||||
to_chat(src, "The away mission has been generated on z-level [world.maxz] [AM.location ? "([formatJumpTo(AM.location)])" : ""]")
|
||||
|
||||
/client/proc/send_to_heck(var/mob/dead/observer/O in dead_mob_list)
|
||||
set name = "Send to hell"
|
||||
set desc = "Eternally damn this ghost for their sins."
|
||||
set category = "Fun"
|
||||
|
||||
if(alert(usr, "Are you sure you want to do this?", "Confirm judgement", "Yes", "No") != "Yes")
|
||||
return
|
||||
|
||||
var/mob/newmob = send_to_hedoublehockeysticks(O)
|
||||
if(newmob)
|
||||
log_admin("[ckey(key)]/([mob]) has damned [newmob] to HELL")
|
||||
message_admins("[ckey(key)]/([mob]) has damned [newmob] [formatJumpTo(newmob,"(JMP)")] to HELL")
|
||||
|
||||
/proc/send_to_hedoublehockeysticks(mob/O)
|
||||
if(!O || !O.key)
|
||||
return
|
||||
if(!(/datum/map_element/dungeon/hell in existing_dungeons))
|
||||
load_dungeon(/datum/map_element/dungeon/hell)
|
||||
var/datum/map_element/dungeon/hell/H = locate(/datum/map_element/dungeon/hell) in existing_dungeons
|
||||
var/list/turf/turfs = list()
|
||||
for(var/turf/T in H.spawned_atoms)
|
||||
if(!T.density)
|
||||
turfs += T
|
||||
if(!turfs.len)
|
||||
warning("No hell turfs to send a mob to!")
|
||||
return
|
||||
for(var/datum/body_archive/archive in body_archives)
|
||||
if(archive.key == O.key)
|
||||
var/mob/living/tempM = new archive.mob_type
|
||||
if(!istype(tempM))
|
||||
warning("Body archive to send to hell was not a living mob!")
|
||||
break
|
||||
var/mob/living/M = tempM.actually_reset_body(archive = archive, our_mind = get_mind_by_key(O.key))
|
||||
if(!istype(M))
|
||||
warning("Body archive to send to hell was not a living mob!")
|
||||
break
|
||||
M.status_flags ^= BUDDHAMODE
|
||||
M.forceMove(pick(turfs))
|
||||
qdel(tempM)
|
||||
qdel(O)
|
||||
return M
|
||||
|
||||
var/datum/mind/mind = get_mind_by_key(O.key)
|
||||
if (mind)
|
||||
var/mob/living/carbon/human/prefM = new(pick(turfs))
|
||||
prefM.status_flags ^= BUDDHAMODE
|
||||
prefM.quick_copy_prefs()
|
||||
mind.transfer_to(prefM)
|
||||
qdel(O)
|
||||
return prefM
|
||||
|
||||
/client/proc/cmd_dectalk()
|
||||
set name = "Dectalk"
|
||||
set category = "Special Verbs"
|
||||
|
||||
@@ -162,6 +162,20 @@
|
||||
message_admins("[key_name_admin(usr)] has toggled [key_name_admin(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]", 1)
|
||||
feedback_add_details("admin_verb","GOD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_buddhamode(mob/M as mob in mob_list)
|
||||
set category = "Special Verbs"
|
||||
set name = "Buddha mode"
|
||||
|
||||
if(!holder)
|
||||
to_chat(src, "Only administrators may use this command.")
|
||||
return
|
||||
M.status_flags ^= BUDDHAMODE
|
||||
to_chat(usr, "<span class='notice'>Toggled [(M.status_flags & BUDDHAMODE) ? "ON" : "OFF"]</span>")
|
||||
|
||||
log_admin("[key_name(usr)] has toggled [key_name(M)]'s nodeath to [(M.status_flags & BUDDHAMODE) ? "On" : "Off"]")
|
||||
message_admins("[key_name_admin(usr)] has toggled [key_name_admin(M)]'s nodeath to [(M.status_flags & BUDDHAMODE) ? "On" : "Off"]", 1)
|
||||
feedback_add_details("admin_verb","BUDDHA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0)
|
||||
if(automute)
|
||||
|
||||
@@ -237,7 +237,7 @@
|
||||
H.adjustCloneLoss(150) //new damage var so you can't eject a clone early then stab them to abuse the current damage system --NeoFite
|
||||
H.adjustBrainLoss(upgraded ? 0 : (heal_level + 50 + rand(10, 30))) // The rand(10, 30) will come out as extra brain damage
|
||||
H.Paralyse(4)
|
||||
H.stat = UNCONSCIOUS //There was a bug which allowed you to talk for a few seconds after being cloned, because your stat wasn't updated until next Life() tick. This is a fix for this!
|
||||
H.stat = H.status_flags & BUDDHAMODE ? CONSCIOUS : UNCONSCIOUS //There was a bug which allowed you to talk for a few seconds after being cloned, because your stat wasn't updated until next Life() tick. This is a fix for this!
|
||||
|
||||
//Here let's calculate their health so the pod doesn't immediately eject them!!!
|
||||
H.updatehealth()
|
||||
|
||||
@@ -406,6 +406,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
set name = "Ghost"
|
||||
set desc = "Relinquish your life and enter the land of the dead."
|
||||
|
||||
if((client && !client.holder) && (status_flags & BUDDHAMODE))
|
||||
to_chat(src,"<span class='notice'>You feel stuck on this plane.</span>")
|
||||
return
|
||||
|
||||
var/timetocheck = timeofdeath
|
||||
if (isbrain(src))
|
||||
var/mob/living/carbon/brain/brainmob = src
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
//This is the proc for gibbing a mob. Cannot gib ghosts.
|
||||
//added different sort of gibs and animations. N
|
||||
/mob/proc/gib(animation = FALSE, meat = TRUE)
|
||||
if(status_flags & BUDDHAMODE)
|
||||
return
|
||||
death(1)
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/mob/living/carbon/alien/gib(animation = FALSE, meat = TRUE)
|
||||
if(status_flags & BUDDHAMODE)
|
||||
adjustBruteLoss(200)
|
||||
return
|
||||
if(!isUnconscious())
|
||||
forcesay("-")
|
||||
death(1)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/carbon/alien/humanoid/death(gibbed)
|
||||
if(stat == DEAD)
|
||||
if((status_flags & BUDDHAMODE) || stat == DEAD)
|
||||
return
|
||||
if(healths)
|
||||
healths.icon_state = "health6"
|
||||
|
||||
@@ -304,7 +304,7 @@
|
||||
blinded = 1
|
||||
silent = 0
|
||||
else //ALIVE. LIGHTS ARE ON
|
||||
if(health < config.health_threshold_dead || !has_brain())
|
||||
if((health < config.health_threshold_dead || !has_brain()) && !(status_flags & BUDDHAMODE))
|
||||
death()
|
||||
blinded = 1
|
||||
stat = DEAD
|
||||
@@ -312,7 +312,7 @@
|
||||
return 1
|
||||
|
||||
//UNCONSCIOUS. NO-ONE IS HOME
|
||||
if( (getOxyLoss() > 50) || (config.health_threshold_crit > health) )
|
||||
if((getOxyLoss() > 50 || config.health_threshold_crit > health) && !(status_flags & BUDDHAMODE))
|
||||
if( health <= 20 && prob(1) )
|
||||
spawn(0)
|
||||
emote("gasp")
|
||||
@@ -323,11 +323,11 @@
|
||||
if(paralysis)
|
||||
AdjustParalysis(-1)
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
stat = status_flags & BUDDHAMODE ? CONSCIOUS : UNCONSCIOUS
|
||||
else if(sleeping)
|
||||
sleeping = max(sleeping-1, 0)
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
stat = status_flags & BUDDHAMODE ? CONSCIOUS : UNCONSCIOUS
|
||||
if( prob(10) && health )
|
||||
spawn(0)
|
||||
emote("hiss")
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/carbon/alien/larva/death(gibbed)
|
||||
if(stat == DEAD)
|
||||
if((status_flags & BUDDHAMODE) || stat == DEAD)
|
||||
return
|
||||
if(healths)
|
||||
healths.icon_state = "health6"
|
||||
|
||||
@@ -233,7 +233,7 @@
|
||||
blinded = 1
|
||||
silent = 0
|
||||
else //ALIVE. LIGHTS ARE ON
|
||||
if(health < -25 || !has_brain())
|
||||
if((health < -25 || !has_brain()) && !(status_flags & BUDDHAMODE))
|
||||
death()
|
||||
blinded = 1
|
||||
silent = 0
|
||||
@@ -251,11 +251,11 @@
|
||||
if(paralysis)
|
||||
AdjustParalysis(-2)
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
stat = status_flags & BUDDHAMODE ? CONSCIOUS : UNCONSCIOUS
|
||||
else if(sleeping)
|
||||
sleeping = max(sleeping-1, 0)
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
stat = status_flags & BUDDHAMODE ? CONSCIOUS : UNCONSCIOUS
|
||||
if( prob(10) && health )
|
||||
spawn(0)
|
||||
emote("hiss_")
|
||||
|
||||
@@ -1,23 +1,5 @@
|
||||
/mob/living/carbon/brain/death(gibbed)
|
||||
if(stat == DEAD)
|
||||
return
|
||||
if(!gibbed && container && istype(container, /obj/item/device/mmi))//If not gibbed but in a container.
|
||||
container.OnMobDeath(src)
|
||||
|
||||
stat = DEAD
|
||||
|
||||
change_sight(adding = SEE_TURFS|SEE_MOBS|SEE_OBJS)
|
||||
see_in_dark = 8
|
||||
see_invisible = SEE_INVISIBLE_LEVEL_TWO
|
||||
|
||||
tod = worldtime2text() //weasellos time of death patch
|
||||
if(mind)
|
||||
mind.store_memory("Time of death: [tod]", 0) //mind. ?
|
||||
|
||||
return ..(gibbed)
|
||||
|
||||
/mob/living/carbon/brain/death(gibbed)
|
||||
if(stat == DEAD)
|
||||
if((status_flags & BUDDHAMODE) || stat == DEAD)
|
||||
return
|
||||
if(!gibbed && container && istype(container, /obj/item/device/mmi))//If not gibbed but in a container.
|
||||
container.OnMobDeath(src)
|
||||
@@ -80,6 +62,9 @@
|
||||
..()
|
||||
|
||||
/mob/living/carbon/brain/gib(animation = FALSE, meat = TRUE)
|
||||
if(status_flags & BUDDHAMODE)
|
||||
adjustBruteLoss(200)
|
||||
return
|
||||
if(!isUnconscious())
|
||||
forcesay("-")
|
||||
death(1)
|
||||
|
||||
@@ -72,6 +72,9 @@
|
||||
user.delayNextMove(10) //no just holding the key for an instant gib
|
||||
|
||||
/mob/living/carbon/gib(animation = FALSE, meat = TRUE)
|
||||
if(status_flags & BUDDHAMODE)
|
||||
adjustBruteLoss(200)
|
||||
return
|
||||
dropBorers(1)
|
||||
if(stomach_contents && stomach_contents.len)
|
||||
drop_stomach_contents()
|
||||
|
||||
@@ -274,7 +274,7 @@
|
||||
silent = 0
|
||||
else //ALIVE. LIGHTS ARE ON
|
||||
updatehealth()
|
||||
if(health < config.health_threshold_dead || !has_brain())
|
||||
if((health < config.health_threshold_dead || !has_brain()) && !(status_flags & BUDDHAMODE))
|
||||
death()
|
||||
blinded = 1
|
||||
stat = DEAD
|
||||
@@ -297,7 +297,7 @@
|
||||
if(paralysis)
|
||||
AdjustParalysis(-1)
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
stat = status_flags & BUDDHAMODE ? CONSCIOUS : UNCONSCIOUS
|
||||
if(halloss > 0)
|
||||
adjustHalLoss(-3)
|
||||
else if(sleeping)
|
||||
@@ -305,7 +305,7 @@
|
||||
adjustHalLoss(-3)
|
||||
sleeping = max(sleeping-1, 0)
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
stat = status_flags & BUDDHAMODE ? CONSCIOUS : UNCONSCIOUS
|
||||
if( prob(10) && health && !hal_crit )
|
||||
spawn(0)
|
||||
emote("snore")
|
||||
@@ -314,7 +314,7 @@
|
||||
adjustHalLoss(-3)
|
||||
//CONSCIOUS
|
||||
else if(undergoing_hypothermia() >= SEVERE_HYPOTHERMIA)
|
||||
stat = UNCONSCIOUS
|
||||
stat = status_flags & BUDDHAMODE ? CONSCIOUS : UNCONSCIOUS
|
||||
else
|
||||
stat = CONSCIOUS
|
||||
if(halloss > 0)
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/mob/living/carbon/human/gib(animation = FALSE, meat = TRUE)
|
||||
if(status_flags & BUDDHAMODE)
|
||||
adjustBruteLoss(200)
|
||||
return
|
||||
if(!isUnconscious())
|
||||
forcesay("-")
|
||||
if(species)
|
||||
@@ -91,7 +94,7 @@
|
||||
obj_overlays = null
|
||||
|
||||
/mob/living/carbon/human/death(gibbed)
|
||||
if(stat == DEAD)
|
||||
if((status_flags & BUDDHAMODE) || stat == DEAD)
|
||||
return
|
||||
if(healths)
|
||||
healths.icon_state = "health7"
|
||||
|
||||
@@ -483,7 +483,7 @@ This function restores all organs.
|
||||
reagents.clear_reagents()
|
||||
restore_blood()
|
||||
bodytemperature = 310
|
||||
stat = UNCONSCIOUS
|
||||
stat = status_flags & BUDDHAMODE ? CONSCIOUS : UNCONSCIOUS
|
||||
regenerate_icons()
|
||||
flash_eyes(visual = 1)
|
||||
apply_effect(10, EYE_BLUR)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
handle_organs() //Optimized.
|
||||
handle_blood()
|
||||
|
||||
if(health <= config.health_threshold_dead || !has_brain())
|
||||
if((health <= config.health_threshold_dead || !has_brain()) && !(status_flags & BUDDHAMODE))
|
||||
emote("deathgasp", message = TRUE)
|
||||
death()
|
||||
blinded = 1
|
||||
@@ -26,7 +26,7 @@
|
||||
pain_numb = max(0, pain_numb - 1)
|
||||
|
||||
//UNCONSCIOUS. NO-ONE IS HOME
|
||||
if((getOxyLoss() > 50) || (config.health_threshold_crit > health))
|
||||
if((getOxyLoss() > 50 || config.health_threshold_crit > health) && !(status_flags & BUDDHAMODE))
|
||||
Paralyse(3)
|
||||
species.OnCrit(src)
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
if(paralysis)
|
||||
AdjustParalysis(-1)
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
stat = status_flags & BUDDHAMODE ? CONSCIOUS : UNCONSCIOUS
|
||||
if(halloss > 0)
|
||||
adjustHalLoss(-3)
|
||||
else if(sleeping)
|
||||
@@ -71,13 +71,13 @@
|
||||
adjustHalLoss(-3)
|
||||
sleeping = max(sleeping-1, 0)
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
stat = status_flags & BUDDHAMODE ? CONSCIOUS : UNCONSCIOUS
|
||||
if(prob(2) && health && !hal_crit)
|
||||
spawn(0)
|
||||
emote("snore")
|
||||
else if(undergoing_hypothermia() >= SEVERE_HYPOTHERMIA)
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
stat = status_flags & BUDDHAMODE ? CONSCIOUS : UNCONSCIOUS
|
||||
//CONSCIOUS
|
||||
else
|
||||
stat = CONSCIOUS
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/mob/living/carbon/monkey/gib(animation = FALSE, meat = TRUE)
|
||||
if(status_flags & BUDDHAMODE)
|
||||
adjustBruteLoss(200)
|
||||
return
|
||||
if(!isUnconscious())
|
||||
forcesay("-")
|
||||
death(1)
|
||||
@@ -28,7 +31,7 @@
|
||||
|
||||
|
||||
/mob/living/carbon/monkey/death(gibbed)
|
||||
if(stat == DEAD)
|
||||
if((status_flags & BUDDHAMODE) || stat == DEAD)
|
||||
return
|
||||
if(healths)
|
||||
healths.icon_state = "health5"
|
||||
|
||||
@@ -521,7 +521,7 @@
|
||||
silent = 0
|
||||
else //ALIVE. LIGHTS ARE ON
|
||||
updatehealth()
|
||||
if(health < config.health_threshold_dead || !has_brain())
|
||||
if((health < config.health_threshold_dead || !has_brain()) && !(status_flags & BUDDHAMODE))
|
||||
death()
|
||||
blinded = 1
|
||||
stat = DEAD
|
||||
@@ -529,7 +529,7 @@
|
||||
return 1
|
||||
|
||||
//UNCONSCIOUS. NO-ONE IS HOME
|
||||
if( (getOxyLoss() > 25) || (config.health_threshold_crit > health) )
|
||||
if((getOxyLoss() > 25 || config.health_threshold_crit > health) && !(status_flags & BUDDHAMODE))
|
||||
if( health <= 20 && prob(1) )
|
||||
spawn(0)
|
||||
emote("gasp")
|
||||
@@ -546,7 +546,7 @@
|
||||
if(paralysis)
|
||||
AdjustParalysis(-1)
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
stat = status_flags & BUDDHAMODE ? CONSCIOUS : UNCONSCIOUS
|
||||
if(halloss > 0)
|
||||
adjustHalLoss(-3)
|
||||
else if(sleeping)
|
||||
@@ -554,7 +554,7 @@
|
||||
adjustHalLoss(-3)
|
||||
sleeping = max(sleeping-1, 0)
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
stat = status_flags & BUDDHAMODE ? CONSCIOUS : UNCONSCIOUS
|
||||
if( prob(10) && health && !hal_crit )
|
||||
spawn(0)
|
||||
emote("snore")
|
||||
@@ -563,7 +563,7 @@
|
||||
adjustHalLoss(-3)
|
||||
//CONSCIOUS
|
||||
else if(undergoing_hypothermia() >= SEVERE_HYPOTHERMIA)
|
||||
stat = UNCONSCIOUS
|
||||
stat = status_flags & BUDDHAMODE ? CONSCIOUS : UNCONSCIOUS
|
||||
else
|
||||
stat = CONSCIOUS
|
||||
if(halloss > 0)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/carbon/slime/death(gibbed)
|
||||
if(stat == DEAD)
|
||||
if((status_flags & BUDDHAMODE) || stat == DEAD)
|
||||
return
|
||||
stat = DEAD
|
||||
icon_state = "[colour] baby slime dead"
|
||||
|
||||
@@ -276,7 +276,7 @@
|
||||
src.adjustOxyLoss(10)
|
||||
|
||||
if(src.stat != DEAD)
|
||||
src.stat = UNCONSCIOUS
|
||||
stat = status_flags & BUDDHAMODE ? CONSCIOUS : UNCONSCIOUS
|
||||
|
||||
if(prob(30)) //I think this is meant to allow slimes to starve to death -Deity Link
|
||||
adjustOxyLoss(-1)
|
||||
|
||||
@@ -170,6 +170,9 @@ var/global/list/playable_species = list("Human")
|
||||
..()
|
||||
|
||||
/datum/species/proc/gib(var/mob/living/carbon/human/H)
|
||||
if(H.status_flags & BUDDHAMODE)
|
||||
H.adjustBruteLoss(200)
|
||||
return
|
||||
H.death(1)
|
||||
H.monkeyizing = 1
|
||||
H.canmove = 0
|
||||
|
||||
@@ -12,6 +12,9 @@
|
||||
standard_damage_overlay_updates()
|
||||
|
||||
/mob/living/gib(animation = FALSE, meat = TRUE)
|
||||
if(status_flags & BUDDHAMODE)
|
||||
adjustBruteLoss(200)
|
||||
return
|
||||
if(!isUnconscious())
|
||||
forcesay("-")
|
||||
death(1)
|
||||
|
||||
@@ -86,6 +86,10 @@
|
||||
mutations.Remove(M_HARDCORE)
|
||||
to_chat(src, "<span class='notice'>You feel like a pleb.</span>")
|
||||
handle_beams()
|
||||
if(istype(get_turf(src),/turf/unsimulated/floor/brimstone))
|
||||
FireBurn(11, 9001, ONE_ATMOSPHERE) // lag free weird way of doing it
|
||||
fire_stacks = 11
|
||||
IgniteMob() // ffffFIRE!!!! FIRE!!! FIRE!!
|
||||
return 1
|
||||
|
||||
// Apply connect damage
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/silicon/ai/death(gibbed)
|
||||
if(stat == DEAD)
|
||||
if((status_flags & BUDDHAMODE) || stat == DEAD)
|
||||
return
|
||||
if(!gibbed)
|
||||
emote("deathgasp", message = TRUE)
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/mob/living/silicon/gib(animation = FALSE, meat = TRUE)
|
||||
if(status_flags & BUDDHAMODE)
|
||||
adjustBruteLoss(200)
|
||||
return
|
||||
if(!isUnconscious())
|
||||
forcesay("-")
|
||||
death(1)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/silicon/decoy/death(gibbed)
|
||||
if(stat == DEAD)
|
||||
if((status_flags & BUDDHAMODE) || stat == DEAD)
|
||||
return
|
||||
stat = DEAD
|
||||
icon_state = "ai-crash"
|
||||
@@ -7,4 +7,4 @@
|
||||
explosion(loc, 3, 6, 12, 15, whodunnit = src)
|
||||
gib()
|
||||
|
||||
return ..(gibbed)
|
||||
return ..(gibbed)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/silicon/pai/death(gibbed)
|
||||
if(stat == DEAD)
|
||||
if((status_flags & BUDDHAMODE) || stat == DEAD)
|
||||
return
|
||||
stat = DEAD
|
||||
canmove = 0
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/mob/living/silicon/robot/gib(animation = FALSE, meat = TRUE)
|
||||
if(status_flags & BUDDHAMODE)
|
||||
adjustBruteLoss(200)
|
||||
return
|
||||
//robots don't die when gibbed. instead they drop their MMI'd brain
|
||||
if(!isUnconscious())
|
||||
forcesay("-")
|
||||
@@ -38,7 +41,7 @@
|
||||
|
||||
|
||||
/mob/living/silicon/robot/death(gibbed)
|
||||
if(stat == DEAD)
|
||||
if((status_flags & BUDDHAMODE) || stat == DEAD)
|
||||
return
|
||||
if(connected_ai)
|
||||
if(connected_ai.explosive_cyborgs)
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
if(spell_masters && spell_masters.len)
|
||||
for(var/obj/abstract/screen/movable/spell_master/spell_master in spell_masters)
|
||||
spell_master.update_spells(0, src)
|
||||
|
||||
|
||||
if(locked_to_z)
|
||||
check_locked_zlevel()
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
if(!isDead()) //Alive.
|
||||
blinded = !(paralysis || is_component_functioning("camera"))
|
||||
stat = !(paralysis || stunned || knockdown) ? CONSCIOUS : UNCONSCIOUS
|
||||
else //Dead.
|
||||
else if(!(status_flags & BUDDHAMODE)) //Dead.
|
||||
blinded = TRUE
|
||||
stat = DEAD
|
||||
|
||||
@@ -229,4 +229,4 @@
|
||||
if(mmi) //no sneaking brains away
|
||||
qdel(mmi)
|
||||
mmi = null
|
||||
gib()
|
||||
gib()
|
||||
|
||||
@@ -96,6 +96,9 @@ var/bee_mobs_count = 0
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_animal/bee/gib(var/animation = 0, var/meat = 1)
|
||||
if(status_flags & BUDDHAMODE)
|
||||
adjustBruteLoss(200)
|
||||
return
|
||||
death(1)
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
|
||||
@@ -1119,7 +1119,7 @@ var/global/borer_unlock_types_leg = typesof(/datum/unlockable/borer/leg) - /datu
|
||||
to_chat(O,"<span class='notice'>While the borer may be mindless, you have recently ghosted and thus are not allowed to take over for now.</span>")
|
||||
|
||||
/mob/living/simple_animal/borer/proc/passout(var/wait_time = 0, var/show_message = 0)
|
||||
if(!wait_time)
|
||||
if((status_flags & BUDDHAMODE) || !wait_time)
|
||||
return
|
||||
if(show_message)
|
||||
to_chat(src, "<span class='warning'>You lose consciousness due to overexertion.</span>")
|
||||
|
||||
@@ -124,6 +124,9 @@
|
||||
return 0
|
||||
|
||||
/mob/living/simple_animal/construct/gib(var/animation = 0, var/meat = 1)
|
||||
if(status_flags & BUDDHAMODE)
|
||||
adjustBruteLoss(200)
|
||||
return
|
||||
if(!isUnconscious())
|
||||
forcesay("-")
|
||||
death(1)
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
for(var/mob/M in view())
|
||||
M << 'sound/effects/mousesqueek.ogg'
|
||||
|
||||
if(!ckey && stat == CONSCIOUS && prob(0.5))
|
||||
if(!ckey && stat == CONSCIOUS && prob(0.5) && !(status_flags & BUDDHAMODE))
|
||||
stat = UNCONSCIOUS
|
||||
icon_state = icon_sleep
|
||||
wander = 0
|
||||
@@ -443,7 +443,7 @@
|
||||
name = "Discount Mouse" //full name is discount mouse, so it's correctly capitalized
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/animal/dan
|
||||
namenumbers = FALSE
|
||||
|
||||
|
||||
/mob/living/simple_animal/mouse/common/dan/New()
|
||||
..()
|
||||
desc = "It's a small [_color] rodent, often seen hiding in maintenance areas and making a nuisance of itself. It looks well fed..."
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
var/in_capsule = istype(loc, /obj/item/device/mobcapsule)
|
||||
|
||||
//emps and lots of damage can temporarily shut us down
|
||||
if(disabled > 0)
|
||||
if(disabled > 0 && !(status_flags & BUDDHAMODE))
|
||||
stat = UNCONSCIOUS
|
||||
icon_state = "drone_dead"
|
||||
disabled--
|
||||
@@ -153,7 +153,7 @@
|
||||
src.visible_message("<span class='warning'> [bicon(src)] [src] sparks and shakes like it's about to explode!</span>")
|
||||
spark(src)
|
||||
|
||||
if(!exploding && !disabled && prob(explode_chance))
|
||||
if(!exploding && !disabled && prob(explode_chance) && !(status_flags & BUDDHAMODE))
|
||||
exploding = 1
|
||||
stat = UNCONSCIOUS
|
||||
wander = 1
|
||||
|
||||
@@ -61,6 +61,9 @@
|
||||
alpha = 255
|
||||
|
||||
/mob/living/simple_animal/hostile/shade/gib(var/animation = 0, var/meat = 1)
|
||||
if(status_flags & BUDDHAMODE)
|
||||
adjustBruteLoss(200)
|
||||
return
|
||||
if(!isUnconscious())
|
||||
forcesay("-")
|
||||
death(TRUE)
|
||||
|
||||
@@ -57,6 +57,9 @@
|
||||
. = ..(message, "C")
|
||||
|
||||
/mob/living/simple_animal/shade/gib(var/animation = 0, var/meat = 1)
|
||||
if(status_flags & BUDDHAMODE)
|
||||
adjustBruteLoss(200)
|
||||
return
|
||||
if(!isUnconscious())
|
||||
forcesay("-")
|
||||
death(TRUE)
|
||||
|
||||
@@ -353,6 +353,9 @@ var/global/list/animal_count = list() //Stores types, and amount of animals of t
|
||||
temperature_alert = 0
|
||||
|
||||
/mob/living/simple_animal/gib(var/animation = 0, var/meat = 1)
|
||||
if(status_flags & BUDDHAMODE)
|
||||
adjustBruteLoss(200)
|
||||
return
|
||||
if(icon_gib)
|
||||
anim(target = src, a_icon = icon, flick_anim = icon_gib, sleeptime = 15)
|
||||
|
||||
@@ -559,7 +562,7 @@ var/global/list/animal_count = list() //Stores types, and amount of animals of t
|
||||
stat(null, "Health: [round((health / maxHealth) * 100)]%")
|
||||
|
||||
/mob/living/simple_animal/death(gibbed)
|
||||
if(stat == DEAD)
|
||||
if((status_flags & BUDDHAMODE) || stat == DEAD)
|
||||
return
|
||||
|
||||
if(!gibbed)
|
||||
|
||||
@@ -1518,6 +1518,8 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
return E
|
||||
|
||||
/datum/organ/external/head/explode()
|
||||
if(owner.status_flags & BUDDHAMODE) // can't lose your head like this
|
||||
return
|
||||
owner.remove_internal_organ(owner, owner.internal_organs_by_name["brain"], src)
|
||||
eject_eyes()
|
||||
.=..()
|
||||
|
||||
@@ -102,6 +102,216 @@
|
||||
|
||||
message_admins("<span class='info'>Loaded space hobo shack [result ? "" : "un"]successfully.</span>")
|
||||
|
||||
/datum/map_element/dungeon/hell
|
||||
name = "HELL"
|
||||
file_path = "maps/misc/HELL.dmm"
|
||||
unique = TRUE
|
||||
|
||||
/datum/map_element/dungeon/hell/load(x, y, z, rotate=0, overwrite = FALSE, override_can_rotate = FALSE)
|
||||
. = ..()
|
||||
if(islist(.) && config.bans_shown_in_hell_limit)
|
||||
var/list/L = .
|
||||
var/list/turf/turfs = list()
|
||||
if(L.len)
|
||||
for(var/turf/spawned_turf in L)
|
||||
if(!spawned_turf.density)
|
||||
turfs += spawned_turf
|
||||
if(turfs.len)
|
||||
var/time2make = world.time
|
||||
var/database/db = ("players2.sqlite")
|
||||
var/database/query/select_query = new
|
||||
select_query.Add("SELECT ckey, reason FROM erro_ban WHERE bantype = PERMABAN AND isnull(unbanned)")
|
||||
if(!select_query.Execute(db))
|
||||
qdel(select_query)
|
||||
message_admins("Banned player search error on populating hell: [select_query.ErrorMsg()]")
|
||||
log_sql("Error: [select_query.ErrorMsg()]")
|
||||
return
|
||||
|
||||
var/bancount = 0
|
||||
while(select_query.NextRow() && bancount <= config.bans_shown_in_hell_limit)
|
||||
var/list/row = select_query.GetRowData()
|
||||
var/ckey = row[1]
|
||||
var/reason = row[2]
|
||||
var/mob/living/carbon/human/H = new(pick(turfs))
|
||||
H.quick_copy_prefs()
|
||||
H.flavor_text = "The soul of [ckey], damned to this realm for the following reason: [reason]"
|
||||
bancount++
|
||||
time2make = world.time - time2make
|
||||
log_admin("Hell was populated successfully with [bancount] banned players out of a max of [config.bans_shown_in_hell_limit] in [time2make/10] seconds.")
|
||||
message_admins("Hell was populated successfully with [bancount] banned players out of a max of [config.bans_shown_in_hell_limit] in [time2make/10] seconds.")
|
||||
|
||||
/mob/living/carbon/human/proc/quick_copy_prefs()
|
||||
var/list/preference_list = new
|
||||
var/database/query/check = new
|
||||
var/database/db = ("players2.sqlite")
|
||||
check.Add("SELECT player_ckey FROM players WHERE player_ckey = ? AND player_slot = ?", ckey, 1)
|
||||
if(check.Execute(db))
|
||||
if(!check.NextRow())
|
||||
message_admins("[ckey] had no character file to load")
|
||||
return
|
||||
else
|
||||
message_admins("Player appearance file check error: [check.ErrorMsg()]")
|
||||
log_sql("Error: [check.ErrorMsg()]")
|
||||
return
|
||||
var/database/query/q = new
|
||||
q.Add({"
|
||||
SELECT
|
||||
limbs.player_ckey,
|
||||
limbs.player_slot,
|
||||
limbs.l_arm,
|
||||
limbs.r_arm,
|
||||
limbs.l_leg,
|
||||
limbs.r_leg,
|
||||
limbs.l_foot,
|
||||
limbs.r_foot,
|
||||
limbs.l_hand,
|
||||
limbs.r_hand,
|
||||
limbs.heart,
|
||||
limbs.eyes,
|
||||
limbs.lungs,
|
||||
limbs.liver,
|
||||
limbs.kidneys,
|
||||
players.player_ckey,
|
||||
players.player_slot,
|
||||
players.real_name,
|
||||
players.random_name,
|
||||
players.random_body,
|
||||
players.gender,
|
||||
players.species,
|
||||
players.disabilities,
|
||||
body.player_ckey,
|
||||
body.player_slot,
|
||||
body.hair_red,
|
||||
body.hair_green,
|
||||
body.hair_blue,
|
||||
body.facial_red,
|
||||
body.facial_green,
|
||||
body.facial_blue,
|
||||
body.skin_tone,
|
||||
body.hair_style_name,
|
||||
body.facial_style_name,
|
||||
body.eyes_red,
|
||||
body.eyes_green,
|
||||
body.eyes_blue
|
||||
FROM
|
||||
players
|
||||
INNER JOIN
|
||||
limbs
|
||||
ON
|
||||
(
|
||||
players.player_ckey = limbs.player_ckey)
|
||||
AND (
|
||||
players.player_slot = limbs.player_slot)
|
||||
INNER JOIN
|
||||
jobs
|
||||
ON
|
||||
(
|
||||
limbs.player_ckey = jobs.player_ckey)
|
||||
AND (
|
||||
limbs.player_slot = jobs.player_slot)
|
||||
INNER JOIN
|
||||
body
|
||||
ON
|
||||
(
|
||||
jobs.player_ckey = body.player_ckey)
|
||||
AND (
|
||||
jobs.player_slot = body.player_slot)
|
||||
WHERE
|
||||
players.player_ckey = ?
|
||||
AND players.player_slot = ?"}, ckey, 1)
|
||||
if(q.Execute(db))
|
||||
while(q.NextRow())
|
||||
var/list/row = q.GetRowData()
|
||||
for(var/a in row)
|
||||
preference_list[a] = row[a]
|
||||
else
|
||||
message_admins("Player appearance loading error: [q.ErrorMsg()]")
|
||||
log_sql("Error: [q.ErrorMsg()]")
|
||||
return
|
||||
name = preference_list && preference_list.len && preference_list["real_name"] ? preference_list["real_name"] : ckey
|
||||
real_name = name
|
||||
if(dna)
|
||||
dna.real_name = real_name
|
||||
if(preference_list && preference_list.len)
|
||||
var/disabilities = text2num(preference_list["disabilities"])
|
||||
if(!isnull(preference_list["species"]))
|
||||
set_species(preference_list["species"])
|
||||
var/datum/species/chosen_species = all_species[preference_list["species"]]
|
||||
if( (disabilities & DISABILITY_FLAG_FAT) && (chosen_species.anatomy_flags & CAN_BE_FAT) )
|
||||
mutations += M_FAT
|
||||
setGender(sanitize_gender(preference_list["gender"]))
|
||||
|
||||
my_appearance.r_eyes = sanitize_integer(preference_list["eyes_red"], 0, 255)
|
||||
my_appearance.g_eyes = sanitize_integer(preference_list["eyes_green"], 0, 255)
|
||||
my_appearance.b_eyes = sanitize_integer(preference_list["eyes_blue"], 0, 255)
|
||||
|
||||
my_appearance.r_hair = sanitize_integer(preference_list["hair_red"], 0, 255)
|
||||
my_appearance.g_hair = sanitize_integer(preference_list["hair_green"], 0, 255)
|
||||
my_appearance.b_hair = sanitize_integer(preference_list["hair_blue"], 0, 255)
|
||||
|
||||
my_appearance.r_facial = sanitize_integer(preference_list["facial_red"], 0, 255)
|
||||
my_appearance.g_facial = sanitize_integer(preference_list["facial_green"], 0, 255)
|
||||
my_appearance.b_facial = sanitize_integer(preference_list["facial_blue"], 0, 255)
|
||||
|
||||
my_appearance.s_tone = sanitize_integer(preference_list["skin_tone"], -185, 34)
|
||||
|
||||
my_appearance.h_style = sanitize_inlist(preference_list["hair_style_name"], hair_styles_list)
|
||||
my_appearance.f_style = sanitize_inlist(preference_list["facial_style_name"], facial_hair_styles_list)
|
||||
|
||||
dna.ResetUIFrom(src)
|
||||
|
||||
if(disabilities & DISABILITY_FLAG_NEARSIGHTED)
|
||||
disabilities|=NEARSIGHTED
|
||||
if(disabilities & DISABILITY_FLAG_EPILEPTIC)
|
||||
disabilities|=EPILEPSY
|
||||
if(disabilities & DISABILITY_FLAG_EHS)
|
||||
disabilities|=ELECTROSENSE
|
||||
if(disabilities & DISABILITY_FLAG_DEAF)
|
||||
sdisabilities|=DEAF
|
||||
if(disabilities & DISABILITY_FLAG_BLIND)
|
||||
sdisabilities|=BLIND
|
||||
|
||||
var/list/organ_data = list()
|
||||
organ_data[LIMB_LEFT_ARM] = preference_list[LIMB_LEFT_ARM]
|
||||
organ_data[LIMB_RIGHT_ARM] = preference_list[LIMB_RIGHT_ARM]
|
||||
organ_data[LIMB_LEFT_LEG] = preference_list[LIMB_LEFT_LEG]
|
||||
organ_data[LIMB_RIGHT_LEG] = preference_list[LIMB_RIGHT_LEG]
|
||||
organ_data[LIMB_LEFT_FOOT]= preference_list[LIMB_LEFT_FOOT]
|
||||
organ_data[LIMB_RIGHT_FOOT]= preference_list[LIMB_RIGHT_FOOT]
|
||||
organ_data[LIMB_LEFT_HAND]= preference_list[LIMB_LEFT_HAND]
|
||||
organ_data[LIMB_RIGHT_HAND]= preference_list[LIMB_RIGHT_HAND]
|
||||
organ_data["heart"] = preference_list["heart"]
|
||||
organ_data["eyes"] = preference_list["eyes"]
|
||||
organ_data["lungs"] = preference_list["lungs"]
|
||||
organ_data["kidneys"]=preference_list["kidneys"]
|
||||
organ_data["liver"] = preference_list["liver"]
|
||||
|
||||
for(var/name in organ_data)
|
||||
var/datum/organ/external/O = organs_by_name[name]
|
||||
var/datum/organ/internal/I = internal_organs_by_name[name]
|
||||
var/status = organ_data[name]
|
||||
|
||||
if(status == "amputated")
|
||||
O.status &= ~ORGAN_ROBOT
|
||||
O.status &= ~ORGAN_PEG
|
||||
O.amputated = 1
|
||||
O.status |= ORGAN_DESTROYED
|
||||
O.destspawn = 1
|
||||
else if(status == "cyborg")
|
||||
O.status &= ~ORGAN_PEG
|
||||
O.status |= ORGAN_ROBOT
|
||||
else if(status == "peg")
|
||||
O.status &= ~ORGAN_ROBOT
|
||||
O.status |= ORGAN_PEG
|
||||
else if(status == "assisted")
|
||||
I?.mechassist()
|
||||
else if(status == "mechanical")
|
||||
I?.mechanize()
|
||||
else
|
||||
continue
|
||||
|
||||
regenerate_icons()
|
||||
|
||||
/proc/asteroid_can_be_placed(var/datum/map_element/E, var/turf/start_turf)
|
||||
if(!E.width || !E.height) //If the map element doesn't have its width/height calculated yet, do it now
|
||||
E.assign_dimensions()
|
||||
|
||||
@@ -25,6 +25,9 @@ JOBS_HAVE_MINIMAL_ACCESS
|
||||
## you have noone older than 0 days, since noone has been logged yet. Only turn this on once you have had the database up for 30 days.
|
||||
#USE_AGE_RESTRICTION_FOR_JOBS
|
||||
|
||||
## Remove # here if you wish to specify a custom cap on the amount of permabanned players showing up in hell, 0 disables
|
||||
#BANS_SHOWN_IN_HELL_LIMIT 32
|
||||
|
||||
## Unhash this to use recursive explosions, keep it hashed to use circle explosions. Recursive explosions react to walls, airlocks and blast doors, making them look a lot cooler than the boring old circular explosions. They require more CPU and are (as of january 2013) experimental
|
||||
#USE_RECURSIVE_EXPLOSIONS
|
||||
|
||||
|
||||
14
maps/_map.dm
14
maps/_map.dm
@@ -133,7 +133,7 @@
|
||||
var/path = levelPaths[i]
|
||||
addZLevel(new path, i)
|
||||
|
||||
/datum/map/proc/addZLevel(datum/zLevel/level, z_to_use = 0)
|
||||
/datum/map/proc/addZLevel(datum/zLevel/level, z_to_use = 0, make_base_turf = FALSE, fast_base_turf = FALSE)
|
||||
|
||||
|
||||
if(!istype(level))
|
||||
@@ -146,8 +146,9 @@
|
||||
zLevels[z_to_use] = level
|
||||
if(!level.movementJammed)
|
||||
accessable_z_levels += list("[z_to_use]" = level.movementChance)
|
||||
|
||||
level.z = z_to_use
|
||||
if(!istype(level.base_turf,/turf/space) && make_base_turf)
|
||||
level.reset_base_turf(/turf/space,fast_base_turf)
|
||||
|
||||
var/global/list/accessable_z_levels = list()
|
||||
|
||||
@@ -196,6 +197,15 @@ var/global/list/accessable_z_levels = list()
|
||||
/datum/zLevel/proc/post_mapload()
|
||||
return
|
||||
|
||||
/datum/zLevel/proc/reset_base_turf(old_type, fast_base_turf = FALSE)
|
||||
for(var/turf/T in block(locate(1,1,z),locate(world.maxx,world.maxy,z)))
|
||||
if(istype(T,old_type))
|
||||
if(fast_base_turf)
|
||||
new base_turf(T)
|
||||
else
|
||||
T.set_area(base_area)
|
||||
T.ChangeTurf(base_turf)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
/datum/zLevel/station
|
||||
|
||||
4232
maps/misc/HELL.dmm
Normal file
4232
maps/misc/HELL.dmm
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user