diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 9b18e243567..358fc2ebc6a 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -121,9 +121,6 @@ datum/controller/game_controller/proc/setup_objects() //Set up spawn points. populate_spawn_points() - //Set up roundstart seed list. - populate_seed_list() - world << "\red \b Initializations complete." sleep(-1) diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index b4ff1ed7ca8..4ab6742b837 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -9,7 +9,7 @@ if(!holder) return if(master_controller && master_controller.asteroid_ore_map) - master_controller.asteroid_ore_map.print_distribution_map() + master_controller.asteroid_ore_map.print_distribution_map(usr) /client/proc/remake_distribution_map() set category = "Debug" diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index da72abcdd5e..9e76a6af56a 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -164,7 +164,7 @@ proc/get_id_photo(var/mob/living/carbon/human/H) preview_icon.Blend(temp, ICON_OVERLAY) //Tail - if(H.species.tail && H.species.flags & HAS_TAIL) + if(H.species.tail) temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[H.species.tail]_s") preview_icon.Blend(temp, ICON_OVERLAY) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 1e6d9790eb2..a51ac42ee25 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -779,12 +779,8 @@ client usr << "Mob doesn't exist anymore" return - // Clear out their species abilities. - H.species.remove_inherent_verbs(H) - if(H.set_species(new_species)) usr << "Set species of [H] to [H.species]." - H.regenerate_icons() else usr << "Failed! Something went wrong." diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index 9983eff1ac0..0ee04f0230c 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -109,6 +109,17 @@ O.show_message("\red [usr] destroys the [name]!", 1) health = 0 else + + // Aliens can get straight through these. + if(istype(usr,/mob/living/carbon)) + var/mob/living/carbon/M = usr + if(locate(/datum/organ/internal/xenos/hivenode) in M.internal_organs) + for(var/mob/O in oviewers(src)) + O.show_message("\red [usr] strokes the [name] and it melts away!", 1) + health = 0 + healthcheck() + return + usr << "\blue You claw at the [name]." for(var/mob/O in oviewers(src)) O.show_message("\red [usr] claws at the [name]!", 1) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 80f1fcb8e51..5b41ba88b7b 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -260,8 +260,11 @@ if(ishuman(M)) //START HUMAN var/mob/living/carbon/human/H = M + var/list/mob_equip = list() + if(H.species.hud && H.species.hud.equip_slots) + mob_equip = H.species.hud.equip_slots - if(H.species && !(slot in H.species.hud.equip_slots)) + if(H.species && !(slot in mob_equip)) return 0 switch(slot) @@ -306,7 +309,7 @@ if(slot_belt) if(H.belt) return 0 - if(!H.w_uniform) + if(!H.w_uniform && (slot_w_uniform in mob_equip)) if(!disable_warning) H << "\red You need a jumpsuit before you can attach this [name]." return 0 @@ -354,7 +357,7 @@ if(slot_wear_id) if(H.wear_id) return 0 - if(!H.w_uniform) + if(!H.w_uniform && (slot_w_uniform in mob_equip)) if(!disable_warning) H << "\red You need a jumpsuit before you can attach this [name]." return 0 @@ -364,7 +367,7 @@ if(slot_l_store) if(H.l_store) return 0 - if(!H.w_uniform) + if(!H.w_uniform && (slot_w_uniform in mob_equip)) if(!disable_warning) H << "\red You need a jumpsuit before you can attach this [name]." return 0 @@ -375,7 +378,7 @@ if(slot_r_store) if(H.r_store) return 0 - if(!H.w_uniform) + if(!H.w_uniform && (slot_w_uniform in mob_equip)) if(!disable_warning) H << "\red You need a jumpsuit before you can attach this [name]." return 0 @@ -387,7 +390,7 @@ if(slot_s_store) if(H.s_store) return 0 - if(!H.wear_suit) + if(!H.wear_suit && (slot_wear_suit in mob_equip)) if(!disable_warning) H << "\red You need a suit before you can attach this [name]." return 0 diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index d3a907a40a2..69f4922bb96 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -225,7 +225,7 @@ var/global/list/obj/item/device/pda/PDAs = list() if (!c) // if the user hasn't selected a PDA file we can't send a message return var/selected = plist[c] - create_message(usr, selected) + create_message(usr, selected, 0) /obj/item/device/pda/ai/verb/cmd_toggle_pda_receiver() @@ -879,9 +879,9 @@ var/global/list/obj/item/device/pda/PDAs = list() id.loc = get_turf(src) id = null -/obj/item/device/pda/proc/create_message(var/mob/living/U = usr, var/obj/item/device/pda/P) - - U.visible_message("[U] taps on \his PDA's screen.") +/obj/item/device/pda/proc/create_message(var/mob/living/U = usr, var/obj/item/device/pda/P, var/tap = 1) + if(tap) + U.visible_message("[U] taps on \his PDA's screen.") U.last_target_click = world.time var/t = input(U, "Please enter message", name, null) as text t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index cad2907ac77..4fb2c56d77e 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -114,15 +114,15 @@ new /obj/item/weapon/shard(loc) if(reinf) new /obj/item/stack/rods(loc) del(src) - else if (istype(usr,/mob/living/carbon/human)) - - var/mob/living/carbon/human/H = usr - - if(H.species.can_shred(H)) - attack_generic(H,25) - return else if (usr.a_intent == "hurt") + + if (istype(usr,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = usr + if(H.species.can_shred(H)) + attack_generic(H,25) + return + playsound(src.loc, 'sound/effects/glassknock.ogg', 80, 1) usr.visible_message("\red [usr.name] bangs against the [src.name]!", \ "\red You bang against the [src.name]!", \ diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index f6605059d01..403dfd40498 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -149,6 +149,7 @@ var/list/admin_verbs_debug = list( /client/proc/restart_controller, /client/proc/remake_distribution_map, /client/proc/show_distribution_map, + /client/proc/show_plant_genes, /client/proc/enable_debug_verbs, /client/proc/callproc, /client/proc/toggledebuglogs, diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index e2c6ee65fa7..b3911d8d68c 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -35,6 +35,7 @@ /obj/item/clothing/suit/bio_suit/general icon_state = "bio_general" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL //Virology biosuit, green stripe /obj/item/clothing/head/bio_hood/virology @@ -43,6 +44,7 @@ /obj/item/clothing/suit/bio_suit/virology icon_state = "bio_virology" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL //Security biosuit, grey with red stripe across the chest /obj/item/clothing/head/bio_hood/security @@ -51,6 +53,7 @@ /obj/item/clothing/suit/bio_suit/security icon_state = "bio_security" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL //Janitor's biosuit, grey with purple arms /obj/item/clothing/head/bio_hood/janitor @@ -59,6 +62,7 @@ /obj/item/clothing/suit/bio_suit/janitor icon_state = "bio_janitor" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL //Scientist's biosuit, white with a pink-ish hue @@ -68,11 +72,13 @@ /obj/item/clothing/suit/bio_suit/scientist icon_state = "bio_scientist" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL //CMO's biosuit, blue stripe /obj/item/clothing/suit/bio_suit/cmo icon_state = "bio_cmo" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL /obj/item/clothing/head/bio_hood/cmo icon_state = "bio_cmo" @@ -84,3 +90,4 @@ desc = "It protected doctors from the Black Death, back then. You bet your arse it's gonna help you against viruses." icon_state = "plaguedoctor" item_state = "bio_suit" + flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index 1012543db51..f51420a11b4 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -176,7 +176,7 @@ weedlevel += 1 * HYDRO_SPEED_MULTIPLIER // There's a chance for a weed explosion to happen if the weeds take over. - // Plants that are themselves weeds (weed_tolernace > 10) are unaffected. + // Plants that are themselves weeds (weed_tolerance > 10) are unaffected. if (weedlevel >= 10 && prob(10)) if(!seed || weedlevel >= seed.weed_tolerance) weed_invasion() @@ -184,6 +184,7 @@ // If there is no seed data (and hence nothing planted), // or the plant is dead, process nothing further. if(!seed || dead) + if(draw_warnings) update_icon() //Harvesting would fail to set alert icons properly. return // Advance plant age. diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 7b6710f6c43..50b28c755fd 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -1,6 +1,21 @@ var/global/list/seed_types = list() // A list of all seed data. var/global/list/gene_tag_masks = list() // Gene obfuscation for delicious trial and error goodness. +// Debug for testing seed genes. +/client/proc/show_plant_genes() + set category = "Debug" + set name = "Show Plant Genes" + set desc = "Prints the round's plant gene masks." + + if(!holder) return + + if(!gene_tag_masks) + usr << "Gene masks not set." + return + + for(var/mask in gene_tag_masks) + usr << "[mask]: [gene_tag_masks[mask]]" + // Predefined/roundstart varieties use a string key to make it // easier to grab the new variety when mutating. Post-roundstart // and mutant varieties use their uid converted to a string instead. @@ -130,49 +145,50 @@ proc/populate_seed_list() var/additional_chems = rand(0,5) - var/list/possible_chems = list( - "bicaridine", - "hyperzine", - "cryoxadone", - "blood", - "water", - "potassium", - "plasticide", - "slimetoxin", - "aslimetoxin", - "inaprovaline", - "space_drugs", - "paroxetine", - "mercury", - "sugar", - "radium", - "ryetalyn", - "alkysine", - "thermite", - "tramadol", - "cryptobiolin", - "dermaline", - "dexalin", - "phoron", - "synaptizine", - "impedrezene", - "hyronalin", - "peridaxon", - "toxin", - "rezadone", - "ethylredoxrazine", - "slimejelly", - "cyanide", - "mindbreaker", - "stoxin" - ) + if(additional_chems) + var/list/possible_chems = list( + "bicaridine", + "hyperzine", + "cryoxadone", + "blood", + "water", + "potassium", + "plasticide", + "slimetoxin", + "aslimetoxin", + "inaprovaline", + "space_drugs", + "paroxetine", + "mercury", + "sugar", + "radium", + "ryetalyn", + "alkysine", + "thermite", + "tramadol", + "cryptobiolin", + "dermaline", + "dexalin", + "phoron", + "synaptizine", + "impedrezene", + "hyronalin", + "peridaxon", + "toxin", + "rezadone", + "ethylredoxrazine", + "slimejelly", + "cyanide", + "mindbreaker", + "stoxin" + ) - for(var/x=1;x<=additional_chems;x++) - if(!possible_chems.len) - break - var/new_chem = pick(possible_chems) - possible_chems -= new_chem - chems[new_chem] = list(rand(1,10),rand(10,20)) + for(var/x=1;x<=additional_chems;x++) + if(!possible_chems.len) + break + var/new_chem = pick(possible_chems) + possible_chems -= new_chem + chems[new_chem] = list(rand(1,10),rand(10,20)) if(prob(90)) requires_nutrients = 1 @@ -291,7 +307,7 @@ proc/populate_seed_list() source_turf.visible_message("\blue \The [display_name] begins to glow!") if(prob(degree*2)) biolum_colour = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" - source_turf.visible_message("\blue \The [display_name]'s glow changes colour!") + source_turf.visible_message("\blue \The [display_name]'s glow changes colour!") else source_turf.visible_message("\blue \The [display_name]'s glow dims...") if(11) @@ -332,24 +348,21 @@ proc/populate_seed_list() var/list/gene_chem = gene_value[rid] - if(chems[rid]) + if(!chems[rid]) + chems[rid] = gene_chem.Copy() + continue - var/list/chem_value = chems[rid] + for(var/i=1;i<=gene_chem.len;i++) - chems[rid][1] = max(1,round((gene_chem[1] + chem_value[1])/2)) + if(isnull(gene_chem[i])) gene_chem[i] = 0 - if(gene_chem.len > 1) - if(chem_value > 1) - chems[rid][2] = max(1,round((gene_chem[2] + chem_value[2])/2)) - else - chems[rid][2] = gene_chem[2] - - else - var/list/new_chem = gene_chem[rid] - chems[rid] = new_chem.Copy() + if(chems[rid][i]) + chems[rid][i] = max(1,round((gene_chem[i] + chems[rid][i])/2)) + else + chems[rid][i] = gene_chem[i] var/list/new_gasses = gene.values[3] - if(istype(new_gasses)) + if(islist(new_gasses)) if(!exude_gasses) exude_gasses = list() exude_gasses |= new_gasses for(var/gas in exude_gasses) @@ -485,6 +498,7 @@ proc/populate_seed_list() //Place the plant products at the feet of the user. /datum/seed/proc/harvest(var/mob/user,var/yield_mod,var/harvest_sample) + if(!user) return @@ -522,6 +536,10 @@ proc/populate_seed_list() for(var/i = 0;iYou fail to push [tmob]'s fat ass out of the way." + + if( istype(tmob, /mob/living/carbon) && prob(10) ) + src.spread_disease_to(AM, "Contact") + + if(istype(tmob, /mob/living/carbon/human)) + + if(HULK in tmob.mutations) + if(prob(70)) + usr << "\red You fail to push [tmob]'s fat ass out of the way." + now_pushing = 0 + return + if(!(tmob.status_flags & CANPUSH)) + now_pushing = 0 + return + + for(var/mob/M in range(tmob, 1)) + if(tmob.pinned.len || ((M.pulling == tmob && ( tmob.restrained() && !( M.restrained() ) && M.stat == 0)) || locate(/obj/item/weapon/grab, tmob.grabbed_by.len)) ) + if ( !(world.time % 5) ) + src << "\red [tmob] is restrained, you cannot push past" + now_pushing = 0 + return + if( tmob.pulling == M && ( M.restrained() && !( tmob.restrained() ) && tmob.stat == 0) ) + if ( !(world.time % 5) ) + src << "\red [tmob] is restraining [M], you cannot push past" + now_pushing = 0 + return + + //Leaping mobs just land on the tile, no pushing, no anything. + if(status_flags & LEAPING) + loc = tmob.loc + status_flags &= ~LEAPING + now_pushing = 0 + return + + // Step over drones. + // I have no idea why the hell this isn't already happening. How do mice do it? + if(istype(tmob,/mob/living/silicon/robot/drone)) + loc = tmob.loc + now_pushing = 0 + return + + if((tmob.a_intent == "help" || tmob.restrained()) && (a_intent == "help" || src.restrained()) && tmob.canmove && !tmob.buckled && canmove) // mutual brohugs all around! + var/turf/oldloc = loc + loc = tmob.loc + tmob.loc = oldloc + now_pushing = 0 + for(var/mob/living/carbon/slime/slime in view(1,tmob)) + if(slime.Victim == tmob) + slime.UpdateFeed() + return + + if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations)) + if(prob(40) && !(FAT in src.mutations)) + src << "\red You fail to push [tmob]'s fat ass out of the way." + now_pushing = 0 + return + if(tmob.r_hand && istype(tmob.r_hand, /obj/item/weapon/shield/riot)) + if(prob(99)) + now_pushing = 0 + return + if(tmob.l_hand && istype(tmob.l_hand, /obj/item/weapon/shield/riot)) + if(prob(99)) now_pushing = 0 return if(!(tmob.status_flags & CANPUSH)) @@ -446,6 +505,7 @@ return tmob.LAssailant = src + now_pushing = 0 ..() if (!( istype(AM, /atom/movable) )) @@ -460,6 +520,9 @@ now_pushing = 0 return step(AM, t) - now_pushing = null + now_pushing = 0 return + return + +/mob/living/carbon/can_use_vents() return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/alien/alien_species.dm b/code/modules/mob/living/carbon/human/alien/alien_species.dm index b592c6292b7..908abe85e31 100644 --- a/code/modules/mob/living/carbon/human/alien/alien_species.dm +++ b/code/modules/mob/living/carbon/human/alien/alien_species.dm @@ -126,6 +126,7 @@ ) inherent_verbs = list( + /mob/living/proc/ventcrawl, /mob/living/carbon/human/proc/regurgitate, /mob/living/carbon/human/proc/plant, /mob/living/carbon/human/proc/transfer_plasma, @@ -162,6 +163,7 @@ ) inherent_verbs = list( + /mob/living/proc/ventcrawl, /mob/living/carbon/human/proc/tackle, /mob/living/carbon/human/proc/gut, /mob/living/carbon/human/proc/leap, @@ -190,6 +192,7 @@ ) inherent_verbs = list( + /mob/living/proc/ventcrawl, /mob/living/carbon/human/proc/tackle, /mob/living/carbon/human/proc/regurgitate, /mob/living/carbon/human/proc/transfer_plasma, @@ -222,6 +225,7 @@ ) inherent_verbs = list( + /mob/living/proc/ventcrawl, /mob/living/carbon/human/proc/psychic_whisper, /mob/living/carbon/human/proc/regurgitate, /mob/living/carbon/human/proc/lay_egg, diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 7194eba0998..275790fe5e6 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -43,93 +43,6 @@ prev_gender = gender // Debug for plural genders make_blood() -/mob/living/carbon/human/Bump(atom/movable/AM as mob|obj, yes) - if ((!( yes ) || now_pushing)) - return - now_pushing = 1 - if (ismob(AM)) - var/mob/tmob = AM - - if( istype(tmob, /mob/living/carbon) && prob(10) ) - src.spread_disease_to(AM, "Contact") -//BubbleWrap - Should stop you pushing a restrained person out of the way - - if(istype(tmob, /mob/living/carbon/human)) - - for(var/mob/M in range(tmob, 1)) - if(tmob.pinned.len || ((M.pulling == tmob && ( tmob.restrained() && !( M.restrained() ) && M.stat == 0)) || locate(/obj/item/weapon/grab, tmob.grabbed_by.len)) ) - if ( !(world.time % 5) ) - src << "\red [tmob] is restrained, you cannot push past" - now_pushing = 0 - return - if( tmob.pulling == M && ( M.restrained() && !( tmob.restrained() ) && tmob.stat == 0) ) - if ( !(world.time % 5) ) - src << "\red [tmob] is restraining [M], you cannot push past" - now_pushing = 0 - return - - //Leaping mobs just land on the tile, no pushing, no anything. - if(status_flags & LEAPING) - loc = tmob.loc - status_flags &= ~LEAPING - now_pushing = 0 - return - - if(istype(tmob,/mob/living/silicon/robot/drone)) //I have no idea why the hell this isn't already happening. How do mice do it? - loc = tmob.loc - now_pushing = 0 - return - - //BubbleWrap: people in handcuffs are always switched around as if they were on 'help' intent to prevent a person being pulled from being seperated from their puller - if((tmob.a_intent == "help" || tmob.restrained()) && (a_intent == "help" || src.restrained()) && tmob.canmove && !tmob.buckled && canmove) // mutual brohugs all around! - var/turf/oldloc = loc - loc = tmob.loc - tmob.loc = oldloc - now_pushing = 0 - for(var/mob/living/carbon/slime/slime in view(1,tmob)) - if(slime.Victim == tmob) - slime.UpdateFeed() - return - - if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations)) - if(prob(40) && !(FAT in src.mutations)) - src << "\red You fail to push [tmob]'s fat ass out of the way." - now_pushing = 0 - return - if(tmob.r_hand && istype(tmob.r_hand, /obj/item/weapon/shield/riot)) - if(prob(99)) - now_pushing = 0 - return - if(tmob.l_hand && istype(tmob.l_hand, /obj/item/weapon/shield/riot)) - if(prob(99)) - now_pushing = 0 - return - if(!(tmob.status_flags & CANPUSH)) - now_pushing = 0 - return - - tmob.LAssailant = src - - now_pushing = 0 - spawn(0) - ..() - if (!istype(AM, /atom/movable)) - return - if (!now_pushing) - now_pushing = 1 - - if (!AM.anchored) - var/t = get_dir(src, AM) - if (istype(AM, /obj/structure/window)) - if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) - for(var/obj/structure/window/win in get_step(AM,t)) - now_pushing = 0 - return - step(AM, t) - now_pushing = 0 - return - return - /mob/living/carbon/human/Stat() ..() statpanel("Status") @@ -1258,6 +1171,7 @@ dna.species = new_species if(species) + if(species.name && species.name == new_species) return if(species.language) @@ -1266,6 +1180,9 @@ if(species.default_language) remove_language(species.default_language) + // Clear out their species abilities. + species.remove_inherent_verbs(src) + species = all_species[new_species] species.create_organs(src) @@ -1289,7 +1206,7 @@ species.handle_post_spawn(src) spawn(0) - update_icons() + regenerate_icons() vessel.add_reagent("blood",560-vessel.total_volume) fixblood() @@ -1432,4 +1349,4 @@ var/datum/organ/internal/eyes = internal_organs_by_name["eyes"] if(eyes && istype(eyes) && !eyes.status & ORGAN_CUT_AWAY) return 1 - return 0 + return 0 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 3a2e2622535..c871ff44531 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1060,7 +1060,7 @@ if(overeatduration > 1) overeatduration -= 2 //doubled the unfat rate - if(!light_organ || light_organ.is_broken()) + if(species.flags & IS_PLANT && (!light_organ || light_organ.is_broken())) if(nutrition < 200) take_overall_damage(2,0) traumatic_shock++ diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 0b7d601ca95..766dd94c256 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -232,16 +232,17 @@ /mob/living/carbon/human/say_quote(var/message, var/datum/language/speaking = null) var/verb = "says" var/ending = copytext(message, length(message)) - if(ending=="!") - verb=pick("exclaims","shouts","yells") - else if(ending=="?") - verb="asks" + + if(speaking) + verb = speaking.get_spoken_verb(ending) + else + if(ending == "!") + verb=pick("exclaims","shouts","yells") + else if(ending == "?") + verb="asks" return verb - - - /mob/living/carbon/human/proc/handle_speech_problems(var/message) var/list/returns[3] var/verb = "says" diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 963a969658a..0ffe4645a1a 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -234,7 +234,7 @@ heat_level_2 = 480 //Default 400 heat_level_3 = 1100 //Default 1000 - flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_TAIL | HAS_SKIN_COLOR + flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR flesh_color = "#34AF10" @@ -261,7 +261,7 @@ primitive = /mob/living/carbon/monkey/tajara - flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_TAIL | HAS_SKIN_COLOR + flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR flesh_color = "#AFA59E" base_color = "#333333" @@ -353,7 +353,7 @@ breath_type = "nitrogen" poison_type = "oxygen" - flags = NO_SCAN | NO_BLOOD | HAS_TAIL | NO_PAIN + flags = NO_SCAN | NO_BLOOD | NO_PAIN blood_color = "#2299FC" flesh_color = "#808D11" diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index f3a13b60355..e4ce980456f 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -897,7 +897,7 @@ proc/get_damage_icon_part(damage_state, body_part) /mob/living/carbon/human/proc/update_tail_showing(var/update_icons=1) overlays_standing[TAIL_LAYER] = null - if(species.tail && species.flags & HAS_TAIL) + if(species.tail) if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space)) var/icon/tail_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_s") tail_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 5c5805bfaf3..c1adb74feee 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -806,10 +806,10 @@ var/area/new_area = get_area(loc) if(new_area) new_area.Entered(src) + /mob/living/proc/can_use_vents() return "You can't fit into that vent." - /mob/living/proc/has_brain() return 1 diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 928ba4130a5..b24e995aecc 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -128,6 +128,8 @@ var/list/ai_verbs_default = list( add_ai_verbs(src) //Languages + add_language("Robot Talk", 1) + add_language("Galactic Common", 0) add_language("Sol Common", 0) add_language("Sinta'unathi", 0) add_language("Siik'tajr", 0) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 692609afb88..8d69a1d0a2e 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -19,6 +19,10 @@ #define SEC_HUD 1 //Security HUD mode #define MED_HUD 2 //Medical HUD mode +/mob/living/silicon/New() + ..() + add_language("Galactic Common") + /mob/living/silicon/proc/show_laws() return diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 4f5eda2af94..f6200a3e7eb 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -114,5 +114,5 @@ response_disarm = "gently pushes aside" response_harm = "splats" -/mob/living/carbon/alien/can_use_vents() +/mob/living/simple_animal/mouse/can_use_vents() return \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 140e06722ab..9e8a8c65fa3 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -73,7 +73,7 @@ /mob/proc/Life() // if(organStructure) // organStructure.ProcessOrgans() - handle_typing_indicator() + //handle_typing_indicator() //You said the typing indicator would be fine. The test determined that was a lie. return @@ -1079,4 +1079,4 @@ mob/proc/yank_out_object() if(istype(I,/mob/living/simple_animal/borer)) return I - return 0 + return 0 diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 110c505b317..48ba98ac291 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -208,7 +208,7 @@ datum/preferences preview_icon.Blend(temp, ICON_OVERLAY) //Tail - if(current_species && (current_species.flags & HAS_TAIL)) + if(current_species && (current_species.tail)) var/icon/temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[current_species.tail]_s") preview_icon.Blend(temp, ICON_OVERLAY) diff --git a/code/setup.dm b/code/setup.dm index f0530653527..4b64a0821ef 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -748,11 +748,9 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse #define HAS_SKIN_COLOR 128 #define HAS_LIPS 256 #define HAS_UNDERWEAR 512 -#define HAS_TAIL 1024 - -#define IS_PLANT 2048 -#define IS_WHITELISTED 4096 -#define IS_SYNTHETIC 8192 +#define IS_PLANT 1024 +#define IS_WHITELISTED 2048 +#define IS_SYNTHETIC 4096 //Language flags. #define WHITELISTED 1 // Language is available if the speaker is whitelisted. diff --git a/code/world.dm b/code/world.dm index d40ef403caa..6cf0bb4f18f 100644 --- a/code/world.dm +++ b/code/world.dm @@ -41,6 +41,11 @@ sleep_offline = 1 + // Set up roundstart seed list. This is here because vendors were + // bugging out and not populating with the correct packet names + // due to this list not being instantiated. + populate_seed_list() + master_controller = new /datum/controller/game_controller() spawn(1) master_controller.setup() diff --git a/icons/effects/species.dmi b/icons/effects/species.dmi index 4c1516b8581..defb526a7f8 100644 Binary files a/icons/effects/species.dmi and b/icons/effects/species.dmi differ diff --git a/icons/mob/talk.dmi b/icons/mob/talk.dmi index 0a1d6333590..14d1d54ab98 100644 Binary files a/icons/mob/talk.dmi and b/icons/mob/talk.dmi differ