diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index c6045cd835e..22369d5470d 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -78,6 +78,7 @@ CREATE TABLE `characters` ( `rlimb_data` mediumtext NOT NULL, `nanotrasen_relation` varchar(45) NOT NULL, `speciesprefs` int(1) NOT NULL, + `socks` mediumtext NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=18747 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index c69742b94c8..a81a99c540b 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -12,6 +12,10 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear, underwear_list, underwear_m, underwear_f) //undershirt init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt, undershirt_list, undershirt_m, undershirt_f) + //socks + init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, socks_list, socks_m, socks_f) + + var/list/paths //Surgery Steps - Initialize all /datum/surgery_step into a list diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 619716363f9..fe27e399c84 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -10,6 +10,12 @@ if(FEMALE) return pick(undershirt_f) else return pick(undershirt_list) +/proc/random_socks(gender) + switch(gender) + if(MALE) return pick(socks_m) + if(FEMALE) return pick(socks_f) + else return pick(socks_list) + proc/random_hair_style(var/gender, species = "Human") var/h_style = "Bald" diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 882331d21de..516ae5630f9 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -15,6 +15,10 @@ var/global/list/underwear_f = list() //stores only underwear name var/global/list/undershirt_list = list() //stores /datum/sprite_accessory/undershirt indexed by name var/global/list/undershirt_m = list() //stores only undershirt name var/global/list/undershirt_f = list() //stores only undershirt name + //Socks +var/global/list/socks_list = list() //stores /datum/sprite_accessory/socks indexed by name +var/global/list/socks_m = list() //stores only socks name +var/global/list/socks_f = list() //stores only socks name //Backpacks var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt") diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 4cfdc0a6c29..1b3f89af28a 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -729,7 +729,7 @@ /obj/machinery/vending/assist products = list( /obj/item/device/assembly/prox_sensor = 5,/obj/item/device/assembly/igniter = 3,/obj/item/device/assembly/signaler = 4, /obj/item/weapon/wirecutters = 1, /obj/item/weapon/cartridge/signal = 4) - contraband = list(/obj/item/device/flashlight = 5,/obj/item/device/assembly/timer = 2) + contraband = list(/obj/item/device/flashlight = 5,/obj/item/device/assembly/timer = 2, /obj/item/device/assembly/voice = 2, /obj/item/device/assembly/health = 2) product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!" /obj/machinery/vending/boozeomat/New() @@ -887,6 +887,7 @@ products = list(/obj/item/clothing/under/rank/scientist = 6,/obj/item/clothing/suit/bio_suit = 6,/obj/item/clothing/head/bio_hood = 6, /obj/item/device/transfer_valve = 6,/obj/item/device/assembly/timer = 6,/obj/item/device/assembly/signaler = 6, /obj/item/device/assembly/prox_sensor = 6,/obj/item/device/assembly/igniter = 6) + contraband = list(/obj/item/device/assembly/health = 3) /obj/machinery/vending/wallmed1 name = "NanoMed" diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index c964dd1e0b4..820a3311cff 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -4,6 +4,7 @@ name = "implant" icon = 'icons/obj/device.dmi' icon_state = "implant" + origin_tech = "materials=2;biotech=3;programming=2" var/implanted = null var/mob/living/imp_in = null var/obj/item/organ/external/part = null @@ -52,6 +53,7 @@ /obj/item/weapon/implant/tracking name = "tracking" desc = "Track with this." + origin_tech = "materials=2;magnets=2;programming=2;biotech=2" var/id = 1.0 @@ -92,6 +94,7 @@ Implant Specifics:
"} /obj/item/weapon/implant/dexplosive name = "explosive" desc = "And boom goes the weasel." + origin_tech = "materials=2;combat=3;biotech=4;syndicate=4" icon_state = "implant_evil" get_data() @@ -127,6 +130,7 @@ Implant Specifics:
"} /obj/item/weapon/implant/explosive name = "explosive implant" desc = "A military grade micro bio-explosive. Highly dangerous." + origin_tech = "materials=2;combat=3;biotech=4;syndicate=4" var/elevel = "Localized Limb" var/phrase = "supercalifragilisticexpialidocious" icon_state = "implant_evil" @@ -252,6 +256,7 @@ Implant Specifics:
"} /obj/item/weapon/implant/chem name = "chem" desc = "Injects things." + origin_tech = "materials=3;biotech=4" allow_reagents = 1 get_data() @@ -316,6 +321,7 @@ the implant may become unstable and either pre-maturely inject the subject or si /obj/item/weapon/implant/loyalty name = "loyalty" desc = "Makes you loyal or such." + origin_tech = "materials=2;biotech=4;programming=4" get_data() var/dat = {" @@ -406,6 +412,7 @@ the implant may become unstable and either pre-maturely inject the subject or si /obj/item/weapon/implant/adrenalin name = "adrenalin" desc = "Removes all stuns and knockdowns." + origin_tech = "materials=2;biotech=4;combat=3;syndicate=4" var/uses = 3 get_data() @@ -436,7 +443,7 @@ the implant may become unstable and either pre-maturely inject the subject or si source.reagents.add_reagent("synaptizine", 10) source.reagents.add_reagent("omnizine", 10) - source.reagents.add_reagent("methamphetamine", 10) + source.reagents.add_reagent("stimulative_agent", 10) return @@ -523,6 +530,7 @@ the implant may become unstable and either pre-maturely inject the subject or si name = "compressed matter implant" desc = "Based on compressed matter technology, can store a single item." icon_state = "implant_evil" + origin_tech = "materials=2;magnets=4;bluespace=4;syndicate=4" var/activation_emote = "sigh" var/obj/item/scanned = null @@ -574,7 +582,7 @@ the implant may become unstable and either pre-maturely inject the subject or si /obj/item/weapon/implant/emp name = "emp implant" desc = "Triggers an EMP." - + origin_tech = "materials=2;biotech=3;magnets=4;syndicate=4" var/activation_emote = "chuckle" var/uses = 2 diff --git a/code/game/objects/items/weapons/implants/implantcase.dm b/code/game/objects/items/weapons/implants/implantcase.dm index f4f9f3d2400..f32764ae410 100644 --- a/code/game/objects/items/weapons/implants/implantcase.dm +++ b/code/game/objects/items/weapons/implants/implantcase.dm @@ -8,7 +8,14 @@ throw_speed = 1 throw_range = 5 w_class = 1.0 + origin_tech = "materials=1;biotech=2" + materials = list(MAT_GLASS=500) var/obj/item/weapon/implant/imp = null + + New() + ..() + update() + proc update() @@ -16,8 +23,10 @@ update() if (src.imp) src.icon_state = text("implantcase-[]", src.imp._color) + src.origin_tech = src.imp.origin_tech else src.icon_state = "implantcase-0" + src.origin_tech = initial(src.origin_tech) return @@ -148,4 +157,15 @@ New() src.imp = new /obj/item/weapon/implant/freedom( src ) ..() + return + +/obj/item/weapon/implantcase/adrenaline + name = "Glass Case- 'Adrenaline'" + desc = "A glass case containing an adrenaline implant." + icon = 'icons/obj/items.dmi' + icon_state = "implantcase-b" + + New() + src.imp = new /obj/item/weapon/implant/adrenalin( src ) + ..() return \ No newline at end of file diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index 423ab379253..f0cad339826 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -6,16 +6,23 @@ throw_speed = 1 throw_range = 5 w_class = 2.0 + origin_tech = "materials=1;biotech=3;programming=2" var/obj/item/weapon/implant/imp = null +/obj/item/weapon/implanter/New() + ..() + update() + /obj/item/weapon/implanter/proc/update() /obj/item/weapon/implanter/update() if (src.imp) src.icon_state = "implanter1" + src.origin_tech = src.imp.origin_tech else src.icon_state = "implanter0" + src.origin_tech = initial(src.origin_tech) return diff --git a/code/game/objects/items/weapons/implants/implantfreedom.dm b/code/game/objects/items/weapons/implants/implantfreedom.dm index 9b225ac70fc..68497e500b7 100644 --- a/code/game/objects/items/weapons/implants/implantfreedom.dm +++ b/code/game/objects/items/weapons/implants/implantfreedom.dm @@ -5,12 +5,12 @@ desc = "Use this to escape from those evil Red Shirts." _color = "r" var/activation_emote = "chuckle" - var/uses = 1.0 + origin_tech = "materials=2;magnets=3;biotech=3;syndicate=4" + var/uses = 4 New() src.activation_emote = pick("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") - src.uses = rand(1, 5) ..() return diff --git a/code/game/objects/items/weapons/implants/implantuplink.dm b/code/game/objects/items/weapons/implants/implantuplink.dm index 05b50b49b03..6e7fac76a6c 100644 --- a/code/game/objects/items/weapons/implants/implantuplink.dm +++ b/code/game/objects/items/weapons/implants/implantuplink.dm @@ -1,6 +1,7 @@ /obj/item/weapon/implant/uplink name = "uplink" desc = "Summon things." + origin_tech = "materials=2;magnets=4;programming=4;biotech=4;syndicate=8;bluespace=5" var/activation_emote = "chuckle" /obj/item/weapon/implant/uplink/New() diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index 10898e80a47..f1eca747755 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -12,7 +12,7 @@ if(ishuman(user)) var/mob/living/carbon/human/H = user - var/choice = input(user, "Underwear or Undershirt?", "Changing") as null|anything in list("Underwear","Undershirt") + var/choice = input(user, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in list("Underwear","Undershirt","Socks") if(!Adjacent(user)) return @@ -27,5 +27,11 @@ if(new_undershirt) H.undershirt = new_undershirt + if("Socks") + var/new_socks = input(user, "Select your socks", "Changing") as null|anything in socks_list + if(new_socks) + H.socks= new_socks + + add_fingerprint(H) H.update_body() \ No newline at end of file diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm new file mode 100644 index 00000000000..f1a3f402336 --- /dev/null +++ b/code/modules/assembly/health.dm @@ -0,0 +1,104 @@ +/obj/item/device/assembly/health + name = "health sensor" + desc = "Used for scanning and monitoring health." + icon_state = "health" + materials = list(MAT_METAL=800, MAT_GLASS=200) + origin_tech = "magnets=1;biotech=1" + secured = 0 + + var/scanning = 0 + var/health_scan + var/alarm_health = 0 + + + +/obj/item/device/assembly/health/activate() + if(!..()) return 0//Cooldown check + toggle_scan() + return 0 + +/obj/item/device/assembly/health/toggle_secure() + secured = !secured + if(secured && scanning) + processing_objects.Add(src) + else + scanning = 0 + processing_objects.Remove(src) + update_icon() + return secured + +/obj/item/device/assembly/health/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/device/multitool)) + if(alarm_health == 0) + alarm_health = -90 + user.show_message("You toggle [src] to \"detect death\" mode.") + else + alarm_health = 0 + user.show_message("You toggle [src] to \"detect critical state\" mode.") + return + else + return ..() + +/obj/item/device/assembly/health/process() + if(!scanning || !secured) + return + + var/atom/A = src + if(connected && connected.holder) + A = connected.holder + + for(A, A && !ismob(A), A=A.loc); + // like get_turf(), but for mobs. + var/mob/living/M = A + + if(M) + health_scan = M.health + if(health_scan <= alarm_health) + pulse() + audible_message("\icon[src] *beep* *beep*", "*beep* *beep*") + toggle_scan() + return + return + +/obj/item/device/assembly/health/proc/toggle_scan() + if(!secured) return 0 + scanning = !scanning + if(scanning) + processing_objects.Add(src) + else + processing_objects.Remove(src) + return + +/obj/item/device/assembly/health/interact(mob/user as mob)//TODO: Change this to the wires thingy + if(!secured) + user.show_message("The [name] is unsecured!") + return 0 + var/dat = text("Health Sensor [scanning?"On":"Off"]") + if(scanning && health_scan) + dat += "
Health: [health_scan]" + user << browse(dat, "window=hscan") + onclose(user, "hscan") + return + + +/obj/item/device/assembly/health/Topic(href, href_list) + ..() + if(!ismob(usr)) + return + + var/mob/user = usr + + if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) + usr << browse(null, "window=hscan") + onclose(usr, "hscan") + return + + if(href_list["scanning"]) + toggle_scan() + + if(href_list["close"]) + usr << browse(null, "window=hscan") + return + + attack_self(user) + return \ No newline at end of file diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 338d57dd616..f49dd1d1bb4 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -108,6 +108,7 @@ datum/preferences var/b_type = "A+" //blood type (not-chooseable) var/underwear = "Nude" //underwear type var/undershirt = "Nude" //undershirt type + var/socks = "Nude" //socks type var/backbag = 2 //backpack type var/h_style = "Bald" //Hair type var/r_hair = 0 //Hair color @@ -331,6 +332,7 @@ datum/preferences dat += "

" dat += "Underwear:
[underwear]
" dat += "Undershirt:
[undershirt]
" + dat += "Socks:
[socks]
" dat += "Backpack Type:
[backbaglist[backbag]]
" dat += "Nanotrasen Relation:
[nanotrasen_relation]
" dat += "Preview
" @@ -1010,6 +1012,9 @@ datum/preferences if("undershirt") undershirt = random_undershirt(gender) ShowChoices(user) + if("socks") + socks = random_socks(gender) + ShowChoices(user) if("eyes") r_eyes = rand(0,255) g_eyes = rand(0,255) @@ -1210,6 +1215,22 @@ datum/preferences undershirt = new_undershirt ShowChoices(user) + if("socks") + var/list/valid_sockstyles = list() + for(var/sockstyle in socks_list) + var/datum/sprite_accessory/S = socks_list[sockstyle] + if(gender == MALE && S.gender == FEMALE) + continue + if(gender == FEMALE && S.gender == MALE) + continue + if( !(species in S.species_allowed)) + continue + valid_sockstyles[sockstyle] = socks_list[sockstyle] + var/new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in valid_sockstyles + ShowChoices(user) + if(new_socks) + socks = new_socks + if("eyes") var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference") as color|null if(new_eyes) @@ -1548,6 +1569,7 @@ datum/preferences character.underwear = underwear character.undershirt = undershirt + character.socks = socks if(backbag > 4 || backbag < 1) backbag = 1 //Same as above diff --git a/code/modules/client/preferences_mysql.dm b/code/modules/client/preferences_mysql.dm index 96e51448c6d..8470ece80a9 100644 --- a/code/modules/client/preferences_mysql.dm +++ b/code/modules/client/preferences_mysql.dm @@ -149,6 +149,9 @@ nanotrasen_relation = query.item[52] speciesprefs = text2num(query.item[53]) + //socks + socks = query.item[54] + //Sanitize metadata = sanitize_text(metadata, initial(metadata)) real_name = reject_bad_name(real_name) @@ -196,6 +199,9 @@ disabilities = sanitize_integer(disabilities, 0, 65535, initial(disabilities)) be_special = sanitize_integer(be_special, 0, 65535, initial(be_special)) + socks = sanitize_text(socks, initial(socks)) + + // if(isnull(disabilities)) disabilities = 0 if(!player_alt_titles) player_alt_titles = new() if(!organ_data) src.organ_data = list() @@ -267,7 +273,8 @@ organ_data='[organlist]', rlimb_data='[rlimblist]', nanotrasen_relation='[nanotrasen_relation]', - speciesprefs='[speciesprefs]' + speciesprefs='[speciesprefs]', + socks='[socks]' WHERE ckey='[C.ckey]' AND slot='[default_slot]'"} ) @@ -295,7 +302,7 @@ job_karma_high, job_karma_med, job_karma_low, flavor_text, med_record, sec_record, gen_record, player_alt_titles, be_special, - disabilities, organ_data, rlimb_data, nanotrasen_relation, speciesprefs) + disabilities, organ_data, rlimb_data, nanotrasen_relation, speciesprefs, socks) VALUES ('[C.ckey]', '[default_slot]', '[sql_sanitize_text(metadata)]', '[sql_sanitize_text(real_name)]', '[be_random_name]','[gender]', '[age]', '[sql_sanitize_text(species)]', '[sql_sanitize_text(language)]', @@ -312,7 +319,7 @@ '[job_karma_high]', '[job_karma_med]', '[job_karma_low]', '[sql_sanitize_text(flavor_text)]', '[sql_sanitize_text(med_record)]', '[sql_sanitize_text(sec_record)]', '[sql_sanitize_text(gen_record)]', '[playertitlelist]', '[be_special]', - '[disabilities]', '[organlist]', '[rlimblist]', '[nanotrasen_relation]', '[speciesprefs]') + '[disabilities]', '[organlist]', '[rlimblist]', '[nanotrasen_relation]', '[speciesprefs]','[socks]') "} ) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 8e1c0e12964..f1dd7b307f3 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -141,6 +141,7 @@ S["eyes_blue"] >> b_eyes S["underwear"] >> underwear S["undershirt"] >> undershirt + S["socks"] >> socks S["backbag"] >> backbag S["b_type"] >> b_type S["accent"] >> accent @@ -203,6 +204,7 @@ b_eyes = sanitize_integer(b_eyes, 0, 255, initial(b_eyes)) underwear = sanitize_integer(underwear, 1, underwear_m.len, initial(underwear)) undershirt = sanitize_integer(undershirt, 1, undershirt_t.len, initial(undershirt)) + socks = sanitize_integer(socks,1 socks_t.len, initial(socks)) backbag = sanitize_integer(backbag, 1, backbaglist.len, initial(backbag)) b_type = sanitize_text(b_type, initial(b_type)) accent = sanitize_text(accent, initial(accent)) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index a63f487aec7..b5e637fa546 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -244,6 +244,8 @@ stat(null, eta_status) if (client.statpanel == "Status") + if(locate(/obj/item/device/assembly/health) in src) + stat(null, "Health: [health]") if (internal) if (!internal.air_contents) qdel(internal) @@ -431,7 +433,7 @@ var/armor_block = run_armor_check(affecting, "melee") apply_damage(damage, BRUTE, affecting, armor_block) -/mob/living/carbon/human/proc/is_loyalty_implanted() +/mob/living/carbon/human/proc/is_loyalty_implanted() for(var/L in contents) if(istype(L, /obj/item/weapon/implant/loyalty)) for(var/obj/item/organ/external/O in organs) @@ -694,7 +696,7 @@ // if looting pockets with gloves, do it quietly if(href_list["pockets"]) - if(isanimal(usr)) + if(isanimal(usr)) return //animals cannot strip people if(frozen) @@ -726,19 +728,19 @@ // Update strip window if(usr.machine == src && in_range(src, usr)) show_inv(usr) - + else if(!pickpocket) // Display a warning if the user mocks up src << "You feel your [pocket_side] pocket being fumbled with!" // if looting id with gloves, do it quietly - this allows pickpocket gloves to take/place id stealthily - Bone White if(href_list["item"]) - if(isanimal(usr)) + if(isanimal(usr)) return //animals cannot strip people - + if(frozen) usr << "\red Do not attempt to strip frozen people." - return + return var/itemTarget = href_list["item"] if(itemTarget == "id") if(pickpocket) @@ -1158,7 +1160,7 @@ if(!fail_msg) fail_msg = "There is no exposed flesh or thin material [target_zone == "head" ? "on their head" : "on their body"] to inject into." user << "[fail_msg]" - + /mob/living/carbon/human/proc/check_has_mouth() // Todo, check stomach organ when implemented. var/obj/item/organ/external/head/H = get_organ("head") @@ -1170,7 +1172,7 @@ if(stat==DEAD)return if(!check_has_mouth()) - return + return if(!lastpuke) lastpuke = 1 @@ -1517,16 +1519,16 @@ W.add_fingerprint(src) -// Allows IPC's to change their monitor display +// Allows IPC's to change their monitor display /mob/living/carbon/human/proc/change_monitor() - set category = "IC" + set category = "IC" set name = "Change Monitor Display" set desc = "Change the display on your monitor." - + if(stat || paralysis || stunned || weakened) src << "You cannot change your monitor display in your current state." - return - + return + var/list/hair = list() for(var/i in hair_styles_list) var/datum/sprite_accessory/hair/tmp_hair = hair_styles_list[i] @@ -1540,7 +1542,7 @@ h_style = new_style update_hair() - + //Putting a couple of procs here that I don't know where else to dump. //Mostly going to be used for Vox and Vox Armalis, but other human mobs might like them (for adminbuse). /mob/living/carbon/human/proc/leap() diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index bc10d54b1c8..7d7d400c9c3 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -30,7 +30,8 @@ var/b_type = "A+" //Player's bloodtype var/underwear = "Nude" //Which underwear the player wants - var/undershirt = "Nude" //Which undershirt the player wants. + var/undershirt = "Nude" //Which undershirt the player wants + var/socks = "Nude" //Which socks the player wants var/backbag = 2 //Which backpack type the player has chosen. Nothing, Satchel or Backpack. //Equipment slots diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 82f09f0f489..875a3a85260 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -64,6 +64,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc life_tick++ var/datum/gas_mixture/environment = loc.return_air() + in_stasis = 0 if(istype(loc, /obj/structure/closet/body_bag/cryobag)) var/obj/structure/closet/body_bag/cryobag/loc_as_cryobag = loc if(!loc_as_cryobag.opened) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 2e7a5e2be23..f7493c272d8 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -327,6 +327,13 @@ var/global/list/damage_icon_parts = list() if(U2) stand_icon.Blend(new /icon(U2.icon, "us_[U2.icon_state]_s"), ICON_OVERLAY) + + if(socks) + var/datum/sprite_accessory/socks/U3 = socks_list[socks] + if(U3) + stand_icon.Blend(new /icon(U3.icon, "sk_[U3.icon_state]_s"), ICON_OVERLAY) + + if(update_icons) update_icons() diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index a09f843b118..80e715dc7d3 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -212,8 +212,9 @@ if(camera) camera.status = 0 - held_item.loc = src.loc - held_item = null + if(held_item) + held_item.forceMove(src.loc) + held_item = null robogibs(src.loc, viruses) qdel(src) diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index b60ebe12c5d..77f48b976d5 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -7,6 +7,7 @@ datum/preferences gender = pick(MALE, FEMALE) underwear = random_underwear(gender) undershirt = random_undershirt(gender) + socks = random_socks(gender) if(species == "Human") s_tone = random_skin_tone() h_style = random_hair_style(gender, species) @@ -264,6 +265,12 @@ datum/preferences if(U2) undershirt_s = new/icon(U2.icon, "[U2.icon_state]_s", ICON_OVERLAY) + var/icon/socks_s = null + if(socks) + var/datum/sprite_accessory/socks/U3 = socks_list[socks] + if(U3) + socks_s = new/icon(U3.icon, "[U3.icon_state]_s", ICON_OVERLAY) + var/icon/clothes_s = null var/uniform_dmi='icons/mob/uniform.dmi' if(disabilities&DISABILITY_FLAG_FAT) @@ -792,6 +799,8 @@ datum/preferences preview_icon.Blend(underwear_s, ICON_OVERLAY) if(undershirt_s) preview_icon.Blend(undershirt_s, ICON_OVERLAY) + if(socks_s) + preview_icon.Blend(socks_s, ICON_OVERLAY) if(clothes_s) preview_icon.Blend(clothes_s, ICON_OVERLAY) preview_icon_front = new(preview_icon, dir = SOUTH) @@ -800,4 +809,5 @@ datum/preferences del(eyes_s) del(underwear_s) del(undershirt_s) + del(socks_s) del(clothes_s) diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 45fe53c3d82..5cc722bb7fd 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -1260,4 +1260,193 @@ name = "Fire Tank-Top" icon_state = "tank_fire" gender = NEUTER -//end tanktops \ No newline at end of file +//end tanktops + +/////////////////////// +// Socks Definitions // +/////////////////////// +/datum/sprite_accessory/socks + icon = 'icons/mob/underwear.dmi' + +/datum/sprite_accessory/socks/nude + name = "Nude" + icon_state = null + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + +/datum/sprite_accessory/socks/white_norm + name = "Normal White" + icon_state = "white_norm" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + +/datum/sprite_accessory/socks/black_norm + name = "Normal Black" + icon_state = "black_norm" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + +/datum/sprite_accessory/socks/white_short + name = "Short White" + icon_state = "white_short" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + +/datum/sprite_accessory/socks/black_short + name = "Short Black" + icon_state = "black_short" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + +/datum/sprite_accessory/socks/white_knee + name = "Knee-high White" + icon_state = "white_knee" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + +/datum/sprite_accessory/socks/black_knee + name = "Knee-high Black" + icon_state = "black_knee" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + +/datum/sprite_accessory/socks/thin_knee + name = "Knee-high Thin" + icon_state = "thin_knee" + gender = FEMALE + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + +/datum/sprite_accessory/socks/striped_knee + name = "Knee-high Striped" + icon_state = "striped_knee" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + +/datum/sprite_accessory/socks/rainbow_knee + name = "Knee-high Rainbow" + icon_state = "rainbow_knee" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + +/datum/sprite_accessory/socks/white_thigh + name = "Thigh-high White" + icon_state = "white_thigh" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + +/datum/sprite_accessory/socks/black_thigh + name = "Thigh-high Black" + icon_state = "black_thigh" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + +/datum/sprite_accessory/socks/thin_thigh + name = "Thigh-high Thin" + icon_state = "thin_thigh" + gender = FEMALE + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + +/datum/sprite_accessory/socks/striped_thigh + name = "Thigh-high Striped" + icon_state = "striped_thigh" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + +/datum/sprite_accessory/socks/rainbow_thigh + name = "Thigh-high Rainbow" + icon_state = "rainbow_thigh" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + +/datum/sprite_accessory/socks/pantyhose + name = "Pantyhose" + icon_state = "pantyhose" + gender = FEMALE + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + +/datum/sprite_accessory/socks/black_fishnet + name = "Black Fishnet" + icon_state = "black_fishnet" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + +/datum/sprite_accessory/socks/vox_white + name = "Vox White" + icon_state = "vox_white" + gender = NEUTER + species_allowed = list("Vox") + +/datum/sprite_accessory/socks/vox_black + name = "Vox Black" + icon_state = "vox_black" + gender = NEUTER + species_allowed = list("Vox") + +/datum/sprite_accessory/socks/vox_thin + name = "Vox Black Thin" + icon_state = "vox_blackthin" + gender = NEUTER + species_allowed = list("Vox") + +/datum/sprite_accessory/socks/vox_rainbow + name = "Vox Rainbow" + icon_state = "vox_rainbow" + gender = NEUTER + species_allowed = list("Vox") + +/datum/sprite_accessory/socks/vox_stripped + name = "Vox Stripped" + icon_state = "vox_white" + gender = NEUTER + species_allowed = list("Vox") + +/datum/sprite_accessory/socks/vox_white_thigh + name = "Vox Thigh-high White" + icon_state = "vox_whiteTH" + gender = NEUTER + species_allowed = list("Vox") + +/datum/sprite_accessory/socks/vox_black_thigh + name = "Vox Thigh-high Black" + icon_state = "vox_blackTH" + gender = NEUTER + species_allowed = list("Vox") + +/datum/sprite_accessory/socks/vox_thin_thigh + name = "Vox Thigh-high Thin" + icon_state = "vox_blackthinTH" + gender = NEUTER + species_allowed = list("Vox") + +/datum/sprite_accessory/socks/vox_rainbow_thigh + name = "Vox Thigh-high Rainbow" + icon_state = "vox_rainbowTH" + gender = NEUTER + species_allowed = list("Vox") + +/datum/sprite_accessory/socks/vox_stripped_thigh + name = "Vox Thigh-high Stripped" + icon_state = "vox_strippedTH" + gender = NEUTER + species_allowed = list("Vox") + +/datum/sprite_accessory/socks/vox_fishnet + name = "Vox Fishnets" + icon_state = "vox_fishnet" + gender = NEUTER + species_allowed = list("Vox") \ No newline at end of file diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm index ea2675034e7..a54072e9bbb 100644 --- a/code/modules/reagents/newchem/medicine.dm +++ b/code/modules/reagents/newchem/medicine.dm @@ -825,6 +825,35 @@ datum/reagent/stimulants/reagent_deleted(var/mob/living/M as mob) ..() return +/datum/reagent/medicine/stimulative_agent + name = "Stimulative Agent" + id = "stimulative_agent" + description = "An illegal compound that dramatically enhances the body's performance and healing capabilities." + color = "#C8A5DC" + metabolization_rate = 0.5 * REAGENTS_METABOLISM + overdose_threshold = 60 + +/datum/reagent/medicine/stimulative_agent/on_mob_life(mob/living/M) + M.status_flags |= GOTTAGOFAST + if(M.health < 50 && M.health > 0) + M.adjustOxyLoss(-1*REM) + M.adjustToxLoss(-1*REM) + M.adjustBruteLoss(-1*REM) + M.adjustFireLoss(-1*REM) + M.AdjustParalysis(-3) + M.AdjustStunned(-3) + M.AdjustWeakened(-3) + M.adjustStaminaLoss(-5*REM) + ..() + +/datum/reagent/medicine/stimulative_agent/overdose_process(mob/living/M) + if(prob(33)) + M.adjustStaminaLoss(2.5*REM) + M.adjustToxLoss(1*REM) + M.losebreath++ + ..() + return + datum/reagent/insulin name = "Insulin" id = "insulin" diff --git a/code/modules/reagents/newchem/newchem_procs.dm b/code/modules/reagents/newchem/newchem_procs.dm index 5c87c0f0044..b2d6edc0995 100644 --- a/code/modules/reagents/newchem/newchem_procs.dm +++ b/code/modules/reagents/newchem/newchem_procs.dm @@ -96,7 +96,7 @@ datum/reagents/proc/check_ignoreslow(var/mob/M) datum/reagents/proc/check_gofast(var/mob/M) if(istype(M, /mob)) - if(M.reagents.has_reagent("unholywater")||M.reagents.has_reagent("nuka_cola")) + if(M.reagents.has_reagent("unholywater")||M.reagents.has_reagent("nuka_cola")||M.reagents.has_reagent("stimulative_agent")) return 1 else M.status_flags &= ~GOTTAGOFAST diff --git a/code/modules/reagents/oldchem/reagents/reagents_water.dm b/code/modules/reagents/oldchem/reagents/reagents_water.dm index a94ab397cd8..12dfe89bb28 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_water.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_water.dm @@ -110,6 +110,8 @@ color = "#61C2C2" /datum/reagent/space_cleaner/reaction_obj(var/obj/O, var/volume) + if(O) + O.color = initial(O.color) if(istype(O,/obj/effect/decal/cleanable)) qdel(O) else @@ -118,6 +120,8 @@ /datum/reagent/space_cleaner/reaction_turf(var/turf/T, var/volume) if(volume >= 1) + if(T) + T.color = initial(T.color) T.overlays.Cut() T.clean_blood() for(var/obj/effect/decal/cleanable/C in src) @@ -125,10 +129,9 @@ for(var/mob/living/carbon/slime/M in T) M.adjustToxLoss(rand(5,10)) - -/datum/reagent/space_cleaner/reaction_turf(var/turf/simulated/S, var/volume) - if(volume >= 1) - S.dirt = 0 + if(istype(T,/turf/simulated)) + var/turf/simulated/S = T + S.dirt = 0 /datum/reagent/space_cleaner/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) if(iscarbon(M)) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 247bfdf25d8..90cebcf4648 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -162,6 +162,14 @@ build_path = /obj/item/device/assembly/infra category = list("initial", "Miscellaneous") +/datum/design/health_sensor + name = "Health sensor" + id = "health_sensor" + build_type = AUTOLATHE + materials = list(MAT_METAL = 800, MAT_GLASS = 200) + build_path = /obj/item/device/assembly/health + category = list("initial", "Medical") + /datum/design/kitchen_knife name = "Kitchen knife" id = "kitchen_knife" @@ -546,3 +554,19 @@ materials = list(MAT_METAL = 4000) build_path = /obj/item/ammo_casing/shotgun category = list("hacked", "Security") + +/datum/design/desttagger + name = "Destination tagger" + id = "desttagger" + build_type = AUTOLATHE + materials = list(MAT_METAL = 250, MAT_GLASS = 125) + build_path = /obj/item/device/destTagger + category = list("initial", "Electronics") + +/datum/design/handlabeler + name = "Hand labeler" + id = "handlabel" + build_type = AUTOLATHE + materials = list(MAT_METAL = 150, MAT_GLASS = 125) + build_path = /obj/item/weapon/hand_labeler + category = list("initial", "Electronics") \ No newline at end of file diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index cf945134663..1cfd36c2bd6 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -204,4 +204,48 @@ build_type = PROTOLATHE materials = list (MAT_METAL = 12500, MAT_GLASS = 7500, MAT_SILVER = 1500, MAT_GOLD = 1500, MAT_DIAMOND = 750) build_path = /obj/item/weapon/scalpel/manager + category = list("Medical") + +///////////////////////////////////////// +////////////Regular Implants///////////// +///////////////////////////////////////// + +/datum/design/implanter + name = "Implanter" + desc = "A sterile automatic implant injector." + id = "implanter" + req_tech = list("materials" = 1, "programming" = 2, "biotech" = 3) + build_type = PROTOLATHE + materials = list(MAT_METAL = 600, MAT_GLASS = 200) + build_path = /obj/item/weapon/implanter + category = list("Medical") + +/datum/design/implantcase + name = "Implant Case" + desc = "A glass case containing an implant." + id = "implantcase" + req_tech = list("materials" = 1, "biotech" = 2) + build_type = PROTOLATHE + materials = list(MAT_GLASS = 500) + build_path = /obj/item/weapon/implantcase + category = list("Medical") + +/datum/design/implant_freedom + name = "Freedom Implant Case" + desc = "A glass case containing an implant." + id = "implant_freedom" + req_tech = list("materials" = 2, "biotech" = 3, "magnets" = 3, "syndicate" = 5) + build_type = PROTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 500, MAT_GOLD = 250) + build_path = /obj/item/weapon/implantcase/freedom + category = list("Medical") + +/datum/design/implant_adrenalin + name = "Adrenalin Implant Case" + desc = "A glass case containing an implant." + id = "implant_adrenalin" + req_tech = list("materials" = 2, "biotech" = 5, "combat" = 3, "syndicate" = 6) + build_type = PROTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 500, MAT_GOLD = 500, MAT_URANIUM = 100, MAT_DIAMOND = 200) + build_path = /obj/item/weapon/implantcase/adrenaline category = list("Medical") \ No newline at end of file diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi index 5c303cbf642..6c36fd0651b 100644 Binary files a/icons/mob/underwear.dmi and b/icons/mob/underwear.dmi differ diff --git a/icons/obj/assemblies/new_assemblies.dmi b/icons/obj/assemblies/new_assemblies.dmi index 0f9dc460825..b50ef0e13e3 100644 Binary files a/icons/obj/assemblies/new_assemblies.dmi and b/icons/obj/assemblies/new_assemblies.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 64e1b4941be..6ee1fbd0fd3 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/paradise.dme b/paradise.dme index 6b0e84f845d..12deff3c44e 100644 --- a/paradise.dme +++ b/paradise.dme @@ -959,6 +959,7 @@ #include "code\modules\alarm\power_alarm.dm" #include "code\modules\assembly\assembly.dm" #include "code\modules\assembly\bomb.dm" +#include "code\modules\assembly\health.dm" #include "code\modules\assembly\helpers.dm" #include "code\modules\assembly\holder.dm" #include "code\modules\assembly\igniter.dm"