diff --git a/README.md b/README.md index 6f530de611..f7cb9e497a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # polaris -Links pending. +[Forums](http://ss13polaris.com/forums/) - [Wiki](http://ss13polaris.com/wiki/doku.php) Polaris is a fork of the Baystation12 code branch for the game Spacestation13. @@ -44,7 +44,7 @@ First-time installation should be fairly straightforward. First, you'll need BY This is a sourcecode-only release, so the next step is to compile the server files. Open polaris.dme by double-clicking it, open the Build menu, and click compile. This'll take a little while, and if everything's done right you'll get a message like this: saving polaris.dmb (DEBUG mode) - + polaris.dmb - 0 errors, 0 warnings If you see any errors or warnings, something has gone wrong - possibly a corrupt download or the files extracted wrong, or a code issue on the main repo. Ask on IRC. diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index f1d1b94aac..a7b9dc0309 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -51,6 +51,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/storage/box/swabs, /obj/item/weapon/storage/box/swabs, /obj/item/weapon/storage/box/slides, + /obj/item/device/uv_light, /obj/item/weapon/reagent_containers/spray/luminol) cost = 30 containertype = /obj/structure/closet/crate @@ -152,6 +153,17 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Party equipment" group = "Hospitality" +/datum/supply_packs/lasertag + name = "Lasertag equipment" + contains = list(/obj/item/weapon/gun/energy/lasertag/red, + /obj/item/clothing/suit/redtag, + /obj/item/weapon/gun/energy/lasertag/blue, + /obj/item/clothing/suit/bluetag) + containertype = /obj/structure/closet + containername = "Lasertag Closet" + group = "Hospitality" + cost = 20 + /datum/supply_packs/internals name = "Internals crate" contains = list(/obj/item/clothing/mask/gas, @@ -1093,7 +1105,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee group = "Hospitality" /datum/supply_packs/randomised/costume - num_contained = 2 + num_contained = 3 contains = list(/obj/item/clothing/suit/pirate, /obj/item/clothing/suit/judgerobe, /obj/item/clothing/suit/wcoat, @@ -1148,6 +1160,17 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Formalwear for the best occasions." group = "Miscellaneous" +/datum/supply_packs/randomised/card_packs + num_contained = 5 + contains = list(/obj/item/weapon/pack/cardemon, + /obj/item/weapon/pack/spaceball, + /obj/item/weapon/deck/holder) + name = "Trading Card Crate" + cost = 10 + containertype = /obj/structure/closet/crate + containername = "cards crate" + group = "Miscellaneous" + /datum/supply_packs/shield_gen contains = list(/obj/item/weapon/circuitboard/shield_gen) name = "Bubble shield generator circuitry" @@ -1437,7 +1460,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Actor hats crate" containertype = /obj/structure/closet cost = 10 - num_contained = 2 + num_contained = 3 contains = list(/obj/item/clothing/head/redcoat, /obj/item/clothing/head/mailman, /obj/item/clothing/head/plaguedoctorhat, @@ -1469,7 +1492,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Pretty dress locker" containertype = /obj/structure/closet cost = 15 - num_contained = 1 + num_contained = 3 contains = list(/obj/item/clothing/under/wedding/bride_orange, /obj/item/clothing/under/wedding/bride_purple, /obj/item/clothing/under/wedding/bride_blue, @@ -1701,6 +1724,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/clothing/suit/storage/forensics/blue, /obj/item/clothing/under/det/corporate, /obj/item/clothing/under/det/corporate, + /obj/item/clothing/accessory/badge/detective, + /obj/item/clothing/accessory/badge/detective, /obj/item/clothing/gloves/black, /obj/item/clothing/gloves/black) cost = 20 @@ -1715,6 +1740,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/clothing/head/helmet, /obj/item/weapon/cartridge/security, /obj/item/clothing/accessory/badge/holo, + /obj/item/clothing/accessory/badge/holo/cord, /obj/item/device/radio/headset/headset_sec, /obj/item/weapon/storage/belt/security, /obj/item/device/flash, @@ -1749,6 +1775,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/clothing/glasses/sunglasses/sechud, /obj/item/taperoll/police, /obj/item/device/hailer, + /obj/item/clothing/accessory/badge/warden, /obj/item/weapon/storage/box/flashbangs, /obj/item/weapon/storage/belt/security, /obj/item/weapon/reagent_containers/spray/pepper, @@ -1774,6 +1801,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/storage/belt/security, /obj/item/device/flash, /obj/item/device/hailer, + /obj/item/clothing/accessory/badge/hos, /obj/item/clothing/accessory/holster/waist, /obj/item/weapon/melee/telebaton, /obj/item/weapon/shield/riot/tele, @@ -2174,6 +2202,64 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/storage/box/masks, /obj/item/weapon/storage/box/gloves) cost = 50 + containertype = "/obj/structure/closet/crate/secure" containername = "Medical biohazard equipment" access = access_medical_equip - group = "Medical" \ No newline at end of file + group = "Medical" + +/datum/supply_packs/portablefreezers + name = "Portable freezers crate" + contains = list(/obj/item/weapon/storage/box/freezer, + /obj/item/weapon/storage/box/freezer, + /obj/item/weapon/storage/box/freezer, + /obj/item/weapon/storage/box/freezer, + /obj/item/weapon/storage/box/freezer, + /obj/item/weapon/storage/box/freezer, + /obj/item/weapon/storage/box/freezer) + cost = 25 + containertype = "/obj/structure/closet/crate/secure" + containername = "Portable freezers" + access = access_medical_equip + group = "Medical" + +/datum/supply_packs/minergear + name = "Shaft miner equipment" + contains = list(/obj/item/weapon/storage/backpack/industrial, + /obj/item/weapon/storage/backpack/satchel_eng, + /obj/item/clothing/suit/storage/hooded/wintercoat/miner, + /obj/item/device/radio/headset/headset_cargo, + /obj/item/clothing/under/rank/miner, + /obj/item/clothing/gloves/black, + /obj/item/clothing/shoes/black, + /obj/item/device/analyzer, + /obj/item/weapon/storage/bag/ore, + /obj/item/device/flashlight/lantern, + /obj/item/weapon/shovel, + /obj/item/weapon/pickaxe, + /obj/item/weapon/mining_scanner, + /obj/item/clothing/glasses/material, + /obj/item/clothing/glasses/meson) + cost = 15 + containertype = "/obj/structure/closet/crate/secure" + containername = "Shaft miner equipment" + access = access_mining + group = "Supply" + +/datum/supply_packs/chaplaingear + name = "Chaplain equipment" + contains = list(/obj/item/clothing/under/rank/chaplain, + /obj/item/clothing/shoes/black, + /obj/item/clothing/suit/nun, + /obj/item/clothing/head/nun_hood, + /obj/item/clothing/suit/chaplain_hoodie, + /obj/item/clothing/head/chaplain_hood, + /obj/item/clothing/suit/holidaypriest, + /obj/item/clothing/under/wedding/bride_white, + /obj/item/weapon/storage/backpack/cultpack, + /obj/item/weapon/storage/fancy/candle_box, + /obj/item/weapon/storage/fancy/candle_box, + /obj/item/weapon/storage/fancy/candle_box) + cost = 10 + containertype = "/obj/structure/closet/crate" + containername = "Chaplain equipment crate" + group = "Miscellaneous" \ No newline at end of file diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index d4633e3f07..311376e1fd 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -174,6 +174,7 @@ w_class = 3.0 origin_tech = list(TECH_MATERIAL = 1) var/breakouttime = 300 //Deciseconds = 30s = 0.5 minute + sprite_sheets = list("Seromi" = 'icons/mob/species/seromi/handcuffs.dmi') /obj/item/weapon/caution desc = "Caution! Wet Floor!" diff --git a/code/game/gamemodes/changeling/generic_equip_procs.dm b/code/game/gamemodes/changeling/generic_equip_procs.dm index c1af73caea..5569db8512 100644 --- a/code/game/gamemodes/changeling/generic_equip_procs.dm +++ b/code/game/gamemodes/changeling/generic_equip_procs.dm @@ -49,110 +49,60 @@ var/mob/living/carbon/human/M = src var/success = 0 -/* - slot_back,\ - slot_wear_id,\ - slot_w_uniform,\ - slot_wear_suit,\ - slot_wear_mask,\ - slot_head,\ - slot_shoes,\ - slot_gloves,\ - slot_l_ear,\ - slot_r_ear,\ - slot_glasses,\ - slot_belt,\ - slot_s_store,\ - slot_tie,\ - slot_l_store,\ - slot_r_store\ - ) -*/ + //First, check if we're already wearing the armor, and if so, take it off. -/* - if(istype(M.wear_suit, armor_type) || istype(M.head, helmet_type)) - M.visible_message("[M] casts off their [M.wear_suit.name]!", - "We cast off our [M.wear_suit.name]", - "You hear the organic matter ripping and tearing!") - qdel(M.wear_suit) - qdel(M.head) - M.update_inv_wear_suit() - M.update_inv_head() - M.update_hair() - return 1 -*/ if(M.mind.changeling.armor_deployed) - if(M.head) - for(var/obj/item/clothing/head/head_slot in stuff_to_equip) - if(istype(M.head,head_slot)) - qdel(M.head) - success = 1 - break + if(M.head && stuff_to_equip["head"]) + if(istype(M.head, stuff_to_equip["head"])) + qdel(M.head) + success = 1 - if(M.wear_id) - for(var/obj/item/weapon/card/id/id_slot in stuff_to_equip) - if(istype(M.wear_id,id_slot)) - qdel(M.wear_id) - success = 1 - break + if(M.wear_id && stuff_to_equip["wear_id"]) + if(istype(M.wear_id, stuff_to_equip["wear_id"])) + qdel(M.wear_id) + success = 1 - if(M.wear_suit) - for(var/obj/item/clothing/suit/suit_slot in stuff_to_equip) - if(istype(M.wear_suit,suit_slot)) - qdel(M.wear_suit) - success = 1 - break + if(M.wear_suit && stuff_to_equip["wear_suit"]) + if(istype(M.wear_suit, stuff_to_equip["wear_suit"])) + qdel(M.wear_suit) + success = 1 - if(M.gloves) - for(var/obj/item/clothing/gloves/gloves_slot in stuff_to_equip) - if(istype(M.gloves,gloves_slot)) - qdel(M.gloves) - success = 1 - break - if(M.shoes) - for(var/obj/item/clothing/shoes/shoes_slot in stuff_to_equip) - if(istype(M.shoes,shoes_slot)) - qdel(M.shoes) - success = 1 - break + if(M.gloves && stuff_to_equip["gloves"]) + if(istype(M.gloves, stuff_to_equip["gloves"])) + qdel(M.gloves) + success = 1 + if(M.shoes && stuff_to_equip["shoes"]) + if(istype(M.shoes, stuff_to_equip["shoes"])) + qdel(M.shoes) + success = 1 - if(M.belt) - for(var/obj/item/weapon/storage/belt/belt_slot in stuff_to_equip) - if(istype(M.belt,belt_slot)) - qdel(M.belt) - success = 1 - break + if(M.belt && stuff_to_equip["belt"]) + if(istype(M.belt, stuff_to_equip["belt"])) + qdel(M.belt) + success = 1 - if(M.glasses) - for(var/obj/item/clothing/glasses/glasses_slot in stuff_to_equip) - if(istype(M.glasses,glasses_slot)) - qdel(M.glasses) - success = 1 - break + if(M.glasses && stuff_to_equip["glasses"]) + if(istype(M.glasses, stuff_to_equip["glasses"])) + qdel(M.glasses) + success = 1 - if(M.wear_mask) - for(var/obj/item/clothing/mask/mask_slot in stuff_to_equip) - if(istype(M.wear_mask,mask_slot)) - qdel(M.wear_mask) - success = 1 - break + if(M.wear_mask && stuff_to_equip["wear_mask"]) + if(istype(M.wear_mask, stuff_to_equip["wear_mask"])) + qdel(M.wear_mask) + success = 1 - if(M.back) - for(var/obj/item/weapon/storage/backpack/backpack_slot in stuff_to_equip) - if(istype(M.back,backpack_slot)) - for(var/atom/movable/AM in M.back.contents) //Dump whatever's in the bag before deleting. - AM.forceMove(src.loc) - qdel(M.back) - success = 1 - break + if(M.back && stuff_to_equip["back"]) + if(istype(M.back, stuff_to_equip["back"])) + for(var/atom/movable/AM in M.back.contents) //Dump whatever's in the bag before deleting. + AM.forceMove(src.loc) + qdel(M.back) + success = 1 - if(M.w_uniform) - for(var/obj/item/clothing/under/uniform_slot in stuff_to_equip) - if(istype(M.w_uniform,uniform_slot)) - qdel(M.w_uniform) - success = 1 - break + if(M.w_uniform && stuff_to_equip["w_uniform"]) + if(istype(M.w_uniform, stuff_to_equip["w_uniform"])) + qdel(M.w_uniform) + success = 1 if(success) playsound(src, 'sound/effects/splat.ogg', 30, 1) @@ -167,115 +117,106 @@ M << "We begin growing our new equipment..." var/list/grown_items_list = list() - if(!M.head) - for(var/obj/item/clothing/head/head_slot in stuff_to_equip) - var/I = new head_slot.type - M.equip_to_slot_or_del(I, slot_head) - grown_items_list.Add("a helmet") - playsound(src, 'sound/effects/blobattack.ogg', 30, 1) - M.update_icons() - success = 1 - sleep(20) - break - if(!M.w_uniform) - for(var/obj/item/clothing/under/uniform_slot in stuff_to_equip) - var/I = new uniform_slot.type - M.equip_to_slot_or_del(I, slot_w_uniform) - grown_items_list.Add("a uniform") - playsound(src, 'sound/effects/blobattack.ogg', 30, 1) - M.update_icons() - success = 1 - sleep(20) - break + var/t = stuff_to_equip["head"] + if(!M.head && t) + var/I = new t + M.equip_to_slot_or_del(I, slot_head) + grown_items_list.Add("a helmet") + playsound(src, 'sound/effects/blobattack.ogg', 30, 1) + M.update_icons() + success = 1 + sleep(20) - if(!M.gloves) - for(var/obj/item/clothing/gloves/gloves_slot in stuff_to_equip) - var/I = new gloves_slot.type - M.equip_to_slot_or_del(I, slot_gloves) - grown_items_list.Add("some gloves") - playsound(src, 'sound/effects/splat.ogg', 30, 1) - M.update_icons() - success = 1 - sleep(20) - break + t = stuff_to_equip["w_uniform"] + if(!M.w_uniform && t) + var/I = new t + M.equip_to_slot_or_del(I, slot_w_uniform) + grown_items_list.Add("a uniform") + playsound(src, 'sound/effects/blobattack.ogg', 30, 1) + M.update_icons() + success = 1 + sleep(20) - if(!M.shoes) - for(var/obj/item/clothing/shoes/shoes_slot in stuff_to_equip) - var/I = new shoes_slot.type - M.equip_to_slot_or_del(I, slot_shoes) - grown_items_list.Add("shoes") - playsound(src, 'sound/effects/splat.ogg', 30, 1) - M.update_icons() - success = 1 - sleep(20) - break + t = stuff_to_equip["gloves"] + if(!M.gloves && t) + var/I = new t + M.equip_to_slot_or_del(I, slot_gloves) + grown_items_list.Add("some gloves") + playsound(src, 'sound/effects/splat.ogg', 30, 1) + M.update_icons() + success = 1 + sleep(20) - if(!M.belt) - for(var/obj/item/weapon/storage/belt/belt_slot in stuff_to_equip) - var/I = new belt_slot.type - M.equip_to_slot_or_del(I, slot_belt) - grown_items_list.Add("a belt") - playsound(src, 'sound/effects/splat.ogg', 30, 1) - M.update_icons() - success = 1 - sleep(20) - break + t = stuff_to_equip["shoes"] + if(!M.shoes && t) + var/I = new t + M.equip_to_slot_or_del(I, slot_shoes) + grown_items_list.Add("shoes") + playsound(src, 'sound/effects/splat.ogg', 30, 1) + M.update_icons() + success = 1 + sleep(20) - if(!M.glasses) - for(var/obj/item/clothing/glasses/glasses_slot in stuff_to_equip) - var/I = new glasses_slot.type - M.equip_to_slot_or_del(I, slot_glasses) - grown_items_list.Add("some glasses") - playsound(src, 'sound/effects/splat.ogg', 30, 1) - M.update_icons() - success = 1 - sleep(20) - break + t = stuff_to_equip["belt"] + if(!M.belt && t) + var/I = new t + M.equip_to_slot_or_del(I, slot_belt) + grown_items_list.Add("a belt") + playsound(src, 'sound/effects/splat.ogg', 30, 1) + M.update_icons() + success = 1 + sleep(20) - if(!M.wear_mask) - for(var/obj/item/clothing/mask/mask_slot in stuff_to_equip) - var/I = new mask_slot.type - M.equip_to_slot_or_del(I, slot_wear_mask) - grown_items_list.Add("a mask") - playsound(src, 'sound/effects/splat.ogg', 30, 1) - M.update_icons() - success = 1 - sleep(20) - break + t = stuff_to_equip["glasses"] + if(!M.glasses && t) + var/I = new t + M.equip_to_slot_or_del(I, slot_glasses) + grown_items_list.Add("some glasses") + playsound(src, 'sound/effects/splat.ogg', 30, 1) + M.update_icons() + success = 1 + sleep(20) - if(!M.back) - for(var/obj/item/weapon/storage/backpack/backpack_slot in stuff_to_equip) - var/I = new backpack_slot.type - M.equip_to_slot_or_del(I, slot_back) - grown_items_list.Add("a backpack") - playsound(src, 'sound/effects/blobattack.ogg', 30, 1) - M.update_icons() - success = 1 - sleep(20) - break + t = stuff_to_equip["wear_mask"] + if(!M.wear_mask && t) + var/I = new t + M.equip_to_slot_or_del(I, slot_wear_mask) + grown_items_list.Add("a mask") + playsound(src, 'sound/effects/splat.ogg', 30, 1) + M.update_icons() + success = 1 + sleep(20) - if(!M.wear_suit) - for(var/obj/item/clothing/suit/suit_slot in stuff_to_equip) - var/I = new suit_slot.type - M.equip_to_slot_or_del(I, slot_wear_suit) - grown_items_list.Add("an exosuit") - playsound(src, 'sound/effects/blobattack.ogg', 30, 1) - M.update_icons() - success = 1 - sleep(20) - break + t = stuff_to_equip["back"] + if(!M.back && t) + var/I = new t + M.equip_to_slot_or_del(I, slot_back) + grown_items_list.Add("a backpack") + playsound(src, 'sound/effects/blobattack.ogg', 30, 1) + M.update_icons() + success = 1 + sleep(20) - if(!M.wear_id) - for(var/obj/item/weapon/card/id/id_slot in stuff_to_equip) - var/I = new id_slot.type - M.equip_to_slot_or_del(I, slot_wear_id) - grown_items_list.Add("an ID card") - playsound(src, 'sound/effects/splat.ogg', 30, 1) - M.update_icons() - success = 1 - sleep(20) - break + t = stuff_to_equip["wear_suit"] + if(!M.wear_suit && t) + var/I = new t + M.equip_to_slot_or_del(I, slot_wear_suit) + grown_items_list.Add("an exosuit") + playsound(src, 'sound/effects/blobattack.ogg', 30, 1) + M.update_icons() + success = 1 + sleep(20) + + t = stuff_to_equip["wear_id"] + if(!M.wear_id && t) + var/I = new t + M.equip_to_slot_or_del(I, slot_wear_id) + grown_items_list.Add("an ID card") + playsound(src, 'sound/effects/splat.ogg', 30, 1) + M.update_icons() + success = 1 + sleep(20) var/feedback = english_list(grown_items_list, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" ) diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm index 0c13276f12..6adead4b89 100644 --- a/code/game/gamemodes/changeling/powers/absorb.dm +++ b/code/game/gamemodes/changeling/powers/absorb.dm @@ -98,24 +98,9 @@ changeling.max_geneticpoints += 5 src << "We absorbed another changeling, and we grow stronger. Our genomes increase." -/* - if(T.mind.changeling.purchasedpowers) - for(var/datum/power/changeling/Tp in T.mind.changeling.purchasedpowers) - if(Tp in changeling.purchasedpowers) - continue - else - changeling.purchasedpowers += Tp - - if(!Tp.isVerb) - call(Tp.verbpath)() - else - src.make_changeling() - - changeling.chem_charges += T.mind.changeling.chem_charges - changeling.geneticpoints += T.mind.changeling.geneticpoints -*/ T.mind.changeling.chem_charges = 0 - T.mind.changeling.geneticpoints = 0 + T.mind.changeling.geneticpoints = -1 + T.mind.changeling.max_geneticpoints = -1 //To prevent revival. T.mind.changeling.absorbedcount = 0 changeling.absorbedcount++ diff --git a/code/game/gamemodes/changeling/powers/fabricate_clothing.dm b/code/game/gamemodes/changeling/powers/fabricate_clothing.dm index affe4b1ae7..0bf73474eb 100644 --- a/code/game/gamemodes/changeling/powers/fabricate_clothing.dm +++ b/code/game/gamemodes/changeling/powers/fabricate_clothing.dm @@ -1,14 +1,14 @@ var/global/list/changeling_fabricated_clothing = list( - new /obj/item/clothing/under/chameleon/changeling, - new /obj/item/clothing/head/chameleon/changeling, - new /obj/item/clothing/suit/chameleon/changeling, - new /obj/item/clothing/shoes/chameleon/changeling, - new /obj/item/clothing/gloves/chameleon/changeling, - new /obj/item/clothing/mask/chameleon/changeling, - new /obj/item/clothing/glasses/chameleon/changeling, - new /obj/item/weapon/storage/backpack/chameleon/changeling, - new /obj/item/weapon/storage/belt/chameleon/changeling, - new /obj/item/weapon/card/id/syndicate/changeling + "w_uniform" = /obj/item/clothing/under/chameleon/changeling, + "head" = /obj/item/clothing/head/chameleon/changeling, + "wear_suit" = /obj/item/clothing/suit/chameleon/changeling, + "shoes" = /obj/item/clothing/shoes/chameleon/changeling, + "gloves" = /obj/item/clothing/gloves/chameleon/changeling, + "wear_mask" = /obj/item/clothing/mask/chameleon/changeling, + "glasses" = /obj/item/clothing/glasses/chameleon/changeling, + "back" = /obj/item/weapon/storage/backpack/chameleon/changeling, + "belt" = /obj/item/weapon/storage/belt/chameleon/changeling, + "wear_id" = /obj/item/weapon/card/id/syndicate/changeling ) /datum/power/changeling/fabricate_clothing diff --git a/code/game/gamemodes/changeling/powers/fake_death.dm b/code/game/gamemodes/changeling/powers/fake_death.dm index 3c273b3953..9d631907ba 100644 --- a/code/game/gamemodes/changeling/powers/fake_death.dm +++ b/code/game/gamemodes/changeling/powers/fake_death.dm @@ -16,6 +16,11 @@ return var/mob/living/carbon/C = src + + if(changeling.max_geneticpoints < 0) //Absorbed by another ling + src << "You have no genomes, not even your own, and cannot regenerate." + return 0 + if(!C.stat && alert("Are we sure we wish to fake our death?",,"Yes","No") == "No")//Confirmation for living changelings if they want to fake their death return C << "We will attempt to regenerate our form." @@ -32,25 +37,6 @@ //The ling will now be able to choose when to revive src.verbs += /mob/proc/changeling_revive src << "We are ready to rise. Use the Revive verb when you are ready." - /* - // charge the changeling chemical cost for stasis - changeling.chem_charges -= 20 - - // restore us to health - C.revive() - - // remove our fake death flag - C.status_flags &= ~(FAKEDEATH) - - // let us move again - C.update_canmove() - - // re-add out changeling powers - C.make_changeling() - - // sending display messages - C << "We have regenerated." - */ feedback_add_details("changeling_powers","FD") return 1 \ No newline at end of file diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm index f67df60f2a..7dc2310f78 100644 --- a/code/game/gamemodes/changeling/powers/revive.dm +++ b/code/game/gamemodes/changeling/powers/revive.dm @@ -8,6 +8,10 @@ if(!changeling) return 0 + if(changeling.max_geneticpoints < 0) //Absorbed by another ling + src << "You have no genomes, not even your own, and cannot revive." + return 0 + if(src.stat == DEAD) dead_mob_list -= src living_mob_list += src @@ -21,6 +25,8 @@ C.SetStunned(0) C.SetWeakened(0) C.radiation = 0 + C.halloss = 0 + C.shock_stage = 0 //Pain C.heal_overall_damage(C.getBruteLoss(), C.getFireLoss()) C.reagents.clear_reagents() C.restore_all_organs(ignore_prosthetic_prefs=1) //Covers things like fractures and other things not covered by the above. diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 67f5581576..01506f413b 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -1,19 +1,9 @@ -/obj/machinery/computer/arcade - name = "arcade machine" - desc = "Does not support pinball." - icon = 'icons/obj/computer.dmi' +/obj/machinery/computer/arcade/ + name = "random arcade" + desc = "random arcade machine" icon_state = "arcade" icon_keyboard = null icon_screen = "invaders" - circuit = /obj/item/weapon/circuitboard/arcade - var/enemy_name = "Space Villian" - var/temp = "Winners Don't Use Spacedrugs" //Temporary message, for attack messages, etc - var/player_hp = 30 //Player health/attack points - var/player_mp = 10 - var/enemy_hp = 45 //Enemy health/attack points - var/enemy_mp = 20 - var/gameover = 0 - var/blocked = 0 //Player cannot attack/heal while set var/list/prizes = list( /obj/item/weapon/storage/box/snappops = 2, /obj/item/toy/blink = 2, /obj/item/clothing/under/syndicate/tacticool = 2, @@ -40,28 +30,84 @@ /obj/item/toy/cultsword = 1 ) -/obj/machinery/computer/arcade +/obj/machinery/computer/arcade/New() + ..() + // If it's a generic arcade machine, pick a random arcade + // circuit board for it and make the new machine + if(!circuit) + var/choice = pick(typesof(/obj/item/weapon/circuitboard/arcade) - /obj/item/weapon/circuitboard/arcade) + var/obj/item/weapon/circuitboard/CB = new choice() + new CB.build_path(loc, CB) + qdel(src) + +/obj/machinery/computer/arcade/proc/prizevend() + if(!contents.len) + var/prizeselect = pickweight(prizes) + new prizeselect(src.loc) + + if(istype(prizeselect, /obj/item/clothing/suit/syndicatefake)) //Helmet is part of the suit + new /obj/item/clothing/head/syndicatefake(src.loc) + + else + var/atom/movable/prize = pick(contents) + prize.loc = src.loc + +/obj/machinery/computer/arcade/attack_ai(mob/user as mob) + return src.attack_hand(user) + + +/obj/machinery/computer/arcade/emp_act(severity) + if(stat & (NOPOWER|BROKEN)) + ..(severity) + return + var/empprize = null + var/num_of_prizes = 0 + switch(severity) + if(1) + num_of_prizes = rand(1,4) + if(2) + num_of_prizes = rand(0,2) + for(num_of_prizes; num_of_prizes > 0; num_of_prizes--) + empprize = pickweight(prizes) + new empprize(src.loc) + + ..(severity) + +/////////////////// +// BATTLE HERE // +/////////////////// + +/obj/machinery/computer/arcade/battle + name = "arcade machine" + desc = "Does not support Pinball." + icon_state = "arcade" + circuit = /obj/item/weapon/circuitboard/arcade/battle + var/enemy_name = "Space Villian" + var/temp = "Winners don't use space drugs" //Temporary message, for attack messages, etc + var/player_hp = 30 //Player health/attack points + var/player_mp = 10 + var/enemy_hp = 45 //Enemy health/attack points + var/enemy_mp = 20 + var/gameover = 0 + var/blocked = 0 //Player cannot attack/heal while set var/turtle = 0 -/obj/machinery/computer/arcade/New() +/obj/machinery/computer/arcade/battle/New() ..() var/name_action var/name_part1 var/name_part2 - name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ") + name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ", "Ban ") name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ") - name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn") + name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn", "Bloopers") src.enemy_name = replacetext((name_part1 + name_part2), "the ", "") src.name = (name_action + name_part1 + name_part2) -/obj/machinery/computer/arcade/attack_ai(mob/user as mob) - return src.attack_hand(user) - -/obj/machinery/computer/arcade/attack_hand(mob/user as mob) +/obj/machinery/computer/arcade/battle/attack_hand(mob/user as mob) if(..()) return user.set_machine(src) @@ -85,7 +131,7 @@ onclose(user, "arcade") return -/obj/machinery/computer/arcade/Topic(href, href_list) +/obj/machinery/computer/arcade/battle/Topic(href, href_list) if(..()) return 1 @@ -150,7 +196,7 @@ src.updateUsrDialog() return -/obj/machinery/computer/arcade/proc/arcade_action() +/obj/machinery/computer/arcade/battle/proc/arcade_action() if ((src.enemy_mp <= 0) || (src.enemy_hp <= 0)) if(!gameover) src.gameover = 1 @@ -166,19 +212,11 @@ emagged = 0 else if(!contents.len) feedback_inc("arcade_win_normal") - var/prizeselect = pickweight(prizes) - new prizeselect(src.loc) - - if(istype(prizeselect, /obj/item/weapon/gun/projectile/revolver/capgun)) //Ammo comes with the gun - new /obj/item/projectile/bullet/pistol/cap(src.loc) - - else if(istype(prizeselect, /obj/item/clothing/suit/syndicatefake)) //Helmet is part of the suit - new /obj/item/clothing/head/syndicatefake(src.loc) + src.prizevend() else feedback_inc("arcade_win_normal") - var/atom/movable/prize = pick(contents) - prize.loc = src.loc + src.prizevend() else if (emagged && (turtle >= 4)) var/boomamt = rand(5,10) @@ -224,7 +262,7 @@ return -/obj/machinery/computer/arcade/emag_act(var/charges, var/mob/user) +/obj/machinery/computer/arcade/battle/emag_act(var/charges, var/mob/user) if(!emagged) temp = "If you die in the game, you die for real!" player_hp = 30 @@ -241,19 +279,780 @@ src.updateUsrDialog() return 1 -/obj/machinery/computer/arcade/emp_act(severity) - if(stat & (NOPOWER|BROKEN)) - ..(severity) - return - var/empprize = null - var/num_of_prizes = 0 - switch(severity) - if(1) - num_of_prizes = rand(1,4) - if(2) - num_of_prizes = rand(0,2) - for(num_of_prizes; num_of_prizes > 0; num_of_prizes--) - empprize = pickweight(prizes) - new empprize(src.loc) - ..(severity) \ No newline at end of file +////////////////////////// +// ORION TRAIL HERE // +////////////////////////// +#define ORION_TRAIL_WINTURN 9 + +//Orion Trail Events +#define ORION_TRAIL_RAIDERS "Raiders" +#define ORION_TRAIL_FLUX "Interstellar Flux" +#define ORION_TRAIL_ILLNESS "Illness" +#define ORION_TRAIL_BREAKDOWN "Breakdown" +#define ORION_TRAIL_MUTINY "Mutiny?" +#define ORION_TRAIL_MUTINY_ATTACK "Mutinous Ambush" +#define ORION_TRAIL_MALFUNCTION "Malfunction" +#define ORION_TRAIL_COLLISION "Collision" +#define ORION_TRAIL_SPACEPORT "Spaceport" +#define ORION_TRAIL_BLACKHOLE "BlackHole" + +#define ORION_STATUS_START 1 +#define ORION_STATUS_NORMAL 2 +#define ORION_STATUS_GAMEOVER 3 +#define ORION_STATUS_MARKET 4 + +/obj/machinery/computer/arcade/orion_trail + name = "The Orion Trail" + desc = "Imported straight fron station-TG!" + icon_state = "arcade" + circuit = /obj/item/weapon/circuitboard/arcade/orion_trail + var/busy = 0 //prevent clickspam that allowed people to ~speedrun~ the game. + var/engine = 0 + var/hull = 0 + var/electronics = 0 + var/food = 80 + var/fuel = 60 + var/turns = 4 + var/alive = 4 + var/eventdat = null + var/event = null + var/list/settlers = list("Harry","Larry","Bob") + var/list/events = list(ORION_TRAIL_RAIDERS = 3, + ORION_TRAIL_FLUX = 1, + ORION_TRAIL_ILLNESS = 3, + ORION_TRAIL_BREAKDOWN = 2, + ORION_TRAIL_MUTINY = 3, + ORION_TRAIL_MALFUNCTION = 2, + ORION_TRAIL_COLLISION = 1, + ORION_TRAIL_SPACEPORT = 2 + ) + var/list/stops = list() + var/list/stopblurbs = list() + var/traitors_aboard = 0 + var/spaceport_raided = 0 + var/spaceport_freebie = 0 + var/last_spaceport_action = "" + var/gameStatus = ORION_STATUS_START + var/canContinueEvent = 0 + +/obj/machinery/computer/arcade/orion_trail/New() + ..() + // Sets up the main trail + stops = list("Pluto","Asteroid Belt","Proxima Centauri","Dead Space","Rigel Prime","Tau Ceti Beta","Black Hole","Space Outpost Beta-9","Orion Prime") + stopblurbs = list( + "Pluto, long since occupied with long-range sensors and scanners, stands ready to, and indeed continues to probe the far reaches of the galaxy.", + "At the edge of the Sol system lies a treacherous asteroid belt. Many have been crushed by stray asteroids and misguided judgement.", + "The nearest star system to Sol, in ages past it stood as a reminder of the boundaries of sub-light travel, now a low-population sanctuary for adventurers and traders.", + "This region of space is particularly devoid of matter. Such low-density pockets are known to exist, but the vastness of it is astounding.", + "Rigel Prime, the center of the Rigel system, burns hot, basking its planetary bodies in warmth and radiation.", + "Tau Ceti Beta has recently become a waypoint for colonists headed towards Orion. There are many ships and makeshift stations in the vicinity.", + "Sensors indicate that a black hole's gravitational field is affecting the region of space we were headed through. We could stay of course, but risk of being overcome by its gravity, or we could change course to go around, which will take longer.", + "You have come into range of the first man-made structure in this region of space. It has been constructed not by travellers from Sol, but by colonists from Orion. It stands as a monument to the colonists' success.", + "You have made it to Orion! Congratulations! Your crew is one of the few to start a new foothold for mankind!" + ) + +/obj/machinery/computer/arcade/orion_trail/proc/newgame() + // Set names of settlers in crew + settlers = list() + for(var/i = 1; i <= 3; i++) + add_crewmember() + add_crewmember("[usr]") + // Re-set items to defaults + engine = 1 + hull = 1 + electronics = 1 + food = 80 + fuel = 60 + alive = 4 + turns = 1 + event = null + gameStatus = ORION_STATUS_NORMAL + traitors_aboard = 0 + + //spaceport junk + spaceport_raided = 0 + spaceport_freebie = 0 + last_spaceport_action = "" + +/obj/machinery/computer/arcade/orion_trail/attack_hand(mob/user) + if(..()) + return + if(fuel <= 0 || food <=0 || settlers.len == 0) + gameStatus = ORION_STATUS_GAMEOVER + event = null + user.set_machine(src) + var/dat = "" + if(gameStatus == ORION_STATUS_GAMEOVER) + dat = "

