diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 5906a676591..8bde73c238e 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -52,7 +52,7 @@ var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Al /////Initial Building///// ////////////////////////// -/hook/startup/proc/makeDatumRefLists() +/proc/makeDatumRefLists() var/list/paths //Hair - Initialise all /datum/sprite_accessory/hair into an list indexed by hair-style name diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 6f27a86f949..e70875941e6 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -8,6 +8,7 @@ idle_power_usage = 10 active_power_usage = 100 + var/list/machine_recipes var/list/stored_material = list("metal" = 0, "glass" = 0) var/list/storage_capacity = list("metal" = 0, "glass" = 0) var/show_category = "All" @@ -43,45 +44,45 @@ dat += "

Printable Designs

Showing: [show_category].

" var/index = 0 - for(var/datum/autolathe/recipe/R in autolathe_recipes) + for(var/datum/autolathe/recipe/R in machine_recipes) index++ if(R.hidden && !hacked || (show_category != "All" && show_category != R.category)) continue - var/can_make = 1 - var/material_string = "" - var/multiplier_string = "" - var/max_sheets + var/can_make = 1 + var/material_string = "" + var/multiplier_string = "" + var/max_sheets - var/comma - if(!R.resources || !R.resources.len) - material_string = "No resources required." - else + var/comma + if(!R.resources || !R.resources.len) + material_string = "No resources required." + else - //Make sure it's buildable and list requires resources. - for(var/material in R.resources) - var/sheets = round(stored_material[material]/R.resources[material]) - if(isnull(max_sheets) || max_sheets > sheets) - max_sheets = sheets + //Make sure it's buildable and list requires resources. + for(var/material in R.resources) + var/sheets = round(stored_material[material]/R.resources[material]) + if(isnull(max_sheets) || max_sheets > sheets) + max_sheets = sheets - if(!isnull(stored_material[material]) && stored_material[material] < R.resources[material]) - can_make = 0 - if(!comma) - comma = 1 - else - material_string += ", " - material_string += "[R.resources[material]] [material]" - material_string += ".
" + if(!isnull(stored_material[material]) && stored_material[material] < R.resources[material]) + can_make = 0 + if(!comma) + comma = 1 + else + material_string += ", " + material_string += "[R.resources[material]] [material]" + material_string += ".
" - //Build list of multipliers for sheets. - if(R.is_stack) - if(max_sheets && max_sheets > 0) - multiplier_string += "
" - for(var/i = 5;i 0) + multiplier_string += "
" + for(var/i = 5;i*" : ""][can_make ? "" : ""][R.name][can_make ? "" : ""][R.hidden ? "*" : ""][multiplier_string]
" + dat += "" dat += "
[material_string]
[R.hidden ? "*" : ""][can_make ? "" : ""][R.name][can_make ? "" : ""][R.hidden ? "*" : ""][multiplier_string][material_string]

