diff --git a/baystation12.dme b/baystation12.dme index fc4a7f6554b..d463ed87365 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -78,6 +78,7 @@ #include "code\controllers\autotransfer.dm" #include "code\controllers\configuration.dm" #include "code\controllers\failsafe.dm" +#include "code\controllers\hooks-defs.dm" #include "code\controllers\hooks.dm" #include "code\controllers\lighting_controller.dm" #include "code\controllers\master_controller.dm" diff --git a/code/controllers/hooks-defs.dm b/code/controllers/hooks-defs.dm new file mode 100644 index 00000000000..cb51229c9fb --- /dev/null +++ b/code/controllers/hooks-defs.dm @@ -0,0 +1,17 @@ +/** + * Startup hook. + * Called in world.dm when the server starts. + */ +/hook/startup + +/** + * Roundstart hook. + * Called in gameticker.dm when a round starts. + */ +/hook/roundstart + +/** + * Roundend hook. + * Called in gameticker.dm when a round ends. + */ +/hook/roundend diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 6b06dc57f68..60da3893fa6 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -25,8 +25,6 @@ var/global/list/dna_activity_bounds[STRUCDNASIZE] // Used to determine what each block means (admin hax and species stuff on /vg/, mostly) var/global/list/assigned_blocks[STRUCDNASIZE] -var/global/list/datum/dna/gene/dna_genes[0] - // UI Indices (can change to mutblock style, if desired) #define DNA_UI_HAIR_R 1 #define DNA_UI_HAIR_G 2 @@ -43,13 +41,6 @@ var/global/list/datum/dna/gene/dna_genes[0] #define DNA_UI_HAIR_STYLE 13 #define DNA_UI_LENGTH 13 // Update this when you add something, or you WILL break shit. -///////////////// -// GENE DEFINES -///////////////// - -// Skip checking if it's already active. -// Used for genes that check for value rather than a binary on/off. -#define GENE_ALWAYS_ACTIVATE 1 /* Note RE: unassigned blocks @@ -86,10 +77,6 @@ var/global/list/datum/dna/gene/dna_genes[0] var/b_type = "A+" // Should probably change to an integer => string map but I'm lazy. var/mutantrace = null // The type of mutant race the player is, if applicable (i.e. potato-man) var/real_name // Stores the real name of the person who originally got this dna datum. Used primarily for changelings, - - // New stuff - var/species = "Human" - /////////////////////////////////////// // UNIQUE IDENTITY /////////////////////////////////////// @@ -97,11 +84,7 @@ var/global/list/datum/dna/gene/dna_genes[0] // Create random UI. /datum/dna/proc/ResetUI(var/defer=0) for(var/i=1,i<=DNA_UI_LENGTH,i++) - switch(i) - if(DNA_UI_SKIN_TONE) - SetUIValueRange(DNA_UI_SKIN_TONE,rand(1,220),220,1) // Otherwise, it gets fucked - else - UI[i]=rand(0,4095) + UI[i]=rand(0,4095) if(!defer) UpdateUI() @@ -127,11 +110,11 @@ var/global/list/datum/dna/gene/dna_genes[0] SetUIValueRange(DNA_UI_BEARD_G, character.g_facial, 255, 1) SetUIValueRange(DNA_UI_BEARD_B, character.b_facial, 255, 1) - SetUIValueRange(DNA_UI_BEARD_R, character.r_eyes, 255, 1) - SetUIValueRange(DNA_UI_BEARD_G, character.g_eyes, 255, 1) - SetUIValueRange(DNA_UI_BEARD_B, character.b_eyes, 255, 1) + SetUIValueRange(DNA_UI_EYES_R, character.r_eyes, 255, 1) + SetUIValueRange(DNA_UI_EYES_G, character.g_eyes, 255, 1) + SetUIValueRange(DNA_UI_EYES_B, character.b_eyes, 255, 1) - SetUIValueRange(DNA_UI_SKIN_TONE, 35-character.s_tone, 220, 1) // Value can be negative. + SetUIValueRange(DNA_UI_SKIN_TONE, -character.s_tone+35, 220, 1) // WARNING: MATH. Blame the person that setup line 944 in modules/client/preferences.dm SetUIState(DNA_UI_GENDER, character.gender!=MALE, 1) @@ -157,18 +140,22 @@ var/global/list/datum/dna/gene/dna_genes[0] // Set a DNA UI block's value, given a value and a max possible value. // Used in hair and facial styles (value being the index and maxvalue being the len of the hairstyle list) -/datum/dna/proc/SetUIValueRange(var/block,var/value,var/maxvalue) +/datum/dna/proc/SetUIValueRange(var/block,var/value,var/maxvalue,var/minvalue) if (block<=0) return + if(value < minvalue) + value=minvalue + else if(value > maxvalue) + value=maxvalue ASSERT(maxvalue<=4095) - var/range = round(4095 / maxvalue) + var/range = (4095 / maxvalue) if(value) - SetUIValue(block,value * range - rand(1,range-1)) + SetUIValue(block,round(value * range)) // Getter version of above. /datum/dna/proc/GetUIValueRange(var/block,var/maxvalue) if (block<=0) return 0 var/value = GetUIValue(block) - return round(1 +(value / 4096)*maxvalue) + return round(1+(value / 4096)*maxvalue) // Is the UI gene "on" or "off"? // For UI, this is simply a check of if the value is > 2050. @@ -251,12 +238,6 @@ var/global/list/datum/dna/gene/dna_genes[0] if(value) SetSEValue(block, value * range - rand(1,range-1)) -// Getter version of above. -/datum/dna/proc/GetSEValueRange(var/block,var/maxvalue) - if (block<=0) return 0 - var/value = GetSEValue(block) - return round(1 +(value / 4096)*maxvalue) - // Is the block "on" (1) or "off" (0)? (Un-assigned genes are always off.) /datum/dna/proc/GetSEState(var/block) if (block<=0) return 0 diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index 6f180993fb8..44ab4301cf7 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -143,7 +143,8 @@ H.g_eyes = dna.GetUIValueRange(DNA_UI_EYES_G, 255) H.b_eyes = dna.GetUIValueRange(DNA_UI_EYES_B, 255) - H.s_tone = 35 - dna.GetUIValueRange(DNA_UI_SKIN_TONE, 220) // Value can be negative. + var/new_s_tone = dna.GetUIValueRange(DNA_UI_SKIN_TONE, 220) + H.s_tone = 35 - max(min( round(new_s_tone), 220),1) //Warning MATH. Blame the person that wrote modules/client/preferences.dm, line 994 if (dna.GetUIState(DNA_UI_GENDER)) H.gender = FEMALE @@ -170,3 +171,309 @@ // Used below, simple injection modifier. /proc/probinj(var/pr, var/inj) return prob(pr+inj*pr) + +// (Re-)Apply mutations. +// TODO: Turn into a /mob proc, change inj to a bitflag for various forms of differing behavior. +// M: Mob to mess with +// connected: Machine we're in, type unchecked so I doubt it's used beyond monkeying +// inj: 1 for if we're checking this from an injector, screws with manifestation probability calc. +/proc/domutcheck(mob/living/M as mob, connected, inj) + if (!M) return + + M.dna.check_integrity() + + M.disabilities = 0 + M.sdisabilities = 0 + var/old_mutations = M.mutations + M.mutations = list() + M.pass_flags = 0 +// M.see_in_dark = 2 +// M.see_invisible = 0 + + if(PLANT in old_mutations) + M.mutations.Add(PLANT) + if(SKELETON in old_mutations) + M.mutations.Add(SKELETON) + if(FAT in old_mutations) + M.mutations.Add(FAT) + if(HUSK in old_mutations) + M.mutations.Add(HUSK) + + ///////////////////////////////////// + // IMPORTANT REMINDER + // IF A BLOCK IS SET TO 0 (unused) + // GetSEState(block) WILL RETURN 0 + ///////////////////////////////////// + + if(M.dna.GetSEState(NOBREATHBLOCK)) + if(probinj(45,inj) || (mNobreath in old_mutations)) + M << "\blue You feel no need to breathe." + M.mutations.Add(mNobreath) + if(M.dna.GetSEState(REMOTEVIEWBLOCK)) + if(probinj(45,inj) || (mRemote in old_mutations)) + M << "\blue Your mind expands" + M.mutations.Add(mRemote) + M.verbs += /mob/living/carbon/human/proc/remoteobserve + if(M.dna.GetSEState(REGENERATEBLOCK)) + if(probinj(45,inj) || (mRegen in old_mutations)) + M << "\blue You feel better" + M.mutations.Add(mRegen) + if(M.dna.GetSEState(INCREASERUNBLOCK)) + if(probinj(45,inj) || (mRun in old_mutations)) + M << "\blue Your leg muscles pulsate." + M.mutations.Add(mRun) + if(M.dna.GetSEState(REMOTETALKBLOCK)) + if(probinj(45,inj) || (mRemotetalk in old_mutations)) + M << "\blue You expand your mind outwards" + M.mutations.Add(mRemotetalk) + M.verbs += /mob/living/carbon/human/proc/remotesay + if(M.dna.GetSEState(MORPHBLOCK)) + if(probinj(45,inj) || (mMorph in old_mutations)) + M.mutations.Add(mMorph) + M << "\blue Your skin feels strange" + M.verbs += /mob/living/carbon/human/proc/morph + if(M.dna.GetSEState(HALLUCINATIONBLOCK)) + if(probinj(45,inj) || (mHallucination in old_mutations)) + M.mutations.Add(mHallucination) + M << "\red Your mind says 'Hello'" + if(M.dna.GetSEState(NOPRINTSBLOCK)) + if(probinj(45,inj) || (mFingerprints in old_mutations)) + M.mutations.Add(mFingerprints) + M << "\blue Your fingers feel numb" + if(M.dna.GetSEState(SHOCKIMMUNITYBLOCK)) + if(probinj(45,inj) || (mShock in old_mutations)) + M.mutations.Add(mShock) + M << "\blue Your skin feels strange" + if(M.dna.GetSEState(SMALLSIZEBLOCK)) + if(probinj(45,inj) || (mSmallsize in old_mutations)) + M << "\blue Your skin feels rubbery" + M.mutations.Add(mSmallsize) + M.pass_flags |= 1 + + + + if (M.dna.GetSEState(HULKBLOCK)) + if(probinj(5,inj) || (HULK in old_mutations)) + M << "\blue Your muscles hurt." + M.mutations.Add(HULK) + if (M.dna.GetSEState(HEADACHEBLOCK)) + M.disabilities |= EPILEPSY + M << "\red You get a headache." + if (M.dna.GetSEState(FAKEBLOCK)) + M << "\red You feel strange." + if (prob(95)) + if(prob(50)) + randmutb(M) + else + randmuti(M) + else + randmutg(M) + if (M.dna.GetSEState(COUGHBLOCK)) + M.disabilities |= COUGHING + M << "\red You start coughing." + if (M.dna.GetSEState(CLUMSYBLOCK)) + M << "\red You feel lightheaded." + M.mutations.Add(CLUMSY) + if (M.dna.GetSEState(TWITCHBLOCK)) + M.disabilities |= TOURETTES + M << "\red You twitch." + if (M.dna.GetSEState(XRAYBLOCK)) + if(probinj(30,inj) || (XRAY in old_mutations)) + M << "\blue The walls suddenly disappear." +// M.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS) +// M.see_in_dark = 8 +// M.see_invisible = 2 + M.mutations.Add(XRAY) + if (M.dna.GetSEState(NERVOUSBLOCK)) + M.disabilities |= NERVOUS + M << "\red You feel nervous." + if (M.dna.GetSEState(FIREBLOCK)) + if(probinj(30,inj) || (COLD_RESISTANCE in old_mutations)) + M << "\blue Your body feels warm." + M.mutations.Add(COLD_RESISTANCE) + if (M.dna.GetSEState(BLINDBLOCK)) + M.sdisabilities |= BLIND + M << "\red You can't seem to see anything." + if (M.dna.GetSEState(TELEBLOCK)) + if(probinj(15,inj) || (TK in old_mutations)) + M << "\blue You feel smarter." + M.mutations.Add(TK) + if (M.dna.GetSEState(DEAFBLOCK)) + M.sdisabilities |= DEAF + M.ear_deaf = 1 + M << "\red Its kinda quiet.." + if (M.dna.GetSEState(GLASSESBLOCK)) + M.disabilities |= NEARSIGHTED + M << "Your eyes feel weird..." + + /* If you want the new mutations to work, UNCOMMENT THIS. + if(istype(M, /mob/living/carbon)) + for (var/datum/mutations/mut in global_mutations) + mut.check_mutation(M) + */ + +//////////////////////////////////////////////////////////// Monkey Block + if (M.dna.GetSEState(MONKEYBLOCK) && istype(M, /mob/living/carbon/human)) + // human > monkey + var/mob/living/carbon/human/H = M + H.monkeyizing = 1 + var/list/implants = list() //Try to preserve implants. + for(var/obj/item/weapon/implant/W in H) + implants += W + W.loc = null + + if(!connected) + for(var/obj/item/W in (H.contents-implants)) + if (W==H.w_uniform) // will be teared + continue + H.drop_from_inventory(W) + M.monkeyizing = 1 + M.canmove = 0 + M.icon = null + M.invisibility = 101 + var/atom/movable/overlay/animation = new( M.loc ) + animation.icon_state = "blank" + animation.icon = 'icons/mob/mob.dmi' + animation.master = src + flick("h2monkey", animation) + sleep(48) + del(animation) + + + var/mob/living/carbon/monkey/O = null + if(H.species.primitive) + O = new H.species.primitive(src) + else + H.gib() //Trying to change the species of a creature with no primitive var set is messy. + return + + if(M) + if (M.dna) + O.dna = M.dna + M.dna = null + + if (M.suiciding) + O.suiciding = M.suiciding + M.suiciding = null + + + for(var/datum/disease/D in M.viruses) + O.viruses += D + D.affected_mob = O + M.viruses -= D + + + for(var/obj/T in (M.contents-implants)) + del(T) + + O.loc = M.loc + + if(M.mind) + M.mind.transfer_to(O) //transfer our mind to the cute little monkey + + if (connected) //inside dna thing + var/obj/machinery/dna_scannernew/C = connected + O.loc = C + C.occupant = O + connected = null + O.real_name = text("monkey ([])",copytext(md5(M.real_name), 2, 6)) + O.take_overall_damage(M.getBruteLoss() + 40, M.getFireLoss()) + O.adjustToxLoss(M.getToxLoss() + 20) + O.adjustOxyLoss(M.getOxyLoss()) + O.stat = M.stat + O.a_intent = "hurt" + for (var/obj/item/weapon/implant/I in implants) + I.loc = O + I.implanted = O +// O.update_icon = 1 //queue a full icon update at next life() call + del(M) + return + + if (!M.dna.GetSEState(MONKEYBLOCK) && !istype(M, /mob/living/carbon/human)) + // monkey > human, + var/mob/living/carbon/monkey/Mo = M + Mo.monkeyizing = 1 + var/list/implants = list() //Still preserving implants + for(var/obj/item/weapon/implant/W in Mo) + implants += W + W.loc = null + if(!connected) + for(var/obj/item/W in (Mo.contents-implants)) + Mo.drop_from_inventory(W) + M.monkeyizing = 1 + M.canmove = 0 + M.icon = null + M.invisibility = 101 + var/atom/movable/overlay/animation = new( M.loc ) + animation.icon_state = "blank" + animation.icon = 'icons/mob/mob.dmi' + animation.master = src + flick("monkey2h", animation) + sleep(48) + del(animation) + + var/mob/living/carbon/human/O = new( src ) + if(Mo.greaterform) + O.set_species(Mo.greaterform) + + if (M.dna.GetUIState(DNA_UI_GENDER)) + O.gender = FEMALE + else + O.gender = MALE + + if (M) + if (M.dna) + O.dna = M.dna + M.dna = null + + if (M.suiciding) + O.suiciding = M.suiciding + M.suiciding = null + + for(var/datum/disease/D in M.viruses) + O.viruses += D + D.affected_mob = O + M.viruses -= D + + //for(var/obj/T in M) + // del(T) + + O.loc = M.loc + + if(M.mind) + M.mind.transfer_to(O) //transfer our mind to the human + + if (connected) //inside dna thing + var/obj/machinery/dna_scannernew/C = connected + O.loc = C + C.occupant = O + connected = null + + var/i + while (!i) + var/randomname + if (O.gender == MALE) + randomname = capitalize(pick(first_names_male) + " " + capitalize(pick(last_names))) + else + randomname = capitalize(pick(first_names_female) + " " + capitalize(pick(last_names))) + if (findname(randomname)) + continue + else + O.real_name = randomname + i++ + O.UpdateAppearance() + O.take_overall_damage(M.getBruteLoss(), M.getFireLoss()) + O.adjustToxLoss(M.getToxLoss()) + O.adjustOxyLoss(M.getOxyLoss()) + O.stat = M.stat + for (var/obj/item/weapon/implant/I in implants) + I.loc = O + I.implanted = O +// O.update_icon = 1 //queue a full icon update at next life() call + del(M) + return +//////////////////////////////////////////////////////////// Monkey Block + if(M) + M.update_icon = 1 //queue a full icon update at next life() call + return null +/////////////////////////// DNA MISC-PROCS diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/gamemodes/events/space_ninja.dm index c3b77d5f875..4d0df9c3f7f 100644 --- a/code/game/gamemodes/events/space_ninja.dm +++ b/code/game/gamemodes/events/space_ninja.dm @@ -547,7 +547,7 @@ As such, it's hard-coded for now. No reason for it not to be, really. equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_belt) equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_r_store) equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_l_store) - equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen(src), slot_s_store) + equip_to_slot_or_del(new /obj/item/weapon/tank/oxygen(src), slot_s_store) return 1 //=======//HELPER PROCS//=======// diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 39be77978ee..26497410fa8 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -213,7 +213,7 @@ Implants; for(var/mob/living/carbon/human/man in player_list) if(man.client && man.mind) // NT relation option var/special_role = man.mind.special_role - if (special_role == "Wizard" || special_role == "Ninja" || special_role == "Syndicate") + if (special_role == "Wizard" || special_role == "Ninja" || special_role == "Syndicate" || special_role == "Vox Raider") continue //NT intelligence ruled out possiblity that those are too classy to pretend to be a crew. if(man.client.prefs.nanotrasen_relation == "Opposed" && prob(50) || \ man.client.prefs.nanotrasen_relation == "Skeptical" && prob(20)) diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm index deb28d76893..712512bd479 100644 --- a/code/game/gamemodes/meteor/meteor.dm +++ b/code/game/gamemodes/meteor/meteor.dm @@ -6,6 +6,7 @@ var/const/meteordelay = 2000 var/nometeors = 1 required_players = 0 + votable = 0 uplink_welcome = "EVIL METEOR Uplink Console:" uplink_uses = 10 diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm index e0a74e97223..7b5e18413f7 100644 --- a/code/game/machinery/bots/cleanbot.dm +++ b/code/game/machinery/bots/cleanbot.dm @@ -66,6 +66,8 @@ /obj/machinery/bot/cleanbot/turn_off() ..() + if(!isnull(src.target)) + target.targeted_by = null src.target = null src.oldtarget = null src.oldloc = null @@ -165,7 +167,6 @@ text("[src.oddbutton ? "Yes" : "No" return if(src.cleaning) return - var/list/cleanbottargets = list() if(!src.screwloose && !src.oddbutton && prob(5)) visible_message("[src] makes an excited beeping booping sound!") @@ -194,9 +195,10 @@ text("[src.oddbutton ? "Yes" : "No" if(!src.target || src.target == null) for (var/obj/effect/decal/cleanable/D in view(7,src)) for(var/T in src.target_types) - if(!(D in cleanbottargets) && istype(D,T) && D != src.oldtarget) - src.oldtarget = D - src.target = D + if(isnull(D.targeted_by) && (D.type == T || D.parent_type == T) && D != src.oldtarget) // If the mess isn't targeted + src.oldtarget = D // or if it is but the bot is gone. + src.target = D // and it's stuff we clean? Clean it. + D.targeted_by = src // Claim the mess we are targeting. return if(!src.target || src.target == null) @@ -237,6 +239,7 @@ text("[src.oddbutton ? "Yes" : "No" if (!path) path = list() if(src.path.len == 0) src.oldtarget = src.target + target.targeted_by = null src.target = null return if(src.path.len > 0 && src.target && (src.target != null)) @@ -293,19 +296,29 @@ text("[src.oddbutton ? "Yes" : "No" /obj/machinery/bot/cleanbot/proc/get_targets() src.target_types = new/list() - target_types += /obj/effect/decal/cleanable/blood + target_types += /obj/effect/decal/cleanable/oil target_types += /obj/effect/decal/cleanable/vomit + target_types += /obj/effect/decal/cleanable/robot_debris target_types += /obj/effect/decal/cleanable/crayon target_types += /obj/effect/decal/cleanable/liquid_fuel target_types += /obj/effect/decal/cleanable/mucus - target_types += /obj/effect/decal/cleanable/dirt + + if(src.blood) + target_types += /obj/effect/decal/cleanable/xenoblood/ + target_types += /obj/effect/decal/cleanable/xenoblood/xgibs + target_types += /obj/effect/decal/cleanable/blood/ + target_types += /obj/effect/decal/cleanable/blood/gibs/ + target_types += /obj/effect/decal/cleanable/dirt /obj/machinery/bot/cleanbot/proc/clean(var/obj/effect/decal/cleanable/target) src.anchored = 1 src.icon_state = "cleanbot-c" visible_message("\red [src] begins to clean up the [target]") src.cleaning = 1 - spawn(50) + var/cleantime = 50 + if(istype(target,/obj/effect/decal/cleanable/dirt)) // Clean Dirt much faster + cleantime = 10 + spawn(cleantime) src.cleaning = 0 del(target) src.icon_state = "cleanbot[src.on]" @@ -348,4 +361,4 @@ text("[src.oddbutton ? "Yes" : "No" return if (!in_range(src, usr) && src.loc != usr) return - src.created_name = t \ No newline at end of file + src.created_name = t diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index 0b257a3e111..d94d4670bea 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -40,6 +40,14 @@ icon = 'icons/effects/effects.dmi' icon_state = "dirt" +/obj/effect/decal/cleanable/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W,/obj/item/weapon/crowbar)) + var/turf/T = get_turf(src) + if(T) + T.attackby(W,user) + return + ..() + /obj/effect/decal/cleanable/flour name = "flour" desc = "It's still good. Four second rule!" diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index d1227d3aa38..63956f5e89a 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -1,7 +1,8 @@ /obj/effect/decal/cleanable var/list/random_icon_states = list() + var/targeted_by = null // Used so cleanbots can't claim a mess. /obj/effect/decal/cleanable/New() if (random_icon_states && length(src.random_icon_states) > 0) src.icon_state = pick(src.random_icon_states) - ..() \ No newline at end of file + ..() diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index f86a176f712..5250148688d 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -30,12 +30,12 @@ if(M.lying) return dirt++ var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate(/obj/effect/decal/cleanable/dirt, src) - if (dirt >= 30) + if (dirt >= 50) if (!dirtoverlay) dirtoverlay = new/obj/effect/decal/cleanable/dirt(src) dirtoverlay.alpha = 15 - else if (dirt > 30) - dirtoverlay.alpha = min(dirtoverlay.alpha+20, 255) + else if (dirt > 50) + dirtoverlay.alpha = min(dirtoverlay.alpha+5, 255) if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M @@ -189,4 +189,4 @@ this.blood_DNA["UNKNOWN BLOOD"] = "X*" else if( istype(M, /mob/living/silicon/robot )) - new /obj/effect/decal/cleanable/blood/oil(src) \ No newline at end of file + new /obj/effect/decal/cleanable/blood/oil(src) diff --git a/code/modules/clothing/spacesuits/ninja.dm b/code/modules/clothing/spacesuits/ninja.dm index 9e071cae010..c146bb21a50 100644 --- a/code/modules/clothing/spacesuits/ninja.dm +++ b/code/modules/clothing/spacesuits/ninja.dm @@ -13,7 +13,7 @@ desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins." icon_state = "s-ninja" item_state = "s-ninja_suit" - allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/cell) + allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank,/obj/item/weapon/cell) slowdown = 0 armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) siemens_coefficient = 0.2 diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index d55c7e329ac..95df457c853 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -24,65 +24,46 @@ if(2) new/obj/item/weapon/pickaxe/drill(src) new/obj/item/device/taperecorder(src) - new/obj/item/clothing/suit/space/rig(src) - new/obj/item/clothing/head/helmet/space/rig(src) + new/obj/item/clothing/suit/space(src) + new/obj/item/clothing/head/helmet/space(src) if(3) - for(var/i = 0, i < 12, i++) - new/obj/item/weapon/coin/diamond(src) + return if(4) - new/obj/item/weapon/bananapeel(src) - if(5) - for(var/i = 0, i < 6, i++) - new/obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake(src) - new/obj/item/weapon/lighter/zippo(src) - if(7) new/obj/item/weapon/reagent_containers/glass/beaker/bluespace(src) - if(9 to 10) + if(5 to 6) for(var/i = 0, i < 10, i++) new/obj/item/weapon/ore/diamond(src) - if(11) + if(7) return - if(12) - new/obj/item/seeds/deathberryseed(src) - new/obj/item/seeds/deathnettleseed(src) - if(13) - new/obj/machinery/hydroponics(src) - if(14) - new/obj/item/seeds/cashseed(src) - if(15) + if(8) + return + if(9) + for(var/i = 0, i < 3, i++) + new/obj/machinery/hydroponics(src) + if(10) for(var/i = 0, i < 3, i++) new/obj/item/weapon/reagent_containers/glass/beaker/noreact(src) - if(16 to 17) + if(11 to 12) for(var/i = 0, i < 9, i++) new/obj/item/bluespace_crystal(src) - if(19) - for(var/i = 0, i < 4, i++) - new/obj/item/weapon/melee/classic_baton(src) - if(20) - new/obj/item/weapon/storage/lockbox/clusterbang(src) - if(21) - new/obj/item/weapon/aiModule/robocop(src) - if(22) + if(13) + new/obj/item/weapon/melee/classic_baton(src) + if(14) + return + if(15) new/obj/item/clothing/under/chameleon(src) for(var/i = 0, i < 7, i++) new/obj/item/clothing/tie/horrible(src) - if(23) + if(16) new/obj/item/clothing/under/shorts(src) new/obj/item/clothing/under/shorts/red(src) new/obj/item/clothing/under/shorts/blue(src) //Dummy crates start here. - if(24 to 29) - return - if(8) - return - if(6) - return - if(18) + if(17 to 29) return //Dummy crates end here. if(30) - for(var/i = 0, i < 4, i++) - new/obj/item/weapon/melee/baton(src) + new/obj/item/weapon/melee/baton(src) /obj/structure/closet/crate/secure/loot/attack_hand(mob/user as mob) if(locked) @@ -102,7 +83,7 @@ if (attempts == 0) user << "The crate's anti-tamper system activates!" var/turf/T = get_turf(src.loc) - explosion(T, 0, 1, 2, 1) + explosion(T, 0, 0, 0, 1) del(src) return else diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 90b2cbf0e3f..6a17f693174 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -487,7 +487,7 @@ commented out in r5061, I left it because of the shroom thingies var/turf/simulated/floor/plating/airless/asteroid/N = ChangeTurf(/turf/simulated/floor/plating/airless/asteroid) N.fullUpdateMineralOverlays() - var/crate = rand(1,30) + var/crate = rand(1,500) switch(crate) if(1) visible_message("After digging, you find an old dusty crate buried within!") diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 05fe75b824f..31751cdfffc 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1773,6 +1773,8 @@ datum/design/cart_janitor build_type = PROTOLATHE materials = list("$metal" = 50, "$glass" = 50) build_path = "/obj/item/weapon/cartridge/janitor" + +/* datum/design/cart_clown name = "Honkworks 5.0 Cartridge" desc = "A data cartridge for portable microcomputers." @@ -1789,6 +1791,8 @@ datum/design/cart_mime build_type = PROTOLATHE materials = list("$metal" = 50, "$glass" = 50) build_path = "/obj/item/weapon/cartridge/mime" +*/ + datum/design/cart_toxins name = "Signal Ace 2 Cartridge" desc = "A data cartridge for portable microcomputers." diff --git a/code/world.dm b/code/world.dm index 95453243430..3d1ad20db98 100644 --- a/code/world.dm +++ b/code/world.dm @@ -29,6 +29,9 @@ config.server_name += " #[(world.port % 1000) / 100]" callHook("startup") + //Emergency Fix + load_mods() + //end-emergency fix src.update_status()