Game Over

" + dat += "Like many before you, your crew never made it to Orion, lost to space...
Forever." + if(settlers.len == 0) + dat += "
Your entire crew died, your ship joins the fleet of ghost-ships littering the galaxy." + else + if(food <= 0) + dat += "
You ran out of food and starved." + if(emagged) + user.nutrition = 0 //yeah you pretty hongry + user << "Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor." + if(fuel <= 0) + dat += "
You ran out of fuel, and drift, slowly, into a star." + if(emagged) + var/mob/living/M = user + M.adjust_fire_stacks(5) + M.IgniteMob() //flew into a star, so you're on fire + user << "You feel an immense wave of heat emanate from \the [src]. Your skin bursts into flames." + dat += "

OK...

" + + if(emagged) + user << "You're never going to make it to Orion..." + user.death() + emagged = 0 //removes the emagged status after you lose + gameStatus = ORION_STATUS_START + name = "The Orion Trail" + desc = "Learn how our ancestors got to Orion, and have fun in the process!" + + else if(event) + dat = eventdat + else if(gameStatus == ORION_STATUS_NORMAL) + var/title = stops[turns] + var/subtext = stopblurbs[turns] + dat = "

[title]

" + dat += "[subtext]" + dat += "

Crew:

" + dat += english_list(settlers) + dat += "
Food: [food] | Fuel: [fuel]" + dat += "
Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [electronics]" + if(turns == 7) + dat += "

Go Around Continue

" + else + dat += "

Continue

" + dat += "

Kill a crewmember

" + dat += "

Close

" + else + dat = "

The Orion Trail

" + dat += "

Experience the journey of your ancestors!



" + dat += "
New Game
" + dat += "

Close

" + user << browse(dat,"window=arcade") + return + +/obj/machinery/computer/arcade/orion_trail/Topic(href, href_list) + if(..()) + return + if(href_list["close"]) + usr.unset_machine() + usr << browse(null, "window=arcade") + + if(busy) + return + busy = 1 + + if (href_list["continue"]) //Continue your travels + if(gameStatus == ORION_STATUS_NORMAL && !event && turns != 7) + if(turns >= ORION_TRAIL_WINTURN) + win() + else + food -= (alive+traitors_aboard)*2 + fuel -= 5 + if(turns == 2 && prob(30)) + event = ORION_TRAIL_COLLISION + event() + else if(prob(75)) + event = pickweight(events) + if(traitors_aboard) + if(event == ORION_TRAIL_MUTINY || prob(55)) + event = ORION_TRAIL_MUTINY_ATTACK + event() + turns += 1 + if(emagged) + var/mob/living/carbon/M = usr //for some vars + switch(event) + if(ORION_TRAIL_RAIDERS) + if(prob(50)) + usr << "You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?" + M.hallucination += 30 + else + usr << "Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there..." + M.take_organ_damage(25) + if(ORION_TRAIL_ILLNESS) + var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS + if(severity == 1) + M << "You suddenly feel slightly nauseous." //got off lucky + if(severity == 2) + usr << "You suddenly feel extremely nauseous and hunch over until it passes." + M.Stun(3) + if(severity >= 3) //you didn't pray hard enough + M << "An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit." + spawn(30) + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + H.vomit() + if(ORION_TRAIL_FLUX) + if(prob(75)) + M.Weaken(3) + src.visible_message("A sudden gust of powerful wind slams \the [M] into the floor!", "You hear a large fwooshing sound, followed by a bang.") + M.take_organ_damage(15) + else + M << "A violent gale blows past you, and you barely manage to stay standing!" + if(ORION_TRAIL_COLLISION) //by far the most damaging event + if(prob(90) && !hull) + var/turf/simulated/floor/F = src.loc + F.ChangeTurf(/turf/space) + src.visible_message("Something slams into the floor around \the [src], exposing it to space!", "You hear something crack and break.") + else + src.visible_message("Something slams into the floor around \the [src] - luckily, it didn't get through!", "You hear something crack.") + if(ORION_TRAIL_MALFUNCTION) + src.visible_message("\The [src] buzzes and the screen goes blank for a moment before returning to the game.") + var/oldfood = food + var/oldfuel = fuel + food = rand(10,80) / rand(1,2) + fuel = rand(10,60) / rand(1,2) + if(electronics) + sleep(10) + if(oldfuel > fuel && oldfood > food) + src.audible_message("\The [src] lets out a somehow reassuring chime.") + else if(oldfuel < fuel || oldfood < food) + src.audible_message("\The [src] lets out a somehow ominous chime.") + food = oldfood + fuel = oldfuel + + else if(href_list["newgame"]) //Reset everything + if(gameStatus == ORION_STATUS_START) + newgame() + else if(href_list["menu"]) //back to the main menu + if(gameStatus == ORION_STATUS_GAMEOVER) + gameStatus = ORION_STATUS_START + event = null + food = 80 + fuel = 60 + settlers = list("Harry","Larry","Bob") + else if(href_list["slow"]) //slow down + if(event == ORION_TRAIL_FLUX) + food -= (alive+traitors_aboard)*2 + fuel -= 5 + event = null + else if(href_list["pastblack"]) //slow down + if(turns == 7) + food -= ((alive+traitors_aboard)*2)*3 + fuel -= 15 + turns += 1 + event = null + else if(href_list["useengine"]) //use parts + if(event == ORION_TRAIL_BREAKDOWN) + engine = max(0, --engine) + event = null + else if(href_list["useelec"]) //use parts + if(event == ORION_TRAIL_MALFUNCTION) + electronics = max(0, --electronics) + event = null + else if(href_list["usehull"]) //use parts + if(event == ORION_TRAIL_COLLISION) + hull = max(0, --hull) + event = null + else if(href_list["wait"]) //wait 3 days + if(event == ORION_TRAIL_BREAKDOWN || event == ORION_TRAIL_MALFUNCTION || event == ORION_TRAIL_COLLISION) + food -= ((alive+traitors_aboard)*2)*3 + event = null + else if(href_list["keepspeed"]) //keep speed + if(event == ORION_TRAIL_FLUX) + if(prob(75)) + event = "Breakdown" + event() + else + event = null + else if(href_list["blackhole"]) //keep speed past a black hole + if(turns == 7) + if(prob(75)) + event = ORION_TRAIL_BLACKHOLE + event() + if(emagged) //has to be here because otherwise it doesn't work + src.show_message("\The [src] states, 'YOU ARE EXPERIENCING A BLACKHOLE. BE TERRIFIED.","You hear something say, 'YOU ARE EXPERIENCING A BLACKHOLE. BE TERRFIED'") + usr << "Something draws you closer and closer to the machine." + sleep(10) + usr << "This is really starting to hurt!" + var i; //spawning a literal blackhole would be fun, but a bit disruptive. + for(i=0;i<4;i++) + var/mob/living/L = usr + if(istype(L)) + L.adjustBruteLoss(25) + sleep(10) + else + event = null + turns += 1 + else if(href_list["holedeath"]) + if(event == ORION_TRAIL_BLACKHOLE) + gameStatus = ORION_STATUS_GAMEOVER + event = null + else if(href_list["eventclose"]) //end an event + if(canContinueEvent) + event = null + + else if(href_list["killcrew"]) //shoot a crewmember + if(gameStatus == ORION_STATUS_NORMAL || event == ORION_TRAIL_MUTINY) + var/sheriff = remove_crewmember() //I shot the sheriff + var/mob/living/L = usr + if(!istype(L)) + return + if(settlers.len == 0 || alive == 0) + src.visible_message("\The [src] states, 'EVERYONE HAS DIED, GAMEOVER.'", "You hear something state, 'EVERYONE HAS DIED, GAMEOVER.'") + if(emagged) + src.visible_message("\The [src] produces a loud, gunlike sound.") + L.adjustBruteLoss(30) + emagged = 0 + gameStatus = ORION_STATUS_GAMEOVER + event = null + else if(emagged) + if(usr.name == sheriff) + src.visible_message("\The [src] states, 'THE CREW HAS CHOSEN TO KILL [usr]'. A gunshot can be heard coming from \the [src]", "You hear 'THE CREW HAS CHOSEN TO KILL [usr]' followed by a gunshot") + L.adjustBruteLoss(30) + if(event == ORION_TRAIL_MUTINY) //only ends the ORION_TRAIL_MUTINY event, since you can do this action in multiple places + event = null + + //Spaceport specific interactions + //they get a header because most of them don't reset event (because it's a shop, you leave when you want to) + //they also call event() again, to regen the eventdata, which is kind of odd but necessary + else if(href_list["buycrew"]) //buy a crewmember + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided && food >= 10 && fuel >= 10) + var/bought = add_crewmember() + last_spaceport_action = "You hired [bought] as a new crewmember." + fuel -= 10 + food -= 10 + event() + + else if(href_list["sellcrew"]) //sell a crewmember + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided && settlers.len > 1) + var/sold = remove_crewmember() + last_spaceport_action = "You sold your crewmember, [sold]!" + fuel += 7 + food += 7 + event() + + else if(href_list["leave_spaceport"]) + if(gameStatus == ORION_STATUS_MARKET) + event = null + gameStatus = ORION_STATUS_NORMAL + spaceport_raided = 0 + spaceport_freebie = 0 + last_spaceport_action = "" + + else if(href_list["raid_spaceport"]) + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided) + var/success = min(15 * alive,100) //default crew (4) have a 60% chance + spaceport_raided = 1 + + var/FU = 0 + var/FO = 0 + if(prob(success)) + FU = rand(5,15) + FO = rand(5,15) + last_spaceport_action = "You successfully raided the spaceport! you gained [FU] Fuel and [FO] Food! (+[FU]FU,+[FO]FO)" + else + FU = rand(-5,-15) + FO = rand(-5,-15) + last_spaceport_action = "You failed to raid the spaceport! you lost [FU*-1] Fuel and [FO*-1] Food in your scramble to escape! ([FU]FU,[FO]FO)" + + //your chance of lose a crewmember is 1/2 your chance of success + //this makes higher % failures hurt more, don't get cocky space cowboy! + if(prob(success*5)) + var/lost_crew = remove_crewmember() + last_spaceport_action = "You failed to raid the spaceport! you lost [FU*-1] Fuel and [FO*-1] Food, AND [lost_crew] in your scramble to escape! ([FU]FI,[FO]FO,-Crew)" + if(emagged) + src.visible_message("The machine states, 'YOU ARE UNDER ARREST, RAIDER!' and shoots handcuffs onto [usr]!", "You hear something say 'YOU ARE UNDER ARREST, RAIDER!' and a clinking sound") + var/obj/item/weapon/handcuffs/C = new(src.loc) + var/mob/living/carbon/human/H = usr + if(istype(usr)) + C.forceMove(H) + H.handcuffed = C + H.update_inv_handcuffed() + else + C.throw_at(usr,16,3,src) + + + fuel += FU + food += FO + event() + + else if(href_list["buyparts"]) + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided && fuel > 5) + switch(text2num(href_list["buyparts"])) + if(1) //Engine Parts + engine++ + last_spaceport_action = "Bought Engine Parts" + if(2) //Hull Plates + hull++ + last_spaceport_action = "Bought Hull Plates" + if(3) //Spare Electronics + electronics++ + last_spaceport_action = "Bought Spare Electronics" + fuel -= 5 //they all cost 5 + event() + + else if(href_list["trade"]) + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided) + switch(text2num(href_list["trade"])) + if(1) //Fuel + if(fuel > 5) + fuel -= 5 + food += 5 + last_spaceport_action = "Traded Fuel for Food" + event() + if(2) //Food + if(food > 5) + fuel += 5 + food -= 5 + last_spaceport_action = "Traded Food for Fuel" + event() + + src.add_fingerprint(usr) + src.updateUsrDialog() + busy = 0 + return + + +/obj/machinery/computer/arcade/orion_trail/proc/event() + eventdat = "