" //Hacking. @@ -198,14 +199,14 @@ if(!choice) return show_category = choice - if(href_list["make"] && autolathe_recipes) + if(href_list["make"] && machine_recipes) var/index = text2num(href_list["make"]) var/multiplier = text2num(href_list["multiplier"]) var/datum/autolathe/recipe/making - if(index > 0 && index <= autolathe_recipes.len) - making = autolathe_recipes[index] + if(index > 0 && index <= machine_recipes.len) + making = machine_recipes[index] //Exploit detection, not sure if necessary after rewrite. if(!making || multiplier < 0 || multiplier > 100) @@ -252,23 +253,6 @@ ..() wires = new(src) - //Create global autolathe recipe list if it hasn't been made already. - if(isnull(autolathe_recipes)) - autolathe_recipes = list() - autolathe_categories = list() - for(var/R in typesof(/datum/autolathe/recipe)-/datum/autolathe/recipe) - var/datum/autolathe/recipe/recipe = new R - autolathe_recipes += recipe - autolathe_categories |= recipe.category - - var/obj/item/I = new recipe.path - if(I.matter && !recipe.resources) //This can be overidden in the datums. - recipe.resources = list() - for(var/material in I.matter) - if(!isnull(storage_capacity[material])) - recipe.resources[material] = round(I.matter[material]*1.25) // More expensive to produce than they are to recycle. - del(I) - //Create parts for lathe. component_parts = list() component_parts += new /obj/item/weapon/circuitboard/autolathe(src) @@ -280,6 +264,10 @@ RefreshParts() +/obj/machinery/autolathe/initialize() + ..() + machine_recipes = autolathe_recipes + //Updates overall lathe storage size. /obj/machinery/autolathe/RefreshParts() ..() diff --git a/code/game/machinery/autolathe_datums.dm b/code/game/machinery/autolathe_datums.dm index b94f42d0c6f..996daa2d10b 100644 --- a/code/game/machinery/autolathe_datums.dm +++ b/code/game/machinery/autolathe_datums.dm @@ -1,6 +1,23 @@ /var/global/list/autolathe_recipes /var/global/list/autolathe_categories +/proc/populate_lathe_recipes() + + //Create global autolathe recipe list if it hasn't been made already. + autolathe_recipes = list() + autolathe_categories = list() + for(var/R in typesof(/datum/autolathe/recipe)-/datum/autolathe/recipe) + var/datum/autolathe/recipe/recipe = new R + autolathe_recipes += recipe + autolathe_categories |= recipe.category + + var/obj/item/I = new recipe.path + if(I.matter && !recipe.resources) //This can be overidden in the datums. + recipe.resources = list() + for(var/material in I.matter) + recipe.resources[material] = round(I.matter[material]*1.25) // More expensive to produce than they are to recycle. + del(I) + /datum/autolathe/recipe var/name = "object" var/path diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 6825c07df3c..945390332fa 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -122,7 +122,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if(!(R_ADMIN & X.holder.rights)) if(X.is_afk()) admin_number_afk++ - if(R_ADMIN & X.holder.rights) // just admins here please + if(R_ADMIN | R_MOD & X.holder.rights) // just admins here please adminholders += X if(X.is_afk()) admin_number_afk++ @@ -148,7 +148,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if("Bug report") if(debugholders.len) for(var/client/X in debugholders) - if(R_ADMIN & X.holder.rights) // Admins get every button & special highlights in theirs + if(R_ADMIN | R_MOD & X.holder.rights) // Admins get every button & special highlights in theirs if(X.prefs.toggles & SOUND_ADMINHELP) X << 'sound/effects/adminhelp.ogg' X << msg diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index b9fcefbddec..2e627330a06 100755 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -8,6 +8,7 @@ var/speech_verb = "says" // 'says', 'hisses', 'farts'. var/ask_verb = "asks" // Used when sentence ends in a ? var/exclaim_verb = "exclaims" // Used when sentence ends in a ! + var/whisper_verb // Optional. When not specified speech_verb + quietly/softly is used instead. var/signlang_verb = list() // list of emotes that might be displayed if this language has NONVERBAL or SIGNLANG flags var/colour = "body" // CSS style to use for strings in this language. var/key = "x" // Character used to speak in language eg. :o for Unathi. @@ -97,9 +98,11 @@ name = "Galactic Common" desc = "The common galactic tongue." speech_verb = "says" + whisper_verb = "whispers" key = "0" flags = RESTRICTED +//TODO flag certain languages to use the mob-type specific say_quote and then get rid of these. /datum/language/common/get_spoken_verb(var/msg_end) switch(msg_end) if("!") @@ -111,10 +114,20 @@ /datum/language/human name = "Sol Common" desc = "A bastardized hybrid of informal English and elements of Mandarin Chinese; the common language of the Sol system." + speech_verb = "says" + whisper_verb = "whispers" colour = "rough" key = "1" flags = RESTRICTED +/datum/language/human/get_spoken_verb(var/msg_end) + switch(msg_end) + if("!") + return pick("exclaims","shouts","yells") //TODO: make the basic proc handle lists of verbs. + if("?") + return ask_verb + return speech_verb + // Galactic common languages (systemwide accepted standards). /datum/language/trader name = "Tradeband" diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm index 58a8bb66d5e..dc81d3d1b5b 100644 --- a/code/modules/mob/living/carbon/human/whisper.dm +++ b/code/modules/mob/living/carbon/human/whisper.dm @@ -41,8 +41,17 @@ var/watching_range = 5 var/italics = 1 + var/not_heard //the message displayed to people who could not hear the whispering if (speaking) - verb = speaking.speech_verb + pick(" quietly", " softly") + if (speaking.whisper_verb) + verb = speaking.whisper_verb + not_heard = "[verb] something" + else + var/adverb = pick("quietly", "softly") + verb = "[speaking.speech_verb] [adverb]" + not_heard = "[verb] something [adverb]" + else + not_heard = "[verb] something" //TODO get rid of the null language and just prevent speech if language is null message = capitalize(trim(message)) @@ -144,6 +153,6 @@ M.hear_say(new_message, verb, speaking, alt_name, italics, src) if (watching.len) - var/rendered = "[src.name] whispers something." + var/rendered = "[src.name] [not_heard]." for (var/mob/M in watching) M.show_message(rendered, 2) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 8f2360fe136..fba2447b40a 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -39,21 +39,13 @@ greaterform = "Unathi" uni_append = list(0x044,0xC5D) // 044C5D -/mob/living/carbon/monkey/initialize() - if (!species) - species = all_species[greaterform] - add_language(species.language) - /mob/living/carbon/monkey/New() var/datum/reagents/R = new/datum/reagents(1000) reagents = R R.my_atom = src - //Ensure that the all_species list has been initialized. - //If not then this must be round-start and initialize() will - //be called directly by the master controller, later. - if (ticker && ticker.current_state >= GAME_STATE_SETTING_UP) - initialize() + species = all_species[greaterform] + add_language(species.language) if(name == initial(name)) //To stop Pun-Pun becoming generic. name = "[name] ([rand(1, 1000)])" diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 20724db1e0b..98285e04e01 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -1531,12 +1531,11 @@ if (istype(M, /mob/living/carbon/human)) //Do not try to understand. var/obj/item/weapon/surprise = new/obj/item/weapon(M) - var/mob/living/carbon/monkey/ook = new monkey_type(null) //no other way to get access to the vars, alas - surprise.icon = ook.icon - surprise.icon_state = ook.icon_state - surprise.name = "malformed [ook.name]" - surprise.desc = "Looks like \a very deformed [ook.name], a little small for its kind. It shows no signs of life." - del(ook) //rip nullspace monkey + var/mob/ook = monkey_type + surprise.icon = initial(ook.icon) + surprise.icon_state = initial(ook.icon_state) + surprise.name = "malformed [initial(ook.name)]" + surprise.desc = "Looks like \a very deformed [initial(ook.name)], a little small for its kind. It shows no signs of life." surprise.transform *= 0.6 surprise.add_blood(M) var/mob/living/carbon/human/H = M @@ -1597,7 +1596,7 @@ /obj/item/weapon/reagent_containers/food/snacks/monkeycube/neaeracube name = "neaera cube" - monkey_type ="skrell" + monkey_type = /mob/living/carbon/monkey/skrell /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube name = "neaera cube" monkey_type =/mob/living/carbon/monkey/skrell diff --git a/code/world.dm b/code/world.dm index 6cf0bb4f18f..e8cfc45ba9f 100644 --- a/code/world.dm +++ b/code/world.dm @@ -1,3 +1,15 @@ +var/global/datum/global_init/init = new () + +/* + Pre-map initialization stuff should go here. +*/ +/datum/global_init/New() + + makeDatumRefLists() + + del(src) + + /world mob = /mob/new_player turf = /turf/space @@ -46,6 +58,9 @@ // due to this list not being instantiated. populate_seed_list() + // Create autolathe recipes, as above. + populate_lathe_recipes() + master_controller = new /datum/controller/game_controller() spawn(1) master_controller.setup() diff --git a/interface/skin.dmf b/interface/skin.dmf index 88e08960fe3..7d8485e6ec7 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -1424,7 +1424,7 @@ window "outputwindow" visited-color = #ff00ff style = ".system {color:#ff0000;}" enable-http-images = false - max-lines = 1000 + max-lines = 0 image = "" window "rpane"