diff --git a/code/WorkInProgress/ZomgPonies/karma.dm b/code/WorkInProgress/ZomgPonies/karma.dm index 20f210e600b..c24aed2604b 100644 --- a/code/WorkInProgress/ZomgPonies/karma.dm +++ b/code/WorkInProgress/ZomgPonies/karma.dm @@ -53,7 +53,7 @@ var/list/karma_spenders = list() /mob/verb/spend_karma(var/mob/M in player_list) // Karma system -- TLE set name = "Award Karma" - set desc = "Let the gods know whether someone's been naughty or nice. " + set desc = "Let the gods know whether someone's been nice. " set category = "Special Verbs" if(!istype(M, /mob)) usr << "\red That's not a mob. You shouldn't have even been able to specify that. Please inform TLE post haste." @@ -109,13 +109,19 @@ mob/verb/check_karma() usr << "\red Unable to connect to karma database. Please try again later.
" return else - var/DBQuery/query = dbcon.NewQuery("SELECT karma FROM karmatotals WHERE byondkey='[src.key]'") + var/DBQuery/query = dbcon.NewQuery("SELECT karma, karmaspent FROM karmatotals WHERE byondkey='[src.key]'") query.Execute() - var/currentkarma + var/totalkarma + var/karmaspent while(query.NextRow()) - currentkarma = query.item[1] - if(currentkarma) - usr << "Your current karma is: [currentkarma]
" + totalkarma = query.item[1] + karmaspent = query.item[2] + var/currentkarma = (text2num(totalkarma) - text2num(karmaspent)) + if(totalkarma) + usr << {"
You have [currentkarma] available.
+ You've gained [totalkarma] total karma in your time here.
"} else - usr << "Your current karma is: 0
" + usr << "Your total karma is: 0
" + + diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 4fec393daf3..92b9f1d4ed1 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -454,7 +454,10 @@ its easier to just keep the beam vertical. if(blood_DNA[H.dna.unique_enzymes]) return 0 //already bloodied with this blood. Cannot add more. blood_DNA[H.dna.unique_enzymes] = H.dna.b_type - H.update_inv_gloves() //handles bloody hands overlays and updating + if(H.species.bloodflags & BLOOD_GREEN) + H.update_inv_gloves(1,1) + else + H.update_inv_gloves(1,0) //handles bloody hands overlays and updating return 1 //we applied blood to the item return diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 91b2455eb03..7e3673f3a32 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -134,7 +134,7 @@ M.Paralyse(4) else M.make_jittery(500) - /* //else the mousetraps are useless + ///else the mousetraps are useless if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M if(isobj(H.shoes)) @@ -144,7 +144,7 @@ spawn(20) if(thingy) walk(thingy,0) - */ + chassis.use_power(energy_drain) log_message("Honked from [src.name]. HONK!") do_after_cooldown() diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index c0f1fb32b78..364b032fce0 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -49,7 +49,7 @@ if(!perp.shoes.blood_DNA) perp.shoes.blood_DNA = list() perp.shoes.overlays += perp.shoes.blood_overlay - perp.update_inv_shoes(1) + perp.update_inv_shoes(1,0) perp.shoes.blood_DNA |= blood_DNA.Copy() else perp.track_blood = max(amount,perp.track_blood) //Or feet @@ -71,6 +71,44 @@ random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5") amount = 2 +/obj/effect/decal/cleanable/blood/green + name = "green blood" + desc = "It's green and gooey. Perhaps it's the chef's cooking?" + icon_state = "xfloor1" + random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7") + +/obj/effect/decal/cleanable/blood/green/HasEntered(mob/living/carbon/human/perp) + if (!istype(perp)) + return + if(amount < 1) + return + + if(perp.shoes) + perp.shoes:track_blood_green= max(amount,perp.shoes:track_blood_green) //Adding blood to shoes + if(!perp.shoes.blood_overlay) + perp.shoes.blood_overlay_color = 1 + perp.shoes.generate_blood_overlay() + if(!perp.shoes.blood_DNA) + perp.shoes.blood_DNA = list() + perp.shoes.overlays += perp.shoes.blood_overlay + perp.update_inv_shoes(1,1) + perp.shoes.blood_DNA |= blood_DNA.Copy() + else + perp.track_blood_green = max(amount,perp.track_blood_green) //Or feet + if(!perp.feet_blood_DNA) + perp.feet_blood_DNA = list() + perp.feet_blood_DNA |= blood_DNA.Copy() + + amount-- + +/obj/effect/decal/cleanable/blood/drip/green + name = "drips of blood" + desc = "It's green." + gender = PLURAL + icon = 'icons/effects/drip.dmi' + icon_state = "g1" + amount = 0 + // The idea is to have 4 bits for coming and 4 for going. #define TRACKS_COMING_NORTH 1 #define TRACKS_COMING_SOUTH 2 @@ -88,8 +126,11 @@ amount = 0 random_icon_states = null var/dirs=0 + icon='icons/effects/footprints.dmi' var/coming_state="blood1" var/going_state="blood2" + + var/newtracks=0 // Cleared after every icon_update var/crustytracks=0 // Cleared after every icon_update @@ -112,7 +153,26 @@ * @param comingdir Direction tracks come from, or 0. * @param goingdir Direction tracks are going to (or 0). */ - proc/AddTracks(var/list/DNA, var/comingdir, var/goingdir) + proc/AddTracks(var/mob/living/carbon/human/H, var/list/DNA, var/comingdir, var/goingdir,var/typepath) + if(typepath == /obj/effect/decal/cleanable/blood/tracks/footprints) + if(H.species.bodyflags & FEET_CLAWS) + coming_state="bloodclaw1" + going_state="bloodclaw2" + if(H.species.bodyflags & FEET_PADDED) + coming_state="bloodpaw1" + going_state="bloodpaw2" + if(typepath == /obj/effect/decal/cleanable/blood/tracks/footprints/green) + if(H.species.bodyflags & FEET_CLAWS) + coming_state="xenoclaw1" + going_state="xenoclaw2" + if(H.species.bodyflags & FEET_PADDED) + coming_state="xenopaw1" + going_state="xenopaw2" + else + coming_state="xeno1" + going_state="xeno2" + + var/updated=0 // Shift our goingdir 4 spaces to the left so it's in the GOING bitblock. var/realgoing=goingdir<<4 @@ -203,13 +263,16 @@ /obj/effect/decal/cleanable/blood/tracks/footprints name = "bloody footprints" desc = "Whoops..." - icon='icons/effects/footprints.dmi' - coming_state = "blood1" - going_state = "blood2" + +/obj/effect/decal/cleanable/blood/tracks/footprints/green + name = "bloody green footprints" + desc = "Whoops..." + /obj/effect/decal/cleanable/blood/tracks/wheels icon_state = "tracks" desc = "They look like tracks left by wheels." + icon = 'icons/effects/blood.dmi' gender = PLURAL random_icon_states = null amount = 0 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index cbf7bdfa9ec..1134808a483 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -2,6 +2,7 @@ name = "item" icon = 'icons/obj/items.dmi' var/icon/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite + var/blood_overlay_color = null var/abstract = 0 var/item_state = null var/r_speed = 1.0 @@ -719,7 +720,10 @@ //if we haven't made our blood_overlay already if( !blood_overlay ) - generate_blood_overlay() + if(M.species.bloodflags & BLOOD_GREEN) + generate_blood_overlay(1) + else + generate_blood_overlay() //apply the blood-splatter overlay if it isn't already in there if(!blood_DNA.len) @@ -732,13 +736,16 @@ blood_DNA[M.dna.unique_enzymes] = M.dna.b_type return 1 //we applied blood to the item -/obj/item/proc/generate_blood_overlay() +/obj/item/proc/generate_blood_overlay(blood_overlay_color) if(blood_overlay) return var/icon/I = new /icon(icon, icon_state) I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)),ICON_ADD) //fills the icon_state with white (except where it's transparent) - I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY) //adds blood and the remaining white areas become transparant + if (blood_overlay_color == 1) + I.Blend(new /icon('icons/effects/blood.dmi', "xitemblood"),ICON_MULTIPLY) //adds blood and the remaining white areas become transparant + else + I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY) //adds blood and the remaining white areas become transparant //not sure if this is worth it. It attaches the blood_overlay to every item of the same type if they don't have one already made. for(var/obj/item/A in world) diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index ed647cd339f..b012208da11 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -63,7 +63,7 @@ if(user.a_intent == "hurt") if(!..()) return //H.apply_effect(5, WEAKEN, 0) - H.visible_message("[M] has been beaten with the [src] by [user]!") + //H.visible_message("[M] has been beaten with the [src] by [user]!") user.attack_log += "\[[time_stamp()]\] Beat [H.name] ([H.ckey]) with [src.name]" H.attack_log += "\[[time_stamp()]\] Beaten by [user.name] ([user.ckey]) with [src.name]" diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index af2ccf63935..37dd0ee3f4f 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -244,19 +244,19 @@ if(H.head) if(H.head.clean_blood()) - H.update_inv_head(0) + H.update_inv_head(0,0) if(H.wear_suit) if(H.wear_suit.clean_blood()) - H.update_inv_wear_suit(0) + H.update_inv_wear_suit(0,0) else if(H.w_uniform) if(H.w_uniform.clean_blood()) - H.update_inv_w_uniform(0) + H.update_inv_w_uniform(0,0) if(H.gloves && washgloves) if(H.gloves.clean_blood()) - H.update_inv_gloves(0) + H.update_inv_gloves(0,0) if(H.shoes && washshoes) if(H.shoes.clean_blood()) - H.update_inv_shoes(0) + H.update_inv_shoes(0,0) if(H.wear_mask && washmask) if(H.wear_mask.clean_blood()) H.update_inv_wear_mask(0) @@ -343,7 +343,7 @@ M.clean_blood() if(ishuman(M)) - M:update_inv_gloves() + M:update_inv_gloves(0,0) for(var/mob/V in viewers(src, null)) V.show_message("\blue [M] washes their hands using \the [src].") diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 41e5ba090fe..9cae414c923 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -13,11 +13,11 @@ ..() levelupdate() -/turf/simulated/proc/AddTracks(var/typepath,var/bloodDNA,var/comingdir,var/goingdir) +/turf/simulated/proc/AddTracks(var/typepath,var/mob,var/bloodDNA,var/comingdir,var/goingdir) var/obj/effect/decal/cleanable/blood/tracks/tracks = locate(typepath) in src if(!tracks) tracks = new typepath(src) - tracks.AddTracks(bloodDNA,comingdir,goingdir) + tracks.AddTracks(mob,bloodDNA,comingdir,goingdir,typepath) /turf/simulated/Entered(atom/A, atom/OL) if(movement_disabled && usr.ckey != movement_disabled_exception) @@ -46,16 +46,33 @@ if(S.track_blood && S.blood_DNA) bloodDNA = S.blood_DNA S.track_blood-- + src.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints,H,bloodDNA,H.dir,0) // Coming + var/turf/simulated/from = get_step(H,reverse_direction(H.dir)) + if(from && istype(from, /turf/simulated)) + from.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints,H,bloodDNA,0,H.dir) // Going + + if(S.track_blood_green && S.blood_DNA) + bloodDNA = S.blood_DNA + S.track_blood_green-- + src.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints/green,H,bloodDNA,H.dir,0) // Coming + var/turf/simulated/from = get_step(H,reverse_direction(H.dir)) + if(from && istype(from, /turf/simulated)) + from.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints/green,H,bloodDNA,0,H.dir) // Going else if(H.track_blood && H.feet_blood_DNA) bloodDNA = H.feet_blood_DNA H.track_blood-- - - if (bloodDNA) - src.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints,bloodDNA,H.dir,0) // Coming - var/turf/simulated/from = get_step(H,reverse_direction(H.dir)) - if(from && istype(from, /turf/simulated)) - from.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints,bloodDNA,0,H.dir) // Going + src.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints,H,bloodDNA,H.dir,0) // Coming + var/turf/simulated/from = get_step(H,reverse_direction(H.dir)) + if(from && istype(from, /turf/simulated)) + from.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints,H,bloodDNA,0,H.dir) // Going + if(H.track_blood_green && H.feet_blood_DNA) + bloodDNA = H.feet_blood_DNA + H.track_blood_green-- + src.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints/green,H,bloodDNA,H.dir,0) // Coming + var/turf/simulated/from = get_step(H,reverse_direction(H.dir)) + if(from && istype(from, /turf/simulated)) + from.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints/green,H,bloodDNA,0,H.dir) // Going bloodDNA = null switch (src.wet) @@ -111,16 +128,34 @@ return 1 //we bloodied the floor //if there isn't a blood decal already, make one. - var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(src) - newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - if (M.virus2.len) - newblood.virus2 |= virus_copylist(M.virus2) + if(M.species.bloodflags &BLOOD_GREEN) + var/obj/effect/decal/cleanable/blood/green/newblood = new /obj/effect/decal/cleanable/blood/green(src) + newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type + if (M.virus2.len) + newblood.virus2 |= virus_copylist(M.virus2) + else + var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(src) + newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type + if (M.virus2.len) + newblood.virus2 |= virus_copylist(M.virus2) return 1 //we bloodied the floor // Only adds blood on the floor -- Skie /turf/simulated/proc/add_blood_floor(mob/living/carbon/M as mob) - if( istype(M, /mob/living/carbon/monkey) || istype(M, /mob/living/carbon/human)) + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(H.species.bloodflags &BLOOD_GREEN) + var/obj/effect/decal/cleanable/blood/green/this = new /obj/effect/decal/cleanable/blood/green(src) + this.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type + if (M.virus2.len) + this.virus2 = virus_copylist(M.virus2) + else + var/obj/effect/decal/cleanable/blood/this = new /obj/effect/decal/cleanable/blood(src) + this.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type + if (M.virus2.len) + this.virus2 = virus_copylist(M.virus2) + if(istype(M, /mob/living/carbon/monkey)) var/obj/effect/decal/cleanable/blood/this = new /obj/effect/decal/cleanable/blood(src) this.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type if (M.virus2.len) diff --git a/code/modules/DetectiveWork/footprints_and_rag.dm b/code/modules/DetectiveWork/footprints_and_rag.dm index eb4e2d3970a..7c4fa098c92 100644 --- a/code/modules/DetectiveWork/footprints_and_rag.dm +++ b/code/modules/DetectiveWork/footprints_and_rag.dm @@ -4,6 +4,7 @@ var/track_blood = 0 var/list/feet_blood_DNA var/track_blood_type + var/track_blood_green = 0 /obj/item/clothing/gloves var/transfer_blood = 0 @@ -11,6 +12,7 @@ /obj/item/clothing/shoes/ var/track_blood = 0 + var/track_blood_green = 0 /obj/item/weapon/reagent_containers/glass/rag name = "damp rag" diff --git a/code/modules/admin/verbs/BrokenInhands.dm b/code/modules/admin/verbs/BrokenInhands.dm index 43f6d0b7931..58a59567944 100644 --- a/code/modules/admin/verbs/BrokenInhands.dm +++ b/code/modules/admin/verbs/BrokenInhands.dm @@ -1,4 +1,7 @@ /proc/getbrokeninhands() + set name = "Broken Sprite List" + set category = "Debug" + var/icon/IL = new('icons/mob/items_lefthand.dmi') var/list/Lstates = IL.IconStates() var/icon/IR = new('icons/mob/items_righthand.dmi') @@ -28,9 +31,8 @@ //text+="\n" del(O) if(text) - var/F = file("broken_icons.txt") + var/F = file("broken_hand_icons.txt") fdel(F) F << text - world << "Completeled successfully and written to [F]" - + world << "Completed and written to [F]" diff --git a/code/modules/admin/verbs/vox_raiders.dm b/code/modules/admin/verbs/vox_raiders.dm index ddac3e7a62f..a4896909223 100644 --- a/code/modules/admin/verbs/vox_raiders.dm +++ b/code/modules/admin/verbs/vox_raiders.dm @@ -72,9 +72,12 @@ var/global/vox_tick = 1 affected.implants += I I.part = affected - if(ticker.mode && ( istype( ticker.mode,/datum/game_mode/vox/heist ) ) ) + if(ticker.mode && ( istype(ticker.mode,/datum/game_mode/vox/heist) ) ) var/datum/game_mode/vox/heist/M = ticker.mode M.cortical_stacks += I + else if(ticker.mode && ( istype(ticker.mode,/datum/game_mode/vox/trade) ) ) + var/datum/game_mode/vox/trade/M = ticker.mode + M.cortical_stacks += I vox_tick++ if (vox_tick > 4) vox_tick = 1 diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 5ca753adace..71dcf49c2ae 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -902,9 +902,9 @@ datum/preferences s_tone = 0 if("language") - var/languages_available +// var/languages_available var/list/new_languages = list("None") - +/* if(config.usealienwhitelist) for(var/L in all_languages) var/datum/language/lang = all_languages[L] @@ -915,10 +915,11 @@ datum/preferences if(!(languages_available)) alert(user, "There are not currently any available secondary languages.") else - for(var/L in all_languages) - var/datum/language/lang = all_languages[L] - if(!(lang.flags & RESTRICTED)) - new_languages += lang.name +*/ + for(var/L in all_languages) + var/datum/language/lang = all_languages[L] + if(!(lang.flags & RESTRICTED)) + new_languages += lang.name language = input("Please select a secondary language", "Character Generation", null) in new_languages diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 69a8508630d..f9c4e8fd54c 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -52,7 +52,7 @@ var/vision_flags = 0 var/darkness_view = 0//Base human is 2 var/invisa_view = 0 - + species_restricted = list("exclude","Kidan") /* SEE_SELF // can see self, no matter what SEE_MOBS // can see all mobs, no matter what diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index 2a442dbad84..ffbe5c0a8b5 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -18,14 +18,14 @@ if(!src.hanging) src.hanging = !src.hanging gas_transfer_coefficient = 1 //gas is now escaping to the turf and vice versa - flags_inv |= MASKCOVERSMOUTH | MASKINTERNALS + flags &= ~(MASKCOVERSMOUTH | MASKINTERNALS) icon_state = "breathdown" usr << "Your mask is now hanging on your neck." else src.hanging = !src.hanging gas_transfer_coefficient = 0.10 - flags_inv &= ~(MASKCOVERSMOUTH | MASKINTERNALS) + flags |= MASKCOVERSMOUTH | MASKINTERNALS icon_state = "breath" usr << "You pull the mask up to cover your face." usr.update_inv_wear_mask() diff --git a/code/modules/customitems/item_spawning.dm b/code/modules/customitems/item_spawning.dm index a21f0e768cf..6ca5945f54a 100644 --- a/code/modules/customitems/item_spawning.dm +++ b/code/modules/customitems/item_spawning.dm @@ -1,3 +1,22 @@ +/proc/EquipRacialItems(mob/living/carbon/human/M) + if(M.species.name=="Vox") + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/vox(M), slot_shoes) // REPLACE THESE WITH CODED VOX ALTERNATIVES. + M.equip_to_slot_or_del(new /obj/item/clothing/mask/breath/vox(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(M), slot_back) + + var/sounds = rand(2,10) + var/i = 0 + var/newname = "" + + while(i<=sounds) + i++ + newname += pick(list("ti","hi","ki","ya","ta","ha","ka","ya","chi","cha","kah")) + + M.real_name = capitalize(newname) + M.name = M.real_name + + if( M.species.name=="Tajaran" || M.species.name=="Unathi" ) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) /proc/EquipCustomItems(mob/living/carbon/human/M) testing("\[CustomItem\] Checking for custom items for [M.ckey] ([M.real_name])...") diff --git a/code/modules/mob/living/carbon/alien/humanoid/inventory.dm b/code/modules/mob/living/carbon/alien/humanoid/inventory.dm index 0e03bf68923..bf3ca77d02f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/inventory.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/inventory.dm @@ -2,10 +2,10 @@ /mob/living/carbon/alien/humanoid/u_equip(obj/item/W as obj) if (W == wear_suit) wear_suit = null - update_inv_wear_suit(0) + update_inv_wear_suit(0,0) else if (W == head) head = null - update_inv_head(0) + update_inv_head(0,0) else if (W == r_store) r_store = null update_inv_pockets(0) diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm index 6a47bbe43f7..d26109ee214 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm @@ -43,8 +43,8 @@ ..() if (monkeyizing) return - update_inv_head(0) - update_inv_wear_suit(0) + update_inv_head(0,0) + update_inv_wear_suit(0,0) update_inv_r_hand(0) update_inv_l_hand(0) update_inv_pockets(0) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 806f6a8e95a..e7c39545357 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -318,12 +318,12 @@ var/mob/living/carbon/human/H = src if(H.gloves) if(H.gloves.clean_blood()) - H.update_inv_gloves(0) + H.update_inv_gloves(0,0) H.gloves.germ_level = 0 else if(H.bloody_hands) H.bloody_hands = 0 - H.update_inv_gloves(0) + H.update_inv_gloves(0,0) H.germ_level = 0 update_icons() //apply the now updated overlays to the mob diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index d767abf6139..29388c4f479 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1163,7 +1163,10 @@ if(blood_DNA[M.dna.unique_enzymes]) return 0 //already bloodied with this blood. Cannot add more. blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - src.update_inv_gloves() //handles bloody hands overlays and updating + if(M.species.bloodflags & BLOOD_GREEN) + src.update_inv_gloves(1,1) //handles bloody hands overlays and updating + else + src.update_inv_gloves(1,0) return 1 //we applied blood to the item /mob/living/carbon/human/clean_blood() diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index d2544c05c9b..6e8f9077adf 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -256,7 +256,7 @@ emp_act update_inv_wear_mask(0) if(head) head.add_blood(src) - update_inv_head(0) + update_inv_head(0,0) if(glasses && prob(33)) glasses.add_blood(src) update_inv_glasses(0) @@ -270,6 +270,7 @@ emp_act bloody_body(src) /mob/living/carbon/human/proc/bloody_hands(var/mob/living/source, var/amount = 2) + if (gloves) gloves.add_blood(source) gloves:transfer_blood = amount @@ -278,12 +279,27 @@ emp_act add_blood(source) bloody_hands = amount bloody_hands_mob = source - update_inv_gloves() //updates on-mob overlays for bloody hands and/or bloody gloves + if(istype(source,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = source + if(H.species.bloodflags & BLOOD_GREEN) + update_inv_gloves(1,1) //updates on-mob overlays for bloody hands and/or bloody gloves + else + update_inv_gloves(1,0) //updates on-mob overlays for bloody hands and/or bloody gloves + else + update_inv_gloves(1,0) //updates on-mob overlays for bloody hands and/or bloody gloves /mob/living/carbon/human/proc/bloody_body(var/mob/living/source) if(wear_suit) wear_suit.add_blood(source) - update_inv_wear_suit(0) + update_inv_wear_suit(0,0) + return if(w_uniform) w_uniform.add_blood(source) - update_inv_w_uniform(0) + if(istype(source,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = source + if(H.species.bloodflags & BLOOD_GREEN) + update_inv_w_uniform(1,1) + else + update_inv_w_uniform(1,0) + else + update_inv_w_uniform(1,0) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index b628abe0098..5ac49d15761 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -499,7 +499,7 @@ if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit Paralyse(3) // 3 gives them one second to wake up and run away a bit! if(SA_pp > SA_sleep_min) // Enough to make us sleep as well - sleeping = max(sleeping+2, 10) + sleeping = min(sleeping+2, 10) else if(SA_pp > 0.15) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning if(prob(20)) spawn(0) emote(pick("giggle", "laugh")) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index a426e654d08..24d6a572667 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -489,15 +489,15 @@ proc/get_damage_icon_part(damage_state, body_part) if(monkeyizing) return update_mutations(0) update_mutantrace(0) - update_inv_w_uniform(0) + update_inv_w_uniform(0,0) update_inv_wear_id(0) - update_inv_gloves(0) + update_inv_gloves(0,0) update_inv_glasses(0) update_inv_ears(0) - update_inv_shoes(0) + update_inv_shoes(0,0) update_inv_s_store(0) update_inv_wear_mask(0) - update_inv_head(0) + update_inv_head(0,0) update_inv_belt(0) update_inv_back(0) update_inv_wear_suit(0) @@ -514,7 +514,7 @@ proc/get_damage_icon_part(damage_state, body_part) /* --------------------------------------- */ //vvvvvv UPDATE_INV PROCS vvvvvv -/mob/living/carbon/human/update_inv_w_uniform(var/update_icons=1) +/mob/living/carbon/human/update_inv_w_uniform(var/update_icons=1,var/green=0) if(w_uniform && istype(w_uniform, /obj/item/clothing/under) ) w_uniform.screen_loc = ui_iclothing var/t_color = w_uniform._color @@ -539,8 +539,12 @@ proc/get_damage_icon_part(damage_state, body_part) standing.icon = w_uniform.icon if(w_uniform.blood_DNA) - lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "uniformblood2") - standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "uniformblood") + if(green==1) + lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "xuniformblood2") + standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "xuniformblood") + else + lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "uniformblood2") + standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "uniformblood") if(w_uniform:hastie) //WE CHECKED THE TYPE ABOVE. THIS REALLY SHOULD BE FINE. var/tie_color = w_uniform:hastie._color @@ -580,22 +584,30 @@ proc/get_damage_icon_part(damage_state, body_part) overlays_standing[ID_LAYER] = null if(update_icons) update_icons() -/mob/living/carbon/human/update_inv_gloves(var/update_icons=1) +/mob/living/carbon/human/update_inv_gloves(var/update_icons=1,var/green=0) if(gloves) var/t_state = gloves.item_state if(!t_state) t_state = gloves.icon_state var/image/lying = image("icon" = 'icons/mob/hands.dmi', "icon_state" = "[t_state]2") var/image/standing = image("icon" = 'icons/mob/hands.dmi', "icon_state" = "[t_state]") if(gloves.blood_DNA) - lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands2") - standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands") + if(green==1) + lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "xbloodyhands2") + standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "xbloodyhands") + else + lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands2") + standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands") gloves.screen_loc = ui_gloves overlays_lying[GLOVES_LAYER] = lying overlays_standing[GLOVES_LAYER] = standing else if(blood_DNA) - overlays_lying[GLOVES_LAYER] = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands2") - overlays_standing[GLOVES_LAYER] = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands") + if (green) + overlays_lying[GLOVES_LAYER] = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "xbloodyhands2") + overlays_standing[GLOVES_LAYER] = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "xbloodyhands") + else + overlays_lying[GLOVES_LAYER] = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands2") + overlays_standing[GLOVES_LAYER] = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands") else overlays_lying[GLOVES_LAYER] = null overlays_standing[GLOVES_LAYER] = null @@ -626,7 +638,7 @@ proc/get_damage_icon_part(damage_state, body_part) overlays_standing[EARS_LAYER] = null if(update_icons) update_icons() -/mob/living/carbon/human/update_inv_shoes(var/update_icons=1) +/mob/living/carbon/human/update_inv_shoes(var/update_icons=1,var/green=0) if(shoes) var/dmi='icons/mob/feet.dmi' if(shoes.custom) @@ -634,8 +646,12 @@ proc/get_damage_icon_part(damage_state, body_part) var/image/lying = image("icon" = dmi, "icon_state" = "[shoes.icon_state]2") var/image/standing = image("icon" = dmi, "icon_state" = "[shoes.icon_state]") if(shoes.blood_DNA) - lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "shoeblood2") - standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "shoeblood") + if(green==1) + lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "xshoeblood2") + standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "xshoeblood") + else + lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "shoeblood2") + standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "shoeblood") overlays_lying[SHOES_LAYER] = lying overlays_standing[SHOES_LAYER] = standing else @@ -660,7 +676,7 @@ proc/get_damage_icon_part(damage_state, body_part) if(update_icons) update_icons() -/mob/living/carbon/human/update_inv_head(var/update_icons=1) +/mob/living/carbon/human/update_inv_head(var/update_icons=1,var/green=0) if(head) head.screen_loc = ui_head //TODO var/image/lying @@ -675,8 +691,12 @@ proc/get_damage_icon_part(damage_state, body_part) lying = image("icon" = dmi, "icon_state" = "[head.icon_state]2") standing = image("icon" = dmi, "icon_state" = "[head.icon_state]") if(head.blood_DNA) - lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "helmetblood2") - standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "helmetblood") + if(green==1) + lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "xhelmetblood2") + standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "xhelmetblood") + else + lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "helmetblood2") + standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "helmetblood") overlays_lying[HEAD_LAYER] = lying overlays_standing[HEAD_LAYER] = standing else diff --git a/code/modules/mob/living/carbon/monkey/diona.dm b/code/modules/mob/living/carbon/monkey/diona.dm index 461c5a264f0..497709e7bc6 100644 --- a/code/modules/mob/living/carbon/monkey/diona.dm +++ b/code/modules/mob/living/carbon/monkey/diona.dm @@ -82,6 +82,10 @@ adult.name = src.name adult.real_name = src.real_name adult.ckey = src.ckey + + for (var/obj/item/W in src.contents) + src.drop_from_inventory(W) + del(src) /mob/living/carbon/monkey/diona/verb/steal_blood() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 0dfdbbfa5ef..7f934a2645b 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -383,7 +383,7 @@ if (M.lying && (prob(M.getBruteLoss() / 6))) var/turf/location = M.loc if (istype(location, /turf/simulated)) - location.add_blood(M) + location.add_blood() step(pulling, get_dir(pulling.loc, T)) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 0317983e27e..1c4a59e04b5 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -80,7 +80,7 @@ var/list/department_radio_keys = list( */ message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) - message = capitalize(message) + /* Sanity checking and speech failure. @@ -166,6 +166,8 @@ var/list/department_radio_keys = list( if(src.stunned > 2 || (traumatic_shock > 61 && prob(50))) message_mode = null //Stunned people shouldn't be able to physically turn on their radio/hold down the button to speak into it + message = capitalize(message) + if (!message) return diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 217b08520f7..0cee44a9609 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1164,16 +1164,16 @@ if(cleaned_human.lying) if(cleaned_human.head) cleaned_human.head.clean_blood() - cleaned_human.update_inv_head(0) + cleaned_human.update_inv_head(0,0) if(cleaned_human.wear_suit) cleaned_human.wear_suit.clean_blood() - cleaned_human.update_inv_wear_suit(0) + cleaned_human.update_inv_wear_suit(0,0) else if(cleaned_human.w_uniform) cleaned_human.w_uniform.clean_blood() - cleaned_human.update_inv_w_uniform(0) + cleaned_human.update_inv_w_uniform(0,0) if(cleaned_human.shoes) cleaned_human.shoes.clean_blood() - cleaned_human.update_inv_shoes(0) + cleaned_human.update_inv_shoes(0,0) cleaned_human.clean_blood() cleaned_human << "\red [src] cleans your face!" return diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 9f9ded91534..8d608689e59 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -548,6 +548,7 @@ var/list/slot_equipment_priority = list( \ onclose(usr, "[name]") if(href_list["flavor_change"]) update_flavor_text() + // ..() return diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index dd6ecc85ca4..1257706f5a8 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -285,6 +285,7 @@ job_master.AssignRole(src, rank, 1) var/mob/living/carbon/human/character = create_character() //creates the human and transfers vars and mind + EquipRacialItems(character) job_master.EquipRank(character, rank, 1) //equips the human EquipCustomItems(character) character.loc = pick(latejoin) diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 55e37a4a4f6..b2dcda34f3f 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -309,7 +309,7 @@ name = "Shaved" icon_state = "bald" gender = NEUTER - species_allowed = list("Human","Unathi","Tajaran","Skrell","Vox") + species_allowed = list("Human","Unathi","Tajaran","Skrell","Vox","Diona","Skellington","Kidan") watson name = "Watson Mustache" diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index dd31d28ac76..a631f38bf1a 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -132,23 +132,45 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 var/amm = 0.1 * amt var/turf/T = get_turf(src) var/list/obj/effect/decal/cleanable/blood/drip/nums = list() + var/list/iconL = list("1","2","3","4","5") - vessel.remove_reagent("blood",amm) + if(src.species.bloodflags &BLOOD_GREEN) + var/list/obj/effect/decal/cleanable/blood/drip/green/nums2 = list() + iconL = list("g1","g2","g3","g4","g5") - for(var/obj/effect/decal/cleanable/blood/drip/G in T) - nums += G - iconL.Remove(G.icon_state) + vessel.remove_reagent("blood",amm) + + for(var/obj/effect/decal/cleanable/blood/drip/green/G in T) + nums2 += G + iconL.Remove(G.icon_state) + + if (nums2.len < 5) + var/obj/effect/decal/cleanable/blood/drip/green/this = new(T) + this.icon_state = pick(iconL) + this.blood_DNA = list() + this.blood_DNA[dna.unique_enzymes] = dna.b_type + else + for(var/obj/effect/decal/cleanable/blood/drip/green/G in nums) + del G + T.add_blood(src) - if (nums.len < 5) - var/obj/effect/decal/cleanable/blood/drip/this = new(T) - this.icon_state = pick(iconL) - this.blood_DNA = list() - this.blood_DNA[dna.unique_enzymes] = dna.b_type else - for(var/obj/effect/decal/cleanable/blood/drip/G in nums) - del G - T.add_blood(src) + vessel.remove_reagent("blood",amm) + + for(var/obj/effect/decal/cleanable/blood/drip/G in T) + nums += G + iconL.Remove(G.icon_state) + + if (nums.len < 5) + var/obj/effect/decal/cleanable/blood/drip/this = new(T) + this.icon_state = pick(iconL) + this.blood_DNA = list() + this.blood_DNA[dna.unique_enzymes] = dna.b_type + else + for(var/obj/effect/decal/cleanable/blood/drip/G in nums) + del G + T.add_blood(src) /**************************************************** BLOOD TRANSFERS diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 4e52a5be7a1..cf431ba377a 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -1235,16 +1235,16 @@ datum var/mob/living/carbon/human/H = C if(H.head) if(H.head.clean_blood()) - H.update_inv_head(0) + H.update_inv_head(0,0) if(H.wear_suit) if(H.wear_suit.clean_blood()) - H.update_inv_wear_suit(0) + H.update_inv_wear_suit(0,0) else if(H.w_uniform) if(H.w_uniform.clean_blood()) - H.update_inv_w_uniform(0) + H.update_inv_w_uniform(0,0) if(H.shoes) if(H.shoes.clean_blood()) - H.update_inv_shoes(0) + H.update_inv_shoes(0,0) M.clean_blood() plantbgone diff --git a/code/modules/surgery/appendix.dm b/code/modules/surgery/appendix.dm index 54a26427fcf..acb5d5e4328 100644 --- a/code/modules/surgery/appendix.dm +++ b/code/modules/surgery/appendix.dm @@ -28,6 +28,8 @@ max_duration = 90 can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + if (!ishuman(target)) + return 0 return ..() && target.op_stage.appendix == 0 begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) diff --git a/code/setup.dm b/code/setup.dm index 353273c8a32..7d1d2fe09b0 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -713,21 +713,29 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse ) //Species flags. -#define NO_EAT 1 -#define NO_BREATHE 2 -#define NO_SLEEP 4 -#define RAD_ABSORB 8 -#define NO_SCAN 16 -#define NON_GENDERED 32 -#define REQUIRE_LIGHT 64 -#define WHITELISTED 128 -#define HAS_SKIN_TONE 256 -#define HAS_LIPS 512 -#define HAS_UNDERWEAR 1024 -#define HAS_TAIL 2048 -#define IS_PLANT 4096 -#define CAN_BE_FAT 8192 -#define HAS_CHITTIN 16384 +#define NO_EAT 1 +#define NO_BREATHE 2 +#define NO_SLEEP 4 +#define RAD_ABSORB 8 +#define NO_SCAN 16 +#define NON_GENDERED 32 +#define REQUIRE_LIGHT 64 +#define WHITELISTED 128 +#define HAS_SKIN_TONE 256 +#define HAS_LIPS 512 +#define HAS_UNDERWEAR 1024 +#define HAS_TAIL 2048 +#define IS_PLANT 4096 +#define CAN_BE_FAT 8192 +#define HAS_CHITTIN 16384 + + +#define BLOOD_GREEN 1 +#define BLOOD_BLUE 2 + +#define FEET_CLAWS 1 +#define FEET_PADDED 2 + //Language flags. #define WHITELISTED 1 // Language is available if the speaker is whitelisted. diff --git a/code/world.dm b/code/world.dm index e19f759de1e..91bb972e336 100644 --- a/code/world.dm +++ b/code/world.dm @@ -96,7 +96,7 @@ ToRban_autoupdate() if(config.kick_inactive) KickInactiveClients() - KickDisconnectedClients() +// KickDisconnectedClients() #undef RECOMMENDED_VERSION @@ -185,7 +185,7 @@ C << "\red You have been inactive for more than 10 minutes and have been disconnected." del(C) #undef INACTIVITY_KICK - +/* #define DISCONNECTED_DELETE 6000 //10 minutes in ticks (approx) /world/proc/KickDisconnectedClients() spawn(-1) @@ -193,8 +193,7 @@ while(1) sleep(DISCONNECTED_DELETE) for(var/mob/living/carbon/human/C in living_mob_list) - var/client/L = C - if(L.holder) return + if (dd_hasprefix(C.key,@)) return if(!C.client && C.brain_op_stage!=4.0 && C.lastKnownIP) sleep(600) if(!C.client && C.stat != DEAD && C.brain_op_stage!=4.0) @@ -210,7 +209,7 @@ C.drop_from_inventory(W) del(C) #undef DISCONNECTED_DELETE - +*/ /world/proc/load_mode() var/list/Lines = file2list("data/mode.txt") if(Lines.len) @@ -260,7 +259,7 @@ s += "[station_name()]"; s += " (" - s += "" //Change this to wherever you want the hub to link to. + s += "" //Change this to wherever you want the hub to link to. s += "[game_version]" s += "" s += ")" diff --git a/data/mode.txt b/data/mode.txt index d97c5eada5d..ef18df98db4 100644 --- a/data/mode.txt +++ b/data/mode.txt @@ -1 +1 @@ -secret +extended diff --git a/icons/effects/blood.dmi b/icons/effects/blood.dmi index 92c2e7ddf21..1ed6754ff1a 100644 Binary files a/icons/effects/blood.dmi and b/icons/effects/blood.dmi differ diff --git a/icons/effects/drip.dmi b/icons/effects/drip.dmi index c78843e5863..2078c999f2a 100644 Binary files a/icons/effects/drip.dmi and b/icons/effects/drip.dmi differ