[event]

" + canContinueEvent = 0 + switch(event) + if(ORION_TRAIL_RAIDERS) + eventdat += "Raiders have come aboard your ship!" + if(prob(50)) + var/sfood = rand(1,10) + var/sfuel = rand(1,10) + food -= sfood + fuel -= sfuel + eventdat += "
They have stolen [sfood] Food and [sfuel] Fuel." + else if(prob(10)) + var/deadname = remove_crewmember() + eventdat += "
[deadname] tried to fight back but was killed." + else + eventdat += "
Fortunately you fended them off without any trouble." + eventdat += "

Continue

" + eventdat += "

Close

" + canContinueEvent = 1 + + if(ORION_TRAIL_FLUX) + eventdat += "This region of space is highly turbulent.
If we go slowly we may avoid more damage, but if we keep our speed we won't waste supplies." + eventdat += "
What will you do?" + eventdat += "

Slow Down Continue

" + eventdat += "

Close

" + + if(ORION_TRAIL_ILLNESS) + eventdat += "A deadly illness has been contracted!" + var/deadname = remove_crewmember() + eventdat += "
[deadname] was killed by the disease." + eventdat += "

Continue

" + eventdat += "

Close

" + canContinueEvent = 1 + + if(ORION_TRAIL_BREAKDOWN) + eventdat += "Oh no! The engine has broken down!" + eventdat += "
You can repair it with an engine part, or you can make repairs for 3 days." + if(engine >= 1) + eventdat += "

Use Part Wait

" + else + eventdat += "

Wait

" + eventdat += "

Close

" + + if(ORION_TRAIL_MALFUNCTION) + eventdat += "The ship's systems are malfunctioning!" + eventdat += "
You can replace the broken electronics with spares, or you can spend 3 days troubleshooting the AI." + if(electronics >= 1) + eventdat += "

Use Part Wait

" + else + eventdat += "

Wait

" + eventdat += "

Close

" + + if(ORION_TRAIL_COLLISION) + eventdat += "Something hit us! Looks like there's some hull damage." + if(prob(25)) + var/sfood = rand(5,15) + var/sfuel = rand(5,15) + food -= sfood + fuel -= sfuel + eventdat += "
[sfood] Food and [sfuel] Fuel was vented out into space." + if(prob(10)) + var/deadname = remove_crewmember() + eventdat += "
[deadname] was killed by rapid depressurization." + eventdat += "
You can repair the damage with hull plates, or you can spend the next 3 days welding scrap together." + if(hull >= 1) + eventdat += "

Use Part Wait

" + else + eventdat += "

Wait

" + eventdat += "

Close

" + + if(ORION_TRAIL_BLACKHOLE) + eventdat += "You were swept away into the black hole." + eventdat += "

Oh...

" + eventdat += "

Close

" + settlers = list() + + if(ORION_TRAIL_MUTINY) + eventdat += "You've been hearing rumors of dissenting opinions amoungst your men." + if(settlers.len <= 2) + eventdat += "
Your crew's so tiny you don't think anybody would risk an uprising." + eventdat += "

Continue

" + eventdat += "

Close

" + if(prob(10)) + traitors_aboard = min(++traitors_aboard,2) + else + if(traitors_aboard) //less likely to stack traitors + if(prob(20)) + traitors_aboard = min(++traitors_aboard,2) + else if(prob(70)) + traitors_aboard = min(++traitors_aboard,2) + + eventdat += "

Kill a crewmember

" + eventdat += "

Risk it

" + eventdat += "

Close

" + canContinueEvent = 1 + + if(ORION_TRAIL_MUTINY_ATTACK) + if(traitors_aboard <= 0) //shouldn't trigger, but hey. + eventdat += "Haha, fooled you, there isn't a mutiny on board!" + eventdat += "
(You should report this to a coder :S)" + else + var/trait1 = remove_crewmember() + var/trait2 = "" + if(traitors_aboard >= 2) + trait2 = remove_crewmember() + + eventdat += "Oh no, some of your crew are attempting to mutiny!!" + if(trait2) + eventdat += "
[trait1] and [trait2]'s have armed themselves with weapons!" + else + eventdat += "
[trait1]'s armed with a weapon!" + + var/chance2attack = alive*20 + if(prob(chance2attack)) + var/chancetokill = 30*traitors_aboard-(5*alive) //eg: 30*2-(10) = 50%, 2 traitorss, 2 crew is 50% chance + if(prob(chancetokill)) + var/deadguy = remove_crewmember() + eventdat += "
The traitor[trait2 ? "s":""] run[trait2 ? "":"s"] up to [deadguy] and murder them!" + else + eventdat += "
You valiantly fight off the traitor[trait2 ? "s":""]!" + eventdat += "
You cut the traitor[trait2 ? "s":""] up into meat... Eww" + if(trait2) + food += 30 + traitors_aboard = max(0,traitors_aboard-2) + else + food += 15 + traitors_aboard = max(0,--traitors_aboard) + else + eventdat += "
The traitor[trait2 ? "s":""] run[trait2 ? "":"s"] away, What wimps!" + if(trait2) + traitors_aboard = max(0,traitors_aboard-2) + else + traitors_aboard = max(0,--traitors_aboard) + + eventdat += "

Continue

" + eventdat += "

Close

" + canContinueEvent = 1 + + + if(ORION_TRAIL_SPACEPORT) + gameStatus = ORION_STATUS_MARKET + if(spaceport_raided) + eventdat += "The Spaceport is on high alert! they wont let you dock since you tried to attack them!" + if(last_spaceport_action) + eventdat += "
Last Spaceport Action: [last_spaceport_action]" + eventdat += "

Depart Spaceport

" + eventdat += "

Close

" + else + eventdat += "You pull the ship up to dock at a nearby Spaceport, lucky find!" + eventdat += "
This Spaceport is home to travellers who failed to reach Orion, but managed to find a different home..." + eventdat += "
Trading terms: FU = Fuel, FO = Food" + if(last_spaceport_action) + eventdat += "
Last Spaceport Action: [last_spaceport_action]" + eventdat += "

Crew:

" + eventdat += english_list(settlers) + eventdat += "
Food: [food] | Fuel: [fuel]" + eventdat += "
Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [electronics]" + + + //If your crew is pathetic you can get freebies (provided you haven't already gotten one from this port) + if(!spaceport_freebie && (fuel < 20 || food < 20)) + spaceport_freebie++ + var/FU = 10 + var/FO = 10 + var/freecrew = 0 + if(prob(30)) + FU = 25 + FO = 25 + + if(prob(10)) + add_crewmember() + freecrew++ + + eventdat += "
The traders of the spaceport take pitty on you, and give you some food and fuel (+[FU]FU,+[FO]FO)" + if(freecrew) + eventdat += "
You also gain a new crewmember!" + + fuel += FU + food += FO + + //CREW INTERACTIONS + eventdat += "

Crew Management:

" + + //Buy crew + if(food >= 10 && fuel >= 10) + eventdat += "

Hire a new Crewmember (-10FU,-10FO)

" + else + eventdat += "

Cant afford a new Crewmember

" + + //Sell crew + if(settlers.len > 1) + eventdat += "

Sell crew for Fuel and Food (+7FU,+7FO)

" + else + eventdat += "

Cant afford to sell a Crewmember

" + + //BUY/SELL STUFF + eventdat += "

Spare Parts:

" + + //Engine parts + if(fuel > 5) + eventdat += "

Buy Engine Parts (-5FU)

" + else + eventdat += "

Cant afford to buy Engine Parts" + + //Hull plates + if(fuel > 5) + eventdat += "

Buy Hull Plates (-5FU)

" + else + eventdat += "

Cant afford to buy Hull Plates" + + //Electronics + if(fuel > 5) + eventdat += "

Buy Spare Electronics (-5FU)

" + else + eventdat += "

Cant afford to buy Spare Electronics" + + //Trade + if(fuel > 5) + eventdat += "

Trade Fuel for Food (-5FU,+5FO)

" + else + eventdat += "

Cant afford to Trade Fuel for Food 5) + eventdat += "

Trade Food for Fuel (+5FU,-5FO)

" + else + eventdat += "

