diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bd5f112699a..e984dcad991 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ jobs: name: Run Linters runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Ensure +x on CI directory run: | chmod -R +x ./tools/ci @@ -38,7 +38,7 @@ jobs: name: DreamChecker runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Cache SpacemanDMM uses: actions/cache@v3 @@ -71,7 +71,7 @@ jobs: # needs: ['file_tests', 'dreamchecker'] runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Ensure +x on CI directory run: | chmod -R +x ./tools/ci diff --git a/.github/workflows/render_nanomaps.yml b/.github/workflows/render_nanomaps.yml index 62076dca060..767eefe400a 100644 --- a/.github/workflows/render_nanomaps.yml +++ b/.github/workflows/render_nanomaps.yml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-20.04 steps: - name: Clone - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Branch run: | diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index cd94acf4da0..4856542a556 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -366,7 +366,9 @@ if(choice == "No, wait") return else if(mind.assigned_role) - var/extra_check = tgui_alert(usr, "Do you want to Quit This Round before you return to lobby? This will properly remove you from manifest, as well as prevent resleeving.","Quit This Round",list("Quit Round","Cancel")) + var/extra_check = tgui_alert(usr, "Do you want to Quit This Round before you return to lobby?\ + This will properly remove you from manifest, as well as prevent resleeving. BEWARE: Pressing 'NO' will STILL return you to lobby!", + "Quit This Round",list("Quit Round","No")) if(extra_check == "Quit Round") //Update any existing objectives involving this mob. for(var/datum/objective/O in all_objectives) @@ -406,7 +408,6 @@ to_chat(src,"Your job has been free'd up, and you can rejoin as another character or quit. Thanks for properly quitting round, it helps the server!") // Beyond this point, you're going to respawn - to_chat(usr, config.respawn_message) if(!client) log_game("[usr.key] AM failed due to disconnect.") @@ -425,7 +426,9 @@ qdel(M) return + M.has_respawned = TRUE //When we returned to main menu, send respawn message M.key = key + if(M.mind) M.mind.reset() return diff --git a/code/modules/mob/new_player/login.dm b/code/modules/mob/new_player/login.dm index 299719aaa8f..1fe31e965d9 100644 --- a/code/modules/mob/new_player/login.dm +++ b/code/modules/mob/new_player/login.dm @@ -31,6 +31,10 @@ var/obj/effect/lobby_image = new /obj/effect/lobby_image if(join_motd) to_chat(src, "
[join_motd]
") + if(has_respawned) + to_chat(usr, config.respawn_message) + has_respawned = FALSE + if(!mind) mind = new /datum/mind(key) mind.active = 1 @@ -53,7 +57,7 @@ var/obj/effect/lobby_image = new /obj/effect/lobby_image /mob/new_player/proc/version_warnings() var/problems // string to store message to present to player as a problem - + // TODO: Move this to a config file at some point maybe? What would the structure of that look like? switch(client.byond_build) // http://www.byond.com/forum/post/2711510 @@ -62,7 +66,7 @@ var/obj/effect/lobby_image = new /obj/effect/lobby_image // http://www.byond.com/forum/post/2711748 if(1562 to 1563) problems = "frequent known crashes related to animations" - + // Don't have a thread, just a lot of player reports. if(1564 to 1565) // Fixed in 1566 which isn't released as of this commit if(world.byond_build == 1564) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 9c04c087175..df3bdad9d73 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -6,6 +6,7 @@ var/totalPlayers = 0 //Player counts for the Lobby tab var/totalPlayersReady = 0 var/show_hidden_jobs = 0 //Show jobs that are set to "Never" in preferences + var/has_respawned = FALSE //Determines if we're using RESPAWN_MESSAGE var/datum/browser/panel universal_speak = 1 diff --git a/code/modules/mob/new_player/sprite_accessories_taur_vr.dm b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm index 6037be6402b..2614db4ef7d 100644 --- a/code/modules/mob/new_player/sprite_accessories_taur_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm @@ -1026,6 +1026,7 @@ name = "Naga (Taur, Fat, dual color)" icon_state = "fatnaga_s" extra_overlay = "fatnaga_markings" + suit_sprites = null /datum/sprite_accessory/tail/taur/fox name = "Fox (Taur, 3-color)" diff --git a/code/modules/overmap/sectors.dm b/code/modules/overmap/sectors.dm index 285d1e3a1b4..327cca74ad1 100644 --- a/code/modules/overmap/sectors.dm +++ b/code/modules/overmap/sectors.dm @@ -12,7 +12,7 @@ var/known = TRUE /// Name prior to being scanned if !known var/unknown_name = "unknown sector" - var/real_name + var/real_name // Used for late-load overmap ship distress beacons and scan_data for lateload/vvar'd scannable overmap objects var/real_desc /// Icon_state prior to being scanned if !known var/unknown_state = "field" @@ -155,24 +155,12 @@ /obj/effect/overmap/visitable/get_scan_data() if(!known) known = TRUE - if(real_name) - name = real_name - else - name = initial(name) - if(real_icon_state) //Only true when GMs/Admins play with the object - if(real_icon) //Only true if GMs/Admins want a non-standard icon from outside 'icons/obj/overmap.dmi' - icon = real_icon - icon_state = real_icon_state - else - icon_state = initial(icon_state) - if(real_color) - color = real_color - else - color = initial(color) - if(real_desc) - desc = real_desc - else - desc = initial(desc) + name = (real_name ? real_name : initial(name)) + color = (real_color ? real_color : initial(color)) + desc = (real_desc ? real_desc : initial(desc)) + if(real_icon) //Only true if GMs/Admins want a non-standard icon from outside 'icons/obj/overmap.dmi' + icon = real_icon + icon_state = (real_icon_state ? real_icon_state : initial(icon_state)) return ..() /obj/effect/overmap/visitable/proc/get_space_zlevels() @@ -254,7 +242,7 @@ admin_chat_message(message = "Overmap panic button hit on z[z] ([name]) by '[user?.ckey || "Unknown"]'", color = "#FF2222") //VOREStation Add var/message = "This is an automated distress signal from a MIL-DTL-93352-compliant beacon transmitting on [PUB_FREQ*0.1]kHz. \ - This beacon was launched from '[initial(name)]'. I can provide this additional information to rescuers: [get_distress_info()]. \ + This beacon was launched from '[real_name ? real_name : initial(name)]'. I can provide this additional information to rescuers: [get_distress_info()]. \ Per the Interplanetary Convention on Space SAR, those receiving this message must attempt rescue, \ or relay the message to those who can. This message will repeat one time in 5 minutes. Thank you for your urgent assistance." @@ -275,7 +263,7 @@ return "\[X:[x], Y:[y]\]" /obj/effect/overmap/visitable/proc/distress_update() - var/message = "This is the final message from the distress beacon launched from '[initial(name)]'. I can provide this additional information to rescuers: [get_distress_info()]. \ + var/message = "This is the final message from the distress beacon launched from '[real_name ? real_name : initial(name)]'. I can provide this additional information to rescuers: [get_distress_info()]. \ Please render assistance under your obligations per the Interplanetary Convention on Space SAR, or relay this message to a party who can. Thank you for your urgent assistance." for(var/zlevel in levels_for_distress) diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index 5aeb72639b0..b5762afc1e9 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -59,6 +59,12 @@ return +/obj/item/weapon/clipboard/afterattack(turf/T as turf) + for(var/obj/item/weapon/paper/P in T) + P.loc = src + toppaper = P + update_icon() + /obj/item/weapon/clipboard/attack_self(mob/user as mob) var/dat = "Clipboard" if(haspen) diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index a034cc0f785..bac0624ca94 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -75,6 +75,11 @@ name = "folder[(n_name ? text("- '[n_name]'") : null)]" return +/obj/item/weapon/folder/afterattack(turf/T as turf) + for(var/obj/item/weapon/paper/P in T) + P.loc = src + update_icon() + /obj/item/weapon/folder/attack_self(mob/user as mob) var/dat = "[name]" diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index 18530e22eef..280e7fd0860 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -3,6 +3,7 @@ desc = "For the union!" icon = 'icons/obj/tesla_engine/tesla_coil.dmi' icon_state = "coil0" + var/icontype = "coil" anchored = FALSE density = TRUE @@ -51,9 +52,9 @@ /obj/machinery/power/tesla_coil/update_icon() if(panel_open) - icon_state = "coil_open[anchored]" + icon_state = "[icontype]_open[anchored]" else - icon_state = "coil[anchored]" + icon_state = "[icontype][anchored]" /obj/machinery/power/tesla_coil/attackby(obj/item/W, mob/user, params) src.add_fingerprint(user) @@ -79,18 +80,19 @@ /obj/machinery/power/tesla_coil/tesla_act(var/power) if(anchored && !panel_open) being_shocked = TRUE - //don't lose arc power when it's not connected to anything - //please place tesla coils all around the station to maximize effectiveness - var/power_produced = powernet ? power / power_loss : power - add_avail(power_produced*input_power_multiplier) - flick("coilhit", src) - playsound(src, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = 5) - tesla_zap(src, 5, power_produced) + coil_act(power) //addtimer(CALLBACK(src, PROC_REF(reset_shocked)), 10) spawn(10) reset_shocked() else ..() +/obj/machinery/power/tesla_coil/proc/coil_act(var/power) + var/power_produced = power / power_loss + add_avail(power_produced*input_power_multiplier) + flick("[icontype]hit", src) + playsound(src, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = 5) + tesla_zap(src, 5, power_produced) + /obj/machinery/power/tesla_coil/proc/zap() if((last_zap + zap_cooldown) > world.time || !powernet) return FALSE @@ -102,6 +104,127 @@ playsound(src, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = 5) tesla_zap(src, 10, power/(coeff/2)) +/obj/machinery/power/tesla_coil/relay + name = "tesla relay coil" + desc = "For the union!" + icon_state = "relay0" + icontype = "relay" + + circuit = /obj/item/weapon/circuitboard/tesla_coil + + power_loss = 1 + input_power_multiplier = 0 + + var/relay_efficiency = 0.9 + +/obj/machinery/power/tesla_coil/relay/RefreshParts() + ..() + var/relay_multiplier + for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) + relay_multiplier += C.rating + relay_efficiency = 0.85 + (0.05 * relay_multiplier) + +/obj/machinery/power/tesla_coil/relay/coil_act(var/power) + var/power_relayed = power * relay_efficiency + flick("[icontype]hit", src) + playsound(src, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = 5) + tesla_zap(src, 5, power_relayed) + +/obj/machinery/power/tesla_coil/splitter + name = "tesla prism coil" + desc = "For the union!" + icon_state = "prism0" + icontype = "prism" + + circuit = /obj/item/weapon/circuitboard/tesla_coil + + var/split_count = 1 + +/obj/machinery/power/tesla_coil/splitter/RefreshParts() + ..() + split_count = 0 + for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) + split_count += C.rating + +/obj/machinery/power/tesla_coil/splitter/coil_act(var/power) + var/power_per_bolt = power / (split_count + 1) + var/power_produced = power_per_bolt / power_loss + add_avail(power_produced*input_power_multiplier) + flick("[icontype]hit", src) + playsound(src, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = 5) + for(var/i = 0, i < split_count, i++) + tesla_zap(src, 5, power_per_bolt) + +/obj/machinery/power/tesla_coil/amplifier + name = "tesla amplifier coil" + desc = "For the union!" + icon_state = "amp0" + icontype = "amp" + + circuit = /obj/item/weapon/circuitboard/tesla_coil + + var/amp_eff = 2 + +/obj/machinery/power/tesla_coil/amplifier/RefreshParts() + ..() + var/amp_eff = 1 + for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) + amp_eff += C.rating + +/obj/machinery/power/tesla_coil/amplifier/coil_act(var/power) + var/power_produced = power / power_loss + add_avail(power_produced*input_power_multiplier) + flick("[icontype]hit", src) + playsound(src, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = 5) + tesla_zap(src, 5, power_produced) + +/obj/machinery/power/tesla_coil/recaster + name = "tesla recaster coil" + desc = "For the union!" + icon_state = "recaster0" + icontype = "recaster" + + circuit = /obj/item/weapon/circuitboard/tesla_coil + + var/zap_range = 6 + +/obj/machinery/power/tesla_coil/recaster/RefreshParts() + ..() + var/zap_range = 5 + for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) + zap_range += C.rating + +/obj/machinery/power/tesla_coil/recaster/coil_act(var/power) + var/power_relayed = power / power_loss + var/power_produced = power / (power_loss * 2) + add_avail(power_produced*input_power_multiplier) + flick("[icontype]hit", src) + playsound(src, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = zap_range) + tesla_zap(src, zap_range, power_relayed) + +/obj/machinery/power/tesla_coil/collector + name = "tesla collector coil" + desc = "For the union!" + icon_state = "collector0" + icontype = "collector" + + circuit = /obj/item/weapon/circuitboard/tesla_coil + + var/collect_eff = 0.8 + +/obj/machinery/power/tesla_coil/collector/RefreshParts() + ..() + var/collect_mod = 0 + for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) + collect_mod += C.rating + collect_eff = 0.75 + collect_mod*0.05 + +/obj/machinery/power/tesla_coil/collector/coil_act(var/power) + var/power_produced = power * collect_eff + add_avail(power_produced*input_power_multiplier) + flick("[icontype]hit", src) + playsound(src, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = 5) + /obj/machinery/power/grounding_rod name = "grounding rod" desc = "Keep an area from being fried from Edison's Bane." diff --git a/code/modules/power/tesla/telsa_construction.dm b/code/modules/power/tesla/telsa_construction.dm index 96729101a3c..23507f8e3c4 100644 --- a/code/modules/power/tesla/telsa_construction.dm +++ b/code/modules/power/tesla/telsa_construction.dm @@ -24,8 +24,35 @@ build_path = /obj/machinery/power/grounding_rod board_type = new /datum/frame/frame_types/machine matter = list(MAT_STEEL = 50, MAT_GLASS = 50) + origin_tech = list(TECH_MAGNET = 1, TECH_POWER = 2) req_components = list() /datum/category_item/autolathe/engineering/grounding_rod name = "grounding rod electronics" path = /obj/item/weapon/circuitboard/grounding_rod + +// SPECIAL BOARDS BELOW + +/obj/item/weapon/circuitboard/tesla_coil/attackby(obj/item/I as obj, mob/user as mob) + if(I.is_multitool()) + var/result = tgui_input_list(user, "What do you want to reconfigure the board to?", "Multitool-Circuitboard interface", list("Standard", "Relay", "Prism", "Amplifier", "Recaster", "Collector")) + switch(result) + if("Standard") + name = T_BOARD("tesla coil") + build_path = /obj/machinery/power/tesla_coil + if("Relay") + name = T_BOARD("tesla relay coil") + build_path = /obj/machinery/power/tesla_coil/relay + if("Prism") + name = T_BOARD("tesla prism coil") + build_path = /obj/machinery/power/tesla_coil/splitter + if("Amplifier") + name = T_BOARD("tesla amplifier coil") + build_path = /obj/machinery/power/tesla_coil/amplifier + if("Recaster") + name = T_BOARD("tesla recaster coil") + build_path = /obj/machinery/power/tesla_coil/recaster + if("Collector") + name = T_BOARD("tesla collector coil") + build_path = /obj/machinery/power/tesla_coil/collector + return \ No newline at end of file diff --git a/code/modules/reagents/reactions/instant/drinks.dm b/code/modules/reagents/reactions/instant/drinks.dm index c2e0521ee65..3f470a5714b 100644 --- a/code/modules/reagents/reactions/instant/drinks.dm +++ b/code/modules/reagents/reactions/instant/drinks.dm @@ -768,7 +768,7 @@ name = "Decaf Mint Tea" id = "decafminttea" result = "decafminttea" - required_reagents = list("decaftea" = 5, "mint" = 1) + required_reagents = list("teadecaf" = 5, "mint" = 1) result_amount = 6 /decl/chemical_reaction/instant/drinks/lemontea @@ -782,7 +782,7 @@ name = "Decaf Lemon Tea" id = "decaflemontea" result = "decaflemontea" - required_reagents = list("decaftea" = 5, "lemonjuice" = 1) + required_reagents = list("teadecaf" = 5, "lemonjuice" = 1) result_amount = 6 /decl/chemical_reaction/instant/drinks/limetea @@ -796,7 +796,7 @@ name = "Decaf Lime Tea" id = "decaflimetea" result = "decaflimetea" - required_reagents = list("decaftea" = 5, "limejuice" = 1) + required_reagents = list("teadecaf" = 5, "limejuice" = 1) result_amount = 6 /decl/chemical_reaction/instant/drinks/orangetea @@ -810,7 +810,7 @@ name = "Decaf Orange Tea" id = "decaforangetea" result = "decaforangetea" - required_reagents = list("decaftea" = 5, "orangejuice" = 1) + required_reagents = list("teadecaf" = 5, "orangejuice" = 1) result_amount = 6 /decl/chemical_reaction/instant/drinks/berrytea @@ -824,7 +824,7 @@ name = "Decaf Berry Tea" id = "decafberrytea" result = "decafberrytea" - required_reagents = list("decaftea" = 5, "berryjuice" = 1) + required_reagents = list("teadecaf" = 5, "berryjuice" = 1) result_amount = 6 /decl/chemical_reaction/instant/drinks/sakebomb diff --git a/icons/mob/vore/ears_32x64.dmi b/icons/mob/vore/ears_32x64.dmi index 5c6e3b6598a..4f5b7bd1858 100644 Binary files a/icons/mob/vore/ears_32x64.dmi and b/icons/mob/vore/ears_32x64.dmi differ diff --git a/icons/obj/tesla_engine/tesla_coil.dmi b/icons/obj/tesla_engine/tesla_coil.dmi index 96a6c636d83..d30dba3ee50 100644 Binary files a/icons/obj/tesla_engine/tesla_coil.dmi and b/icons/obj/tesla_engine/tesla_coil.dmi differ diff --git a/maps/redgate/islands.dmm b/maps/redgate/islands.dmm index a8632325c0d..c1a42194eeb 100644 --- a/maps/redgate/islands.dmm +++ b/maps/redgate/islands.dmm @@ -572,8 +572,8 @@ /turf/simulated/floor/water/deep/ocean/diving, /area/redgate/islands/ocean) "px" = ( -/obj/structure/fake_stairs/west/bottom, -/obj/structure/fake_stairs/west/bottom{ +/obj/structure/inactive_stairs/west/bottom, +/obj/structure/inactive_stairs/west/bottom{ pixel_y = 16 }, /turf/simulated/floor/tiled{ @@ -852,8 +852,8 @@ /turf/simulated/floor/outdoors/grass/heavy, /area/redgate/islands/ocean) "zg" = ( -/obj/structure/fake_stairs/west/top, -/obj/structure/fake_stairs/west/top{ +/obj/structure/inactive_stairs/west/top, +/obj/structure/inactive_stairs/west/top{ pixel_y = 16 }, /turf/simulated/floor/tiled{ diff --git a/maps/submaps/_helpers.dm b/maps/submaps/_helpers.dm index 4bf18fafbd3..5ff6dc8eb2d 100644 --- a/maps/submaps/_helpers.dm +++ b/maps/submaps/_helpers.dm @@ -132,4 +132,56 @@ /obj/structure/fake_stairs/west/bottom name = "stairs" dir = WEST - stepoff_dir = EAST \ No newline at end of file + stepoff_dir = EAST + +//Inactive stairs are completely cosmetic versions of fake_stairs +/obj/structure/inactive_stairs + name = "use a subtype! - stairs" + icon = 'icons/obj/structures/multiz.dmi' + icon_state = "stair" + density = 0 + opacity = 0 + anchored = 1 + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER + appearance_flags = PIXEL_SCALE|KEEP_TOGETHER + +/obj/structure/inactive_stairs/north/top + name = "stairs" + dir = NORTH + color = "#B0B0B0" + pixel_y = -32 + +/obj/structure/inactive_stairs/north/bottom + name = "stairs" + dir = NORTH + pixel_y = -32 + +/obj/structure/inactive_stairs/south/top + name = "stairs" + dir = SOUTH + color = "#B0B0B0" + +/obj/structure/inactive_stairs/south/bottom + name = "stairs" + dir = SOUTH + +/obj/structure/inactive_stairs/east/top + name = "stairs" + dir = EAST + color = "#B0B0B0" + pixel_x = -32 + +/obj/structure/inactive_stairs/east/bottom + name = "stairs" + dir = EAST + pixel_x = -32 + +/obj/structure/inactive_stairs/west/top + name = "stairs" + dir = WEST + color = "#B0B0B0" + +/obj/structure/inactive_stairs/west/bottom + name = "stairs" + dir = WEST diff --git a/vorestation.dme b/vorestation.dme index d45f0f08808..d8ff667eab5 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -4245,13 +4245,13 @@ #include "maps\expedition_vr\beach\submaps\mountains.dm" #include "maps\expedition_vr\beach\submaps\mountains_areas.dm" #include "maps\gateway_archive_vr\blackmarketpackers.dm" +#include "maps\groundbase\groundbase.dm" #include "maps\southern_cross\items\clothing\sc_accessory.dm" #include "maps\southern_cross\items\clothing\sc_suit.dm" #include "maps\southern_cross\items\clothing\sc_under.dm" #include "maps\southern_cross\loadout\loadout_suit.dm" #include "maps\southern_cross\loadout\loadout_uniform.dm" #include "maps\southern_cross\loadout\loadout_vr.dm" -#include "maps\stellar_delight\stellar_delight.dm" #include "maps\submaps\_helpers.dm" #include "maps\submaps\_readme.dm" #include "maps\submaps\admin_use_vr\event_autonomous_drone.dm"