diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index e67d2ad3ac..73ce3f01e8 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -170,7 +170,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin continue //Spread the fire. - if(prob( 50 + 50 * (firelevel/vsc.fire_firelevel_multiplier) ) && my_tile.CanPass(null, enemy_tile, 0,0) && enemy_tile.CanPass(null, my_tile, 0,0)) + if(prob( 50 + 50 * (firelevel/vsc.fire_firelevel_multiplier) ) && my_tile.CanPass(src, enemy_tile, 0,0) && enemy_tile.CanPass(src, my_tile, 0,0)) enemy_tile.create_fire(firelevel) else diff --git a/code/__defines/belly_modes_vr.dm b/code/__defines/belly_modes_vr.dm index 2d8f714fc4..7ac58ddf6b 100644 --- a/code/__defines/belly_modes_vr.dm +++ b/code/__defines/belly_modes_vr.dm @@ -21,6 +21,7 @@ #define DM_FLAG_AFFECTWORN 0x10 #define DM_FLAG_JAMSENSORS 0x20 #define DM_FLAG_FORCEPSAY 0x40 +#define DM_FLAG_SLOWBODY 0x80 //CHOMPAdd //Item related modes #define IM_HOLD "Hold" diff --git a/code/__defines/chemistry.dm b/code/__defines/chemistry.dm index ed22966cbe..abaab99885 100644 --- a/code/__defines/chemistry.dm +++ b/code/__defines/chemistry.dm @@ -54,8 +54,9 @@ var/list/cheartstopper = list("potassium_chloride") // Thi #define MAX_PILL_SPRITE 24 //max icon state of the pill sprites #define MAX_BOTTLE_SPRITE 4 //max icon state of the pill sprites +#define MAX_PATCH_SPRITE 4 //max icon state of the patch sprites, CHOMPedit #define MAX_MULTI_AMOUNT 20 // Max number of pills/patches that can be made at once #define MAX_UNITS_PER_PILL 60 // Max amount of units in a pill #define MAX_UNITS_PER_PATCH 60 // Max amount of units in a patch #define MAX_UNITS_PER_BOTTLE 60 // Max amount of units in a bottle (it's volume) -#define MAX_CUSTOM_NAME_LEN 64 // Max length of a custom pill/condiment/whatever \ No newline at end of file +#define MAX_CUSTOM_NAME_LEN 64 // Max length of a custom pill/condiment/whatever diff --git a/code/__defines/misc_ch.dm b/code/__defines/misc_ch.dm index 0ea4cec334..9f53214a16 100644 --- a/code/__defines/misc_ch.dm +++ b/code/__defines/misc_ch.dm @@ -1,3 +1,5 @@ +//Department defines +#define DEPARTMENT_NONCREW "Non crew" //Material defines #define MAT_CARPET "red carpet" @@ -8,4 +10,4 @@ #define MAT_CARPET_SILVERBLUE "silver blue carpet" #define MAT_CARPET_PINK "pink carpet" #define MAT_CARPET_PURPLE "purple carpet" -#define MAT_CARPET_ORANGE "orange carpet" \ No newline at end of file +#define MAT_CARPET_ORANGE "orange carpet" diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index e2bc37d93c..5e77b4b09c 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -54,7 +54,9 @@ input = copytext(input,1,max_length) if(extra) - input = replace_characters(input, list("\n"=" ","\t"=" ")) + var/temp_input = replace_characters(input, list("\n"=" ","\t"=" "))//one character is replaced by two + if(length(input) < (length(temp_input) - 6))//6 is the number of linebreaks allowed per message + input = replace_characters(temp_input,list(" "=" "))//replace again, this time the double spaces with single ones if(encode) // The below \ escapes have a space inserted to attempt to enable CI auto-checking of span class usage. Please do not remove the space. diff --git a/code/_helpers/type2type.dm b/code/_helpers/type2type.dm index ef25f44142..e21d973b1b 100644 --- a/code/_helpers/type2type.dm +++ b/code/_helpers/type2type.dm @@ -293,21 +293,122 @@ return strtype return copytext(strtype, delim_pos) +// Concatenates a list of strings into a single string. A seperator may optionally be provided. +/proc/list2text(list/ls, sep) + if (ls.len <= 1) // Early-out code for empty or singleton lists. + return ls.len ? ls[1] : "" + + var/l = ls.len // Made local for sanic speed. + var/i = 0 // Incremented every time a list index is accessed. + + if (sep != null) + // Macros expand to long argument lists like so: sep, ls[++i], sep, ls[++i], sep, ls[++i], etc... + #define S1 sep, ls[++i] + #define S4 S1, S1, S1, S1 + #define S16 S4, S4, S4, S4 + #define S64 S16, S16, S16, S16 + + . = "[ls[++i]]" // Make sure the initial element is converted to text. + + // Having the small concatenations come before the large ones boosted speed by an average of at least 5%. + if (l-1 & 0x01) // 'i' will always be 1 here. + . = text("[][][]", ., S1) // Append 1 element if the remaining elements are not a multiple of 2. + if (l-i & 0x02) + . = text("[][][][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4. + if (l-i & 0x04) + . = text("[][][][][][][][][]", ., S4) // And so on.... + if (l-i & 0x08) + . = text("[][][][][][][][][][][][][][][][][]", ., S4, S4) + if (l-i & 0x10) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16) + if (l-i & 0x20) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16) + if (l-i & 0x40) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64) + while (l > i) // Chomp through the rest of the list, 128 elements at a time. + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64) + + #undef S64 + #undef S16 + #undef S4 + #undef S1 + else + // Macros expand to long argument lists like so: ls[++i], ls[++i], ls[++i], etc... + #define S1 ls[++i] + #define S4 S1, S1, S1, S1 + #define S16 S4, S4, S4, S4 + #define S64 S16, S16, S16, S16 + + . = "[ls[++i]]" // Make sure the initial element is converted to text. + + if (l-1 & 0x01) // 'i' will always be 1 here. + . += S1 // Append 1 element if the remaining elements are not a multiple of 2. + if (l-i & 0x02) + . = text("[][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4. + if (l-i & 0x04) + . = text("[][][][][]", ., S4) // And so on... + if (l-i & 0x08) + . = text("[][][][][][][][][]", ., S4, S4) + if (l-i & 0x10) + . = text("[][][][][][][][][][][][][][][][][]", ., S16) + if (l-i & 0x20) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16) + if (l-i & 0x40) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64) + while (l > i) // Chomp through the rest of the list, 128 elements at a time. + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64) + + #undef S64 + #undef S16 + #undef S4 + #undef S1 + +// Converts a string into a list by splitting the string at each delimiter found. (discarding the seperator) +/proc/text2list(text, delimiter="\n") + var/delim_len = length(delimiter) + if (delim_len < 1) + return list(text) + + . = list() + var/last_found = 1 + var/found + + do + found = findtext(text, delimiter, last_found, 0) + . += copytext(text, last_found, found) + last_found = found + delim_len + while (found) + /proc/type2parent(child) var/string_type = "[child]" var/last_slash = findlasttext(string_type, "/") - if(last_slash == 1) - switch(child) - if(/datum) - return null - if(/obj || /mob) - return /atom/movable - if(/area || /turf) - return /atom - else - return /datum + if (last_slash != 1) + return text2path(copytext(string_type, 1, last_slash)) + switch (child) + if (/datum) + return null + if (/obj, /mob) + return /atom/movable + if (/area, /turf) + return /atom + else + return /datum - return text2path(copytext(string_type, 1, last_slash)) //checks if a file exists and contains text //returns text as a string if these conditions are met diff --git a/code/controllers/subsystems/transcore_vr.dm b/code/controllers/subsystems/transcore_vr.dm index 6bffac865d..81364db733 100644 --- a/code/controllers/subsystems/transcore_vr.dm +++ b/code/controllers/subsystems/transcore_vr.dm @@ -74,9 +74,13 @@ SUBSYSTEM_DEF(transcore) //In a human BITSET(H.hud_updateflag, BACKUP_HUD) - if(H == imp.imp_in && H.mind && H.stat < DEAD) - db.m_backup(H.mind,H.nif) - persist_nif_data(H) + if(H == imp.imp_in && H.stat < DEAD) //CHOMPEdit Start + if(H.mind) + db.m_backup(H.mind,H.nif) + persist_nif_data(H) + else if(H.vr_link && H.vr_link.mind) + db.m_backup(H.vr_link.mind,H.nif) + persist_nif_data(H) //CHOMPEdit End if(MC_TICK_CHECK) return diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm index fbad2752ee..2b0c74e269 100644 --- a/code/datums/components/material_container.dm +++ b/code/datums/components/material_container.dm @@ -152,6 +152,11 @@ to_chat(user, "[parent] cannot contain [material].") return + // Our sheet had no material. Whoops. + if(!matter_per_sheet) + to_chat(user, "[S] does not contain any matter acceptable by [parent].") + return + // If we can't fit the material for one sheet, we're full. if(!has_space(matter_per_sheet)) to_chat(user, "[parent] is full. Please remove materials from [parent] in order to insert more.") diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm index 0330811428..d7011dd094 100644 --- a/code/datums/looping_sounds/machinery_sounds.dm +++ b/code/datums/looping_sounds/machinery_sounds.dm @@ -80,7 +80,7 @@ /datum/looping_sound/cerealmaker start_sound = 'sound/machines/kitchen/cerealmaker/cerealmaker-start.ogg' - start_length = 10 + start_length = 10 mid_sounds = list('sound/machines/kitchen/cerealmaker/cerealmaker-mid1.ogg'=10) mid_length = 60 end_sound = 'sound/machines/kitchen/cerealmaker/cerealmaker-stop.ogg' @@ -104,4 +104,14 @@ mid_length = 70 end_sound = 'sound/machines/air_pump/airpumpshutdown.ogg' volume = 15 - pref_check = /datum/client_preference/air_pump_noise \ No newline at end of file + pref_check = /datum/client_preference/air_pump_noise + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/vehicle_engine + start_sound = 'sound/machines/vehicle/engine_start.ogg' + start_length = 2 + mid_sounds = list('sound/machines/vehicle/engine_mid.ogg'=1) + mid_length = 6 + end_sound = 'sound/machines/vehicle/engine_end.ogg' + volume = 20 diff --git a/code/datums/riding.dm b/code/datums/riding.dm index 9dd32dcd93..ec5afff5d5 100644 --- a/code/datums/riding.dm +++ b/code/datums/riding.dm @@ -225,3 +225,28 @@ /datum/riding/boat/get_offsets(pass_index) // list(dir = x, y, layer) return list("[NORTH]" = list(1, 2), "[SOUTH]" = list(1, 2), "[EAST]" = list(1, 2), "[WEST]" = list(1, 2)) + +/datum/riding/snowmobile + only_one_driver = TRUE // Keep your hands to yourself back there! + +/datum/riding/snowmobile/get_offsets(pass_index) // list(dir = x, y, layer) + var/H = 3 // Horizontal seperation. + var/V = 2 // Vertical seperation. + var/O = 2 // Vertical offset. + switch(pass_index) + if(1) // Person on front. + return list( + "[NORTH]" = list( 0, O+V, MOB_LAYER), + "[SOUTH]" = list( 0, O, ABOVE_MOB_LAYER), + "[EAST]" = list( H, O, MOB_LAYER), + "[WEST]" = list(-H, O, MOB_LAYER) + ) + if(2) // Person on back. + return list( + "[NORTH]" = list( 0, O, ABOVE_MOB_LAYER), + "[SOUTH]" = list( 0, O+V, MOB_LAYER), + "[EAST]" = list(-H, O, MOB_LAYER), + "[WEST]" = list( H, O, MOB_LAYER) + ) + else + return null // This will runtime, but we want that since this is out of bounds. diff --git a/code/datums/supplypacks/hydroponics_vr.dm b/code/datums/supplypacks/hydroponics_vr.dm index 7476fdd29b..fa912852e7 100644 --- a/code/datums/supplypacks/hydroponics_vr.dm +++ b/code/datums/supplypacks/hydroponics_vr.dm @@ -70,4 +70,10 @@ name = "Jerboa crate" cost = 10 containertype = /obj/structure/largecrate/animal/jerboa - containername = "Jerboa crate" \ No newline at end of file + containername = "Jerboa crate" + +/datum/supply_pack/hydro/tits + name = "A pair of great tits" + cost = 10 + containertype = /obj/structure/largecrate/tits + containername = "A pair of great tits" diff --git a/code/datums/supplypacks/security.dm b/code/datums/supplypacks/security.dm index 5c4ddf1a6a..fc8d9b373b 100644 --- a/code/datums/supplypacks/security.dm +++ b/code/datums/supplypacks/security.dm @@ -444,7 +444,8 @@ /obj/item/weapon/storage/belt/security = 3, /obj/item/clothing/glasses/sunglasses/sechud = 3, /obj/item/device/radio/headset/headset_sec/alt = 3, - /obj/item/clothing/suit/storage/hooded/wintercoat/security = 3 + /obj/item/clothing/suit/storage/hooded/wintercoat/security = 3, + /obj/item/clothing/glasses/sunglasses/sechud/tactical_sec_vis = 3 ) cost = 10 containertype = /obj/structure/closet/crate/nanothreads diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 767268dc7f..116a17c67e 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -39,6 +39,12 @@ throwforce = 0 throw_speed = 4 throw_range = 20 + var/randomize = TRUE + var/square_chance = 10 + +/obj/item/weapon/soap/Initialize() + if(randomize && prob(square_chance)) + icon_state = "[icon_state]-alt" /obj/item/weapon/soap/nanotrasen desc = "A NanoTrasen-brand bar of soap. Smells of phoron, a years-old marketing gimmick." @@ -55,10 +61,6 @@ desc = "An untrustworthy bar of soap. Smells of fear." icon_state = "soapsyndie" -/obj/item/weapon/soap/syndie - desc = "An dubious bar of soap. Smells of lyes." - icon_state = "soapsyndie" - /obj/item/weapon/soap/space_soap desc = "Smells like hot metal and walnuts." icon_state = "space_soap" @@ -135,7 +137,6 @@ desc = "Smells like honey." icon_state = "golden_soap" - /obj/item/weapon/bikehorn name = "bike horn" desc = "A horn off of a bicycle." diff --git a/code/game/gamemodes/events/holidays/Holidays.dm b/code/game/gamemodes/events/holidays/Holidays.dm index c04d6408b6..9c156a50bd 100644 --- a/code/game/gamemodes/events/holidays/Holidays.dm +++ b/code/game/gamemodes/events/holidays/Holidays.dm @@ -22,7 +22,7 @@ var/global/list/Holiday = list() //Holidays are lists now, so we can have more t Holiday = list() // reset our switch now so we can recycle it as our Holiday name - var/YY = text2num(time2text(world.timeofday, "YY")) // get the current year + //var/YY = text2num(time2text(world.timeofday, "YY")) // get the current year - unused currently but can be used for floating dates var/MM = text2num(time2text(world.timeofday, "MM")) // get the current month var/DD = text2num(time2text(world.timeofday, "DD")) // get the current day @@ -36,56 +36,63 @@ var/global/list/Holiday = list() //Holidays are lists now, so we can have more t Holiday["New Years's Day"] = "The day of the new solar year on Sol." if(12) Holiday["Vertalliq-Qerr"] = "Vertalliq-Qerr, translated to mean 'Festival of the Royals', is a \ - Skrell holiday that celebrates the Qerr-Katish and all they have provided for the rest of Skrell society, \ + skrellian holiday that celebrates the Qerr-Katish and all they have provided for the rest of skrellian society, \ it often features colourful displays and skilled performers take this time to show off some of their more \ - fancy displays." + elaborate displays." + if(14) + Holiday["Lohri"] = "A human festival traditionally celebrating the end of winter on the Indian subcontinent. \ + The holiday is now celebrated independently of seasons in many colonies with large populations of Indian \ + descent. Traditions include the burning of bonfires, dancing, and door-to-door singing in exchange for treats." + if(30) + Holiday["Lunar New Year"] = "Originally the new year on the ancient lunisolar calendar, the Lunar New Year is \ + celebrated with a wide variety of east Asian traditions with roots in Chinese, Japanese, Korean, Vietnamese, \ + Tibetan, Mongolian, and Ryukyu cultures. Elaborate parades, performances, dances and meals are usual staples." if(2) //Feb switch(DD) if(2) - Holiday["Groundhog Day"] = "An unoffical holiday based on ancient folklore that originated on Earth, \ - that involves the worship of an almighty groundhog, that could control the weather based on if it casted a shadow." + Holiday["Groundhog Day"] = "An unoffical holiday based on medieval folklore that originated on Earth, \ + that involves the reverence of a prophetic animal - traditionally a badger, fox or groundhog - that was \ + said to be able to predict, or even control the changing of the seasons." if(14) - Holiday["Valentine's Day"] = "An old holiday that revolves around romance and love." + Holiday["Valentine's Day"] = "A human holiday that revolves around expressions of romance and love. \ + In particular, the exchanging of gifts, letters and cards is traditional." + if(15) + Holiday["Lantern Festival"] = "A human holiday with origins in Chinese new year celebrations. Participants \ + carry or hang elaborate paper lanterns that are thought to bring good luck. Today, electric lights are often used \ + in environments where open flames would be hazardous or non-functional." if(17) Holiday["Random Acts of Kindness Day"] = "An unoffical holiday that challenges everyone to perform \ - acts of kindness to their friends, co-workers, and strangers, for no reason." + acts of kindness to their friends, co-workers, and strangers, with no strings attached." if(3) //Mar switch(DD) if(3) - Holiday["Qixm-tes"] = "Qixm-tes, or 'Day of mourning', is a Skrell holiday where Skrell gather at places \ - of worship and sing a song of mourning for all those who have died in service to their empire." + Holiday["Qixm-tes"] = "Qixm-tes, or 'Day of mourning', is a skrellian holiday where skrell gather at places \ + of worship and sing a song of mourning for all those who have died in service to their kingdoms." if(14) Holiday["Pi Day"] = "An unoffical holiday celebrating the mathematical constant Pi. It is celebrated on \ March 14th, as the digits form 3 14, the first three significant digits of Pi. Observance of Pi Day generally \ involve eating (or throwing) pie, due to a pun. Pies also tend to be round, and thus relatable to Pi." if(17) - Holiday["St. Patrick's Day"] = "An old holiday originating from Earth, Sol, celebrating the color green, \ - shamrocks, attending parades, and drinking alcohol." + Holiday["St. Patrick's Day"] = "A holiday originating on Earth, celebrating a popular version of Irish culture. \ + Traditions include elaborate parades, wearing of the colour green, and drinking alcohol." + if(18) + Holiday["Holi"] = "Also known as the Festival of Colours, a human Hindu festival celebrating divine love and the \ + triumph of good over evil. Traditionally a bonfire is lit overnight, followed by the free-for-all smearing of \ + celebrants with colourful pigments, and the forgiveness of past wrongs." if(27) - if(YY == 16) - Holiday["Easter"] = "" - if(31) - if(YY == 13) - Holiday["Easter"] = "" + Holiday["Easter"] = "A Earth springtime festival variously celebrating rebirth and the beginning of the planting \ + season. Traditionally celebrated with the painting and exchange of eggs, sometimes made from chocolate. \ + The holiday's date was standardized in the 22nd century." if(4) //Apr switch(DD) if(1) - Holiday["April Fool's Day"] = "An old holiday that endevours one to pull pranks and spread hoaxes on their friends." - if(YY == 18) - Holiday["Easter"] = "" - if(8) - if(YY == 15) - Holiday["Easter"] = "" - if(16) - if(YY == 17) //Easter can go die for all of this copypasta. - Holiday["Easter"] = "" - - if(20) - if(YY == 14) - Holiday["Easter"] = "" + Holiday["April Fool's Day"] = "A human holiday that endevours one to pull pranks and spread hoaxes on their friends." + if(5) + Holiday["First Day of Passover"] = "The first of eight days of a human holiday celebrating the exodus of ancient Jewish people \ + from slavery, and of the spring harvest. The most well-known tradition is the Sedar meal. The date was standardized in the 22nd century." if(22) Holiday["Earth Day"] = "A holiday of enviromentalism, that originated on it's namesake, Earth." @@ -100,7 +107,7 @@ var/global/list/Holiday = list() //Holidays are lists now, so we can have more t Observance of this day varies throughout human space, but most common traditions are the act of bringing flowers to graves,\ attending parades, and the wearing of poppies (either paper or real) in one's clothing." if(28) - Holiday["Jiql-tes"] = "A Skrellian holiday that translates to 'Day of Celebration', Skrell communities \ + Holiday["Jiql-tes"] = "A skrellian holiday that translates to 'Day of Celebration', skrell communities \ gather for a grand feast and give gifts to friends and close relatives." if(6) //Jun @@ -113,7 +120,11 @@ var/global/list/Holiday = list() //Holidays are lists now, so we can have more t and to thank blood donors for their voluntary, life-saving gifts of blood." if(20) Holiday["Civil Servant's Day"] = "Civil Servant's Day is a holiday observed in SCG member states that honors civil servants everywhere,\ -+ (especially those who are members of the armed forces and the emergency services), or have been or have been civil servants in the past." + (especially those who are members of the armed forces and the emergency services), or have been or have been civil servants in the past." +/* if(25) + Holiday["Merhyat Njarha"] = "A Njarir'Akhan tajaran tradition translating to \"Harmony of the House\", in which Njarjirii citizens pay \ + homage to their ruling house and their ancestors. Traditions include large communal meals and dances hosted by the ruling house, \ + and the intensive upkeep of community spaces."*/ if(7) //Jul switch(DD) @@ -126,36 +137,43 @@ var/global/list/Holiday = list() //Holidays are lists now, so we can have more t if(8) //Aug switch(DD) -// if(10) -// Holiday["S'randarr's Day"] = "A Tajaran holiday that occurs on the longest day of the year in summer, -// on Ahdomai. It is named after the Tajaran deity of Light, and huge celebrations are common." -//VOREStation Add - Of course we need this. - if(8) - Holiday["Vore Day"] = "A holiday representing the innate desire in all/most/some/a few of us to devour each other or be devoured. \ - That's probably why you're here, isn't it? Get to it, then!" -//VOREStation Add End. - + if(11) + Holiday["Tajaran Contact Day"] = "The anniversary of first contact between SolGov and the tajaran species, widely observed\ + throughout tajaran and human space. Marks the date that in 2513, a human exploration team investigating electromagnetic \ + emissions from the Meralar system made radio contact with the tajaran scientific outpost that had broadcast them." + if(20) + Holiday["Obon"] = "An ancient Earth holiday originating in east Asia, for the honouring of one's ancestral spirits. \ + Traditions include the maintenance of grave sites and memorials, and community traditional dance performances." if(27) Holiday["Forgiveness Day"] = "A time to forgive and be forgiven." if(9) //Sep switch(DD) if(17) - Holiday["Qill-xamr"] = "Translated to 'Night of the dead', it is a Skrell holiday where Skrell \ + Holiday["Qill-xamr"] = "Translated to 'Night of the dead', it is a skrellian holiday where skrell \ communities hold parties in order to remember loved ones who passed, unlike Qixm-tes, this applies to everyone \ and is a joyful celebration." if(19) - Holiday["Talk-Like-a-Pirate Day"] = "Ahoy, matey! Tis unoffical holiday be celebratin' the jolly \ - good humor of speakin' like the pirates of old." + Holiday["Talk-Like-a-Pirate Day"] = "Ahoy, matey! It be the unoffical holiday celebratin' the salty \ + sea humor of speakin' like the pirates of old." + if(20) + Holiday["Rosh Hashanah"] = "An old human holiday that marks the traditional Hebrew new year." if(28) Holiday["Stupid-Questions Day"] = "Known as Ask A Stupid Question Day, it is an unoffical holiday \ created by teachers in Sol, very long ago, to encourage students to ask more questions in the classroom." if(10) //Oct switch(DD) + if(9) + Holiday["Lief Eriksson Day"] = "A day commemorating Norse explorer Lief Eriksson, an early Scandinavian cultural figure \ + who is thought to have been the first European to set foot in North America." if(16) Holiday["Boss' Day"] = "Boss' Day has traditionally been a day for employees to thank their bosses for the difficult work that they do \ throughout the year. This day was created for the purpose of strengthening the bond between employer and employee." + if(21) + Holiday["First Day of Diwali"] = "An ancient Hindu, Jain and Sikh festival lasting five days, celebrating victory of light over darkness, good over \ + evil, and knowledge over ignorance. It is celebrated by the wearing of your finest clothes, decorating with oil lamps and rangolis, \ + fireworks, and gift-giving. Electric lights are often used in modern times where oil lamps would be hazardous or inoperable." if(31) Holiday["Halloween"] = "Originating from Earth, Halloween is also known as All Saints' Eve, and \ is celebrated by some by attending costume parties, trick-or-treating, carving faces in pumpkins, or visiting \ @@ -163,6 +181,10 @@ var/global/list/Holiday = list() //Holidays are lists now, so we can have more t if(11) //Nov switch(DD) + if(1) + Holiday["Day of the Dead"] = "An old human holiday celebrating the lives of deceased friends and family members, \ + by means of good humour and joyful parties. Offerings are often left at altars to the dead, and exchanging gifts \ + among the living is not uncommon." if(13) Holiday["Kindness Day"] = "Kindness Day is an unofficial holiday to highlight good deeds in the \ community, focusing on the positive power and the common thread of kindness which binds humanity and \ @@ -182,16 +204,17 @@ var/global/list/Holiday = list() //Holidays are lists now, so we can have more t if(10) Holiday["Human-Rights Day"] = "An old holiday created by an intergovernmental organization known back than as the United Nations, \ human rights were not recognized globally at the time, and the holiday was made in honor of the Universal Declaration of Human Rights. \ - These days, SolGov ensures that past efforts were not in vein, and continues to honor this holiday across the galaxy." + These days, SolGov ensures that past efforts were not in vein, and continues to honor this holiday across the galaxy as a historical \ + reminder." if(22) - Holiday["Vertalliq-qixim"] = "A Skrellian holiday that celebrates the Skrell's first landing on one of \ - their moons. It's often celebrated with grand festivals." + Holiday["Vertalliq-qixim"] = "A skrellian holiday that celebrates the skrell's first landing on one of \ + their moons. It's often celebrated with grand festivals." if(24) Holiday["Christmas Eve"] = "The eve of Christmas, an old holiday from Earth that mainly involves gift \ giving, decorating, family reunions, and a fat red human breaking into people's homes to steal milk and cookies." if(25) Holiday["Christmas"] = "Christmas is a very old holiday that originated in Earth, Sol. It was a \ - religious holiday for the Christian religion, which would later form Unitarianism. Nowdays, the holiday is celebrated \ + religious holiday for the Christian religion, which would later form Unitarianism. Nowadays, the holiday is celebrated \ generally by giving gifts, symbolic decoration, and reuniting with one's family. It also features a mythical fat \ red human, known as Santa, who broke into people's homes to loot cookies and milk." if(31) diff --git a/code/game/jobs/job/civilian_vr.dm b/code/game/jobs/job/civilian_vr.dm index e33bbf11d9..9c5de6d54b 100644 --- a/code/game/jobs/job/civilian_vr.dm +++ b/code/game/jobs/job/civilian_vr.dm @@ -30,7 +30,7 @@ spawn_positions = 2 pto_type = PTO_CIVILIAN alt_titles = list("Hydroponicist" = /datum/alt_title/hydroponicist, "Cultivator" = /datum/alt_title/cultivator, "Farmer" = /datum/alt_title/farmer, - "Gardener" = /datum/alt_title/gardener, "Florist" = /datum/alt_title/florsit) + "Gardener" = /datum/alt_title/gardener, "Florist" = /datum/alt_title/florsit, "Rancher" = /datum/alt_title/rancher) /datum/alt_title/hydroponicist title = "Hydroponicist" @@ -45,6 +45,10 @@ title = "Florist" title_blurb = "A Florist may be less professional than their counterparts, and are more likely to tend to the public gardens if they aren't needed elsewhere." +/datum/alt_title/rancher + title = "Rancher" + title_blurb = "A Rancher is tasked with the care, feeding, raising, and harvesting of livestock." + /datum/job/qm pto_type = PTO_CARGO diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index cf09d52861..b0e678298b 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -174,6 +174,10 @@ //return (brain_type && LAZYACCESS(ideal_age_by_species, brain_type)) || LAZYACCESS(ideal_age_by_species, brain_type) || ideal_character_age //VOREStation Removal /datum/job/proc/is_species_banned(species_name, brain_type) + // CHOMPEdit begin -- Shadekin cannot be any crew position + if(species_name == SPECIES_SHADEKIN) + return TRUE + // CHOMPEdit end return FALSE // VOREStation Edit - Any species can be any job. /* VOREStation Removal if(banned_job_species == null) diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 570fbf32ab..63f8a702e0 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -657,8 +657,7 @@ var/global/datum/controller/occupations/job_master var/obj/belly/vore_spawn_gut var/mob/living/prey_to_nomph - var/datum/job/J = SSjob.get_job(rank) - fail_deadly = J?.offmap_spawn + //CHOMPEdit - Remove fail_deadly addition on offmap_spawn //Spawn them at their preferred one if(C && C.prefs.spawnpoint) @@ -804,7 +803,8 @@ var/global/datum/controller/occupations/job_master .["msg"] = spawnpos.msg .["channel"] = spawnpos.announce_channel else - if(fail_deadly) + var/datum/job/J = SSjob.get_job(rank) + if(fail_deadly || J?.offmap_spawn) to_chat(C, "Your chosen spawnpoint ([spawnpos.display_name]) is unavailable for your chosen job. Please correct your spawn point choice.") return to_chat(C, "Your chosen spawnpoint ([spawnpos.display_name]) is unavailable for your chosen job. Spawning you at the Arrivals shuttle instead.") diff --git a/code/game/jobs/jobs.dm b/code/game/jobs/jobs.dm index 3c949ba66d..e71f4eb72b 100644 --- a/code/game/jobs/jobs.dm +++ b/code/game/jobs/jobs.dm @@ -51,6 +51,8 @@ var/const/ASSISTANT =(1<<11) var/const/BRIDGE =(1<<12) var/const/ENTERTAINER =(1<<13) //VOREStation Add +var/const/OTHER =(1<<10) //CHOMPStation Add +var/const/NONCREW =(1<<0) //CHOMPStation Add /* // CHOMPedit: Comment out Talon positions, we don't have that here. //VOREStation Add var/const/TALON =(1<<3) diff --git a/code/game/machinery/casino_ch.dm b/code/game/machinery/casino_ch.dm index 13c65bc335..e892d1218b 100644 --- a/code/game/machinery/casino_ch.dm +++ b/code/game/machinery/casino_ch.dm @@ -277,7 +277,7 @@ "sodawater", "lemon_lime", "sugar", "orangejuice", "limejuice", "watermelonjuice", "thirteenloko", "grapesoda", "coffee", "cafe_latte", "soy_latte", "hot_coco", "milk", "cream", "tea", "ice", "orangejuice", "lemonjuice", "limejuice", "berryjuice", "mint", "lemon_lime", "sugar", "orangejuice", "limejuice", "sodawater", - "tonic", "beer", "kahlua", "whiskey", "wine", "vodka", "gin", "rum", "tequilla", "vermouth", "cognac", + "tonic", "beer", "kahlua", "whiskey", "redwine", "vodka", "gin", "rum", "tequilla", "vermouth", "cognac", "ale", "mead", "bitters", "champagne", "singulo", "doctorsdelight", "nothing", "banana", "honey", "egg", "coco", "cherryjelly", "carrotjuice", "applejuice", "tomatojuice", "peanutbutter", "soymilk", "grenadine", "gingerale", "roy_rogers", "patron", "goldschlager", "gelatin", "melonliquor", "bluecuracao", "thirteenloko", "deadrum", "sake", "acidspit", diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 44459d1b96..67fc80168a 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -84,6 +84,16 @@ R.adjustBruteLoss(-weld_rate) if(wire_rate && R.getFireLoss() && cell.checked_use(wire_power_use * wire_rate * CELLRATE)) R.adjustFireLoss(-wire_rate) + + //VOREStation Add Start + else if(ispAI(occupant)) + var/mob/living/silicon/pai/P = occupant + + if(P.nutrition < 400) + P.nutrition = min(P.nutrition+10, 400) + cell.use(7000/450*10) + //VOREStation Add End + else if(ishuman(occupant)) var/mob/living/carbon/human/H = occupant @@ -258,6 +268,21 @@ occupant = R update_icon() return 1 + + //VOREStation Add Start + else if(istype(L, /mob/living/silicon/pai)) + var/mob/living/silicon/pai/P = L + + if(P.incapacitated()) + return + + add_fingerprint(P) + P.reset_view(src) + P.forceMove(src) + occupant = P + update_icon() + return 1 + //VOREStation Add End else if(istype(L, /mob/living/carbon/human)) var/mob/living/carbon/human/H = L diff --git a/code/game/machinery/virtual_reality/vr_console.dm b/code/game/machinery/virtual_reality/vr_console.dm index 81df6d934b..b66bc2dff8 100644 --- a/code/game/machinery/virtual_reality/vr_console.dm +++ b/code/game/machinery/virtual_reality/vr_console.dm @@ -23,6 +23,7 @@ active_power_usage = 200 light_color = "#FF0000" + /obj/machinery/vr_sleeper/Initialize() . = ..() default_apply_parts() @@ -246,14 +247,14 @@ avatar.shapeshifter_change_shape(occupant.species.name) avatar.forceMove(get_turf(S)) // Put the mob on the landmark, instead of inside it - +//CHOMPedit start VR fix occupant.enter_vr(avatar) //Yes, I am using a aheal just so your markings transfer over, I could not get .prefs.copy_to working. This is very stupid, and I can't be assed to rewrite this. Too bad! avatar.revive() - avatar.revive() + avatar.species.equip_survival_gear(avatar) avatar.verbs += /mob/living/carbon/human/proc/exit_vr //ahealing removes the prommie verbs and the VR verbs, giving it back - avatar.Sleeping(1) +//CHOMPedit end // Prompt for username after they've enterred the body. var/newname = sanitize(tgui_input_text(avatar, "You are entering virtual reality. Your username is currently [src.name]. Would you like to change it to something else?", "Name change", null, MAX_NAME_LEN), MAX_NAME_LEN) if (newname) diff --git a/code/game/objects/effects/bump_teleporter.dm b/code/game/objects/effects/bump_teleporter.dm index 0286622705..581aeea16f 100644 --- a/code/game/objects/effects/bump_teleporter.dm +++ b/code/game/objects/effects/bump_teleporter.dm @@ -23,12 +23,12 @@ var/list/obj/effect/bump_teleporter/BUMP_TELEPORTERS = list() if(!ismob(user)) //user.loc = src.loc //Stop at teleporter location return - + var/mob/M = user //VOREStation edit if(!id_target) //user.loc = src.loc //Stop at teleporter location, there is nowhere to teleport to. return for(var/obj/effect/bump_teleporter/BT in BUMP_TELEPORTERS) if(BT.id == src.id_target) - usr.loc = BT.loc //Teleport to location with correct id. - return \ No newline at end of file + M.forceMove(BT.loc) //Teleport to location with correct id. //VOREStation Edit + return diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index da675f6828..7c88ab8ad3 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -42,6 +42,10 @@ latejoin_gatewaystation += loc delete_me = 1 return + if("JoinLateSifPlains") + latejoin_plainspath += loc + delete_me = 1 + return //CHOMPEdit End if("JoinLateElevator") latejoin_elevator += loc diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index d67d4f503b..6c50140a65 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -208,6 +208,12 @@ icon_state = "techtile_grid" no_variants = FALSE +/obj/item/stack/tile/floor/techmaint + name = "maint techfloor tile" + singular_name = "maint techfloor tile" + icon_state = "techtile_maint" + no_variants = FALSE + /obj/item/stack/tile/floor/steel_dirty name = "steel floor tile" singular_name = "steel floor tile" diff --git a/code/game/objects/items/weapons/manuals.dm b/code/game/objects/items/weapons/manuals.dm index 679e342ad2..f153e11fa8 100644 --- a/code/game/objects/items/weapons/manuals.dm +++ b/code/game/objects/items/weapons/manuals.dm @@ -982,6 +982,9 @@