Cant afford to Trade Food for FuelYou override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode." + name = "The Orion Trail: Realism Edition" + desc = "Learn how our ancestors got to Orion, and try not to die in the process!" + newgame() + emagged = 1 + + +/obj/item/weapon/orion_ship + name = "model settler ship" + desc = "A model spaceship, it looks like those used back in the day when travelling to Orion! It even has a miniature FX-293 reactor, which was renowned for its instability and tendency to explode..." + icon = 'icons/obj/toy.dmi' + icon_state = "ship" + w_class = 2 + var/active = 0 //if the ship is on + +/obj/item/weapon/orion_ship/examine(mob/user) + ..() + if(!(in_range(user, src))) + return + if(!active) + user << "There's a little switch on the bottom. It's flipped down." + else + user << "There's a little switch on the bottom. It's flipped up." + +/obj/item/weapon/orion_ship/attack_self(mob/user) + if(active) + return + + message_admins("[key_name_admin(usr)] primed an explosive Orion ship for detonation.") + log_game("[key_name(usr)] primed an explosive Orion ship for detonation.") + + user << "You flip the switch on the underside of [src]." + active = 1 + src.visible_message("[src] softly beeps and whirs to life!") + src.audible_message("\The [src] says, 'This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.'") + sleep(20) + src.visible_message("[src] begins to vibrate...") + src.audible_message("\The [src] says, 'Uh, Port? Having some issues with our reactor, could you check it out? Over.'") + sleep(30) + src.audible_message("\The [src] says, 'Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-'") + sleep(3.6) + src.visible_message("[src] explodes!") + explosion(src.loc, 1,2,4) + qdel(src) + +#undef ORION_TRAIL_WINTURN +#undef ORION_TRAIL_RAIDERS +#undef ORION_TRAIL_FLUX +#undef ORION_TRAIL_ILLNESS +#undef ORION_TRAIL_BREAKDOWN +#undef ORION_TRAIL_MUTINY +#undef ORION_TRAIL_MUTINY_ATTACK +#undef ORION_TRAIL_MALFUNCTION +#undef ORION_TRAIL_COLLISION +#undef ORION_TRAIL_SPACEPORT +#undef ORION_TRAIL_BLACKHOLE + +#undef ORION_STATUS_START +#undef ORION_STATUS_NORMAL +#undef ORION_STATUS_GAMEOVER +#undef ORION_STATUS_MARKET \ No newline at end of file diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm index 6254e2bb9d..d324f3dd9c 100644 --- a/code/game/machinery/turrets.dm +++ b/code/game/machinery/turrets.dm @@ -519,9 +519,5 @@ playsound(src, 'sound/weapons/Gunshot.ogg', 50, 1) var/obj/item/projectile/A = new /obj/item/projectile(curloc) src.projectiles-- - A.current = curloc - A.yo = targloc.y - curloc.y - A.xo = targloc.x - curloc.x - A.process() - sleep(2) + A.launch(target) return diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 6b43943d53..03234e968e 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -37,7 +37,7 @@ playsound(chassis, fire_sound, fire_volume, 1) projectiles-- var/P = new projectile(curloc) - Fire(P, target, aimloc) + Fire(P, target) if(fire_cooldown) sleep(fire_cooldown) if(auto_rearm) @@ -46,16 +46,9 @@ do_after_cooldown() return -/obj/item/mecha_parts/mecha_equipment/weapon/proc/Fire(atom/A, atom/target, turf/aimloc) +/obj/item/mecha_parts/mecha_equipment/weapon/proc/Fire(atom/A, atom/target) var/obj/item/projectile/P = A - P.shot_from = src.name - P.original = target - P.starting = P.loc - P.current = P.loc - P.firer = chassis.occupant - P.yo = aimloc.y - P.loc.y - P.xo = aimloc.x - P.loc.x - P.process() + P.launch(target) /obj/item/mecha_parts/mecha_equipment/weapon/energy name = "general energy weapon" @@ -235,7 +228,7 @@ projectile_energy_cost = 1000 equip_cooldown = 60 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive/Fire(atom/movable/AM, atom/target, turf/aimloc) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive/Fire(atom/movable/AM, atom/target) var/obj/item/missile/M = AM M.primed = 1 ..() diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index bf5df08d34..6b423f1309 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -11,6 +11,7 @@ var/global/list/obj/item/device/pda/PDAs = list() item_state = "electronic" w_class = 2.0 slot_flags = SLOT_ID | SLOT_BELT + sprite_sheets = list("Seromi" = 'icons/mob/species/seromi/id.dmi') //Main variables var/pdachoice = 1 @@ -322,10 +323,10 @@ var/global/list/obj/item/device/pda/PDAs = list() if(1) icon = 'icons/obj/pda.dmi' if(2) icon = 'icons/obj/pda_slim.dmi' if(3) icon = 'icons/obj/pda_old.dmi' - else + else icon = 'icons/obj/pda_old.dmi' log_debug("Invalid switch for PDA, defaulting to old PDA icons. [pdachoice] chosen.") - + /obj/item/device/pda/proc/can_use() diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index fd15205c61..44de029334 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -94,6 +94,10 @@ icon_state = "id" item_state = "card-id" + sprite_sheets = list( + "Seromi" = 'icons/mob/species/seromi/id.dmi' + ) + var/access = list() var/registered_name = "Unknown" // The name registered_name on the card slot_flags = SLOT_ID diff --git a/code/game/objects/items/weapons/circuitboards/computer/computer.dm b/code/game/objects/items/weapons/circuitboards/computer/computer.dm index 0bc090f996..0023606062 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/computer.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/computer.dm @@ -1,5 +1,5 @@ #ifndef T_BOARD -#error T_BOARD macro is not defined but we need it! +#error T_BOARD macro is not defined but we need it! #endif /obj/item/weapon/circuitboard/message_monitor @@ -60,11 +60,11 @@ /obj/item/weapon/circuitboard/stationalert_engineering name = T_BOARD("station alert console (engineering)") build_path = /obj/machinery/computer/station_alert - + /obj/item/weapon/circuitboard/stationalert_security name = T_BOARD("station alert console (security)") build_path = /obj/machinery/computer/station_alert - + /obj/item/weapon/circuitboard/stationalert_all name = T_BOARD("station alert console (all)") build_path = /obj/machinery/computer/station_alert/all @@ -92,9 +92,14 @@ build_path = /obj/machinery/computer/cloning origin_tech = list(TECH_DATA = 3, TECH_BIO = 3) -/obj/item/weapon/circuitboard/arcade - name = T_BOARD("arcade machine") - build_path = /obj/machinery/computer/arcade +/obj/item/weapon/circuitboard/arcade/battle + name = T_BOARD("battle arcade machine") + build_path = /obj/machinery/computer/arcade/battle + origin_tech = list(TECH_DATA = 1) + +/obj/item/weapon/circuitboard/arcade/orion_trail + name = T_BOARD("orion trail arcade machine") + build_path = /obj/machinery/computer/arcade/orion_trail origin_tech = list(TECH_DATA = 1) /obj/item/weapon/circuitboard/turbine_control diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index fbbe56213f..eadb5b0848 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -7,6 +7,7 @@ force = 2.0 det_time = null unacidable = 1 + var/stage = 0 var/state = 0 var/path = 0 diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 1ab42d80e2..4ac0c15527 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -17,6 +17,7 @@ var/breakouttime = 1200 //Deciseconds = 120s = 2 minutes var/cuff_sound = 'sound/weapons/handcuffs.ogg' var/cuff_type = "handcuffs" + sprite_sheets = list("Seromi" = 'icons/mob/species/seromi/handcuffs.dmi') /obj/item/weapon/handcuffs/attack(var/mob/living/carbon/C, var/mob/living/user) diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 431e30d1ca..995b4491a9 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -17,6 +17,9 @@ slot_l_hand_str = "backpack", slot_r_hand_str = "backpack", ) + sprite_sheets = list( + "Seromi" = 'icons/mob/species/seromi/back.dmi' + ) w_class = 4 slot_flags = SLOT_BACK max_w_class = 3 diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index e83f18ff3a..58c85ab211 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -6,6 +6,7 @@ item_state = "utility" slot_flags = SLOT_BELT attack_verb = list("whipped", "lashed", "disciplined") + sprite_sheets = list("Seromi" = 'icons/mob/species/seromi/belt.dmi') var/show_above_suit = 0 diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index c904907f64..33d462eff2 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -93,3 +93,19 @@ New() ..() new /obj/item/weapon/grenade/flashbang/clusterbang(src) + +/obj/item/weapon/storage/lockbox/medal + name = "lockbox of medals" + desc = "A lockbox filled with commemorative medals, it has the NanoTrasen logo stamped on it." + req_access = list(access_heads) + storage_slots = 7 + + New() + ..() + new /obj/item/clothing/accessory/medal/conduct(src) + new /obj/item/clothing/accessory/medal/bronze_heart(src) + new /obj/item/clothing/accessory/medal/nobel_science(src) + new /obj/item/clothing/accessory/medal/silver/valor(src) + new /obj/item/clothing/accessory/medal/silver/security(src) + new /obj/item/clothing/accessory/medal/gold/captain(src) + new /obj/item/clothing/accessory/medal/gold/heroism(src) \ No newline at end of file diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index d2deeda6d5..9c2cdbc293 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -23,6 +23,10 @@ var/list/global/tank_gauge_cache = list() throw_speed = 1 throw_range = 4 + sprite_sheets = list( + "Seromi" = 'icons/mob/species/seromi/back.dmi' + ) + var/datum/gas_mixture/air_contents = null var/distribute_pressure = ONE_ATMOSPHERE var/integrity = 3 diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 7e74224156..f5f36858fc 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -23,6 +23,7 @@ new /obj/item/clothing/suit/storage/vest(src) new /obj/item/weapon/cartridge/captain(src) new /obj/item/clothing/head/helmet/swat(src) + new /obj/item/weapon/storage/lockbox/medal(src) new /obj/item/clothing/shoes/brown(src) new /obj/item/device/radio/headset/heads/captain(src) new /obj/item/device/radio/headset/heads/captain/alt(src) @@ -124,6 +125,7 @@ new /obj/item/taperoll/police(src) new /obj/item/weapon/shield/riot(src) new /obj/item/weapon/shield/riot/tele(src) + new /obj/item/clothing/accessory/badge/hos(src) new /obj/item/weapon/storage/box/flashbangs(src) new /obj/item/weapon/storage/belt/security(src) new /obj/item/device/flash(src) @@ -167,6 +169,7 @@ new /obj/item/device/radio/headset/headset_sec/alt(src) new /obj/item/clothing/glasses/sunglasses/sechud(src) new /obj/item/taperoll/police(src) + new /obj/item/clothing/accessory/badge/warden(src) new /obj/item/weapon/storage/box/flashbangs(src) new /obj/item/weapon/storage/belt/security(src) new /obj/item/weapon/reagent_containers/spray/pepper(src) @@ -274,6 +277,7 @@ new /obj/item/clothing/suit/storage/det_trench/grey(src) new /obj/item/clothing/suit/storage/forensics/blue(src) new /obj/item/clothing/suit/storage/forensics/red(src) + new /obj/item/clothing/accessory/badge/detective(src) new /obj/item/clothing/gloves/black(src) new /obj/item/clothing/head/det(src) new /obj/item/clothing/head/det/grey(src) diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index d4f16f72e4..2122d869f9 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -139,6 +139,7 @@ new /obj/item/weapon/storage/backpack/cultpack (src) new /obj/item/weapon/storage/fancy/candle_box(src) new /obj/item/weapon/storage/fancy/candle_box(src) + new /obj/item/weapon/deck/tarot(src) return diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm index 7bd3a48a46..fd9e833583 100644 --- a/code/modules/client/preferences_gear.dm +++ b/code/modules/client/preferences_gear.dm @@ -1489,7 +1489,31 @@ var/global/list/gear_datums = list() /datum/gear/cards display_name = "deck of cards" - path = /obj/item/weapon/deck + path = /obj/item/weapon/deck/cards + sort_category = "misc" + cost = 1 + +/datum/gear/tarot + display_name = "deck of tarot cards" + path = /obj/item/weapon/deck/tarot + sort_category = "misc" + cost = 1 + +/datum/gear/holder + display_name = "card holder" + path = /obj/item/weapon/deck/holder + sort_category = "misc" + cost = 1 + +/datum/gear/cardemon_pack + display_name = "Cardemon booster pack" + path = /obj/item/weapon/pack/cardemon + sort_category = "misc" + cost = 1 + +/datum/gear/spaceball_pack + display_name = "Spaceball booster pack" + path = /obj/item/weapon/pack/spaceball sort_category = "misc" cost = 1 @@ -1632,4 +1656,4 @@ var/global/list/gear_datums = list() /datum/gear/skrell_cloth/female/pink display_name = "skrell headtail-wear, female, pink, cloth" - path = /obj/item/clothing/ears/skrell/cloth_female/pink \ No newline at end of file + path = /obj/item/clothing/ears/skrell/cloth_female/pink diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index d2f11e27a8..d1878acfd9 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -101,6 +101,7 @@ w_class = 1.0 throwforce = 2 slot_flags = SLOT_EARS + sprite_sheets = list("Seromi" = 'icons/mob/species/seromi/ears.dmi') /obj/item/clothing/ears/attack_hand(mob/user as mob) if (!user) return @@ -208,6 +209,10 @@ BLIND // can't see anything var/vision_flags = 0 var/darkness_view = 0//Base human is 2 var/see_invisible = -1 + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/eyes.dmi', + "Seromi" = 'icons/mob/species/seromi/eyes.dmi', + ) /obj/item/clothing/glasses/update_clothing_icon() if (ismob(src.loc)) @@ -230,7 +235,8 @@ BLIND // can't see anything attack_verb = list("challenged") species_restricted = list("exclude","Unathi","Tajara", "Vox") sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/gloves.dmi' + "Vox" = 'icons/mob/species/vox/gloves.dmi', + "Seromi" = 'icons/mob/species/seromi/gloves.dmi', ) /obj/item/clothing/gloves/update_clothing_icon() @@ -287,7 +293,8 @@ BLIND // can't see anything var/on = 0 sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/head.dmi' + "Vox" = 'icons/mob/species/vox/head.dmi', + "Seromi" = 'icons/mob/species/seromi/head.dmi' ) /obj/item/clothing/head/attack_self(mob/user) @@ -385,7 +392,8 @@ BLIND // can't see anything slot_flags = SLOT_MASK body_parts_covered = FACE|EYES sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/masks.dmi' + "Vox" = 'icons/mob/species/vox/masks.dmi', + "Seromi" = 'icons/mob/species/seromi/masks.dmi', ) var/voicechange = 0 @@ -418,9 +426,10 @@ BLIND // can't see anything slowdown = SHOES_SLOWDOWN force = 2 var/overshoes = 0 - species_restricted = list("exclude","Unathi","Tajara","Vox") + species_restricted = list("exclude","Seromi", "Unathi","Tajara","Vox") sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/shoes.dmi' + "Vox" = 'icons/mob/species/vox/shoes.dmi', + "Seromi" = 'icons/mob/species/seromi/shoes.dmi', ) /obj/item/clothing/shoes/proc/draw_knife() @@ -494,7 +503,8 @@ BLIND // can't see anything w_class = 3 sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/suit.dmi' + "Vox" = 'icons/mob/species/vox/suit.dmi', + "Seromi" = 'icons/mob/species/seromi/suit.dmi' ) /obj/item/clothing/suit/update_clothing_icon() @@ -529,7 +539,8 @@ BLIND // can't see anything var/displays_id = 1 var/rolled_down = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/uniform.dmi' + "Vox" = 'icons/mob/species/vox/uniform.dmi', + "Seromi" = 'icons/mob/species/seromi/uniform.dmi' ) //convenience var for defining the icon state for the overlay used when the clothing is worn. diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index 89cd162d54..5aa2d6d1ff 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -10,7 +10,8 @@ desc = "an ultra rare hat. It commands a certain respect." icon_state = "petehat" sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/head.dmi' + "Vox" = 'icons/mob/species/vox/head.dmi', + "Seromi" = 'icons/mob/species/seromi/head.dmi' ) /obj/item/clothing/head/collectable/slime diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index 51cbe7baa4..3725fccd30 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -179,7 +179,7 @@ /obj/item/clothing/accessory/medal/gold/heroism name = "medal of exceptional heroism" - desc = "An extremely rare golden medal awarded only by CentComm. To recieve such a medal is the highest honor and as such, very few exist. This medal is almost never awarded to anybody but commanders." + desc = "An extremely rare golden medal awarded only by high ranking officials. To recieve such a medal is the highest honor and as such, very few exist. This medal is almost never awarded to anybody but distinguished veteran staff." //Scarves diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm index 7c605bbcf3..2813ded7c0 100644 --- a/code/modules/clothing/under/accessories/badges.dm +++ b/code/modules/clothing/under/accessories/badges.dm @@ -48,7 +48,7 @@ /obj/item/clothing/accessory/badge/holo/cord icon_state = "holobadge-cord" - slot_flags = SLOT_MASK | SLOT_TIE + slot_flags = SLOT_MASK | SLOT_TIE | SLOT_BELT /obj/item/clothing/accessory/badge/holo/attack_self(mob/user as mob) if(!stored_name) @@ -96,3 +96,21 @@ new /obj/item/clothing/accessory/badge/holo/cord(src) ..() return + +/obj/item/clothing/accessory/badge/warden + name = "warden's badge" + desc = "A silver corporate security badge. Stamped with the words 'Warden.'" + icon_state = "silverbadge" + slot_flags = SLOT_TIE | SLOT_BELT + +/obj/item/clothing/accessory/badge/hos + name = "head of security's badge" + desc = "An immaculately polished gold security badge. Labeled 'Head of Security.'" + icon_state = "goldbadge" + slot_flags = SLOT_TIE | SLOT_BELT + +/obj/item/clothing/accessory/badge/detective + name = "detective's badge" + desc = "An immaculately polished gold security badge on leather. Labeled 'Detective.'" + icon_state = "marshalbadge" + slot_flags = SLOT_TIE | SLOT_BELT \ No newline at end of file diff --git a/code/modules/clothing/under/xenos/seromi.dm b/code/modules/clothing/under/xenos/seromi.dm new file mode 100644 index 0000000000..537534af6b --- /dev/null +++ b/code/modules/clothing/under/xenos/seromi.dm @@ -0,0 +1,32 @@ +/obj/item/clothing/under/seromi + name = "small grey smock" + desc = "It looks fitted to nonhuman proportions." + icon = 'icons/obj/clothing/species/seromi/uniform.dmi' + icon_state = "seromi_grey" + worn_state = "seromi_grey" + species_restricted = list("Seromi") + +/obj/item/clothing/under/seromi/white + name = "small white smock" + icon_state = "seromi_white" + worn_state = "seromi_white" + +/obj/item/clothing/under/seromi/red + name = "small Security smock" + icon_state = "seromi_red" + worn_state = "seromi_red" + +/obj/item/clothing/under/seromi/yellow + name = "small Engineering smock" + icon_state = "seromi_yellow" + worn_state = "seromi_yellow" + +/obj/item/clothing/under/seromi/medical + name = "small Medical uniform" + icon_state = "seromi_medical" + worn_state = "Seromi_medical" + +/obj/item/clothing/under/seromi/rainbow + name = "small rainbow smock" + icon_state = "seromi_rainbow" + worn_state = "seromi_rainbow" \ No newline at end of file diff --git a/code/modules/games/cardemon.dm b/code/modules/games/cardemon.dm new file mode 100644 index 0000000000..647b1ff8c7 --- /dev/null +++ b/code/modules/games/cardemon.dm @@ -0,0 +1,30 @@ +/obj/item/weapon/pack/cardemon + name = "cardemon booster pack" + desc = "Finally! A children's card game in space!" + icon_state = "card_pack_cardemon" + +/obj/item/weapon/pack/cardemon/New() + var/datum/playingcard/P + var/i + for(i=0; i<5; i++) + var/rarity + if(prob(10)) + if(prob(5)) + if(prob(5)) + rarity = "Plasteel" + else + rarity = "Platinum" + else + rarity = "Silver" + + var/nam = pick("Death","Life","Plant","Leaf","Air","Earth","Fire","Water","Killer","Holy", "God", "Ordinary","Demon","Angel", "Plasteel", "Phoron", "Mad", "Insane", "Metal", "Steel", "Secret") + var/nam2 = pick("Carp", "Corgi", "Cat", "Mouse", "Octopus", "Lizard", "Monkey", "Plant", "Duck", "Demon", "Spider", "Bird", "Slime", "Sheep", "Fish") + + P = new() + P.name = "[nam] [nam2]" + P.card_icon = "card_cardemon" + if(rarity) + P.name = "[rarity] [P.name]" + P.card_icon += "_[rarity]" + P.back_icon = "card_back_cardemon" + cards += P \ No newline at end of file diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 6ff5f22f20..368bfdd9a5 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -1,17 +1,24 @@ /datum/playingcard var/name = "playing card" var/card_icon = "card_back" + var/back_icon = "card_back" /obj/item/weapon/deck - name = "deck of cards" - desc = "A simple deck of playing cards." - icon = 'icons/obj/playing_cards.dmi' - icon_state = "deck" w_class = 2 - + icon = 'icons/obj/playing_cards.dmi' var/list/cards = list() -/obj/item/weapon/deck/New() +/obj/item/weapon/deck/holder + name = "card box" + desc = "A small leather case to show how classy you are compared to everyone else." + icon_state = "card_holder" + +/obj/item/weapon/deck/cards + name = "deck of cards" + desc = "A simple deck of playing cards." + icon_state = "deck" + +/obj/item/weapon/deck/cards/New() ..() var/datum/playingcard/P @@ -27,12 +34,14 @@ P = new() P.name = "[number] of [suit]" P.card_icon = "[colour]num" + P.back_icon = "card_back" cards += P for(var/number in list("jack","queen","king")) P = new() P.name = "[number] of [suit]" P.card_icon = "[colour]col" + P.back_icon = "card_back" cards += P @@ -48,7 +57,7 @@ for(var/datum/playingcard/P in H.cards) cards += P qdel(O) - user << "You place your cards on the bottom of the deck." + user << "You place your cards on the bottom of \the [src]." return ..() @@ -128,12 +137,12 @@ /obj/item/weapon/hand/attackby(obj/O as obj, mob/user as mob) if(istype(O,/obj/item/weapon/hand)) var/obj/item/weapon/hand/H = O - for(var/datum/playingcard/P in H.cards) - cards += P - src.concealed = H.concealed - qdel(O) - user.put_in_hands(src) - update_icon() + for(var/datum/playingcard/P in cards) + H.cards += P + H.concealed = src.concealed + user.drop_from_inventory(src,user.loc) + qdel(src) + H.update_icon() return ..() @@ -159,6 +168,28 @@ deal_at(usr, over) +/obj/item/weapon/pack/ + name = "Card Pack" + desc = "For those with disposible income." + + icon_state = "card_pack" + icon = 'icons/obj/playing_cards.dmi' + w_class = 1 + var/list/cards = list() + + +/obj/item/weapon/pack/attack_self(var/mob/user as mob) + user.visible_message("[user] rips open \the [src]!") + var/obj/item/weapon/hand/H = new() + + H.cards += cards + cards.Cut(); + user.drop_item() + qdel(src) + + H.update_icon() + user.put_in_active_hand(H) + /obj/item/weapon/hand name = "hand of cards" desc = "Some playing cards." @@ -226,7 +257,7 @@ if(cards.len == 1) var/datum/playingcard/P = cards[1] - var/image/I = new(src.icon, (concealed ? "card_back" : "[P.card_icon]") ) + var/image/I = new(src.icon, (concealed ? "[P.back_icon]" : "[P.card_icon]") ) I.pixel_x += (-5+rand(10)) I.pixel_y += (-5+rand(10)) overlays += I @@ -249,7 +280,7 @@ M.Translate(-2, 0) var/i = 0 for(var/datum/playingcard/P in cards) - var/image/I = new(src.icon, (concealed ? "card_back" : "[P.card_icon]") ) + var/image/I = new(src.icon, (concealed ? "[P.back_icon]" : "[P.card_icon]") ) //I.pixel_x = origin+(offset*i) switch(direction) if(SOUTH) diff --git a/code/modules/games/spaceball_cards.dm b/code/modules/games/spaceball_cards.dm new file mode 100644 index 0000000000..a65cea598a --- /dev/null +++ b/code/modules/games/spaceball_cards.dm @@ -0,0 +1,23 @@ +/obj/item/weapon/pack/spaceball + name = "spaceball booster pack" + desc = "Officially licensed to take your money." + icon_state = "card_pack_spaceball" + +/obj/item/weapon/pack/spaceball/New() + var/datum/playingcard/P + var/i + var/year = 554 + text2num(time2text(world.timeofday, "YYYY")) + for(i=0;i<5;i++) + P = new() + if(prob(1)) + P.name = "Spaceball Jones, [year] Brickburn Galaxy Trekers" + P.card_icon = "spaceball_jones" + else + var/language_type = pick(/datum/language/human,/datum/language/diona,/datum/language/tajaran,/datum/language/unathi) + var/datum/language/L = new language_type() + var/team = pick("Brickburn Galaxy Trekers","Mars Rovers", "Qerrbalak Saints", "Moghes Rockets", "Ahdomai Lightening", "Vir Vixens", "Euphoric-Earth Alligators") + P.name = "[L.get_random_name(pick(MALE,FEMALE))], [year - rand(0,50)] [team]" + P.card_icon = "spaceball_standard" + P.back_icon = "card_back_spaceball" + + cards += P \ No newline at end of file diff --git a/code/modules/games/tarot.dm b/code/modules/games/tarot.dm new file mode 100644 index 0000000000..b8e8618af0 --- /dev/null +++ b/code/modules/games/tarot.dm @@ -0,0 +1,39 @@ +/* this is a playing card deck based off of the Rider-Waite Tarot Deck. +*/ + +/obj/item/weapon/deck/tarot + name = "deck of tarot cards" + desc = "For all your occult needs!" + icon_state = "deck_tarot" + +/obj/item/weapon/deck/tarot/New() + ..() + + var/datum/playingcard/P + for(var/name in list("Fool","Magician","High Priestess","Empress","Emperor","Hierophant","Lovers","Chariot","Strength","Hermit","Wheel of Fortune","Justice","Hanged Man","Death","Temperance","Devil","Tower","Star","Moon","Sun","Judgement","World")) + P = new() + P.name = "[name]" + P.card_icon = "tarot_major" + P.back_icon = "card_back_tarot" + cards += P + for(var/suit in list("wands","pentacles","cups","swords")) + + + for(var/number in list("ace","two","three","four","five","six","seven","eight","nine","ten","page","knight","queen","king")) + P = new() + P.name = "[number] of [suit]" + P.card_icon = "tarot_[suit]" + P.back_icon = "card_back_tarot" + cards += P + +/obj/item/weapon/deck/tarot/attack_self(var/mob/user as mob) + var/list/newcards = list() + while(cards.len) + var/datum/playingcard/P = pick(cards) + P.name = replacetext(P.name," reversed","") + if(prob(50)) + P.name += " reversed" + newcards += P + cards -= P + cards = newcards + user.visible_message("\The [user] shuffles [src].") \ No newline at end of file diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 15931f44d3..9ee2f83879 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -9,7 +9,8 @@ var/list/holder_mob_icon_cache = list() show_messages = 1 sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/head.dmi' + "Vox" = 'icons/mob/species/vox/head.dmi', + "Seromi" = 'icons/mob/species/seromi/head.dmi' ) origin_tech = null diff --git a/code/modules/mob/language/station.dm b/code/modules/mob/language/station.dm index 53d42c4769..d28cd987c0 100644 --- a/code/modules/mob/language/station.dm +++ b/code/modules/mob/language/station.dm @@ -115,6 +115,25 @@ else return pick(ai_names) +/datum/language/seromi + name = "Schechi" + desc = "A trilling language spoken by the diminutive Seromi." + speech_verb = "chirps" + ask_verb = "chirrups" + exclaim_verb = "trills" + colour = "alien" + key = "v" + flags = WHITELISTED + space_chance = 50 + syllables = list( + "ca", "ra", "ma", "sa", "na", "ta", "la", "sha", "scha", "a", "a", + "ce", "re", "me", "se", "ne", "te", "le", "she", "sche", "e", "e", + "ci", "ri", "mi", "si", "ni", "ti", "li", "shi", "schi", "i", "i" + ) + +/datum/language/seromi/get_random_name(gender) + return ..(gender, 1, 4, 1.5) + //Syllable Lists /* This list really long, mainly because I can't make up my mind about which mandarin syllables should be removed, diff --git a/code/modules/mob/living/bot/ed209bot.dm b/code/modules/mob/living/bot/ed209bot.dm index 570e58ec2e..ac15eca6ce 100644 --- a/code/modules/mob/living/bot/ed209bot.dm +++ b/code/modules/mob/living/bot/ed209bot.dm @@ -56,8 +56,6 @@ return last_shot = world.time - var/turf/T = get_turf(src) - var/turf/U = get_turf(A) var/projectile = /obj/item/projectile/beam/stun if(emagged) @@ -66,13 +64,7 @@ playsound(loc, emagged ? 'sound/weapons/Laser.ogg' : 'sound/weapons/Taser.ogg', 50, 1) var/obj/item/projectile/P = new projectile(loc) - P.original = A - P.starting = T - P.current = T - P.yo = U.y - T.y - P.xo = U.x - T.x - spawn() - P.process() + P.launch(A) return // Assembly diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 8bbdbccb18..217bb2bfc8 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1632,11 +1632,12 @@ hud_list[HEALTH_HUD] = holder if (BITTEST(hud_updateflag, LIFE_HUD)) - var/image/holder = hud_list[STATUS_HUD] + var/image/holder = hud_list[LIFE_HUD] if(stat == DEAD) holder.icon_state = "huddead" else holder.icon_state = "hudhealthy" + hud_list[LIFE_HUD] = holder if (BITTEST(hud_updateflag, STATUS_HUD)) var/foundVirus = 0 diff --git a/code/modules/mob/living/carbon/human/species/station/seromi.dm b/code/modules/mob/living/carbon/human/species/station/seromi.dm new file mode 100644 index 0000000000..92743d2ae5 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/station/seromi.dm @@ -0,0 +1,113 @@ +/datum/species/seromi + name = "Seromi" + name_plural = "Seromii" + blurb = "A race of feathered raptors who developed alongside the Skrell, inhabiting \ + the polar tundral regions outside of Skrell territory. Extremely fragile, they developed \ + hunting skills that emphasized taking out their prey without themselves getting hit. They \ + are only recently becoming known in human space after reaching space with Skrell assistance." + + num_alternate_languages = 2 + secondary_langs = list("Schechi") + name_language = "Schechi" + + blood_color = "#D514F7" + flesh_color = "#5F7BB0" + base_color = "#001144" + tail = "seromitail" + tail_hair = "feathers" + + icobase = 'icons/mob/human_races/r_seromi.dmi' + deform = 'icons/mob/human_races/r_seromi.dmi' + damage_overlays = 'icons/mob/human_races/masks/dam_seromi.dmi' + damage_mask = 'icons/mob/human_races/masks/dam_mask_seromi.dmi' + blood_mask = 'icons/mob/human_races/masks/blood_seromi.dmi' + + slowdown = -1 + total_health = 50 + brute_mod = 1.35 + burn_mod = 1.35 + mob_size = MOB_SMALL + holder_type = /obj/item/weapon/holder/human + short_sighted = 1 + gluttonous = 1 + + spawn_flags = CAN_JOIN | IS_WHITELISTED + appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_EYE_COLOR + bump_flag = MONKEY + swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL + push_flags = MONKEY|SLIME|SIMPLE_ANIMAL|ALIEN + + cold_level_1 = 180 + cold_level_2 = 130 + cold_level_3 = 70 + heat_level_1 = 320 + heat_level_2 = 370 + heat_level_3 = 600 + heat_discomfort_level = 292 + heat_discomfort_strings = list( + "Your feathers prickle in the heat.", + "You feel uncomfortably warm.", + ) + cold_discomfort_level = 180 + + has_limbs = list( + BP_CHEST = list("path" = /obj/item/organ/external/chest), + BP_GROIN = list("path" = /obj/item/organ/external/groin), + BP_HEAD = list("path" = /obj/item/organ/external/head/seromi), + BP_L_ARM = list("path" = /obj/item/organ/external/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), + BP_L_HAND = list("path" = /obj/item/organ/external/hand/seromi), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/seromi), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot/seromi), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/seromi) + ) + + has_organ = list( + O_HEART = /obj/item/organ/internal/heart, + O_LUNGS = /obj/item/organ/internal/lungs, + O_LIVER = /obj/item/organ/internal/liver, + O_KIDNEYS = /obj/item/organ/internal/kidneys, + O_BRAIN = /obj/item/organ/internal/brain, + O_EYES = /obj/item/organ/internal/eyes + ) + + unarmed_types = list( + /datum/unarmed_attack/bite/sharp, + /datum/unarmed_attack/claws, + /datum/unarmed_attack/stomp/weak + ) + + var/shock_cap = 30 + var/hallucination_cap = 25 + +// I'm... so... ronrery, so ronery... +/datum/species/seromi/handle_environment_special(var/mob/living/carbon/human/H) + + // If they're dead or unconcious they're a bit beyond this kind of thing. + if(H.stat) + return + + // No point processing if we're already stressing the hell out. + if(H.hallucination >= hallucination_cap && H.shock_stage >= shock_cap) + return + + // Check for company. + for(var/mob/living/M in viewers(H)) + if(M == H || M.stat == DEAD || M.invisibility > H.see_invisible) + continue + if(M.faction == "neutral" || M.faction == H.faction) + return + + // No company? Suffer :( + if(H.shock_stage < shock_cap) + H.shock_stage += 1 + if(H.shock_stage >= shock_cap && H.hallucination < hallucination_cap) + H.hallucination += 2.5 + +/datum/species/seromi/get_vision_flags(var/mob/living/carbon/human/H) + if(!(H.sdisabilities & DEAF) && !H.ear_deaf) + return SEE_SELF|SEE_MOBS + else + return SEE_SELF diff --git a/code/modules/mob/living/simple_animal/friendly/mushroom.dm b/code/modules/mob/living/simple_animal/friendly/mushroom.dm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 899a01c3fa..e80c1becff 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -191,13 +191,7 @@ if (!istype(target, /turf)) qdel(A) return - A.current = target - A.starting = get_turf(src) - A.original = get_turf(target) - A.yo = target:y - start:y - A.xo = target:x - start:x - spawn( 0 ) - A.process() + A.launch(target) return /mob/living/simple_animal/hostile/proc/DestroySurroundings() diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index d8b9fbd7cf..bcc0edbac4 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -61,6 +61,21 @@ name = "Short Hair 2" icon_state = "hair_shorthair3" + Seromi + name = "Seromi Plumage" + icon_state = "seromi_default" + species_allowed = list("Seromi") + + Seromi_ears + name = "Seromi Ears" + icon_state = "seromi_ears" + species_allowed = list("Seromi") + + Seromi_excited + name = "Seromi Spiky" + icon_state = "seromi_spiky" + species_allowed = list("Seromi") + cut name = "Cut Hair" icon_state = "hair_c" diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index bb9f37a2ae..69bd18853f 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -1326,8 +1326,8 @@ Note that amputating the affected organ does in fact remove the infection from t /obj/item/organ/external/head/skrell eye_icon = "skrell_eyes_s" -/obj/item/organ/external/head/resomi - eye_icon = "eyes_resomi" +/obj/item/organ/external/head/seromi + eye_icon = "eyes_seromi" /obj/item/organ/external/head/vox eye_icon = "vox_eyes_s" diff --git a/code/modules/organs/robolimbs.dm b/code/modules/organs/robolimbs.dm index ad68815f37..a919192d3e 100644 --- a/code/modules/organs/robolimbs.dm +++ b/code/modules/organs/robolimbs.dm @@ -15,7 +15,7 @@ var/datum/robolimb/basic_robolimb var/desc = "A generic unbranded robotic prosthesis." // Seen when examining a limb. var/icon = 'icons/mob/human_races/robotic.dmi' // Icon base to draw from. var/unavailable_at_chargen // If set, not available at chargen. - var/list/species_cannot_use = list() + var/list/species_cannot_use = list("Seromi") /datum/robolimb/bishop company = "Bishop" diff --git a/code/modules/organs/subtypes/seromi.dm b/code/modules/organs/subtypes/seromi.dm new file mode 100644 index 0000000000..0b11c2a4ba --- /dev/null +++ b/code/modules/organs/subtypes/seromi.dm @@ -0,0 +1,8 @@ +/obj/item/organ/external/foot/seromi + body_hair = "feathers" +/obj/item/organ/external/foot/right/seromi + body_hair = "feathers" +/obj/item/organ/external/hand/seromi + body_hair = "feathers" +/obj/item/organ/external/hand/right/seromi + body_hair = "feathers" diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index ffcdbe89e7..d9a52220ff 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -116,21 +116,21 @@ if(href_list["amount"]) var/id = href_list["add"] - var/amount = isgoodnumber(text2num(href_list["amount"])) + var/amount = Clamp((text2num(href_list["amount"])), 0, 200) R.trans_id_to(src, id, amount) else if (href_list["addcustom"]) var/id = href_list["addcustom"] useramount = input("Select the amount to transfer.", 30, useramount) as num - useramount = isgoodnumber(useramount) + useramount = Clamp(useramount, 0, 200) src.Topic(null, list("amount" = "[useramount]", "add" = "[id]")) else if (href_list["remove"]) if(href_list["amount"]) var/id = href_list["remove"] - var/amount = isgoodnumber(text2num(href_list["amount"])) + var/amount = Clamp((text2num(href_list["amount"])), 0, 200) if(mode) reagents.trans_id_to(beaker, id, amount) else @@ -141,7 +141,7 @@ var/id = href_list["removecustom"] useramount = input("Select the amount to transfer.", 30, useramount) as num - useramount = isgoodnumber(useramount) + useramount = Clamp(useramount, 0, 200) src.Topic(null, list("amount" = "[useramount]", "remove" = "[id]")) else if (href_list["toggle"]) @@ -163,7 +163,8 @@ return if (href_list["createpill_multiple"]) - count = Clamp(isgoodnumber(input("Select the number of pills to make.", 10, pillamount) as num),1,max_pill_count) + count = input("Select the number of pills to make.", "Max [max_pill_count]", pillamount) as num + count = Clamp(count, 1, max_pill_count) if(reagents.total_volume/count < 1) //Sanity checking. return @@ -292,12 +293,6 @@ onclose(user, "chem_master") return -/obj/machinery/chem_master/proc/isgoodnumber(var/num) - if(isnum(num)) - return Clamp(round(num), 0, 200) - else - return 0 - /obj/machinery/chem_master/condimaster name = "CondiMaster 3000" condi = 1 diff --git a/code/modules/reagents/reagent_containers/food.dm b/code/modules/reagents/reagent_containers/food.dm index 1e797d6040..4caf08cc31 100644 --- a/code/modules/reagents/reagent_containers/food.dm +++ b/code/modules/reagents/reagent_containers/food.dm @@ -13,7 +13,7 @@ /obj/item/weapon/reagent_containers/food/New() ..() - if (!pixel_x && !pixel_y) + if (isnull(center_of_mass) && !pixel_x && !pixel_y) src.pixel_x = rand(-6.0, 6) //Randomizes postion src.pixel_y = rand(-6.0, 6) diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index a5c820d96b..b2bcb99f5a 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -11,7 +11,7 @@ var/slices_num var/dried_type = null var/dry = 0 - center_of_mass = list("x"=15, "y"=15) + center_of_mass = list("x"=16, "y"=16) w_class = 2 //Placeholder for effect that trigger on eating that aren't tied to reagents. @@ -250,6 +250,7 @@ icon_state = "aesirsalad" trash = /obj/item/trash/snack_bowl filling_color = "#468C00" + center_of_mass = list("x"=17, "y"=11) New() ..() @@ -264,6 +265,7 @@ icon_state = "candy" trash = /obj/item/trash/candy filling_color = "#7D5F46" + center_of_mass = list("x"=15, "y"=15) New() ..() @@ -275,6 +277,7 @@ name = "Donor Candy" desc = "A little treat for blood donors." trash = /obj/item/trash/candy + New() ..() reagents.add_reagent("nutriment", 10) @@ -286,6 +289,7 @@ desc = "It's a handful of candy corn. Cannot be stored in a detective's hat, alas." icon_state = "candy_corn" filling_color = "#FFFCB0" + center_of_mass = list("x"=14, "y"=10) New() ..() @@ -299,6 +303,7 @@ icon_state = "chips" trash = /obj/item/trash/chips filling_color = "#E8C31E" + center_of_mass = list("x"=15, "y"=15) New() ..() @@ -310,6 +315,7 @@ desc = "COOKIE!!!" icon_state = "COOKIE!!!" filling_color = "#DBC94F" + center_of_mass = list("x"=17, "y"=18) New() ..() @@ -321,6 +327,7 @@ desc = "Such sweet, fattening food." icon_state = "chocolatebar" filling_color = "#7D5F46" + center_of_mass = list("x"=15, "y"=15) New() ..() @@ -334,6 +341,7 @@ desc = "Such sweet, fattening food." icon_state = "chocolateegg" filling_color = "#7D5F46" + center_of_mass = list("x"=16, "y"=13) New() ..() @@ -348,6 +356,7 @@ icon_state = "donut1" filling_color = "#D9C386" var/overlay_state = "box-donut1" + center_of_mass = list("x"=13, "y"=16) /obj/item/weapon/reagent_containers/food/snacks/donut/normal name = "donut" @@ -363,6 +372,7 @@ src.overlay_state = "box-donut2" src.name = "frosted donut" reagents.add_reagent("sprinkles", 2) + center_of_mass = list("x"=19, "y"=16) /obj/item/weapon/reagent_containers/food/snacks/donut/chaos name = "Chaos Donut" @@ -409,6 +419,7 @@ desc = "You jelly?" icon_state = "jdonut1" filling_color = "#ED1169" + center_of_mass = list("x"=16, "y"=11) New() ..() @@ -427,6 +438,7 @@ desc = "You jelly?" icon_state = "jdonut1" filling_color = "#ED1169" + center_of_mass = list("x"=16, "y"=11) New() ..() @@ -445,6 +457,7 @@ desc = "You jelly?" icon_state = "jdonut1" filling_color = "#ED1169" + center_of_mass = list("x"=16, "y"=11) New() ..() @@ -464,6 +477,7 @@ icon_state = "egg" filling_color = "#FDFFD1" volume = 10 + center_of_mass = list("x"=16, "y"=13) /obj/item/weapon/reagent_containers/food/snacks/egg/New() ..() @@ -529,6 +543,7 @@ desc = "A fried egg, with a touch of salt and pepper." icon_state = "friedegg" filling_color = "#FFDF78" + center_of_mass = list("x"=16, "y"=14) New() ..() @@ -553,6 +568,7 @@ icon = 'icons/obj/surgery.dmi' icon_state = "appendix" filling_color = "#E00D34" + center_of_mass = list("x"=16, "y"=16) New() ..() @@ -565,6 +581,7 @@ icon_state = "tofu" desc = "We all love tofu." filling_color = "#FFFEE0" + center_of_mass = list("x"=17, "y"=10) New() ..() @@ -576,6 +593,7 @@ desc = "A fake turkey made from tofu." icon_state = "tofurkey" filling_color = "#FFFEE0" + center_of_mass = list("x"=16, "y"=8) New() ..() @@ -588,6 +606,7 @@ desc = "Moist, peppery breadcrumbs for filling the body cavities of dead birds. Dig in!" icon_state = "stuffing" filling_color = "#C9AC83" + center_of_mass = list("x"=16, "y"=10) New() ..() @@ -599,6 +618,7 @@ desc = "A fillet of spess carp meat" icon_state = "fishfillet" filling_color = "#FFDEFE" + center_of_mass = list("x"=17, "y"=13) New() ..() @@ -611,6 +631,7 @@ desc = "A finger of fish." icon_state = "fishfingers" filling_color = "#FFDEFE" + center_of_mass = list("x"=16, "y"=13) New() ..() @@ -623,6 +644,7 @@ desc = "A slice from a huge mushroom." icon_state = "hugemushroomslice" filling_color = "#E0D7C5" + center_of_mass = list("x"=17, "y"=16) New() ..() @@ -635,6 +657,7 @@ desc = "A slice from a huge tomato" icon_state = "tomatomeat" filling_color = "#DB0000" + center_of_mass = list("x"=17, "y"=16) New() ..() @@ -646,6 +669,7 @@ desc = "A very manly slab of meat." icon_state = "bearmeat" filling_color = "#DB0000" + center_of_mass = list("x"=16, "y"=10) New() ..() @@ -658,6 +682,7 @@ desc = "A slab of green meat. Smells like acid." icon_state = "xenomeat" filling_color = "#43DE18" + center_of_mass = list("x"=16, "y"=10) New() ..() @@ -670,6 +695,7 @@ desc = "A great meal all round." icon_state = "meatball" filling_color = "#DB0000" + center_of_mass = list("x"=16, "y"=16) New() ..() @@ -681,6 +707,7 @@ desc = "A piece of mixed, long meat." icon_state = "sausage" filling_color = "#DB0000" + center_of_mass = list("x"=16, "y"=16) New() ..() @@ -709,6 +736,7 @@ desc = "The food of choice for the seasoned traitor." icon_state = "donkpocket" filling_color = "#DEDEAB" + center_of_mass = list("x"=16, "y"=10) New() ..() @@ -739,6 +767,7 @@ desc = "A strange looking burger. It looks almost sentient." icon_state = "brainburger" filling_color = "#F2B6EA" + center_of_mass = list("x"=15, "y"=11) New() ..() @@ -751,6 +780,7 @@ desc = "Spooky! It doesn't look very filling." icon_state = "ghostburger" filling_color = "#FFF2FF" + center_of_mass = list("x"=16, "y"=11) New() ..() @@ -767,6 +797,7 @@ name = "-burger" desc = "A bloody burger." icon_state = "hburger" + center_of_mass = list("x"=16, "y"=11) New() ..() reagents.add_reagent("protein", 6) @@ -776,6 +807,8 @@ name = "cheeseburger" desc = "The cheese adds a good flavor." icon_state = "cheeseburger" + center_of_mass = list("x"=16, "y"=11) + New() ..() reagents.add_reagent("protein", 2) @@ -786,6 +819,7 @@ desc = "The cornerstone of every nutritious breakfast." icon_state = "hburger" filling_color = "#D63C3C" + center_of_mass = list("x"=16, "y"=11) New() ..() @@ -798,6 +832,7 @@ desc = "Almost like a carp is yelling somewhere... Give me back that fillet -o- carp, give me that carp." icon_state = "fishburger" filling_color = "#FFDEFE" + center_of_mass = list("x"=16, "y"=10) New() ..() @@ -810,6 +845,7 @@ desc = "What.. is that meat?" icon_state = "tofuburger" filling_color = "#FFFEE0" + center_of_mass = list("x"=16, "y"=10) New() ..() @@ -821,6 +857,7 @@ desc = "The lettuce is the only organic component. Beep." icon_state = "roburger" filling_color = "#CCCCCC" + center_of_mass = list("x"=16, "y"=11) New() ..() @@ -835,6 +872,7 @@ icon_state = "roburger" filling_color = "#CCCCCC" volume = 100 + center_of_mass = list("x"=16, "y"=11) New() ..() @@ -846,6 +884,7 @@ desc = "Smells caustic. Tastes like heresy." icon_state = "xburger" filling_color = "#43DE18" + center_of_mass = list("x"=16, "y"=11) New() ..() @@ -857,6 +896,7 @@ desc = "This tastes funny..." icon_state = "clownburger" filling_color = "#FF00FF" + center_of_mass = list("x"=17, "y"=12) New() ..() @@ -868,6 +908,7 @@ desc = "Its taste defies language." icon_state = "mimeburger" filling_color = "#FFFFFF" + center_of_mass = list("x"=16, "y"=11) New() ..() @@ -880,6 +921,7 @@ icon_state = "omelette" trash = /obj/item/trash/plate filling_color = "#FFF9A8" + center_of_mass = list("x"=16, "y"=13) //var/herp = 0 New() @@ -892,6 +934,7 @@ desc = "A delicious and spongy little cake" icon_state = "muffin" filling_color = "#E0CF9B" + center_of_mass = list("x"=17, "y"=4) New() ..() @@ -904,6 +947,7 @@ icon_state = "pie" trash = /obj/item/trash/plate filling_color = "#FBFFB8" + center_of_mass = list("x"=16, "y"=13) /obj/item/weapon/reagent_containers/food/snacks/pie/New() ..() @@ -922,6 +966,8 @@ desc = "No black birds, this is a good sign." icon_state = "berryclafoutis" trash = /obj/item/trash/plate + center_of_mass = list("x"=16, "y"=13) + New() ..() reagents.add_reagent("nutriment", 4) @@ -934,6 +980,7 @@ icon_state = "waffles" trash = /obj/item/trash/waffles filling_color = "#E6DEB5" + center_of_mass = list("x"=15, "y"=11) New() ..() @@ -946,6 +993,7 @@ icon_state = "eggplantparm" trash = /obj/item/trash/plate filling_color = "#4D2F5E" + center_of_mass = list("x"=16, "y"=11) New() ..() @@ -958,6 +1006,7 @@ icon_state = "soylent_green" trash = /obj/item/trash/waffles filling_color = "#B8E6B5" + center_of_mass = list("x"=15, "y"=11) New() ..() @@ -970,6 +1019,7 @@ icon_state = "soylent_yellow" trash = /obj/item/trash/waffles filling_color = "#E6FA61" + center_of_mass = list("x"=15, "y"=11) New() ..() @@ -983,6 +1033,7 @@ desc = "An old barber recipe, very delicious!" trash = /obj/item/trash/plate filling_color = "#948051" + center_of_mass = list("x"=16, "y"=13) New() ..() @@ -995,6 +1046,7 @@ desc = "A delicious tofu pie." trash = /obj/item/trash/plate filling_color = "#FFFEE0" + center_of_mass = list("x"=16, "y"=13) New() ..() @@ -1006,6 +1058,7 @@ desc = "Sweet and tasty poison pie." icon_state = "amanita_pie" filling_color = "#FFCCCC" + center_of_mass = list("x"=17, "y"=9) New() ..() @@ -1019,6 +1072,7 @@ desc = "I bet you love stuff made out of plump helmets!" icon_state = "plump_pie" filling_color = "#B8279B" + center_of_mass = list("x"=17, "y"=9) New() ..() @@ -1038,6 +1092,7 @@ desc = "A delicious meatpie. Probably heretical." trash = /obj/item/trash/plate filling_color = "#43DE18" + center_of_mass = list("x"=16, "y"=13) New() ..() @@ -1050,6 +1105,7 @@ icon_state = "wingfangchu" trash = /obj/item/trash/snack_bowl filling_color = "#43DE18" + center_of_mass = list("x"=17, "y"=9) New() ..() @@ -1063,6 +1119,7 @@ desc = "A human meat, on a stick." trash = /obj/item/stack/rods filling_color = "#A85340" + center_of_mass = list("x"=17, "y"=15) New() ..() @@ -1075,6 +1132,7 @@ desc = "Delicious meat, on a stick." trash = /obj/item/stack/rods filling_color = "#A85340" + center_of_mass = list("x"=17, "y"=15) New() ..() @@ -1087,6 +1145,7 @@ desc = "Vegan meat, on a stick." trash = /obj/item/stack/rods filling_color = "#FFFEE0" + center_of_mass = list("x"=17, "y"=15) New() ..() @@ -1099,6 +1158,7 @@ icon_state = "cubancarp" trash = /obj/item/trash/plate filling_color = "#E9ADFF" + center_of_mass = list("x"=12, "y"=5) New() ..() @@ -1115,6 +1175,7 @@ trash = /obj/item/trash/popcorn var/unpopped = 0 filling_color = "#FFFAD4" + center_of_mass = list("x"=16, "y"=8) New() ..() @@ -1134,6 +1195,7 @@ desc = "Beef jerky made from the finest space cows." trash = /obj/item/trash/sosjerky filling_color = "#631212" + center_of_mass = list("x"=15, "y"=9) New() ..() @@ -1146,6 +1208,7 @@ desc = "Best raisins in the universe. Not sure why." trash = /obj/item/trash/raisins filling_color = "#343834" + center_of_mass = list("x"=15, "y"=4) New() ..() @@ -1156,6 +1219,7 @@ icon_state = "space_twinkie" desc = "Guaranteed to survive longer then you will." filling_color = "#FFE591" + center_of_mass = list("x"=15, "y"=11) New() ..() @@ -1168,6 +1232,7 @@ desc = "Bite sized cheesie snacks that will honk all over your mouth" trash = /obj/item/trash/cheesie filling_color = "#FFA305" + center_of_mass = list("x"=15, "y"=9) New() ..() @@ -1179,6 +1244,7 @@ icon_state = "syndi_cakes" desc = "An extremely moist snack cake that tastes just as good after being nuked." filling_color = "#FF5D05" + center_of_mass = list("x"=16, "y"=10) trash = /obj/item/trash/syndi_cakes New() @@ -1192,6 +1258,7 @@ desc = "Totally baked." icon_state = "loadedbakedpotato" filling_color = "#9C7A68" + center_of_mass = list("x"=16, "y"=10) New() ..() @@ -1205,6 +1272,7 @@ icon_state = "fries" trash = /obj/item/trash/plate filling_color = "#EDDD00" + center_of_mass = list("x"=16, "y"=11) New() ..() @@ -1217,6 +1285,7 @@ icon_state = "soydope" trash = /obj/item/trash/plate filling_color = "#C4BF76" + center_of_mass = list("x"=16, "y"=10) New() ..() @@ -1228,6 +1297,7 @@ desc = "A bundle of raw spaghetti." icon_state = "spagetti" filling_color = "#EDDD00" + center_of_mass = list("x"=16, "y"=16) New() ..() @@ -1240,6 +1310,7 @@ icon_state = "cheesyfries" trash = /obj/item/trash/plate filling_color = "#EDDD00" + center_of_mass = list("x"=16, "y"=11) New() ..() @@ -1252,6 +1323,7 @@ desc = "A true prophecy in each cookie!" icon_state = "fortune_cookie" filling_color = "#E8E79E" + center_of_mass = list("x"=15, "y"=14) New() ..() @@ -1263,6 +1335,7 @@ desc = "Someone should be demoted from chef for this." icon_state = "badrecipe" filling_color = "#211F02" + center_of_mass = list("x"=16, "y"=12) New() ..() @@ -1276,6 +1349,7 @@ icon_state = "meatstake" trash = /obj/item/trash/plate filling_color = "#7A3D11" + center_of_mass = list("x"=16, "y"=13) New() ..() @@ -1290,6 +1364,7 @@ icon_state = "spacylibertyduff" trash = /obj/item/trash/snack_bowl filling_color = "#42B873" + center_of_mass = list("x"=16, "y"=8) New() ..() @@ -1303,6 +1378,7 @@ icon_state = "amanitajelly" trash = /obj/item/trash/snack_bowl filling_color = "#ED0758" + center_of_mass = list("x"=16, "y"=5) New() ..() @@ -1317,6 +1393,7 @@ icon_state = "poppypretzel" bitesize = 2 filling_color = "#916E36" + center_of_mass = list("x"=16, "y"=10) New() ..() @@ -1330,6 +1407,7 @@ icon_state = "meatballsoup" trash = /obj/item/trash/snack_bowl filling_color = "#785210" + center_of_mass = list("x"=16, "y"=8) New() ..() @@ -1340,7 +1418,7 @@ /obj/item/weapon/reagent_containers/food/snacks/slimesoup name = "slime soup" desc = "If no water is available, you may substitute tears." - icon_state = "slimesoup" + icon_state = "slimesoup" //nonexistant? filling_color = "#C4DBA0" New() @@ -1354,6 +1432,7 @@ desc = "Smells like copper." icon_state = "tomatosoup" filling_color = "#FF0000" + center_of_mass = list("x"=16, "y"=7) New() ..() @@ -1367,6 +1446,7 @@ desc = "Not very funny." icon_state = "clownstears" filling_color = "#C4FBFF" + center_of_mass = list("x"=16, "y"=7) New() ..() @@ -1381,6 +1461,7 @@ icon_state = "vegetablesoup" trash = /obj/item/trash/snack_bowl filling_color = "#AFC4B5" + center_of_mass = list("x"=16, "y"=8) New() ..() @@ -1394,6 +1475,7 @@ icon_state = "nettlesoup" trash = /obj/item/trash/snack_bowl filling_color = "#AFC4B5" + center_of_mass = list("x"=16, "y"=7) New() ..() @@ -1408,6 +1490,7 @@ icon_state = "mysterysoup" trash = /obj/item/trash/snack_bowl filling_color = "#F082FF" + center_of_mass = list("x"=16, "y"=6) New() ..() @@ -1455,6 +1538,7 @@ icon_state = "wishsoup" trash = /obj/item/trash/snack_bowl filling_color = "#D1F4FF" + center_of_mass = list("x"=16, "y"=11) New() ..() @@ -1470,6 +1554,7 @@ icon_state = "hotchili" trash = /obj/item/trash/snack_bowl filling_color = "#FF3C00" + center_of_mass = list("x"=15, "y"=9) New() ..() @@ -1485,6 +1570,7 @@ desc = "This slush is barely a liquid!" icon_state = "coldchili" filling_color = "#2B00FF" + center_of_mass = list("x"=15, "y"=9) trash = /obj/item/trash/snack_bowl New() @@ -1502,10 +1588,13 @@ icon_state = "bacon" var/obj/item/device/radio/beacon/bacon/baconbeacon bitesize = 2 + center_of_mass = list("x"=18, "y"=13) + New() ..() reagents.add_reagent("nutriment", 4) baconbeacon = new /obj/item/device/radio/beacon/bacon(src) + On_Consume() if(!reagents.total_volume) baconbeacon.loc = usr @@ -1518,6 +1607,7 @@ icon_state = "monkeycube" bitesize = 12 filling_color = "#ADAC7F" + center_of_mass = list("x"=16, "y"=14) var/wrapped = 0 var/monkey_type = "Monkey" @@ -1603,6 +1693,7 @@ desc = "Forget the Big Mac. THIS is the future!" icon_state = "bigbiteburger" filling_color = "#E3D681" + center_of_mass = list("x"=16, "y"=11) New() ..() @@ -1616,6 +1707,7 @@ icon_state = "enchiladas" trash = /obj/item/trash/tray filling_color = "#A36A1F" + center_of_mass = list("x"=16, "y"=13) New() ..() @@ -1630,6 +1722,7 @@ icon_state = "monkeysdelight" trash = /obj/item/trash/tray filling_color = "#5C3C11" + center_of_mass = list("x"=16, "y"=13) New() ..() @@ -1644,6 +1737,7 @@ desc = "Bon appetit!" icon_state = "baguette" filling_color = "#E3D796" + center_of_mass = list("x"=18, "y"=12) New() ..() @@ -1657,6 +1751,7 @@ desc = "I do say so myself chap." icon_state = "fishandchips" filling_color = "#E3D796" + center_of_mass = list("x"=16, "y"=16) New() ..() @@ -1671,6 +1766,7 @@ icon_state = "sandwich" trash = /obj/item/trash/plate filling_color = "#D9BE29" + center_of_mass = list("x"=16, "y"=4) New() ..() @@ -1684,6 +1780,7 @@ icon_state = "toastedsandwich" trash = /obj/item/trash/plate filling_color = "#D9BE29" + center_of_mass = list("x"=16, "y"=4) New() ..() @@ -1711,6 +1808,7 @@ icon_state = "tomatosoup" trash = /obj/item/trash/snack_bowl filling_color = "#D92929" + center_of_mass = list("x"=16, "y"=7) New() ..() @@ -1724,6 +1822,7 @@ icon_state = "rofflewaffles" trash = /obj/item/trash/waffles filling_color = "#FF00F7" + center_of_mass = list("x"=15, "y"=11) New() ..() @@ -1736,6 +1835,7 @@ desc = "A nice and warm stew. Healthy and strong." icon_state = "stew" filling_color = "#9E673A" + center_of_mass = list("x"=16, "y"=5) New() ..() @@ -1752,6 +1852,7 @@ icon_state = "jellytoast" trash = /obj/item/trash/plate filling_color = "#B572AB" + center_of_mass = list("x"=16, "y"=8) New() ..() @@ -1773,6 +1874,7 @@ desc = "Culinary delight..?" icon_state = "jellyburger" filling_color = "#B572AB" + center_of_mass = list("x"=16, "y"=11) New() ..() @@ -1794,6 +1896,8 @@ desc = "The universes best soup! Yum!!!" icon_state = "milosoup" trash = /obj/item/trash/snack_bowl + center_of_mass = list("x"=16, "y"=7) + New() ..() reagents.add_reagent("nutriment", 8) @@ -1805,6 +1909,8 @@ desc = "Even non-vegetarians will LOVE this!" icon_state = "stewedsoymeat" trash = /obj/item/trash/plate + center_of_mass = list("x"=16, "y"=10) + New() ..() reagents.add_reagent("nutriment", 8) @@ -1816,6 +1922,7 @@ icon_state = "spagettiboiled" trash = /obj/item/trash/plate filling_color = "#FCEE81" + center_of_mass = list("x"=16, "y"=10) New() ..() @@ -1828,6 +1935,7 @@ icon_state = "boiledrice" trash = /obj/item/trash/snack_bowl filling_color = "#FFFBDB" + center_of_mass = list("x"=17, "y"=11) New() ..() @@ -1840,6 +1948,7 @@ icon_state = "rpudding" trash = /obj/item/trash/snack_bowl filling_color = "#FFFBDB" + center_of_mass = list("x"=17, "y"=11) New() ..() @@ -1852,6 +1961,7 @@ icon_state = "pastatomato" trash = /obj/item/trash/plate filling_color = "#DE4545" + center_of_mass = list("x"=16, "y"=10) New() ..() @@ -1865,6 +1975,7 @@ icon_state = "meatballspagetti" trash = /obj/item/trash/plate filling_color = "#DE4545" + center_of_mass = list("x"=16, "y"=10) New() ..() @@ -1877,6 +1988,7 @@ desc = "A lawyers favourite" icon_state = "spesslaw" filling_color = "#DE4545" + center_of_mass = list("x"=16, "y"=10) New() ..() @@ -1884,23 +1996,13 @@ reagents.add_reagent("nutriment", 4) bitesize = 2 -/obj/item/weapon/reagent_containers/food/snacks/poppypretzel - name = "Poppy Pretzel" - desc = "A large soft pretzel full of POP!" - icon_state = "poppypretzel" - filling_color = "#AB7D2E" - - New() - ..() - reagents.add_reagent("nutriment", 5) - bitesize = 2 - /obj/item/weapon/reagent_containers/food/snacks/carrotfries name = "Carrot Fries" desc = "Tasty fries from fresh Carrots." icon_state = "carrotfries" trash = /obj/item/trash/plate filling_color = "#FAA005" + center_of_mass = list("x"=16, "y"=11) New() ..() @@ -1913,6 +2015,7 @@ desc = "This is a mountain of a burger. FOOD!" icon_state = "superbiteburger" filling_color = "#CCA26A" + center_of_mass = list("x"=16, "y"=3) New() ..() @@ -1925,6 +2028,7 @@ desc = "An apple coated in sugary sweetness." icon_state = "candiedapple" filling_color = "#F21873" + center_of_mass = list("x"=15, "y"=13) New() ..() @@ -1936,6 +2040,7 @@ desc = "A pie containing sweet sweet love... or apple." icon_state = "applepie" filling_color = "#E0EDC5" + center_of_mass = list("x"=16, "y"=13) New() ..() @@ -1948,6 +2053,7 @@ desc = "Taste so good, make a grown man cry." icon_state = "cherrypie" filling_color = "#FF525A" + center_of_mass = list("x"=16, "y"=11) New() ..() @@ -1959,6 +2065,7 @@ desc = "It is very bitter and winy." icon_state = "twobread" filling_color = "#DBCC9A" + center_of_mass = list("x"=15, "y"=12) New() ..() @@ -1971,6 +2078,7 @@ icon_state = "jellysandwich" trash = /obj/item/trash/plate filling_color = "#9E3A78" + center_of_mass = list("x"=16, "y"=8) New() ..() @@ -1990,7 +2098,7 @@ /obj/item/weapon/reagent_containers/food/snacks/boiledslimecore name = "Boiled slime Core" desc = "A boiled red thing." - icon_state = "boiledslimecore" + icon_state = "boiledslimecore" //nonexistant? New() ..() reagents.add_reagent("slimejelly", 5) @@ -2001,6 +2109,7 @@ desc = "it is only wafer thin." icon_state = "mint" filling_color = "#F2F2F2" + center_of_mass = list("x"=16, "y"=14) New() ..() @@ -2013,6 +2122,7 @@ icon_state = "mushroomsoup" trash = /obj/item/trash/snack_bowl filling_color = "#E386BF" + center_of_mass = list("x"=17, "y"=10) New() ..() @@ -2024,6 +2134,7 @@ desc = "This is a finely-prepared plump helmet biscuit. The ingredients are exceptionally minced plump helmet, and well-minced dwarven wheat flour." icon_state = "phelmbiscuit" filling_color = "#CFB4C4" + center_of_mass = list("x"=16, "y"=13) New() ..() @@ -2043,6 +2154,7 @@ icon_state = "chawanmushi" trash = /obj/item/trash/snack_bowl filling_color = "#F0F2E4" + center_of_mass = list("x"=17, "y"=10) New() ..() @@ -2055,6 +2167,7 @@ icon_state = "beetsoup" trash = /obj/item/trash/snack_bowl filling_color = "#FAC9FF" + center_of_mass = list("x"=15, "y"=8) New() ..() @@ -2068,7 +2181,7 @@ icon_state = "herbsalad" trash = /obj/item/trash/snack_bowl filling_color = "#76B87F" - + center_of_mass = list("x"=17, "y"=11) New() ..() reagents.add_reagent("nutriment", 8) @@ -2080,6 +2193,7 @@ icon_state = "validsalad" trash = /obj/item/trash/snack_bowl filling_color = "#76B87F" + center_of_mass = list("x"=17, "y"=11) New() ..() @@ -2093,6 +2207,7 @@ icon_state = "gappletart" trash = /obj/item/trash/plate filling_color = "#FFFF00" + center_of_mass = list("x"=16, "y"=18) New() ..() @@ -2115,6 +2230,8 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice slices_num = 5 filling_color = "#FF7575" + center_of_mass = list("x"=16, "y"=9) + New() ..() reagents.add_reagent("protein", 20) @@ -2128,6 +2245,7 @@ trash = /obj/item/trash/plate filling_color = "#FF7575" bitesize = 2 + center_of_mass = list("x"=16, "y"=13) /obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread name = "xenomeatbread loaf" @@ -2136,6 +2254,8 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice slices_num = 5 filling_color = "#8AFF75" + center_of_mass = list("x"=16, "y"=9) + New() ..() reagents.add_reagent("protein", 20) @@ -2149,6 +2269,7 @@ trash = /obj/item/trash/plate filling_color = "#8AFF75" bitesize = 2 + center_of_mass = list("x"=16, "y"=13) /obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread name = "Banana-nut bread" @@ -2157,6 +2278,8 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/bananabreadslice slices_num = 5 filling_color = "#EDE5AD" + center_of_mass = list("x"=16, "y"=9) + New() ..() reagents.add_reagent("banana", 20) @@ -2170,6 +2293,7 @@ trash = /obj/item/trash/plate filling_color = "#EDE5AD" bitesize = 2 + center_of_mass = list("x"=16, "y"=8) /obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread name = "Tofubread" @@ -2178,6 +2302,8 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice slices_num = 5 filling_color = "#F7FFE0" + center_of_mass = list("x"=16, "y"=9) + New() ..() reagents.add_reagent("nutriment", 30) @@ -2190,6 +2316,7 @@ trash = /obj/item/trash/plate filling_color = "#F7FFE0" bitesize = 2 + center_of_mass = list("x"=16, "y"=13) /obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake @@ -2199,6 +2326,8 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice slices_num = 5 filling_color = "#FFD675" + center_of_mass = list("x"=16, "y"=10) + New() ..() reagents.add_reagent("nutriment", 25) @@ -2212,6 +2341,7 @@ trash = /obj/item/trash/plate filling_color = "#FFD675" bitesize = 2 + center_of_mass = list("x"=16, "y"=14) /obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake name = "Brain Cake" @@ -2220,6 +2350,8 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/braincakeslice slices_num = 5 filling_color = "#E6AEDB" + center_of_mass = list("x"=16, "y"=10) + New() ..() reagents.add_reagent("protein", 25) @@ -2234,6 +2366,7 @@ trash = /obj/item/trash/plate filling_color = "#E6AEDB" bitesize = 2 + center_of_mass = list("x"=16, "y"=12) /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake name = "Cheese Cake" @@ -2242,6 +2375,8 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice slices_num = 5 filling_color = "#FAF7AF" + center_of_mass = list("x"=16, "y"=10) + New() ..() reagents.add_reagent("protein", 15) @@ -2255,6 +2390,7 @@ trash = /obj/item/trash/plate filling_color = "#FAF7AF" bitesize = 2 + center_of_mass = list("x"=16, "y"=14) /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake name = "Vanilla Cake" @@ -2263,6 +2399,8 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/plaincakeslice slices_num = 5 filling_color = "#F7EDD5" + center_of_mass = list("x"=16, "y"=10) + New() ..() reagents.add_reagent("nutriment", 20) @@ -2274,6 +2412,7 @@ trash = /obj/item/trash/plate filling_color = "#F7EDD5" bitesize = 2 + center_of_mass = list("x"=16, "y"=14) /obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake name = "Orange Cake" @@ -2282,6 +2421,8 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/orangecakeslice slices_num = 5 filling_color = "#FADA8E" + center_of_mass = list("x"=16, "y"=10) + New() ..() reagents.add_reagent("nutriment", 20) @@ -2293,6 +2434,7 @@ trash = /obj/item/trash/plate filling_color = "#FADA8E" bitesize = 2 + center_of_mass = list("x"=16, "y"=14) /obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake name = "Lime Cake" @@ -2301,6 +2443,8 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/limecakeslice slices_num = 5 filling_color = "#CBFA8E" + center_of_mass = list("x"=16, "y"=10) + New() ..() reagents.add_reagent("nutriment", 20) @@ -2312,6 +2456,7 @@ trash = /obj/item/trash/plate filling_color = "#CBFA8E" bitesize = 2 + center_of_mass = list("x"=16, "y"=14) /obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake name = "Lemon Cake" @@ -2320,6 +2465,8 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice slices_num = 5 filling_color = "#FAFA8E" + center_of_mass = list("x"=16, "y"=10) + New() ..() reagents.add_reagent("nutriment", 20) @@ -2331,6 +2478,7 @@ trash = /obj/item/trash/plate filling_color = "#FAFA8E" bitesize = 2 + center_of_mass = list("x"=16, "y"=14) /obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake name = "Chocolate Cake" @@ -2339,6 +2487,8 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice slices_num = 5 filling_color = "#805930" + center_of_mass = list("x"=16, "y"=10) + New() ..() reagents.add_reagent("nutriment", 20) @@ -2350,6 +2500,7 @@ trash = /obj/item/trash/plate filling_color = "#805930" bitesize = 2 + center_of_mass = list("x"=16, "y"=14) /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel name = "Cheese wheel" @@ -2358,6 +2509,8 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/cheesewedge slices_num = 5 filling_color = "#FFF700" + center_of_mass = list("x"=16, "y"=10) + New() ..() reagents.add_reagent("protein", 20) @@ -2369,6 +2522,7 @@ icon_state = "cheesewedge" filling_color = "#FFF700" bitesize = 2 + center_of_mass = list("x"=16, "y"=10) /obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake name = "Birthday Cake" @@ -2377,6 +2531,8 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice slices_num = 5 filling_color = "#FFD6D6" + center_of_mass = list("x"=16, "y"=10) + New() ..() reagents.add_reagent("nutriment", 20) @@ -2390,6 +2546,7 @@ trash = /obj/item/trash/plate filling_color = "#FFD6D6" bitesize = 2 + center_of_mass = list("x"=16, "y"=14) /obj/item/weapon/reagent_containers/food/snacks/sliceable/bread name = "Bread" @@ -2398,6 +2555,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/breadslice slices_num = 5 filling_color = "#FFE396" + center_of_mass = list("x"=16, "y"=9) New() ..() @@ -2411,6 +2569,7 @@ trash = /obj/item/trash/plate filling_color = "#D27332" bitesize = 2 + center_of_mass = list("x"=16, "y"=4) /obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread @@ -2420,6 +2579,8 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice slices_num = 5 filling_color = "#FFF896" + center_of_mass = list("x"=16, "y"=9) + New() ..() reagents.add_reagent("protein", 15) @@ -2433,6 +2594,7 @@ trash = /obj/item/trash/plate filling_color = "#FFF896" bitesize = 2 + center_of_mass = list("x"=16, "y"=13) /obj/item/weapon/reagent_containers/food/snacks/watermelonslice @@ -2441,6 +2603,7 @@ icon_state = "watermelonslice" filling_color = "#FF3867" bitesize = 2 + center_of_mass = list("x"=16, "y"=10) /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake @@ -2450,6 +2613,8 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/applecakeslice slices_num = 5 filling_color = "#EBF5B8" + center_of_mass = list("x"=16, "y"=10) + New() ..() reagents.add_reagent("nutriment", 15) @@ -2461,6 +2626,7 @@ trash = /obj/item/trash/plate filling_color = "#EBF5B8" bitesize = 2 + center_of_mass = list("x"=16, "y"=14) /obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie name = "Pumpkin Pie" @@ -2469,6 +2635,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice slices_num = 5 filling_color = "#F5B951" + center_of_mass = list("x"=16, "y"=10) New() ..() @@ -2481,12 +2648,14 @@ trash = /obj/item/trash/plate filling_color = "#F5B951" bitesize = 2 + center_of_mass = list("x"=16, "y"=12) /obj/item/weapon/reagent_containers/food/snacks/cracker name = "Cracker" desc = "It's a salted cracker." icon_state = "cracker" filling_color = "#F5DEB8" + center_of_mass = list("x"=17, "y"=6) New() ..() @@ -2506,6 +2675,8 @@ icon_state = "pizzamargherita" slice_path = /obj/item/weapon/reagent_containers/food/snacks/margheritaslice slices_num = 6 + center_of_mass = list("x"=16, "y"=11) + New() ..() reagents.add_reagent("nutriment", 35) @@ -2519,6 +2690,7 @@ icon_state = "pizzamargheritaslice" filling_color = "#BAA14C" bitesize = 2 + center_of_mass = list("x"=18, "y"=13) /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza name = "Meatpizza" @@ -2526,6 +2698,8 @@ icon_state = "meatpizza" slice_path = /obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice slices_num = 6 + center_of_mass = list("x"=16, "y"=11) + New() ..() reagents.add_reagent("protein", 44) @@ -2538,6 +2712,7 @@ icon_state = "meatpizzaslice" filling_color = "#BAA14C" bitesize = 2 + center_of_mass = list("x"=18, "y"=13) /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza name = "Mushroompizza" @@ -2545,6 +2720,8 @@ icon_state = "mushroompizza" slice_path = /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice slices_num = 6 + center_of_mass = list("x"=16, "y"=11) + New() ..() reagents.add_reagent("nutriment", 35) @@ -2557,6 +2734,7 @@ icon_state = "mushroompizzaslice" filling_color = "#BAA14C" bitesize = 2 + center_of_mass = list("x"=18, "y"=13) /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza name = "Vegetable pizza" @@ -2564,6 +2742,8 @@ icon_state = "vegetablepizza" slice_path = /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice slices_num = 6 + center_of_mass = list("x"=16, "y"=11) + New() ..() reagents.add_reagent("nutriment", 25) @@ -2578,6 +2758,7 @@ icon_state = "vegetablepizzaslice" filling_color = "#BAA14C" bitesize = 2 + center_of_mass = list("x"=18, "y"=13) /obj/item/pizzabox name = "pizza box" @@ -2761,6 +2942,7 @@ icon_state = "dionaroast" trash = /obj/item/trash/plate filling_color = "#75754B" + center_of_mass = list("x"=16, "y"=7) New() ..() @@ -2780,6 +2962,8 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "dough" bitesize = 2 + center_of_mass = list("x"=16, "y"=13) + New() ..() reagents.add_reagent("protein", 1) @@ -2800,6 +2984,8 @@ icon_state = "flat dough" slice_path = /obj/item/weapon/reagent_containers/food/snacks/doughslice slices_num = 3 + center_of_mass = list("x"=16, "y"=16) + New() ..() reagents.add_reagent("protein", 1) @@ -2813,6 +2999,8 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/spagetti slices_num = 1 bitesize = 2 + center_of_mass = list("x"=17, "y"=19) + New() ..() reagents.add_reagent("nutriment", 1) @@ -2823,6 +3011,8 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "bun" bitesize = 2 + center_of_mass = list("x"=16, "y"=12) + New() ..() reagents.add_reagent("nutriment", 4) @@ -2876,6 +3066,8 @@ desc = "Take a bite!" icon_state = "taco" bitesize = 3 + center_of_mass = list("x"=21, "y"=12) + New() ..() reagents.add_reagent("protein", 3) @@ -2887,6 +3079,8 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "rawcutlet" bitesize = 1 + center_of_mass = list("x"=17, "y"=20) + New() ..() reagents.add_reagent("protein", 1) @@ -2897,6 +3091,8 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "cutlet" bitesize = 2 + center_of_mass = list("x"=17, "y"=20) + New() ..() reagents.add_reagent("protein", 2) @@ -2907,6 +3103,8 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "rawmeatball" bitesize = 2 + center_of_mass = list("x"=16, "y"=15) + New() ..() reagents.add_reagent("protein", 2) @@ -2916,6 +3114,8 @@ desc = "Unrelated to dogs, maybe." icon_state = "hotdog" bitesize = 2 + center_of_mass = list("x"=16, "y"=17) + New() ..() reagents.add_reagent("protein", 6) @@ -2926,6 +3126,8 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "flatbread" bitesize = 2 + center_of_mass = list("x"=16, "y"=16) + New() ..() reagents.add_reagent("nutriment", 3) @@ -2945,6 +3147,8 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "rawsticks" bitesize = 2 + center_of_mass = list("x"=16, "y"=12) + New() ..() reagents.add_reagent("nutriment", 3) @@ -2955,6 +3159,7 @@ icon_state = "liquidfood" trash = /obj/item/trash/liquidfood filling_color = "#A8A8A8" + center_of_mass = list("x"=16, "y"=15) New() ..() @@ -2969,6 +3174,7 @@ icon_state = "tastybread" trash = /obj/item/trash/tastybread filling_color = "#A66829" + center_of_mass = list("x"=17, "y"=16) New() ..() @@ -2980,6 +3186,7 @@ desc = "Cured fungus shipped all the way from Jargon 4, almost like jerky! Almost." icon_state = "skrellsnacks" filling_color = "#A66829" + center_of_mass = list("x"=15, "y"=12) New() ..() diff --git a/code/modules/reagents/reagent_containers/food/snacks/meat.dm b/code/modules/reagents/reagent_containers/food/snacks/meat.dm index 46bf9e4baf..7ea52765fc 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/meat.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/meat.dm @@ -4,6 +4,7 @@ icon_state = "meat" health = 180 filling_color = "#FF1C1C" + center_of_mass = list("x"=16, "y"=14) New() ..() reagents.add_reagent("protein", 9) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index c3abc66cb2..4444512149 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -743,10 +743,17 @@ CIRCUITS BELOW desc = "Allows for the construction of \a [item_name] circuit board." /datum/design/circuit/arcademachine - name = "arcade machine" + name = "battle arcade machine" id = "arcademachine" req_tech = list(TECH_DATA = 1) - build_path = /obj/item/weapon/circuitboard/arcade + build_path = /obj/item/weapon/circuitboard/arcade/battle + sort_string = "MAAAA" + +/datum/design/circuit/oriontrail + name = "orion trail arcade machine" + id = "oriontrail" + req_tech = list(TECH_DATA = 1) + build_path = /obj/item/weapon/circuitboard/arcade/orion_trail sort_string = "MAAAA" /datum/design/circuit/seccamera diff --git a/icons/effects/species.dmi b/icons/effects/species.dmi index 8c231b9b68..9063000442 100644 Binary files a/icons/effects/species.dmi and b/icons/effects/species.dmi differ diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi index 3c2ebe91d5..af2de326ab 100644 Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index ac9c437e9c..67cb238905 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/human_races/masks/blood_resomi.dmi b/icons/mob/human_races/masks/blood_seromi.dmi similarity index 100% rename from icons/mob/human_races/masks/blood_resomi.dmi rename to icons/mob/human_races/masks/blood_seromi.dmi diff --git a/icons/mob/human_races/masks/dam_mask_resomi.dmi b/icons/mob/human_races/masks/dam_mask_seromi.dmi similarity index 100% rename from icons/mob/human_races/masks/dam_mask_resomi.dmi rename to icons/mob/human_races/masks/dam_mask_seromi.dmi diff --git a/icons/mob/human_races/masks/dam_resomi.dmi b/icons/mob/human_races/masks/dam_seromi.dmi similarity index 100% rename from icons/mob/human_races/masks/dam_resomi.dmi rename to icons/mob/human_races/masks/dam_seromi.dmi diff --git a/icons/mob/human_races/r_seromi.dmi b/icons/mob/human_races/r_seromi.dmi new file mode 100644 index 0000000000..e370ec6b1c Binary files /dev/null and b/icons/mob/human_races/r_seromi.dmi differ diff --git a/icons/mob/species/seromi/back.dmi b/icons/mob/species/seromi/back.dmi new file mode 100644 index 0000000000..66455ffb3c Binary files /dev/null and b/icons/mob/species/seromi/back.dmi differ diff --git a/icons/mob/species/seromi/belt.dmi b/icons/mob/species/seromi/belt.dmi new file mode 100644 index 0000000000..19a4a78cd9 Binary files /dev/null and b/icons/mob/species/seromi/belt.dmi differ diff --git a/icons/mob/species/seromi/ears.dmi b/icons/mob/species/seromi/ears.dmi new file mode 100644 index 0000000000..5ebdd8a5ee Binary files /dev/null and b/icons/mob/species/seromi/ears.dmi differ diff --git a/icons/mob/species/seromi/eyes.dmi b/icons/mob/species/seromi/eyes.dmi new file mode 100644 index 0000000000..17a41de747 Binary files /dev/null and b/icons/mob/species/seromi/eyes.dmi differ diff --git a/icons/mob/species/seromi/gloves.dmi b/icons/mob/species/seromi/gloves.dmi new file mode 100644 index 0000000000..7ff6c97e69 Binary files /dev/null and b/icons/mob/species/seromi/gloves.dmi differ diff --git a/icons/mob/species/seromi/handcuffs.dmi b/icons/mob/species/seromi/handcuffs.dmi new file mode 100644 index 0000000000..12b35d4e9c Binary files /dev/null and b/icons/mob/species/seromi/handcuffs.dmi differ diff --git a/icons/mob/species/seromi/head.dmi b/icons/mob/species/seromi/head.dmi new file mode 100644 index 0000000000..d12b0df396 Binary files /dev/null and b/icons/mob/species/seromi/head.dmi differ diff --git a/icons/mob/species/seromi/id.dmi b/icons/mob/species/seromi/id.dmi new file mode 100644 index 0000000000..fb4d5b6e58 Binary files /dev/null and b/icons/mob/species/seromi/id.dmi differ diff --git a/icons/mob/species/seromi/masks.dmi b/icons/mob/species/seromi/masks.dmi new file mode 100644 index 0000000000..8742285ed3 Binary files /dev/null and b/icons/mob/species/seromi/masks.dmi differ diff --git a/icons/mob/species/seromi/shoes.dmi b/icons/mob/species/seromi/shoes.dmi new file mode 100644 index 0000000000..f901a71cb8 Binary files /dev/null and b/icons/mob/species/seromi/shoes.dmi differ diff --git a/icons/mob/species/seromi/suit.dmi b/icons/mob/species/seromi/suit.dmi new file mode 100644 index 0000000000..84d18ade1a Binary files /dev/null and b/icons/mob/species/seromi/suit.dmi differ diff --git a/icons/mob/species/seromi/uniform.dmi b/icons/mob/species/seromi/uniform.dmi new file mode 100644 index 0000000000..86cea78d38 Binary files /dev/null and b/icons/mob/species/seromi/uniform.dmi differ diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi index be0cee0f05..2222f74a78 100644 Binary files a/icons/mob/ties.dmi and b/icons/mob/ties.dmi differ diff --git a/icons/obj/clothing/species/seromi/uniform.dmi b/icons/obj/clothing/species/seromi/uniform.dmi new file mode 100644 index 0000000000..dbb76626e0 Binary files /dev/null and b/icons/obj/clothing/species/seromi/uniform.dmi differ diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi index 216b454d7b..cc09803419 100644 Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi index 252ad88bde..d0364f237a 100644 Binary files a/icons/obj/food.dmi and b/icons/obj/food.dmi differ diff --git a/icons/obj/playing_cards.dmi b/icons/obj/playing_cards.dmi index 47b5b3e745..a5fa632cb3 100644 Binary files a/icons/obj/playing_cards.dmi and b/icons/obj/playing_cards.dmi differ diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi index e918f5ec62..37785865d1 100644 Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ diff --git a/maps/polaris-1.dmm b/maps/polaris-1.dmm index 0fc1cf53f7..692f067fae 100644 --- a/maps/polaris-1.dmm +++ b/maps/polaris-1.dmm @@ -3922,7 +3922,7 @@ "bxv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bxw" = (/obj/structure/table/reinforced,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bxx" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills{pixel_y = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) -"bxy" = (/turf/simulated/floor/tiled/white,/area/space) +"bxy" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/closet/l3closet/virology,/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "west bump"; pixel_x = -24},/obj/item/clothing/mask/gas,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/white,/area/medical/virology) "bxz" = (/obj/structure/closet/secure_closet/CMO,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bxA" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access = list(6,5)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/genetics_cloning) "bxB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/virology) @@ -4389,7 +4389,6 @@ "bGu" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/turf/simulated/floor/tiled,/area/medical/morgue) "bGv" = (/obj/structure/morgue,/turf/simulated/floor/tiled,/area/medical/morgue) "bGw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/medical/morgue) -"bGx" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/closet/l3closet/virology,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/item/clothing/mask/gas,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/white,/area/medical/virology) "bGy" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/white,/area/medical/virology) "bGz" = (/obj/structure/table/steel,/obj/machinery/light_switch{pixel_x = 26; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/machinery/camera/network/medbay{c_tag = "MED - Virology Airlock"; dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) "bGA" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/solar/auxport) @@ -7422,8 +7421,8 @@ "cML" = (/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) "cMM" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/engineering/atmos) "cMN" = (/turf/simulated/wall/r_wall,/area/engineering/atmos) -"cMO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/atmos{name = "Atmospherics Maintenance"; req_access = list(12,24)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/engineering/atmos) -"cMP" = (/obj/machinery/door/airlock/atmos{name = "Atmospherics Maintenance"; req_access = list(12,24)},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/engineering/atmos) +"cMO" = (/obj/machinery/door/airlock/atmos{name = "Atmospherics Maintenance"; req_access = list(24)},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/engineering/atmos) +"cMP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/atmos{name = "Atmospherics Maintenance"; req_access = list(24)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/engineering/atmos) "cMQ" = (/obj/machinery/computer/general_air_control{frequency = 1441; name = "Tank Monitor"; sensors = list("n2_sensor" = "Nitrogen", "o2_sensor" = "Oxygen", "co2_sensor" = "Carbon Dioxide", "tox_sensor" = "Toxins", "n2o_sensor" = "Nitrous Oxide", "waste_sensor" = "Gas Mix Tank")},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) "cMR" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) "cMS" = (/obj/machinery/newscaster{pixel_x = 28; pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) @@ -9755,12 +9754,12 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbb aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaaaaaaadaadaaaaadaadaadaaaaadaadaadaaaacAaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsrahyahybssbmqbstbpcbpcbmqbsubsvbswbsxbsybszbsAbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbsBbfubsCbdTbekbsEbsFbsFbsGbsHbsIbsJbrlbsKbrnbsLbsMbsNbrrbsObsPahyahybamaZzbcnbhrbamahyahyahyahyahyahyaahaahaahaahbjWbsQbrxbsRbsSbsTbsUbsQbjWaahaahaahaahaZdaZHaZdahyaZIbdqbbEbsVdCDdCLbbIbbJbbKbbGbbGbbGbbIbbJbbKdCHdCCbrCbbEbdqaZIahyaZPaYGbetaUwbrGahyahybeZbeZbsWbeZbeZblMblMblMbsXbsXbsXbsXbsYbsZbsXbsXbtabtbbtcbtdbtdbtebtfbtbbtgbthbtibtjbtkbtlbtmboObtnbtobtpbtqbtpbtrboOaZWaZmaahbgmbtsbttbnBbtubnDbtvbnDbtwbmmbtxbmmbtybkJbnIbijbtzbtAbtBbtCbtDbgmaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAaaabtEbtFbtGaaabtEbtFbtGaaabtEbtFbtGaaabtEbtFbtGaaaacAaadaadaaaaaaaaaaaaaaaaaabtHbtIbtJbtKaaaaaabtLbtMbtNbtLbtLbtObnPbnQbtPbtQbnPbtRbnTbkPbkPbkPbtSbnTbkPaahaahaahaahaahaahaahaahaahaahaahbdTbtTbtUbtVbpybtWbtXbtYbpzbtZbeEbuabubbucbudbuebufbufbufbugbuhbuiahyahybamaZzbcnbhrbamahyahyahyahyahyaahaahaahaahaahbjWbujbukbulbumbukbukbujbjWaahaahaahaahaZdaZHaZdahyahybbMbaMbbEbsVdCDdCNdCPdCOdCzdCzdCzdCNdCPdCOdCCbrCbbEbaybbDahyahybaNbdubdvbunbrGahyahybuoberbuqburbusbutbuubuvbsXbuwbuxbuybuzbuAbuBbuCbuDbuEbuFbuGbuHbuIbtfbuJbuKbuLbuMbuNbuObuLbuNboObuPbuQbuRbuSbuTbuUboOaZWaZmaahbgmbgmbifbuVbkHboSbuWbmmbmfbmmbmmbtCbuXbkJbuYbwubuZbvabsmbvbbgmbgmaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaacAaadbtEbvcbtGaadbtEbvcbtGaadbtEbvcbtGaadbtEbvcbtGaadacOaaaaadaadaaaaaaaaaaaaaaabtHbtHbvdbvebtHbvfbvgbvhbvibvjbvkbkPbmobmpbmqbmpbmobkRahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahbdTbvlbvmbvnbrebvobvpbvqbvrbpybvsbvtbvubvvbvwbvxbvybvzbvAbvBbvCbllahyahybaiaZzbcnbhrbaiahyahyahyaahaahaahaahaahaahaahbjWbjWbjWbvDbjWbjWbjWbjWbjWaahaahaahaahaZdaZHaZdahyahyahybbMaZLbaJbgEbgEbvGbvHbiEbhzbiEbvKbvLbgEbgEbiGaZJbbDahyahyahybbNaYGbetaUwbvNahyahybvObosbuqbvQboNbvSbvTbvUbsXbvVbvWbvXbvYbvYbvZbwabwbbwcbwdbwebwebwfbwgbwhbwibwjbwkbwlbwmbwnbwoboObwpbwqbwrbtqbwsbwtboOaZWaZmaahaahbgmbgmbgmbgmbAQbwvbwwbmfbwxbwybwzbkJbkJbkJbkJbwAbwBbwCbgmbgmaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaadaadaaaaaaaaaaaabtHbwDbwEbwFbtHbwGbwHbwIbwJbwKbwLbkObkPbkRbkQbkSbkPbkPaahaahahyahyahyahyahyahyaahaahbwMbwMbwMbwMbwMbwMbwMbwMbwMbwNbwObwPbdTbrAbwRbwSbwTbrebwUbuabsCbucbwVbwWbwXbllbwYbwZbwYbllahybeebeeblmblnblobboahyahyaahaahaahaahaahaahaahaahaahaahaahbxaaahaahaahaahaahaahaahaahaZdaZdaZHaZdaZdahyahyahyaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIahyahyahyahyaToaZjblDaZlaToaToahybxcbxdbxebvSbxfbxgbxhbxibsXbxjbxkbxlbxmbvYbxnbsXbxobxpbxqbthbthbxrbtfbxsbxtbxubxvbxwbxxbxybxzboOboOboOboObxAboOboOboOaZWaZmaahaahaahaahaahbgmbxBbxCbkJbxDbkJbxBbxEbkJbxFbxGbkJbxHbxIbkJbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaadaadaaaaaaaaaaaabtHbwDbwEbwFbtHbwGbwHbwIbwJbwKbwLbkObkPbkRbkQbkSbkPbkPaahaahahyahyahyahyahyahyaahaahbwMbwMbwMbwMbwMbwMbwMbwMbwMbwNbwObwPbdTbrAbwRbwSbwTbrebwUbuabsCbucbwVbwWbwXbllbwYbwZbwYbllahybeebeeblmblnblobboahyahyaahaahaahaahaahaahaahaahaahaahaahbxaaahaahaahaahaahaahaahaahaZdaZdaZHaZdaZdahyahyahyaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIahyahyahyahyaToaZjblDaZlaToaToahybxcbxdbxebvSbxfbxgbxhbxibsXbxjbxkbxlbxmbvYbxnbsXbxobxpbxqbthbthbxrbtfbxsbxtbxubxvbxwbxxbADbxzboOboOboOboObxAboOboOboOaZWaZmaahaahaahaahaahbgmbxBbxCbkJbxDbkJbxBbxEbkJbxFbxGbkJbxHbxIbkJbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaaaaadaadaaaaaaaaabtHbxJbxKbxLbtHbtLbxMbxNbxObxPbxQbtLaahaahaahahyahyaahaahahyahyahyahyaahaahaahaahbwMbwMbxRbxSbxTbxUbxVbxWbxXbwMbxYbxZbyabdTbybbycbydbyebdTbyfbuabygbyhbyhbyhbyhbyhbyibyjbykbyhbfzbeebylaZzbcnbymbboaZdaahaahaahaahaahaahaahaahaahaahaahaahbxaaahaahaahaahaahaahaahaZdaZdaZGaZHaZGaZdaZdahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaZdaTobbObynbiPbyoaTobypbyqbyrbysbytbyubyvbywbyxbyybyzbyAbyBbyCbvYbyDbsXbyEbtbbyFbyGbyHbyIbyJbyKbyLbyMbyNbyObyPbyQbyRbySbyTbyUbyVbyWbyXbyYbySaZWaZmaahaahaahaahaahbgmbyZbzabzbbzcbzdbzebzfbzgbzhbzibkJbzjbzkbzlbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaaaaaaaadbzmbznbznbznbznbzobtHbtHbtLbzpbzqbzrbzsbztbtLaahaahaahaahahyahyahyahyahyahyaahaahaahaahaahbwMbzubzvbzwbzxbzybzzbzAbzBbzCbzDbzEbzFbzGbzHbzIbzJbzKbzLbzMbzNbzObzPbzQbzRbzSbzPbzTbzUbzVbzWbzXbzYbecbajbhqbhrbzZaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaahaahaahbxaaahaahaZdaZdaZdaZdaZdaZdbAabAbbAcbAdaZGaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdbAebAfbAgbAhaUvbAibAjbAkbvSbAlbvSbAmbxgbAnbAobuCbApbAqbArbAsbAtbAubuCbAvbAwbqmbAxbAxbAybtfbAzbwibAAbABbACbADbAEbAFbySbAGbAHbAIbyWbyWbAJbySbAKaZmaahaahaahaahaahbgmbgmbALbAMbANbAObAPcBYbARbASbATbAUbAVbAWbAXbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadbAYaadaaaaadbAYaadaaaaadbAYaadaaaaadbAYaadaaaaadaaaaaaaaabAZbBabBbbBcbBdbBebBfbBgbBhbBibtLbBjbBkbBlbBmbztbtLaahaahaahaahaahahyahyahyahyaahaahaahaahaahaahbwMbBnbzwbBobBpbBqbBrbBsbBrbBtbBubBvbBwbBxbjJbBybjJbBzbjJbjJbBAbBBbBCbBDbBEbBFbBGbBHbBIbBJbBKbBLbBMbBNbBObBPbBQbBRbBSbBTbBUbBUbBUbBUbBVbBUbBWaZdaZdaZdaZdbBXaZdaZdaZdbBYbBZbBZbBZbBZbBZbCabCbbCcbCdbCdbCdbCdbCdbCdbCdbCebCdbCdbCdbCfbCgbCgbCgbCgbCgbCgbCgbCgbChbCgbCibCjbCkbClbCmbbRbCnbCobCpbCqbCrbvQbCsbvSbCtbCubwabCvbCwbCxbCybCzbCAbwabCBbCCbCDbCEbCEbCFbCGbwhbxtbCHbCIbCJbCKbCLbySbySbCMbCNbCObCPbyWbAJbySbAKaZmaahaahaahaahaahaahbgmbgmbgmbCQbCRbgmbgmbgmbgmbgmbgmbCSbCTbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbCUbCVbCWbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCYbCVbCVbCVbCZbDabDbbDcbDdbDebDfbDgbDhbDibDjbtLbtLbDkbtLbtLbDlbtLaahaahaahaahaahaahaahahyahyaahaahaahaahaahaahbwMbDmbDnbDobDpbDqbDrbDsbDtbwMbDubDvbDwbDxbDybDzbDAbDBbDCbDDbDEbDFbyhbDGbDHbDIbDJbDKbDLbzVbzWbzXbzYbecbecbDMbDNbDOaZdbDPbDQbDRbDSbDTbDUbDVbDWbDXbDYbDZbEabEbbBUbBUbBUbEcaZdaZdaZdaZdaZGbEdbEebEfbEgbEgbEgbEgbEgbEgbEgbEhbEgbEgbEgbEibEjbEjbEjbEjbEjaZGaZGbEkbiDbjYaZdbElaYGbetbEmaVlbEnbEobEpbEqbErbEsbEtbEubEvbEwbsXbsYbsZbExbsYbEybsZbsXbEzbtbbyFbyGbyHbEAbtfbEBbuKbECbEDbuKbySbySbySbEEbEFbEGbEHbEIbyWbAJbySbAKaZmaahaahaahaahaahaahaahbgmbEJbEKbELbgmaahaahaahaahbgmbgmbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadbEMaadaaaaadbEMaadaaaaadbEMaadaaaaadbEMaadaaaaadaaaaaaaaabAZbBabENbEObEPbEQbznbERbESbETbEUbEUbEVbEWbtHbEXbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbEYbEZbFabFbbFcbFdbFebFfbwMbFgbfubFhbFibFjbFkbFlbFmbFibFnbFobFnbyhbyhbyhbyhbyhbrDbFqbFrbyhbfzbeebFsbecbcnbFtbboaZdbFubFubFubFubFubFubFvbFwaZdbFxbFybFxaZdbFzbFAbFBbFCaZdaahaahaZdaZdaZGaZHaZGbFDbFEbFFbFGbEgbFHbFIbFJbFJbFKbFLbFMbFNbFObFPbFObEjbEjbEjbFQbEjaZdaZdaTobFRbgJaUvbFSaTobypbyqbFTbAlbFUbFVbFWbFXbEqbFYbFZbGabGbbGcbGdbGebGfbGgbGhbGibGjbGjbGkbGlbtbbGmbGnbGobGpbySbGqbGrbGsbGtbGubGvbGwbyWbAJbySaZWaZmaZmaahaahaahaahaahaahbgmbGxbGybGzbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadbEMaadaaaaadbEMaadaaaaadbEMaadaaaaadbEMaadaaaaadaaaaaaaaabAZbBabENbEObEPbEQbznbERbESbETbEUbEUbEVbEWbtHbEXbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbEYbEZbFabFbbFcbFdbFebFfbwMbFgbfubFhbFibFjbFkbFlbFmbFibFnbFobFnbyhbyhbyhbyhbyhbrDbFqbFrbyhbfzbeebFsbecbcnbFtbboaZdbFubFubFubFubFubFubFvbFwaZdbFxbFybFxaZdbFzbFAbFBbFCaZdaahaahaZdaZdaZGaZHaZGbFDbFEbFFbFGbEgbFHbFIbFJbFJbFKbFLbFMbFNbFObFPbFObEjbEjbEjbFQbEjaZdaZdaTobFRbgJaUvbFSaTobypbyqbFTbAlbFUbFVbFWbFXbEqbFYbFZbGabGbbGcbGdbGebGfbGgbGhbGibGjbGjbGkbGlbtbbGmbGnbGobGpbySbGqbGrbGsbGtbGubGvbGwbyWbAJbySaZWaZmaZmaahaahaahaahaahaahbgmbxybGybGzbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaadbtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaaaaaabGBbznbznbznbznbtHbtHbGCbGDbDibGEbGFbGGbGHbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbwMbwMbGIbGJbGJbGJbwMbwMbwMbGKbGLbyfbGMbGNbGObGPbGQbFibGRbGSbGTbGUbGVbGWbGXbGYbFnbGZbFnbGYahybeebeebHabcnbecbHbbHcbFubHdbHebHfbHgbFubFubFubFubHhbHibHhbHjbHjbHkbHlbHjbHmaahaahaahaZdaZdaZHbEgbEgbHnbHobHpbEgbHqbHrbHsbHsbHsbHtbHubHvbHwbHwbHxbHybHzbHAbHBbEjahyahyaToaZjblDbHCaToaToahybxcbHDbHEbCqbHFbHGbHHbCqbHIbHJbHKbHLbHMbHNbHMbHObHPbHPbHQbHPbHPbHRbHSbHTbHUbHVbHWbHXbySbHYbHZbIabGtbGubGvbIbbyWbAJbySbbbbIcaZmaahaahaahaahaahaahbgmbIdbIebIfbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaahaahaahaahaahaahaahaahbtHbtHbtHbtHbtHbIgbIhbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbIjbGJbGIbGJbGJbGJbGJbIkbwMbIlbfubImbInbIobIpbIqbIrbFibIsbItbIubIvbIubIwbIubIxbIybIzbIAbGYahyahybIBbecbcnbecbICbHcbIDbIEbIFbIFbIGbIHbIIbIJbFubIKbILbIMbHjbINbIObIPbHjaahaahaahaahaZdaZGaZHbEgbIQbIRbISbITbEgbIUbIVbIWbFJbFJbIXbIYbIZbJabJabJabJabJabJbbJcbJdahyahybJeaYGbetaUvbpPahyahybuobosbvSbvSbJfbJgbvSbvSbJhbJibJjbJkbxqbJlbJmbJnbthbJobJpbJqbJrbJsbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbJFbJGbJHbJIbySbglbfpaZmaahaahaahaahaahaahbgmbgmbJJbJKbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaacAaaaaaaaahaahahyahyahyahyahyahyahyahyaahaahaahbtHbtHbJLbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbJMbGJbJNbJObGJbGJbGJbIkbwMbJPbtUbJQbJRbJSbJTbJUbJVbFibGYbJWbJXbJYbJXbJXbJXbJZbJYbKabKbbKcahyahybKdbecbcnbecbKebHcbKfbKgbKhbKibKjbKhbKhbKkbFubKlbILbKmbHjbKnbKobKpbHjaahaahaahaahaZdbKqaZHbEgbIQbKrbKsbKtbEgbKubKvbKwbFJbKxbKycuybKAbJabJabJabJabJabKBbKCbKDahyahybrGbKEbynbKFbrGahyahybvObsDbKHbKHbKIbKKbKLbKMbKNbKNbKObKPbKQbKRbKNbKSbKTbKUbKVbKSbKWbKWbKWbKWbKWbKXbKYbKZbLabySbySbySbySbySbySbySbySbySbySbLbbLcaZmbLdbLebLebLebLdbLdbLfbLgbLhbLibLfbLdaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9808,7 +9807,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadcvMcvMcvMcvMcvMaadaadaadcuScuScuScuScuScuScuScIUcIVcIWcIXcIYcIZddOcJbcCtcCtahycIccJccJdcJccIcahyahyaahcJecJecJfcJgcJeaahaahaahcBIcCDcJhcJicJjcJkcJlcJmcJmcwdcJncJocJpcCKcJqcGecEwcEwcEwcEwcJrcExcCKahyahycwhczRcwhaahaahaahaahaahcxzcJsczecMLcJuczVcJvczXczYcNgczeczecxzaahaahaahaahaahaahaahczicAbcziaahaahcBacJxcJycJzcGScJAcJBcJCcJDcJEcJFcHmcJGcJHcJIcJJcHmaahaahcBgcHqcBgaahaahcrQcsYcsYcsYcGzcHscJLcJMcJNcHwcGzcxRctbcFdcFdcFdcFdcrQaahaahcHycJOcJPcJQcHycHycMucHycHycJScvAcHEcMvcJTcHEcHEcJUcJVcJWcHEcJXcJYcJZcHIcHIcMwcHIcHIcvHcMxcHOcHOcKccHOcHOcKdcKecKfcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaaaaadbkQaahaahaahaahaahcuScuScuScuScCtcCtcCtcCtcCtcCtaahahycIccJccJccJccIcahyahyaahcJecKgcKhcKicJecKjcKjcKjcBIcBIcKkcKlcBIcKmcKncKocKpcKqcKrcKscKtcKqcKucGedeccKvcEwcKwcKwcKwcCKahyahycwhczRcwhaahaahaahaahaahcxzcKxczecHScKyczecKzczgcKAcHScKBcKBcxzaahaahaahaahaahaahaahczicAbcziaahcKCcKCcNYcKEcKFcKCcKCcKCcKGcKHcKIcKCcKCcKCcKCcKCcKCcKCcKCaahcBgcHqcBgaahaahcrQcrQcrQcrQcrQcKJcKKcKLcKMcHwcGzcxRcKNcFdcFdcFdcFdcrQaahaahcHycKOcKPcKQcKRcKQcMzcMycKUcDAcwIcKVcMBcMAcKYcKZcKYcLacLbcHEcLccLdcLecLfcLecMCcMDcLicwWcHNcLjcLkcLlcLmcLncLmcLocLpcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIccLqcLrcLscIcahyaahaahcJecLtcLucLvcJecLwcLxcLycLzcBIcLAcBIcCGcCGcLBcCGcLCcKqcLDcLEcLFcKqcLGcLGcLGcLGcLGcLGcLGcLGahyahyahycwhczRcwhcziaahaahaahaahcxzcxzcxzcxzcLHcLIcLJcLKcLLcxzcxzcxzcxzaahaahaahaahaahaahcziczicAbczicKCcKCcLMcLNcLOcLPcLQcLRcLScLTcLUcLVcLWcLXcLYcLZcMacMbcMccKCcKCcBgcHqcBgcBgcBgcrQcMdcMecMfcrQcrQcMgcMhcKMcHwcGzcxRctbcFdcFdcFdcFdcrQaahaahcHycMicMjcMkcMlcMmcMndBWcHycyccydcHEdBYdBXdCadBZdCcdCbdCedCddCgdCfdCidChdCkdCjdClcHIcysdCmdCodCncMEcMFcMGcMHcMIcMJcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQcIccMKcNZcMMcIcbkQcMNcMNcMNcMNcMOcMPcKjcMQcMRcMScMTcMUcMVcMWcMXcoucMZcNacMUcNbcNccNdcNecrVcOpcNhcNicNjcNkcLGcNlcLGcLGahyahycwhcNmcNncziczicziczicziczicNocNpcxzcNqcxzcNrcxzcNqcxzcEDcEDcziczicziczicziczicziczicNscAbcNtcKCcNucLPcLPcNvcNwcNwcNxcNycNzcNAcNBcNCcNDcNEcNEcNEcNFcLPcNGcKCcNHcNIcERcNJcERcNKcNLcNMcNNctzcNOcNPcNQcNRcNScNTcNUctbcNVcNVcNWcNXcrQaahaahcHycHycHycHycHycHycHycHycHyczpcuAcHEcHEcHEcHEcHEcHEcHEcHEcHEcHIcHIcHIcHIcHIcHIcHIcHIcuLczqcHOcHOcHOcHOcHOcHOcHOcHOcHOaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQcIccMKcNZcMMcIcbkQcMNcMNcMNcMNcMPcMOcKjcMQcMRcMScMTcMUcMVcMWcMXcoucMZcNacMUcNbcNccNdcNecrVcOpcNhcNicNjcNkcLGcNlcLGcLGahyahycwhcNmcNncziczicziczicziczicNocNpcxzcNqcxzcNrcxzcNqcxzcEDcEDcziczicziczicziczicziczicNscAbcNtcKCcNucLPcLPcNvcNwcNwcNxcNycNzcNAcNBcNCcNDcNEcNEcNEcNFcLPcNGcKCcNHcNIcERcNJcERcNKcNLcNMcNNctzcNOcNPcNQcNRcNScNTcNUctbcNVcNVcNWcNXcrQaahaahcHycHycHycHycHycHycHycHycHyczpcuAcHEcHEcHEcHEcHEcHEcHEcHEcHEcHIcHIcHIcHIcHIcHIcHIcHIcuLczqcHOcHOcHOcHOcHOcHOcHOcHOcHOaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQbkQcOsahycOMbkQbkQcMNcOacObcOccOdcOecOfcOgcOhcOicMTcOjcOkcOlcOlcOmcOncOocPFcOqcNccNdcNecOrcPPcOtcOtcOucOtcOvcOtcOwcLGahyahycwhcOxcOycOzcOAcOBcOCcOCcOCcOCcOAcOAcOAcODcOEcOFcOAcOCcOCcOGcOCcOCcOCcOCcOCcOCcOCcOCcOHcOIcOJcKCcOKcLPcLPcOLcLPcLPcPYcONcOOcOPcOQcONcPYcLPcLPcLPcORcLPcLPcKCcOScHqcGxcOTcGxcOUcOVcsYcOWcOXcrQcOYcHtcOZcPacPbcPbctacPccPccPccPccrQaahaahcPdcPecPfcPgcPhcPicPjcPkcPdcPlcPmcPncuscPpcPpcPqcPpcutcPrcPscPpcPtcPpcPucPpcPpcvkcPncPwcPlcPxcPycPzcPAcPBcPCcPDcPEcPxaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahycQscPGcPGcPHcPGcPIcPJcPKcMNcPLcPMcPMcPNcPOcRfcPQcPRcPScMTcPTcPUcOocPVcPWcOocPXcRucPZcNccQacQbcQccxUcQecQfcQgcQhcQicQjcQkcLGahyahycwhcQlczQczicziczicziczicziczicziczicEDcEDcEEcNscEDczicziczicziczicziczicziczicziczicQmcEDcQncKCcQocQocLPcQpcQqcQrcRJcQtcOOcQucQvcQwcRJcQxcQocLPcQycQqcQocKCcQzcHqcBgcBgcBgcrQcrQcQAcQBcQCcrQcQDcQEcQFcQGcsYcsYcsYcQHcQHcQIcrQcrQaahaahcPdcQJcQKcQKcQLcQKcQKcQMcQNcQOcQPcQQcQRcQRcQRcQScQRcQTcQUcQVcQWcQXcQRcQYcQRcQRcQRcQQcQZcRacRbcRccRccRccRdcRccRccRecPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbLjbLjaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahycSAcRgcRhcRicRjcRkcRlcRmcRncRocRpcRqcRrcRscRtcSLcRvcRwcRxcMTcRycPUcRzcRAcRBcRCcOlcRDcREcRFcRGcRHcRIcTacOtcRKcRLcRMcRNcROcRPcLGahyahycwhcRQcwhcziahyahyahyahyahyahyahycziczicziczicziczicziaahaahaahaahaahaahaahaahaahcziczicRRcRScKCcRTcRWcRVcLPcRWcRXcRJcRYcOOcOPcOQcRZcRJcRTcRWcLPcRVcRWcSacKCcSbcSccBgahyahyahycrQcrQcrQcrQcrQcrQcrQcrQcrQcrQcrQcrQcrQcrQcrQcrQaahaahaahcPdcSdcSecSfcSgcShcSicSjcSjcSkcSlcSmcSlcSlcSlcSncSlcSlcSlcSocSpcSqcSqcSrcSqcSqcSqcSscStcSkcSucSucSvcSwcSxcSycSycSzcPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/polaris.dme b/polaris.dme index 4e131c880f..e613498a3d 100644 --- a/polaris.dme +++ b/polaris.dme @@ -1103,6 +1103,7 @@ #include "code\modules\clothing\under\jobs\engineering.dm" #include "code\modules\clothing\under\jobs\medsci.dm" #include "code\modules\clothing\under\jobs\security.dm" +#include "code\modules\clothing\under\xenos\seromi.dm" #include "code\modules\customitems\item_spawning.dm" #include "code\modules\detectivework\footprints.dm" #include "code\modules\detectivework\forensics.dm" @@ -1176,7 +1177,10 @@ #include "code\modules\flufftext\Hallucination.dm" #include "code\modules\flufftext\TextFilters.dm" #include "code\modules\food\recipes_microwave.dm" +#include "code\modules\games\cardemon.dm" #include "code\modules\games\cards.dm" +#include "code\modules\games\spaceball_cards.dm" +#include "code\modules\games\tarot.dm" #include "code\modules\genetics\side_effects.dm" #include "code\modules\ghosttrap\trap.dm" #include "code\modules\holodeck\HolodeckControl.dm" @@ -1372,6 +1376,7 @@ #include "code\modules\mob\living\carbon\human\species\outsider\vox.dm" #include "code\modules\mob\living\carbon\human\species\station\golem.dm" #include "code\modules\mob\living\carbon\human\species\station\monkey.dm" +#include "code\modules\mob\living\carbon\human\species\station\seromi.dm" #include "code\modules\mob\living\carbon\human\species\station\slime.dm" #include "code\modules\mob\living\carbon\human\species\station\station.dm" #include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_embryo.dm" @@ -1462,6 +1467,7 @@ #include "code\modules\mob\living\simple_animal\friendly\farm_animals.dm" #include "code\modules\mob\living\simple_animal\friendly\lizard.dm" #include "code\modules\mob\living\simple_animal\friendly\mouse.dm" +#include "code\modules\mob\living\simple_animal\friendly\mushroom.dm" #include "code\modules\mob\living\simple_animal\friendly\slime.dm" #include "code\modules\mob\living\simple_animal\friendly\spiderbot.dm" #include "code\modules\mob\living\simple_animal\friendly\tomato.dm" @@ -1536,6 +1542,7 @@ #include "code\modules\organs\wound.dm" #include "code\modules\organs\subtypes\diona.dm" #include "code\modules\organs\subtypes\machine.dm" +#include "code\modules\organs\subtypes\seromi.dm" #include "code\modules\organs\subtypes\standard.dm" #include "code\modules\organs\subtypes\unbreakable.dm" #include "code\modules\organs\subtypes\xenos.dm"