diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index f5b76d1ba9..d41fbc69e1 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -58026,10 +58026,10 @@ }, /obj/item/clothing/head/russobluecamohat, /obj/item/clothing/head/russobluecamohat, -/obj/item/clothing/head/russofurhat, -/obj/item/clothing/head/russofurhat, -/obj/item/clothing/head/russofurhat, -/obj/item/clothing/head/russofurhat, +/obj/item/clothing/head/helmet/rus_ushanka, +/obj/item/clothing/head/helmet/rus_ushanka, +/obj/item/clothing/head/helmet/rus_ushanka, +/obj/item/clothing/head/helmet/rus_ushanka, /obj/item/clothing/under/mw2_russian_para, /obj/item/clothing/under/mw2_russian_para, /obj/item/clothing/under/mw2_russian_para, diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index a0467cde6c..905b2cdb1b 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -506,6 +506,7 @@ "bx" = ( /obj/structure/table, /obj/machinery/readybutton, +/obj/item/storage/lockbox/dueling/hugbox/stamina, /turf/open/floor/holofloor/basalt, /area/holodeck/rec_center/thunderdome) "by" = ( @@ -522,6 +523,7 @@ /area/holodeck/rec_center/thunderdome) "bA" = ( /obj/machinery/readybutton, +/obj/item/storage/lockbox/dueling/hugbox/stamina, /obj/effect/turf_decal/tile/red{ dir = 1 }, diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 3acd1443af..c6be8318fd 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -87,5 +87,5 @@ #define MAX_KEYPRESS_COMMANDLENGTH 16 ///Max amount of keypress messages per second over two seconds before client is autokicked #define MAX_KEYPRESS_AUTOKICK 100 -///Length of held key rolling buffer -#define HELD_KEY_BUFFER_LENGTH 15 +///Length of max held keys +#define MAX_HELD_KEYS 15 diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 2a59558bcd..52d2fe45cd 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -239,7 +239,6 @@ SUBSYSTEM_DEF(air) if (MC_TICK_CHECK) return - /datum/controller/subsystem/air/proc/remove_from_active(turf/open/T) active_turfs -= T SSair_turfs.currentrun -= T @@ -257,7 +256,7 @@ SUBSYSTEM_DEF(air) #ifdef VISUALIZE_ACTIVE_TURFS T.add_atom_colour("#00ff00", TEMPORARY_COLOUR_PRIORITY) #endif - T.excited = 1 + T.excited = TRUE active_turfs |= T SSair_turfs.currentrun |= T if(blockchanges && T.excited_group) diff --git a/code/controllers/subsystem/air_turfs.dm b/code/controllers/subsystem/air_turfs.dm index 2902940bf9..9dd41aede5 100644 --- a/code/controllers/subsystem/air_turfs.dm +++ b/code/controllers/subsystem/air_turfs.dm @@ -11,7 +11,6 @@ SUBSYSTEM_DEF(air_turfs) /datum/controller/subsystem/air_turfs/fire(resumed = 0) var/fire_count = times_fired - //cache for sanic speed if (!resumed) src.currentrun = SSair.active_turfs.Copy() //cache for sanic speed (lists are references anyways) diff --git a/code/controllers/subsystem/fail2topic.dm b/code/controllers/subsystem/fail2topic.dm index d17cce70f9..b358cc2c5f 100644 --- a/code/controllers/subsystem/fail2topic.dm +++ b/code/controllers/subsystem/fail2topic.dm @@ -34,7 +34,6 @@ SUBSYSTEM_DEF(fail2topic) for(var/i in 1 to length(rate_limiting)) var/ip = rate_limiting[i] var/last_attempt = rate_limiting[ip] - if (world.time - last_attempt > rate_limit) rate_limiting -= ip fail_counts -= ip diff --git a/code/controllers/subsystem/input.dm b/code/controllers/subsystem/input.dm index cc09ca816e..0970b23a16 100644 --- a/code/controllers/subsystem/input.dm +++ b/code/controllers/subsystem/input.dm @@ -114,6 +114,6 @@ SUBSYSTEM_DEF(input) /datum/controller/subsystem/input/fire() var/list/clients = GLOB.clients // Let's sing the list cache song - for(var/i in 1 to clients.len) + for(var/i in 1 to length(clients)) var/client/C = clients[i] C.keyLoop() diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 8c8ad2d337..4850a67646 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -37,6 +37,8 @@ SUBSYSTEM_DEF(mapping) var/datum/space_level/empty_space var/num_of_res_levels = 1 + var/stat_map_name = "Loading..." + //dlete dis once #39770 is resolved /datum/controller/subsystem/mapping/proc/HACK_LoadMapConfig() if(!config) @@ -45,6 +47,7 @@ SUBSYSTEM_DEF(mapping) #else config = load_map_config(error_if_missing = FALSE) #endif + stat_map_name = config.map_name /datum/controller/subsystem/mapping/Initialize(timeofday) HACK_LoadMapConfig() @@ -330,7 +333,10 @@ GLOBAL_LIST_EMPTY(the_station_areas) return next_map_config = VM - return TRUE + + . = TRUE + + stat_map_name = "[config.map_name] (Next: [next_map_config.map_name])" /datum/controller/subsystem/mapping/proc/preloadTemplates(path = "_maps/templates/") //see master controller setup var/list/filelist = flist(path) diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index b406a8ccad..4d9eefae5b 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -30,6 +30,7 @@ SUBSYSTEM_DEF(shuttle) var/list/hostileEnvironments = list() //Things blocking escape shuttle from leaving var/list/tradeBlockade = list() //Things blocking cargo from leaving. var/supplyBlocked = FALSE + var/emergency_shuttle_stat_text //supply shuttle stuff var/obj/docking_port/mobile/supply/supply @@ -118,6 +119,9 @@ SUBSYSTEM_DEF(shuttle) points += point_gain //Cargo stuff end + var/esETA = emergency?.getModeStr() + emergency_shuttle_stat_text = "[esETA? "[esETA] [emergency.getTimerStr()]" : ""]" + if(!SSmapping.clearing_reserved_turfs) while(transit_requesters.len) var/requester = popleft(transit_requesters) diff --git a/code/controllers/subsystem/time_track.dm b/code/controllers/subsystem/time_track.dm index 3b19ae31cd..779b186d08 100644 --- a/code/controllers/subsystem/time_track.dm +++ b/code/controllers/subsystem/time_track.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(time_track) name = "Time Tracking" - wait = 600 + wait = 1 SECONDS flags = SS_NO_INIT|SS_NO_TICK_CHECK runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT @@ -16,23 +16,33 @@ SUBSYSTEM_DEF(time_track) var/last_tick_byond_time = 0 var/last_tick_tickcount = 0 + var/last_measurement = 0 + var/measurement_delay = 60 + + var/stat_time_text + var/time_dilation_text + /datum/controller/subsystem/time_track/fire() + stat_time_text = "Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")]\n\nRound Time: [WORLDTIME2TEXT("hh:mm:ss")]\n\nStation Time: [STATION_TIME_TIMESTAMP("hh:mm:ss")]\n\n[time_dilation_text]" - var/current_realtime = REALTIMEOFDAY - var/current_byondtime = world.time - var/current_tickcount = world.time/world.tick_lag + if(++last_measurement == measurement_delay) + last_measurement = 0 + var/current_realtime = REALTIMEOFDAY + var/current_byondtime = world.time + var/current_tickcount = world.time/world.tick_lag - if (!first_run) - var/tick_drift = max(0, (((current_realtime - last_tick_realtime) - (current_byondtime - last_tick_byond_time)) / world.tick_lag)) + if (!first_run) + var/tick_drift = max(0, (((current_realtime - last_tick_realtime) - (current_byondtime - last_tick_byond_time)) / world.tick_lag)) - time_dilation_current = tick_drift / (current_tickcount - last_tick_tickcount) * 100 + time_dilation_current = tick_drift / (current_tickcount - last_tick_tickcount) * 100 - time_dilation_avg_fast = MC_AVERAGE_FAST(time_dilation_avg_fast, time_dilation_current) - time_dilation_avg = MC_AVERAGE(time_dilation_avg, time_dilation_avg_fast) - time_dilation_avg_slow = MC_AVERAGE_SLOW(time_dilation_avg_slow, time_dilation_avg) - else - first_run = FALSE - last_tick_realtime = current_realtime - last_tick_byond_time = current_byondtime - last_tick_tickcount = current_tickcount - SSblackbox.record_feedback("associative", "time_dilation_current", 1, list("[SQLtime()]" = list("current" = "[time_dilation_current]", "avg_fast" = "[time_dilation_avg_fast]", "avg" = "[time_dilation_avg]", "avg_slow" = "[time_dilation_avg_slow]"))) + time_dilation_avg_fast = MC_AVERAGE_FAST(time_dilation_avg_fast, time_dilation_current) + time_dilation_avg = MC_AVERAGE(time_dilation_avg, time_dilation_avg_fast) + time_dilation_avg_slow = MC_AVERAGE_SLOW(time_dilation_avg_slow, time_dilation_avg) + else + first_run = FALSE + last_tick_realtime = current_realtime + last_tick_byond_time = current_byondtime + last_tick_tickcount = current_tickcount + SSblackbox.record_feedback("associative", "time_dilation_current", 1, list("[SQLtime()]" = list("current" = "[time_dilation_current]", "avg_fast" = "[time_dilation_avg_fast]", "avg" = "[time_dilation_avg]", "avg_slow" = "[time_dilation_avg_slow]"))) + time_dilation_text = "Time Dilation: [round(time_dilation_current,1)]% AVG:([round(time_dilation_avg_fast,1)]%, [round(time_dilation_avg,1)]%, [round(time_dilation_avg_slow,1)]%)" diff --git a/code/game/gamemodes/gangs/gang_items.dm b/code/game/gamemodes/gangs/gang_items.dm index 688af3beea..4dba8dae93 100644 --- a/code/game/gamemodes/gangs/gang_items.dm +++ b/code/game/gamemodes/gangs/gang_items.dm @@ -290,12 +290,6 @@ datum/gang_item/clothing/shades //Addition: Why not have cool shades on a gang m cost = 5 item_path = /obj/item/grenade/syndieminibomb/concussion/frag -/datum/gang_item/equipment/stimpack - name = "Black Market Stimulants" - id = "stimpack" - cost = 12 - item_path = /obj/item/reagent_containers/syringe/stimulants - /datum/gang_item/equipment/implant_breaker name = "Implant Breaker" id = "implant_breaker" diff --git a/code/game/machinery/telecomms/computers/message.dm b/code/game/machinery/telecomms/computers/message.dm index 07028ba2d3..884c2bb37d 100644 --- a/code/game/machinery/telecomms/computers/message.dm +++ b/code/game/machinery/telecomms/computers/message.dm @@ -421,7 +421,7 @@ "name" = "[customsender]", "job" = "[customjob]", "message" = custommessage, - "emoji_message" = emoji_parse(custommessage), + "emojis" = TRUE, "targets" = list("[customrecepient.owner] ([customrecepient.ownjob])") )) // this will log the signal and transmit it to the target diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm index 0cf356ad3d..1960080856 100644 --- a/code/game/machinery/telecomms/machines/message_server.dm +++ b/code/game/machinery/telecomms/machines/message_server.dm @@ -106,11 +106,10 @@ return "Everyone" return data["targets"][1] -/datum/signal/subspace/pda/proc/format_message(emojify = FALSE) - var/message = emojify ? data["emoji_message"] : data["message"] +/datum/signal/subspace/pda/proc/format_message() if (logged && data["photo"]) - return "\"[message]\" (Photo)" - return "\"[message]\"" + return "\"[data["message"]]\" (Photo)" + return "\"[data["message"]]\"" /datum/signal/subspace/pda/broadcast() if (!logged) // Can only go through if a message server logs it diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 51d8a88df8..abab4af770 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -76,6 +76,7 @@ GLOBAL_LIST_EMPTY(PDAs) var/hidden = FALSE // Is the PDA hidden from the PDA list? var/emped = FALSE var/equipped = FALSE //used here to determine if this is the first time its been picked up + var/allow_emojis = TRUE //if the pda can send emojis and actually have them parsed as such var/obj/item/card/id/id = null //Making it possible to slot an ID card into the PDA so it can function as both. var/ownjob = null //related to above @@ -254,10 +255,14 @@ GLOBAL_LIST_EMPTY(PDAs) var/datum/asset/spritesheet/assets = get_asset_datum(/datum/asset/spritesheet/simple/pda) assets.send(user) + var/datum/asset/spritesheet/emoji_s = get_asset_datum(/datum/asset/spritesheet/goonchat) + emoji_s.send(user) //Already sent by chat but no harm doing this + user.set_machine(src) var/dat = "Personal Data Assistant" dat += assets.css_tag() + dat += emoji_s.css_tag() dat += "[PDAIMG(refresh)]Refresh" @@ -337,6 +342,8 @@ GLOBAL_LIST_EMPTY(PDAs) dat += "
  • [PDAIMG(medbot)]Bots Access
  • " if (cartridge.access & CART_JANITOR) dat += "
  • [PDAIMG(bucket)]Custodial Locator
  • " + if(cartridge.access & CART_MIME) + dat += "
  • [PDAIMG(emoji)]Emoji Guidebook
  • " if (istype(cartridge.radio)) dat += "
  • [PDAIMG(signaler)]Signaler System
  • " if (cartridge.access & CART_NEWSCASTER) @@ -752,7 +759,6 @@ GLOBAL_LIST_EMPTY(PDAs) return if((last_text && world.time < last_text + 10) || (everyone && last_everyone && world.time < last_everyone + PDA_SPAM_DELAY)) return - var/emoji_message = emoji_parse(message) if(prob(1)) message += "\nSent from my PDA" // Send the signal @@ -781,7 +787,7 @@ GLOBAL_LIST_EMPTY(PDAs) "job" = "[ownjob]", "message" = message, "targets" = string_targets, - "emoji_message" = emoji_message + "emojis" = allow_emojis )) if (picture) signal.data["photo"] = picture @@ -795,15 +801,18 @@ GLOBAL_LIST_EMPTY(PDAs) playsound(src, 'sound/machines/terminal_error.ogg', 15, 1) var/target_text = signal.format_target() + if(allow_emojis) + message = emoji_parse(message)//already sent- this just shows the sent emoji as one to the sender in the to_chat + signal.data["message"] = emoji_parse(signal.data["message"]) // Log it in our logs tnote += "→ To [target_text]:
    [signal.format_message()]
    " // Show it to ghosts - var/ghost_message = "[owner] PDA Message --> [target_text]: [signal.format_message(TRUE)]" + var/ghost_message = "[owner] PDA Message --> [target_text]: [signal.format_message()]" for(var/i in GLOB.dead_mob_list) var/mob/M = i if(M?.client && M.client.prefs.chat_toggles & CHAT_GHOSTPDA) to_chat(M, "[FOLLOW_LINK(M, user)] [ghost_message]") - to_chat(user, "Message sent to [target_text]: \"[emoji_message]\"") + to_chat(user, "Message sent to [target_text]: \"[message]\"") // Log in the talk log user.log_talk(message, LOG_PDA, tag="PDA: [initial(name)] to [target_text] (BLOCKED:[string_blocked])") if (!silent) @@ -834,7 +843,11 @@ GLOBAL_LIST_EMPTY(PDAs) hrefstart = "" hrefend = "" - to_chat(L, "[icon2html(src)] Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], [signal.format_message(TRUE)] (Reply) (BLOCK/UNBLOCK)") + var/inbound_message = signal.format_message() + if(signal.data["emojis"] == TRUE)//so will not parse emojis as such from pdas that don't send emojis + inbound_message = emoji_parse(inbound_message) + + to_chat(L, "[icon2html(src)] Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], [inbound_message] (Reply) (BLOCK/UNBLOCK)") update_icon(TRUE) diff --git a/code/game/objects/items/devices/PDA/PDA_types.dm b/code/game/objects/items/devices/PDA/PDA_types.dm index 2da47d481e..b604bec258 100644 --- a/code/game/objects/items/devices/PDA/PDA_types.dm +++ b/code/game/objects/items/devices/PDA/PDA_types.dm @@ -19,6 +19,26 @@ if(istype(cart) && cart.charges < 5) cart.charges++ +//Mime PDA sends "silent" messages. +/obj/item/pda/mime + name = "mime PDA" + default_cartridge = /obj/item/cartridge/virus/mime + inserted_item = /obj/item/toy/crayon/mime + icon_state = "pda-mime" + desc = "A portable microcomputer by Thinktronic Systems, LTD. The hardware has been modified for compliance with the vows of silence." + silent = TRUE + ttone = "silence" + +/obj/item/pda/mime/msg_input(mob/living/U = usr) + if(emped || toff) + return + var/emojis = emoji_sanitize(stripped_input(U, "Please enter emojis", name)) + if(!emojis) + return + if(!U.canUseTopic(src, BE_CLOSE)) + return + return emojis + // Special AI/pAI PDAs that cannot explode. /obj/item/pda/ai icon = null @@ -79,14 +99,6 @@ icon_state = "pda-science" ttone = "boom" -/obj/item/pda/mime - name = "mime PDA" - default_cartridge = /obj/item/cartridge/virus/mime - inserted_item = /obj/item/toy/crayon/mime - icon_state = "pda-mime" - silent = TRUE - ttone = "silence" - /obj/item/pda/heads default_cartridge = /obj/item/cartridge/head icon_state = "pda-hop" diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index ba3fdce9b9..5fb97ef17f 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -579,6 +579,22 @@ Code: if (54) // Beepsky, Medibot, Floorbot, and Cleanbot access menu = "

    [PDAIMG(medbot)] Bots Interlink

    " bot_control() + if (55) // Emoji Guidebook for mimes + menu = "

    [PDAIMG(emoji)] Emoji Guidebook

    " + var/static/list/emoji_icon_states + var/static/emoji_table + if(!emoji_table) + var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/goonchat) + var/list/collate = list("
    ") + for(var/emoji in sortList(icon_states(icon('icons/emoji.dmi')))) + var/tag = sheet.icon_tag("emoji-[emoji]") + collate += "" + collate += "
    [emoji][tag]

    " + emoji_table = collate.Join() + + menu += "
    To use an emoji in a pda message, refer to the guide and add \":\" around the emoji. Your PDA supports the following emoji:
    " + menu += emoji_table + if (99) //Newscaster message permission error menu = "
    ERROR : NOT AUTHORIZED [host_pda.id ? "" : "- ID SLOT EMPTY"]
    " @@ -679,6 +695,11 @@ Code: return playsound(src, 'sound/machines/terminal_select.ogg', 50, 1) + //emoji previews + if(href_list["emoji"]) + var/parse = emoji_parse(":[href_list["emoji"]]:") + to_chat(usr, parse) + //Bot control section! Viciously ripped from radios for being laggy and terrible. if(href_list["op"]) switch(href_list["op"]) diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm index e0cf903465..ce4aba6ab7 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm @@ -1,5 +1,6 @@ //3-Way Manifold /obj/machinery/atmospherics/pipe/heat_exchanging/manifold + icon = 'icons/obj/atmospherics/pipes/he-manifold.dmi' icon_state = "manifold-2" name = "pipe manifold" @@ -15,7 +16,7 @@ var/mutable_appearance/center -/obj/machinery/atmospherics/pipe/manifold/Initialize() +/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/Initialize() icon_state = "" center = mutable_appearance(icon, "manifold_center") return ..() diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index 8ceef76a06..3562350473 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -264,6 +264,8 @@ M.key = new_team_member.key M.faction += team M.equipOutfit(ctf_gear) + M.dna.species.punchdamagehigh = 25 + M.dna.species.punchdamagelow = 25 spawned_mobs += M /obj/machinery/capture_the_flag/Topic(href, href_list) @@ -368,6 +370,10 @@ CTF.ctf_gear = initial(ctf_gear) CTF.respawn_cooldown = DEFAULT_RESPAWN +/proc/ctf_floor_vanish(atom/target) + if(isturf(target.loc)) + qdel(target) + /obj/item/gun/ballistic/automatic/pistol/deagle/ctf desc = "This looks like it could really hurt in melee." force = 75 @@ -375,11 +381,7 @@ /obj/item/gun/ballistic/automatic/pistol/deagle/ctf/dropped() . = ..() - addtimer(CALLBACK(src, .proc/floor_vanish), 1) - -/obj/item/gun/ballistic/automatic/pistol/deagle/ctf/proc/floor_vanish() - if(isturf(loc)) - qdel(src) + addtimer(CALLBACK(GLOBAL_PROC, /proc/ctf_floor_vanish, src), 1) /obj/item/ammo_box/magazine/m50/ctf ammo_type = /obj/item/ammo_casing/a50/ctf @@ -402,22 +404,14 @@ /obj/item/gun/ballistic/automatic/laser/ctf/dropped() . = ..() - addtimer(CALLBACK(src, .proc/floor_vanish), 1) - -/obj/item/gun/ballistic/automatic/laser/ctf/proc/floor_vanish() - if(isturf(loc)) - qdel(src) + addtimer(CALLBACK(GLOBAL_PROC, /proc/ctf_floor_vanish, src), 1) /obj/item/ammo_box/magazine/recharge/ctf ammo_type = /obj/item/ammo_casing/caseless/laser/ctf /obj/item/ammo_box/magazine/recharge/ctf/dropped() . = ..() - addtimer(CALLBACK(src, .proc/floor_vanish), 1) - -/obj/item/ammo_box/magazine/recharge/ctf/proc/floor_vanish() - if(isturf(loc)) - qdel(src) + addtimer(CALLBACK(GLOBAL_PROC, /proc/ctf_floor_vanish, src), 1) /obj/item/ammo_casing/caseless/laser/ctf projectile_type = /obj/item/projectile/beam/ctf @@ -470,6 +464,19 @@ icon_state = "bluelaser" impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser +// MELEE GANG +/obj/item/claymore/ctf + slot_flags = SLOT_BACK + +/obj/item/claymore/ctf/pre_attack(atom/target, mob/user, params) + if(!is_ctf_target(target)) + return FALSE + return ..() + +/obj/item/claymore/ctf/dropped() + . = ..() + addtimer(CALLBACK(GLOBAL_PROC, /proc/ctf_floor_vanish, src), 1) + /datum/outfit/ctf name = "CTF" ears = /obj/item/radio/headset @@ -483,6 +490,7 @@ l_pocket = /obj/item/ammo_box/magazine/recharge/ctf r_pocket = /obj/item/ammo_box/magazine/recharge/ctf r_hand = /obj/item/gun/ballistic/automatic/laser/ctf + back = /obj/item/claymore/ctf /datum/outfit/ctf/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source) if(visualsOnly) diff --git a/code/modules/cargo/exports/gear.dm b/code/modules/cargo/exports/gear.dm index 77b57466d9..d15fc18b6e 100644 --- a/code/modules/cargo/exports/gear.dm +++ b/code/modules/cargo/exports/gear.dm @@ -229,12 +229,12 @@ /datum/export/gear/magboots cost = 50 unit_name = "magboots" - export_types = list(/obj/item/clothing/shoes/magboots, /obj/item/clothing/shoes/magboots/atmos) + export_types = list(/obj/item/clothing/shoes/magboots) /datum/export/gear/nosellboots cost = -5000 //We DONT want scew antags unit_name = "error shipment stolen" - export_types = list(/obj/item/clothing/shoes/magboots/advance, /obj/item/clothing/shoes/magboots/deathsquad) + export_types = list(/obj/item/clothing/shoes/magboots/advance) /datum/export/gear/syndamagboots cost = 250 @@ -279,7 +279,7 @@ /datum/export/gear/magicboots //Magic as in Antag - Wiz/Cults cost = 450 unit_name = "magic shoes" - export_types = list(/obj/item/clothing/shoes/sandal/marisa, /obj/item/clothing/shoes/sandal/magic, /obj/item/clothing/shoes/cult, /obj/item/clothing/shoes/clockwork, /obj/item/clothing/shoes/clown_shoes/taeclowndo, /obj/item/clothing/shoes/sandal/slippers) + export_types = list(/obj/item/clothing/shoes/sandal/marisa, /obj/item/clothing/shoes/sandal/magic, /obj/item/clothing/shoes/cult, /obj/item/clothing/shoes/clockwork, /obj/item/clothing/shoes/clown_shoes/taeclowndo) include_subtypes = TRUE //Headsets/Ears @@ -585,8 +585,7 @@ datum/export/gear/glasses //glasses are not worth selling export_types = list(/obj/item/clothing/under/scratch, /obj/item/clothing/under/sl_suit, /obj/item/clothing/under/rank/vice, /obj/item/clothing/under/suit_jacket, \ /obj/item/clothing/under/burial, /obj/item/clothing/under/skirt/black, /obj/item/clothing/under/captainparade, /obj/item/clothing/under/hosparademale, \ /obj/item/clothing/under/hosparadefem, /obj/item/clothing/under/assistantformal, /obj/item/clothing/under/stripeddress, /obj/item/clothing/under/redeveninggown, \ - /obj/item/clothing/under/plaid_skirt, /obj/item/clothing/under/geisha, /obj/item/clothing/under/trek, /obj/item/clothing/under/wedding, /obj/item/clothing/under/aviatoruniform,\ - /obj/item/clothing/under/mega, /obj/item/clothing/under/cia, /obj/item/clothing/under/casualwear, /obj/item/clothing/under/rank) + /obj/item/clothing/under/plaid_skirt, /obj/item/clothing/under/geisha, /obj/item/clothing/under/trek, /obj/item/clothing/under/rank) include_subtypes = TRUE /datum/export/gear/armored_jumpsuit diff --git a/code/modules/cargo/packs/misc.dm b/code/modules/cargo/packs/misc.dm index b53b7761e5..deac656109 100644 --- a/code/modules/cargo/packs/misc.dm +++ b/code/modules/cargo/packs/misc.dm @@ -204,6 +204,35 @@ for(var/i in 1 to 9) new /obj/item/coin/silver(.) +/datum/supply_pack/misc/dueling_stam + name = "Dueling Pistols" + desc = "Resolve all your quarrels with some nonlethal fun." + cost = 2000 + contains = list(/obj/item/storage/lockbox/dueling/hugbox/stamina, + /obj/item/storage/lockbox/dueling/hugbox/stamina, + /obj/item/storage/lockbox/dueling/hugbox/stamina, + /obj/item/storage/lockbox/dueling/hugbox/stamina, + /obj/item/storage/lockbox/dueling/hugbox/stamina) + crate_name = "dueling pistols" + +/datum/supply_pack/misc/dueling_lethal + name = "Lethal Dueling Pistols" + desc = "Settle your differences the true spaceman way." + cost = 3000 + contraband = TRUE + contains = list(/obj/item/storage/lockbox/dueling/hugbox, + /obj/item/storage/lockbox/dueling/hugbox, + /obj/item/storage/lockbox/dueling/hugbox) + crate_name = "dueling pistols (lethal)" + +/datum/supply_pack/misc/dueling_death + name = "Elimination Dueling Pistols" + desc = "It's high noon." + cost = 5000 + hidden = TRUE + contains = list(/obj/item/storage/lockbox/dueling) + crate_name = "dueling pistols (elimination)" + /datum/supply_pack/misc/dirtymags name = "Dirty Magazines" desc = "Get your mind out of the gutter operative, you have work to do. Three items per order. Possible Results: .357 Speedloaders, Kitchen Gun Mags, Stetchkin Mags." diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 7dc233d20f..46473c3437 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -448,7 +448,8 @@ GLOBAL_LIST_EMPTY(asset_datums) "scanner" = 'icons/pda_icons/pda_scanner.png', "signaler" = 'icons/pda_icons/pda_signaler.png', "status" = 'icons/pda_icons/pda_status.png', - "dronephone" = 'icons/pda_icons/pda_dronephone.png' + "dronephone" = 'icons/pda_icons/pda_dronephone.png', + "emoji" = 'icons/pda_icons/pda_emoji.png' ) /datum/asset/spritesheet/simple/paper diff --git a/code/modules/client/verbs/ping.dm b/code/modules/client/verbs/ping.dm index de19d0d52c..02c5b5a7fd 100644 --- a/code/modules/client/verbs/ping.dm +++ b/code/modules/client/verbs/ping.dm @@ -14,9 +14,9 @@ /client/verb/display_ping(time as num) set instant = TRUE set name = ".display_ping" - to_chat(src, "Round trip ping took [round(pingfromtime(time),1)]ms") + to_chat(src, "Round trip ping took [round(pingfromtime(time),1)]ms (Avg: [round(avgping, 1)]ms])") /client/verb/ping() set name = "Ping" set category = "OOC" - winset(src, null, "command=.display_ping+[world.time+world.tick_lag*TICK_USAGE_REAL/100]") \ No newline at end of file + winset(src, null, "command=.display_ping+[world.time+world.tick_lag*TICK_USAGE_REAL/100]") diff --git a/code/modules/clothing/glasses/vg_glasses.dm b/code/modules/clothing/glasses/vg_glasses.dm deleted file mode 100644 index a51a03242c..0000000000 --- a/code/modules/clothing/glasses/vg_glasses.dm +++ /dev/null @@ -1,41 +0,0 @@ - -//VG rip - -/obj/item/clothing/glasses/sunglasses/purple - desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes, and the colored lenses let you see the world in purple." - name = "purple sunglasses" - icon_state = "sun_purple" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/glasses/sunglasses/star - name = "star-shaped sunglasses" - desc = "Novelty sunglasses, both lenses are in the shape of a star." - icon_state = "sun_star" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/glasses/sunglasses/rockstar - name = "red star-shaped sunglasses" - desc = "Novelty sunglasses with a fancy silver frame and two red-tinted star-shaped lenses. You should probably stomp on them and get a pair of normal ones." - icon_state = "sun_star_silver" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/glasses/gglasses - name = "Green Glasses" - desc = "Forest green glasses, like the kind you'd wear when hatching a nasty scheme." - icon_state = "gglasses" - item_state = "gglasses" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/glasses/welding/superior - name = "superior welding goggles" - desc = "Welding goggles made from more expensive materials, strangely smells like potatoes. Allows for better vision than normal goggles.." - icon_state = "rwelding-g" - item_state = "rwelding-g" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - actions_types = list(/datum/action/item_action/toggle) - flash_protect = 2 - tint = 1 - visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT - flags_cover = GLASSESCOVERSEYES - visor_flags_inv = HIDEEYES - glass_colour_type = /datum/client_colour/glass_colour/green \ No newline at end of file diff --git a/code/modules/clothing/gloves/vg_gloves.dm b/code/modules/clothing/gloves/vg_gloves.dm deleted file mode 100644 index 6d7e775314..0000000000 --- a/code/modules/clothing/gloves/vg_gloves.dm +++ /dev/null @@ -1,70 +0,0 @@ - -/obj/item/clothing/gloves/batmangloves - desc = "Used for handling all things bat related." - name = "batgloves" - icon_state = "bmgloves" - item_state = "bmgloves" - item_color = "bmgloves" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -obj/item/clothing/gloves/bikergloves - name = "Biker's Gloves" - icon_state = "biker-gloves" - item_state = "biker-gloves" - item_color = "bikergloves" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/gloves/megagloves - desc = "Uncomfortably bulky armored gloves." - name = "DRN-001 Gloves" - icon_state = "megagloves" - item_state = "megagloves" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/gloves/protogloves - desc = "Funcionally identical to the DRN-001 model's, but in red!" - name = "Prototype Gloves" - icon_state = "protogloves" - item_state = "protogloves" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/gloves/megaxgloves - desc = "An upgrade to the DRN-001's gauntlets, retains the uncomfortable armor, but comes with white gloves!" - name = "Maverick Hunter gloves" - icon_state = "megaxgloves" - item_state = "megaxgloves" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/gloves/joegloves - desc = "Large grey gloves, very similar to the Prototype's." - name = "Sniper Gloves" - icon_state = "joegloves" - item_state = "joegloves" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/gloves/doomguy - desc = "" - name = "Doomguy's gloves" - icon_state = "doom" - item_state = "doom" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/gloves/anchor_arms - name = "Anchor Arms" - desc = "When you're a jerk, everybody loves you." - icon_state = "anchorarms" - item_state = "anchorarms" - -/obj/item/clothing/gloves/neorussian - name = "neo-Russian gloves" - desc = "Utilizes a non-slip technology that allows you to never drop your precious bottles of vodka." - icon_state = "nr_gloves" - item_state = "nr_gloves" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/gloves/neorussian/fingerless - name = "neo-Russian fingerless gloves" - desc = "For these tense combat situations when you just have to pick your nose." - icon_state = "nr_fgloves" - item_state = "nr_fgloves" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' \ No newline at end of file diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 696ff1346c..189fb46e46 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -423,3 +423,15 @@ desc = "A security cowboy hat, perfect for any true lawman" icon_state = "cowboyhat_sec" item_state= "cowboyhat_sec" + +/obj/item/clothing/head/squatter_hat + name = "slav squatter hat" + icon_state = "squatter_hat" + item_state = "squatter_hat" + desc = "Cyka blyat." + +/obj/item/clothing/head/russobluecamohat + name = "russian blue camo beret" + desc = "A symbol of discipline, honor, and lots and lots of removal of some type of skewered food." + icon_state = "russobluecamohat" + item_state = "russobluecamohat" diff --git a/code/modules/clothing/head/vg_hats.dm b/code/modules/clothing/head/vg_hats.dm deleted file mode 100644 index 87f64baf13..0000000000 --- a/code/modules/clothing/head/vg_hats.dm +++ /dev/null @@ -1,155 +0,0 @@ -/obj/item/clothing/head/helmet/dredd - name = "Judge Helmet" - desc = "Judge, Jury, and Executioner." - icon_state = "dredd-helmet" - item_state = "dredd-helmet" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - armor = list(melee = 40, bullet = 30, laser = 30,energy = 30, bomb = 50, bio = 90, rad = 20, fire = 50, acid = 50) - cold_protection = HEAD - min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT - heat_protection = HEAD - max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT - strip_delay = 80 - dog_fashion = null - -/obj/item/clothing/head/helmet/aviatorhelmet - name = "Aviator Helmet" - desc = "Help the Bombardier!" - armor = list(melee = 25, bullet = 0, laser = 20, energy = 10, bomb = 10, bio = 0, rad = 0) - item_state = "aviator_helmet" - icon_state = "aviator_helmet" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/head/helmet/biker - name = "Biker's Helmet" - desc = "This helmet should protect you from russians and masked vigilantes." - armor = list(melee = 25, bullet = 15, laser = 20, energy = 10, bomb = 10, bio = 0, rad = 0) - icon_state = "biker_helmet" - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR - -/obj/item/clothing/head/helmet/richard - name = "Richard" - desc = "Do you like hurting people?" - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) - icon_state = "richard" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR - -/obj/item/clothing/head/helmet/megahelmet - name = "DRN-001 Helmet" - desc = "The helmet of the DRN-001 model. A simple, sturdy blue helmet." - icon_state = "megahelmet" - item_state = "megahelmet" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - siemens_coefficient = 1 - -/obj/item/clothing/head/helmet/protohelmet - name = "Prototype Helmet" - desc = "Shiny red helmet with white accents and a built in shaded visor that does absolutely nothing, nothing but look rad as hell." - icon_state = "protohelmet" - item_state = "protohelmet" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - siemens_coefficient = 1 - -/obj/item/clothing/head/helmet/megaxhelmet - name = "Maverick Hunter Helmet" - desc = "Heavily armored upgrade to the DRN-001 model's helmet, now comes with a pointless red crystal thing!" - icon_state = "megaxhelmet" - item_state = "megaxhelmet" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/head/helmet/joehelmet - name = "Sniper Helmet" - desc = "Helmet belonging to one of the many mass produced 'Joe' type robots." - icon_state = "joehelmet" - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR - item_state = "joehelmet" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/head/helmet/doomguy - name = "Doomguy's helmet" - desc = "" - icon_state = "doom" - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR - item_state = "doom" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - armor = list(melee = 50, bullet = 40, laser = 40,energy = 40, bomb = 5, bio = 0, rad = 0) - -/obj/item/clothing/head/helmet/neorussian - name = "neo-Russian helmet" - desc = "This piece of equipment can double as a pillow, a bowl, an emergency toilet, and sometimes as a helmet." - icon_state = "nr_helmet" - item_state = "nr_helmet" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/head/panzer - name = "Panzer Cap" - desc = "Command any mech in style." - icon_state = "panzercap" - item_state = "panzercap" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/head/russobluecamohat - name = "russian blue camo beret" - desc = "A symbol of discipline, honor, and lots and lots of removal of some type of skewered food." - icon_state = "russobluecamohat" - item_state = "russobluecamohat" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/head/russofurhat - name = "russian fur hat" - desc = "Russian winter got you down? Maybe your enemy, but not you!" - icon_state = "russofurhat" - item_state = "russofurhat" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/head/squatter_hat - name = "slav squatter hat" - icon_state = "squatter_hat" - item_state = "squatter_hat" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - desc = "Cyka blyat." - -/obj/item/clothing/head/snake - name = "snake head" - desc = "Reenact acts of violence against reptiles, or sneak into a swamp unnoticed." - icon_state = "snakehead" - item_state = "snakehead" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' -/obj/item/clothing/head/mummy_rags - name = "mummy rags" - desc = "Ancient rags taken off from some mummy." - icon_state = "mummy" - item_state = "mummy" - item_color = "mummy" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS - -/obj/item/clothing/head/clownpiece - name = "Clownpiece's jester hat" - desc = "A purple polka-dotted jester's hat with yellow pompons." - icon_state = "clownpiece" - item_state = "clownpiece" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/head/mitre - name = "mitre" - desc = "A funny hat worn by extremely boring people." - icon_state = "mitre" - item_state = "mitre" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/head/tinfoil - name = "tinfoil hat" - desc = "There's no evidence that the security staff is NOT out to get you." - icon_state = "foilhat" - item_state = "paper" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - siemens_coefficient = 2 - -/obj/item/clothing/head/celtic - name = "\improper Celtic crown" - desc = "According to legend, Celtic kings would use crowns like this one to shield their subjects from harsh winters back on Earth." - icon_state = "celtic_crown" - item_state = "celtic_crown" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' diff --git a/code/modules/clothing/masks/vg_masks.dm b/code/modules/clothing/masks/vg_masks.dm deleted file mode 100644 index 29b65a6b8e..0000000000 --- a/code/modules/clothing/masks/vg_masks.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/clothing/mask/gas/clown_hat/wiz - name = "purple clown wig and mask" - desc = "Some pranksters are truly magical." - icon_state = "wizzclown" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/mask/chapmask - name = "venetian mask" - desc = "A plain porcelain mask that covers the entire face. Standard attire for particularly unspeakable religions. The eyes are wide shut." - icon_state = "chapmask" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/mask/neorussian - name = "neo-Russian mask" - desc = "Somehow, it makes you act and look way more polite than usual." - icon_state = "nr_mask" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' diff --git a/code/modules/clothing/shoes/vg_shoes.dm b/code/modules/clothing/shoes/vg_shoes.dm deleted file mode 100644 index 53b093dc72..0000000000 --- a/code/modules/clothing/shoes/vg_shoes.dm +++ /dev/null @@ -1,124 +0,0 @@ - -/obj/item/clothing/shoes/leather - name = "leather shoes" - desc = "A sturdy pair of leather shoes." - icon_state = "leather" - item_color = "leather" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/shoes/magboots/deathsquad - desc = "Very expensive and advanced magnetic boots, used only by the elite during extravehicular activity to ensure the user remains safely attached to the vehicle." - name = "deathsquad magboots" - icon_state = "DS-magboots0" - magboot_state = "DS-magboots" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - mutantrace_variation = NONE - -/obj/item/clothing/shoes/magboots/atmos - desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle. These are painted in the colors of an atmospheric technician." - name = "atmospherics magboots" - icon_state = "atmosmagboots0" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - magboot_state = "atmosmagboots" - resistance_flags = FIRE_PROOF - mutantrace_variation = NONE - -/obj/item/clothing/shoes/simonshoes - name = "Simon's Shoes" - desc = "Simon's Shoes." - icon_state = "simonshoes" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/shoes/kneesocks - name = "kneesocks" - desc = "A pair of girly knee-high socks." - icon_state = "kneesock" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/shoes/jestershoes - name = "Jester Shoes" - desc = "As worn by the clowns of old." - icon_state = "jestershoes" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/shoes/aviatorboots - name = "Aviator Boots" - desc = "Boots suitable for just about any occasion." - icon_state = "aviator_boots" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/shoes/libertyshoes - name = "Liberty Shoes" - desc = "Freedom isn't free, neither were these shoes." - icon_state = "libertyshoes" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/shoes/megaboots - name = "DRN-001 Boots" - desc = "Large armored boots, very weak to large spikes." - icon_state = "megaboots" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/shoes/protoboots - name = "Prototype Boots" - desc = "Functionally identical to the DRN-001 model's boots, but in red." - icon_state = "protoboots" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/shoes/megaxboots - name = "Maverick Hunter boots" - desc = "Regardless of how much stronger these boots are than the DRN-001 model's, they're still extremely easy to pierce with a large spike." - icon_state = "megaxboots" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/shoes/joeboots - name = "Sniper Boots" - desc = "Nearly identical to the Prototype's boots, except in black." - icon_state = "joeboots" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/shoes/doomguy - name = "Doomguy's boots" - desc = "If you look closely, you might see skull fragments still buried in these boots." - icon_state = "doom" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/shoes/rottenshoes - name = "rotten shoes" - desc = "These shoes seem perfect for sneaking around." - icon_state = "rottenshoes" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/shoes/sandal/slippers - name = "magic slippers" - icon_state = "slippers" - desc = "For the wizard that puts comfort first. Who's going to laugh?" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/shoes/slippers_worn - name = "worn bunny slippers" - desc = "Fluffy..." - icon_state = "slippers_worn" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/shoes/jackboots/neorussian - name = "neo-Russian boots" - desc = "Tovarish, no one will realize you stepped on a pile of shit if your pair already looks like shit." - icon_state = "nr_boots" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - mutantrace_variation = NONE \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index c9753b3053..703fe26287 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -693,6 +693,29 @@ listeningTo = null return ..() +/obj/item/clothing/head/helmet/space/hardsuit/soviet + name = "soviet hardhelmet" + desc = "Crafted with the pride of the proletariat. The vengeful gaze of the visor roots out all fascists and capitalists." + item_state = "rig0-soviet" + item_color = "soviet" + icon_state = "rig0-soviet" + armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 75) + mutantrace_variation = NONE + +/obj/item/clothing/suit/space/hardsuit/soviet + name = "soviet hardsuit" + desc = "Crafted with the pride of the proletariat. The last thing the enemy sees is the bottom of this armor's boot." + item_state = "rig-soviet" + icon_state = "rig-soviet" + slowdown = 0.8 + armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 75) + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/soviet + mutantrace_variation = NONE + +/obj/item/clothing/suit/space/hardsuit/soviet/Initialize() + . = ..() + allowed = GLOB.security_hardsuit_allowed + /////////////SHIELDED////////////////////////////////// /obj/item/clothing/suit/space/hardsuit/shielded diff --git a/code/modules/clothing/spacesuits/vg_spess.dm b/code/modules/clothing/spacesuits/vg_spess.dm deleted file mode 100644 index 517539f3af..0000000000 --- a/code/modules/clothing/spacesuits/vg_spess.dm +++ /dev/null @@ -1,120 +0,0 @@ - - //VG Ports - -/obj/item/clothing/head/helmet/space/hardsuit/soviet - name = "soviet hardhelmet" - desc = "Crafted with the pride of the proletariat. The vengeful gaze of the visor roots out all fascists and capitalists." - item_state = "hardsuit0-soviet" - icon_state = "hardsuit0-soviet" - armor = list(melee = 40, bullet = 30, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 20) - item_color = "soviet" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/suit/space/hardsuit/soviet - name = "soviet hardsuit" - desc = "Crafted with the pride of the proletariat. The last thing the enemy sees is the bottom of this armor's boot." - item_state = "hardsuit-soviet" - icon_state = "hardsuit-soviet" - slowdown = 1 - armor = list(melee = 40, bullet = 30, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 20) - allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank,/obj/item/melee/) - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/soviet - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/head/helmet/space/hardsuit/knight - name = "Space-Knight helm" - desc = "A well polished helmet belonging to a Space-Knight. Favored by space-jousters for its ability to stay on tight after being launched from a mass driver." - icon_state = "hardsuit0-knight" - item_state = "hardsuit0-knight" - armor = list(melee = 60, bullet = 40, laser = 40,energy = 30, bomb = 50, bio = 100, rad = 60) - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - item_color="knight" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/suit/space/hardsuit/knight - name = "Space-Knight armour" - desc = "A well polished set of armour belonging to a Space-Knight. Maidens Rescued in Space: 100, Maidens who have slept with me in Space: 0." - icon_state = "hardsuit-knight" - item_state = "hardsuit-knight" - slowdown = 1 - allowed = list(/obj/item/gun,/obj/item/melee/baton,/obj/item/tank,/obj/item/shield/energy,/obj/item/claymore) - armor = list(melee = 60, bullet = 40, laser = 40,energy = 30, bomb = 50, bio = 100, rad = 60) - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - siemens_coefficient = 0.5 - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/knight - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/head/helmet/space/hardsuit/knight/black - name = "Black Knight's helm" - desc = "An ominous black helmet with a gold trim. The small viewports create an intimidating look, while also making it nearly impossible to see anything." - icon_state = "hardsuit0-blackknight" - item_state = "hardsuit0-blackknight" - armor = list(melee = 70, bullet = 65, laser = 50,energy = 25, bomb = 60, bio = 100, rad = 60) - item_color="blackknight" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/suit/space/hardsuit/knight/black - name = "Black Knight's armour" - desc = "An ominous black suit of armour with a gold trim. Surprisingly good at preventing accidental loss of limbs." - icon_state = "hardsuit-blackknight" - item_state = "hardsuit-blackknight" - armor = list(melee = 70, bullet = 65, laser = 50,energy = 25, bomb = 60, bio = 100, rad = 60) - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/knight/black - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/head/helmet/space/hardsuit/knight/solaire - name = "Solar helm" - desc = "A simple helmet. 'Made in Astora' is inscribed on the back." - icon_state = "hardsuit0-solaire" - item_state = "hardsuit0-solaire" - armor = list(melee = 60, bullet = 65, laser = 90,energy = 30, bomb = 60, bio = 100, rad = 100) - item_color="solaire" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/suit/space/hardsuit/knight/solaire - name = "Solar armour" - desc = "A solar powered hardsuit with a fancy insignia on the chest. Perfect for stargazers and adventurers alike." - icon_state = "hardsuit-solaire" - item_state = "hardsuit-solaire" - armor = list(melee = 60, bullet = 65, laser = 90,energy = 30, bomb = 60, bio = 100, rad = 100) - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/knight/solaire - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/head/helmet/space/hardsuit/t51b - name = "T-51b Power Armor" - desc = "Relic of a bygone era, the T-51b is powered by a TX-28 MicroFusion Pack, which holds enough fuel to power its internal hydraulics for a century!" - icon_state = "hardsuit0-t51b" - item_state = "hardsuit0-t51b" - armor = list(melee = 35, bullet = 35, laser = 40, energy = 40, bomb = 80, bio = 100, rad = 100) - item_color="t51b" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -/obj/item/clothing/suit/space/hardsuit/t51b - name = "T-51b Power Armor" - desc = "Relic of a bygone era, the T-51b is powered by a TX-28 MicroFusion Pack, which holds enough fuel to power its internal hydraulics for a century!" - icon_state = "hardsuit-t51b" - item_state = "hardsuit-t51b" - armor = list(melee = 35, bullet = 35, laser = 40, energy = 40, bomb = 80, bio = 100, rad = 100) - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/t51b - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - - -/obj/item/clothing/head/helmet/space/bomberman - name = "Bomberman head" - desc = "Terrorism has never looked so adorable." - icon_state = "bomberman" - item_state = "bomberman" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0) - siemens_coefficient = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - -obj/item/clothing/suit/space/bomberman - name = "Bomberman's suit" - desc = "Doesn't actually make you immune to bombs!" - icon_state = "bomberman" - item_state = "bomberman" - slowdown = 0 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0) - siemens_coefficient = 0 - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' \ No newline at end of file diff --git a/code/modules/clothing/suits/vg_suits.dm b/code/modules/clothing/suits/vg_suits.dm deleted file mode 100644 index be6cd9938e..0000000000 --- a/code/modules/clothing/suits/vg_suits.dm +++ /dev/null @@ -1,138 +0,0 @@ - -/obj/item/clothing/suit/armor/xcomsquaddie - name = "Squaddie Armor" - desc = "A suit of armor with heavy padding to protect against projectile and laser attacks. Distributed to shadow organization squaddies." - icon_state = "xcomarmor2" - item_state = "xcomarmor2" - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - armor = list(melee = 50, bullet = 50, laser = 50, energy = 30, bomb = 60, bio = 30, rad = 20) - siemens_coefficient = 0.5 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/suit/armor/xcomsquaddie/dredd - name = "Judge Armor" - desc = "A large suit of heavy armor, fit for a Judge." - icon_state = "dredd-suit" - item_state = "dredd-suit" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' - mutantrace_variation = NONE - - -/obj/item/clothing/suit/armor/xcomarmor - name = "Mysterious Armor" - desc = "A suit of armor with heavy plating to protect against melee attacks. Distributed to shadow organization squaddies." - icon_state = "xcomarmor1" - item_state = "xcomarmor1" - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - armor = list(melee = 50, bullet = 50, laser = 50, energy = 30, bomb = 60, bio = 30, rad = 20) - slowdown = 1 - siemens_coefficient = 0.5 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/suit/armor/vest/neorussian - name = "neo-Russian vest" - desc = "The narkotiki camo pattern will come useful for botany raids." - icon_state = "nr_vest" - item_state = "nr_vest" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/suit/armor/doomguy - name = "Doomguy's armor" - desc = "" - icon_state = "doom" - item_state = "doom" - body_parts_covered = CHEST|GROIN - slowdown = 0 - armor = list(melee = 50, bullet = 30, laser = 20, energy = 20, bomb = 30, bio = 0, rad = 0) - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' - mutantrace_variation = NONE - - -/obj/item/clothing/suit/kaminacape - name = "Kamina's Cape" - desc = "Don't believe in yourself, dumbass. Believe in me. Believe in the Kamina who believes in you." - icon_state = "kaminacape" - body_parts_covered = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/suit/officercoat - name = "Officer's Coat" - desc = "Ein Mantel gemacht, um die Juden zu bestrafen." - icon_state = "officersuit" - body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/suit/soldiercoat - name = "Soldier's Coat" - desc = "Und das heißt: Erika." - icon_state = "soldiersuit" - body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/suit/russofurcoat - name = "russian fur coat" - desc = "Let the land do the fighting for you." - icon_state = "russofurcoat" - allowed = list(/obj/item/gun) - body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/suit/doshjacket - name = "Plasterer's Jacket" - desc = "Perfect for doing up the house." - icon_state = "doshjacket" - body_parts_covered = CHEST|GROIN|ARMS - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/suit/maidapron - name = "Apron" - desc = "Simple white apron." - icon_state = "maidapron" - body_parts_covered = CHEST|GROIN - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/suit/clownpiece - name = "small fairy wings" - desc = "Some small and translucid insect-like wings." - icon_state = "clownpiece" - body_parts_covered = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/suit/clownpiece/flying - name = "small fairy wings" - desc = "Some small and translucid insect-like wings. Looks like these are the real deal!" - icon_state = "clownpiece-fly" - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/suit/raincoat - name = "Raincoat" - desc = "Do you like Huey Lewis and the News?" - icon_state = "raincoat" - body_parts_covered =CHEST|GROIN|LEGS|ARMS|HANDS - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' - mutantrace_variation = NONE - - diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index a4b8c920d3..251ff50173 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -1000,4 +1000,89 @@ item_state = "cheongr" body_parts_covered = CHEST|GROIN can_adjust = FALSE - mutantrace_variation = NONE \ No newline at end of file + mutantrace_variation = NONE + +/obj/item/clothing/under/squatter_outfit + name = "slav squatter tracksuit" + desc = "Cyka blyat." + icon_state = "squatteroutfit" + item_state = "squatteroutfit" + item_color = "squatteroutfit" + can_adjust = FALSE + mutantrace_variation = NONE + +/obj/item/clothing/under/russobluecamooutfit + name = "russian blue camo" + desc = "Drop and give me dvadtsat!" + icon_state = "russobluecamo" + item_state = "russobluecamo" + item_color = "russobluecamo" + can_adjust = FALSE + mutantrace_variation = NONE + +/obj/item/clothing/under/keyholesweater + name = "keyhole sweater" + desc = "What is the point of this, anyway?" + icon_state = "keyholesweater" + item_state = "keyholesweater" + item_color = "keyholesweater" + can_adjust = FALSE + mutantrace_variation = NONE + +/obj/item/clothing/under/stripper_pink + name = "pink stripper outfit" + icon_state = "stripper_p" + item_state = "stripper_p" + item_color = "stripper_p" + +/obj/item/clothing/under/stripper_green + name = "green stripper outfit" + icon_state = "stripper_g" + item_state = "stripper_g" + item_color = "stripper_g" + can_adjust = FALSE + +/obj/item/clothing/under/mankini + name = "pink mankini" + icon_state = "mankini" + item_state = "mankini" + item_color = "mankini" + can_adjust = FALSE + mutantrace_variation = NONE + +/obj/item/clothing/under/wedding + name = "white wedding dress" + desc = "A white wedding gown made from the finest silk." + icon_state = "bride_white" + item_state = "bride_white" + item_color = "bride_white" + can_adjust = FALSE + mutantrace_variation = NONE + +/obj/item/clothing/under/wedding/orange + name = "orange wedding dress" + desc = "A big and puffy orange dress." + icon_state = "bride_orange" + item_state = "bride_orange" + item_color = "bride_orange" + +/obj/item/clothing/under/wedding/purple + name = "purple wedding dress" + desc = "A big and puffy purple dress." + icon_state = "bride_purple" + item_state = "bride_purple" + item_color = "bride_purple" + +/obj/item/clothing/under/wedding/blue + name = "blue wedding dress" + desc = "A big and puffy blue dress." + icon_state = "bride_blue" + item_state = "bride_blue" + item_color = "bride_blue" + +/obj/item/clothing/under/wedding/red + name = "red wedding dress" + desc = "A big and puffy red dress." + icon_state = "bride_red" + item_state = "bride_red" + item_color = "bride_red" diff --git a/code/modules/clothing/under/vg_under.dm b/code/modules/clothing/under/vg_under.dm deleted file mode 100644 index 555ed3b795..0000000000 --- a/code/modules/clothing/under/vg_under.dm +++ /dev/null @@ -1,436 +0,0 @@ -// Fixed to work with Citadel code. Apparently none of them had NO_MUTANTRACE flags. -// I was pissy when I realised how to fix this because it's so fucking easy and nobody apparently had done it. - -/obj/item/clothing/under/stripper_pink - name = "pink stripper outfit" - icon_state = "stripper_p" - item_state = "stripper_p" - item_color = "stripper_p" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/stripper_green - name = "green stripper outfit" - icon_state = "stripper_g" - item_state = "stripper_g" - item_color = "stripper_g" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/wedding/bride_orange - name = "orange wedding dress" - desc = "A big and puffy orange dress." - icon_state = "bride_orange" - item_state = "bride_orange" - item_color = "bride_orange" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/wedding/bride_purple - name = "purple wedding dress" - desc = "A big and puffy purple dress." - icon_state = "bride_purple" - item_state = "bride_purple" - item_color = "bride_purple" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/wedding/bride_blue - name = "blue wedding dress" - desc = "A big and puffy blue dress." - icon_state = "bride_blue" - item_state = "bride_blue" - item_color = "bride_blue" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/wedding/bride_red - name = "red wedding dress" - desc = "A big and puffy red dress." - icon_state = "bride_red" - item_state = "bride_red" - item_color = "bride_red" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/wedding/bride_white - name = "white wedding dress" - desc = "A white wedding gown made from the finest silk." - icon_state = "bride_white" - item_state = "bride_white" - item_color = "bride_white" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/mankini - name = "pink mankini" - icon_state = "mankini" - item_state = "mankini" - item_color = "mankini" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE -/* - -/obj/item/clothing/under/psysuit - name = "dark undersuit" - desc = "A thick, layered grey undersuit lined with power cables. Feels a little like wearing an electrical storm." - icon_state = "psysuit" - item_state = "psysuit" - item_color = "psysuit" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - - -/obj/item/clothing/under/officeruniform - name = "officer's uniform" - desc = "Bestraft die Juden fur ihre Verbrechen." - icon_state = "officeruniform" - item_state = "officeruniform" - item_color = "officeruniform" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - - -/obj/item/clothing/under/soldieruniform - name = "soldier's uniform" - desc = "Bestraft die Verbundeten fur ihren Widerstand." - icon_state = "soldieruniform" - item_state = "soldieruniform" - item_color = "soldieruniform" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - -*/ -/obj/item/clothing/under/squatter_outfit - name = "slav squatter tracksuit" - desc = "Cyka blyat." - icon_state = "squatteroutfit" - item_state = "squatteroutfit" - item_color = "squatteroutfit" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/russobluecamooutfit - name = "russian blue camo" - desc = "Drop and give me dvadtsat!" - icon_state = "russobluecamo" - item_state = "russobluecamo" - item_color = "russobluecamo" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/stilsuit - name = "stillsuit" - desc = "Designed to preserve bodymoisture." - icon_state = "stilsuit" - item_state = "stilsuit" - item_color = "stilsuit" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/aviatoruniform - name = "aviator uniform" - desc = "Now you can look absolutely dashing!" - icon_state = "aviator_uniform" - item_state = "aviator_uniform" - item_color = "aviator_uniform" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/bikersuit - name = "biker's outfit" - icon_state = "biker" - item_state = "biker" - item_color = "biker" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/jacketsuit - name = "richard's outfit" - desc = "Do you know what time it is?" - icon_state = "jacket" - item_state = "jacket" - item_color = "jacket" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -obj/item/clothing/under/mega - name = "\improper DRN-001 suit" - desc = "The original. Simple, yet very adaptable." - icon_state = "mega" - item_state = "mega" - item_color = "mega" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/proto - name = "The Prototype Suit" - desc = "Even robots know scarves are the perfect accessory for a brooding rival." - icon_state = "proto" - item_state = "proto" - item_color = "proto" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/megax - name = "\improper Maverick Hunter regalia" - desc = "The best outfit for taking out rogue borgs." - icon_state = "megax" - item_state = "megax" - item_color = "megax" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/joe - name = "The Sniper Suit" - desc = "Mass produced combat robots with a rather unfitting name." - icon_state = "joe" - item_state = "joe" - item_color = "joe" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/roll - name = "\improper DRN-002 Dress" - desc = "A simple red dress, the good doctor's second robot wasn't quite as exciting as the first." - icon_state = "roll" - item_state = "roll" - item_color = "roll" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/gokugidown - name = "turtle hermit undershirt" - desc = "Something seems oddly familiar about this outfit..." - icon_state = "gokugidown" - item_state = "gokugidown" - item_color = "gokugidown" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/gokugi - name = "turtle hermit outfit" - desc = "An outfit from one trained by the great Turtle Hermit." - icon_state = "gokugi" - item_state = "gokugi" - item_color = "gokugi" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/doomguy - name = "\improper Doomguy's pants" - desc = "" - icon_state = "doom" - item_state = "doom" - item_color = "doom" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/vault13 - name = "vault 13 Jumpsuit" - desc = "Oddly similar to the station's usual jumpsuits, but with a rustic charm to it. Has a large thirteen emblazened on the back." - icon_state = "v13-jumpsuit" - item_state = "v13-jumpsuit" - item_color = "v13-jumpsuit" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/vault - name = "vault jumpsuit" - desc = "Oddly similar to the station's usual jumpsuits, but with a rustic charm to it." - icon_state = "v-jumpsuit" - item_state = "v-jumpsuit" - item_color = "v-jumpsuit" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/clownpiece - name = "Clownpiece's Pierrot suit" - desc = "A female-sized set of leggings and shirt with a pattern similar to the American flag, featuring a frilled collar." - icon_state = "clownpiece" - item_state = "clownpiece" - item_color = "clownpiece" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/cia - name = "casual IAA outfit" - desc = "Just looking at this makes you feel in charge." - icon_state = "cia" - item_state = "cia" - item_color = "cia" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/greaser - name = "greaser outfit" - desc = "The one that you want!" - icon_state = "greaser_default" - item_state = "greaser_default" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/greaser/New() - var/greaser_colour = "default" - switch(rand(1,4)) - if(1) - greaser_colour = "default" - if(2) - greaser_colour = "cult" - if(3) - greaser_colour = "spider" - if(4) - greaser_colour = "snakes" - desc = "Tunnel Snakes Rule!" - icon_state = "greaser_[greaser_colour]" - item_state = "greaser_[greaser_colour]" - item_color = "greaser_[greaser_colour]" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - mutantrace_variation = NONE - - -/obj/item/clothing/under/wintercasualwear - name = "winter casualwear" - desc = "Perfect for winter!" - icon_state = "shizunewinter" - item_state = "shizunewinter" - item_color = "shizunewinter" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/casualwear - name = "spring casualwear" - desc = "Perfect for spring!" - icon_state = "shizunenormal" - item_state = "shizunenormal" - item_color = "shizunenormal" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/keyholesweater - name = "keyhole sweater" - desc = "What is the point of this, anyway?" - icon_state = "keyholesweater" - item_state = "keyholesweater" - item_color = "keyholesweater" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/casualhoodie - name = "casual hoodie" - desc = "Pefect for lounging about in." - icon_state = "hoodiejeans" - item_state = "hoodiejeans" - item_color = "hoodiejeans" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - -/obj/item/clothing/under/casualhoodie/skirt - icon_state = "hoodieskirt" - item_state = "hoodieskirt" - item_color = "hoodieskirt" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - mutantrace_variation = NONE - -/* -/obj/item/clothing/under/mummy_rags - name = "mummy rags" - desc = "Ancient rags taken off from some mummy." - icon_state = "mummy" - item_state = "mummy" - item_color = "mummy" - can_adjust = 0 - has_sensor = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - - -/obj/item/clothing/under/neorussian - name = "neo-Russian uniform" - desc = "Employs a special toshnit pattern, will render you invisible when you eat a potato on an empty stomach." - icon_state = "nr_uniform" - item_state = "nr_uniform" - item_color = "nr_uniform" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' -*/ - -/obj/item/clothing/under/rottensuit - name = "rotten suit" - desc = "This suit seems perfect for wearing underneath a disguise." - icon_state = "rottensuit" - item_state = "rottensuit" - item_color = "rottensuit" - can_adjust = 0 - icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' - mutantrace_variation = NONE - diff --git a/code/modules/emoji/emoji_parse.dm b/code/modules/emoji/emoji_parse.dm index 2f4a84c646..db46ca09ca 100644 --- a/code/modules/emoji/emoji_parse.dm +++ b/code/modules/emoji/emoji_parse.dm @@ -1,4 +1,4 @@ -/proc/emoji_parse(text) +/proc/emoji_parse(text) //turns :ai: into an emoji in text. . = text if(!CONFIG_GET(flag/emojis)) return @@ -30,3 +30,24 @@ break return parsed +/proc/emoji_sanitize(text) //cuts any text that would not be parsed as an emoji + . = text + if(!CONFIG_GET(flag/emojis)) + return + var/static/list/emojis = icon_states(icon('icons/emoji.dmi')) + var/final = "" //only tags are added to this + var/pos = 1 + var/search = 0 + while(1) + search = findtext(text, ":", pos) + if(search) + pos = search + search = findtext(text, ":", pos+1) + if(search) + var/word = lowertext(copytext(text, pos+1, search)) + if(word in emojis) + final += lowertext(copytext(text, pos, search+1)) + pos = search + 1 + continue + break + return final diff --git a/code/modules/keybindings/bindings_atom.dm b/code/modules/keybindings/bindings_atom.dm index 4aac76bd67..5f3e879237 100644 --- a/code/modules/keybindings/bindings_atom.dm +++ b/code/modules/keybindings/bindings_atom.dm @@ -15,4 +15,4 @@ movement_dir &= ~(NORTH|SOUTH) if((movement_dir & EAST) && (movement_dir & WEST)) movement_dir &= ~(EAST|WEST) - user.Move(get_step(src, movement_dir), movement_dir) \ No newline at end of file + user.Move(get_step(src, movement_dir), movement_dir) diff --git a/code/modules/keybindings/bindings_client.dm b/code/modules/keybindings/bindings_client.dm index dec5c25eb9..6030362a61 100644 --- a/code/modules/keybindings/bindings_client.dm +++ b/code/modules/keybindings/bindings_client.dm @@ -5,7 +5,7 @@ set hidden = TRUE client_keysend_amount += 1 - + var/cache = client_keysend_amount if(keysend_tripped && next_keysend_trip_reset <= world.time) @@ -20,7 +20,7 @@ //don't want to kick people if a lag spike results in a huge flood of commands being sent if(cache >= MAX_KEYPRESS_AUTOKICK) if(!keysend_tripped) - keysend_tripped = TRUE + keysend_tripped = TRUE next_keysend_trip_reset = world.time + (2 SECONDS) else log_admin("Client [ckey] was just autokicked for flooding keysends; likely abuse but potentially lagspike.") @@ -35,11 +35,10 @@ message_admins("Client [ckey] just attempted to send an invalid keypress. Keymessage was over [MAX_KEYPRESS_COMMANDLENGTH] characters, autokicking due to likely abuse.") QDEL_IN(src, 1) return - //offset by 1 because the buffer address is 0 indexed because the math was simpler - keys_held[current_key_address + 1] = _key - //the time a key was pressed isn't actually used anywhere (as of 2019-9-10) but this allows easier access usage/checking - keys_held[_key] = world.time - current_key_address = ((current_key_address + 1) % HELD_KEY_BUFFER_LENGTH) + + if(length(keys_held) > MAX_HELD_KEYS) + keys_held.Cut(1,2) + keys_held[_key] = TRUE var/movement = SSinput.movement_keys[_key] if(!(next_move_dir_sub & movement) && !keys_held["Ctrl"]) next_move_dir_add |= movement @@ -70,11 +69,7 @@ set instant = TRUE set hidden = TRUE - //Can't just do a remove because it would alter the length of the rolling buffer, instead search for the key then null it out if it exists - for(var/i in 1 to HELD_KEY_BUFFER_LENGTH) - if(keys_held[i] == _key) - keys_held[i] = null - break + keys_held -= _key var/movement = SSinput.movement_keys[_key] if(!(next_move_dir_add & movement)) next_move_dir_sub |= movement diff --git a/code/modules/keybindings/setup.dm b/code/modules/keybindings/setup.dm index 8433c9bf5a..9a13bfb11c 100644 --- a/code/modules/keybindings/setup.dm +++ b/code/modules/keybindings/setup.dm @@ -1,8 +1,6 @@ /client - /// A rolling buffer of any keys held currently + /// Keys currently held var/list/keys_held = list() - ///used to keep track of the current rolling buffer position - var/current_key_address = 0 /// These next two vars are to apply movement for keypresses and releases made while move delayed. /// Because discarding that input makes the game less responsive. /// On next move, add this dir to the move that would otherwise be done @@ -36,10 +34,7 @@ /client/proc/set_macros() set waitfor = FALSE - //Reset and populate the rolling buffer keys_held.Cut() - for(var/i in 1 to HELD_KEY_BUFFER_LENGTH) - keys_held += null erase_all_macros() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 33cc2c6e20..333a7826d2 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -571,29 +571,23 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) M.show_inv(user) /mob/proc/is_muzzled() - return 0 + return FALSE /mob/Stat() ..() - if(statpanel("Status")) - if (client) - stat(null, "Ping: [round(client.lastping, 1)]ms (Average: [round(client.avgping, 1)]ms)") - stat(null, "Map: [SSmapping.config?.map_name || "Loading..."]") - var/datum/map_config/cached = SSmapping.next_map_config - if(cached) - stat(null, "Next Map: [cached.map_name]") - stat(null, "Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]") - stat(null, "Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")]") - stat(null, "Round Time: [WORLDTIME2TEXT("hh:mm:ss")]") - stat(null, "Station Time: [STATION_TIME_TIMESTAMP("hh:mm:ss")]") - stat(null, "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)") - if(SSshuttle.emergency) - var/ETA = SSshuttle.emergency.getModeStr() - if(ETA) - stat(null, "[ETA] [SSshuttle.emergency.getTimerStr()]") + //This is only called from client/Stat(), let's assume client exists. - if(client && client.holder) + if(statpanel("Status")) + var/list/L = list() + L += "Ping: [round(client.lastping,1)]ms (Avg: [round(client.avgping,1)]ms)" + L += SSmapping.stat_map_name + L += "Round ID: [GLOB.round_id || "NULL"]" + L += SStime_track.stat_time_text + L += SSshuttle.emergency_shuttle_stat_text + stat(null, "[L.Join("\n\n")]") + + if(client.holder) if(statpanel("MC")) var/turf/T = get_turf(client.eye) stat("Location:", COORD(T)) @@ -643,8 +637,6 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) if(A.IsObscured()) continue statpanel(listed_turf.name, null, A) - - if(mind) add_spells_to_statpanel(mind.spell_list) var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index a1feb899c6..b11d1632c8 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -9,37 +9,36 @@ mob.dropItemToGround(mob.get_active_held_item()) return -/client/proc/Move_object(direct) +/client/proc/Move_object(direction) if(mob && mob.control_object) if(mob.control_object.density) - step(mob.control_object,direct) + step(mob.control_object,direction) if(!mob.control_object) return - mob.control_object.setDir(direct) + mob.control_object.setDir(direction) else - mob.control_object.forceMove(get_step(mob.control_object,direct)) + mob.control_object.forceMove(get_step(mob.control_object,direction)) #define MOVEMENT_DELAY_BUFFER 0.75 #define MOVEMENT_DELAY_BUFFER_DELTA 1.25 -/client/Move(n, direct) +/client/Move(n, direction) if(world.time < move_delay) //do not move anything ahead of this check please return FALSE else - next_move_dir_add = 0 - next_move_dir_sub = 0 + next_move_dir_add = next_move_dir_sub = NONE var/old_move_delay = move_delay move_delay = world.time + world.tick_lag //this is here because Move() can now be called mutiple times per tick - if(!mob || !mob.loc) - return FALSE - if(!n || !direct) + if(!n || !direction || !mob?.loc) return FALSE + //GET RID OF THIS SOON AS MOBILITY FLAGS IS DONE if(mob.notransform) - return FALSE //This is sota the goto stop mobs from moving var + return FALSE + if(mob.control_object) - return Move_object(direct) + return Move_object(direction) if(!isliving(mob)) - return mob.Move(n, direct) + return mob.Move(n, direction) if(mob.stat == DEAD) mob.ghostize() return FALSE @@ -48,29 +47,29 @@ var/mob/living/L = mob //Already checked for isliving earlier if(L.incorporeal_move) //Move though walls - Process_Incorpmove(direct) + Process_Incorpmove(direction) return FALSE if(mob.remote_control) //we're controlling something, our movement is relayed to it - return mob.remote_control.relaymove(mob, direct) + return mob.remote_control.relaymove(mob, direction) if(isAI(mob)) - return AIMove(n,direct,mob) + return AIMove(n,direction,mob) if(Process_Grab()) //are we restrained by someone's grip? return if(mob.buckled) //if we're buckled to something, tell it we moved. - return mob.buckled.relaymove(mob, direct) + return mob.buckled.relaymove(mob, direction) if(!mob.canmove) return FALSE if(isobj(mob.loc) || ismob(mob.loc)) //Inside an object, tell it we moved var/atom/O = mob.loc - return O.relaymove(mob, direct) + return O.relaymove(mob, direction) - if(!mob.Process_Spacemove(direct)) + if(!mob.Process_Spacemove(direction)) return FALSE //We are now going to move var/add_delay = mob.movement_delay() @@ -85,16 +84,16 @@ if(L.confused > 40) newdir = pick(GLOB.alldirs) else if(prob(L.confused * 1.5)) - newdir = angle2dir(dir2angle(direct) + pick(90, -90)) + newdir = angle2dir(dir2angle(direction) + pick(90, -90)) else if(prob(L.confused * 3)) - newdir = angle2dir(dir2angle(direct) + pick(45, -45)) + newdir = angle2dir(dir2angle(direction) + pick(45, -45)) if(newdir) - direct = newdir - n = get_step(L, direct) + direction = newdir + n = get_step(L, direction) . = ..() - if((direct & (direct - 1)) && mob.loc == n) //moved diagonally successfully + if((direction & (direction - 1)) && mob.loc == n) //moved diagonally successfully add_delay *= 2 move_delay += add_delay if(.) // If mob is null here, we deserve the runtime @@ -102,7 +101,7 @@ mob.throwing.finalize(FALSE) for(var/obj/O in mob.user_movement_hooks) - O.intercept_user_move(direct, mob, n, oldloc) + O.intercept_user_move(direction, mob, n, oldloc) var/atom/movable/P = mob.pulling if(P && !ismob(P) && P.density) @@ -126,22 +125,22 @@ ///Process_Incorpmove ///Called by client/Move() ///Allows mobs to run though walls -/client/proc/Process_Incorpmove(direct) +/client/proc/Process_Incorpmove(direction) var/turf/mobloc = get_turf(mob) if(!isliving(mob)) return var/mob/living/L = mob switch(L.incorporeal_move) if(INCORPOREAL_MOVE_BASIC) - var/T = get_step(L,direct) + var/T = get_step(L,direction) if(T) L.forceMove(T) - L.setDir(direct) + L.setDir(direction) if(INCORPOREAL_MOVE_SHADOW) if(prob(50)) var/locx var/locy - switch(direct) + switch(direction) if(NORTH) locx = mobloc.x locy = (mobloc.y+2) @@ -175,12 +174,12 @@ break else new /obj/effect/temp_visual/dir_setting/ninja/shadow(mobloc, L.dir) - var/T = get_step(L,direct) + var/T = get_step(L,direction) if(T) L.forceMove(T) - L.setDir(direct) + L.setDir(direction) if(INCORPOREAL_MOVE_JAUNT) //Incorporeal move, but blocked by holy-watered tiles and salt piles. - var/turf/open/floor/stepTurf = get_step(L, direct) + var/turf/open/floor/stepTurf = get_step(L, direction) if(stepTurf) for(var/obj/effect/decal/cleanable/salt/S in stepTurf) to_chat(L, "[S] bars your passage!") @@ -197,7 +196,7 @@ return L.forceMove(stepTurf) - L.setDir(direct) + L.setDir(direction) return TRUE diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 531c6082b0..fe5c4a1bbf 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -237,7 +237,7 @@ sprd = round((rand() - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (randomized_gun_spread + randomized_bonus_spread), 1) else //Smart spread sprd = round((((rand_spr/burst_size) * iteration) - (0.5 + (rand_spr * 0.25))) * (randomized_gun_spread + randomized_bonus_spread), 1) - + before_firing(target,user) if(!chambered.fire_casing(target, user, params, ,suppressed, zone_override, sprd, src)) shoot_with_empty_chamber(user) firing_burst = FALSE @@ -281,6 +281,7 @@ else if(chambered) sprd = round((rand() - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (randomized_gun_spread + randomized_bonus_spread)) + before_firing(target,user) if(!chambered.fire_casing(target, user, params, , suppressed, zone_override, sprd, src)) shoot_with_empty_chamber(user) return @@ -466,6 +467,10 @@ qdel(pin) pin = new /obj/item/firing_pin +//Happens before the actual projectile creation +/obj/item/gun/proc/before_firing(atom/target,mob/user) + return + ///////////// // ZOOMING // ///////////// diff --git a/code/modules/projectiles/guns/energy/dueling.dm b/code/modules/projectiles/guns/energy/dueling.dm new file mode 100644 index 0000000000..b1d7ab7166 --- /dev/null +++ b/code/modules/projectiles/guns/energy/dueling.dm @@ -0,0 +1,375 @@ +#define DUEL_IDLE 1 +#define DUEL_PREPARATION 2 +#define DUEL_READY 3 +#define DUEL_COUNTDOWN 4 +#define DUEL_FIRING 5 + +//paper rock scissors +#define DUEL_SETTING_A "wide" +#define DUEL_SETTING_B "cone" +#define DUEL_SETTING_C "pinpoint" + +#define DUEL_HUGBOX_NONE 0 //dismember head +#define DUEL_HUGBOX_LETHAL 1 //200 damage to chest +#define DUEL_HUGBOX_NONLETHAL 2 //stamcrit + +/datum/duel + var/obj/item/gun/energy/dueling/gun_A + var/obj/item/gun/energy/dueling/gun_B + var/state = DUEL_IDLE + var/required_distance = 5 + var/list/confirmations = list() + var/list/fired = list() + var/countdown_length = 10 + var/countdown_step = 0 + +/datum/duel/proc/try_begin() + //Check if both guns are held and if so begin. + var/mob/living/A = get_duelist(gun_A) + var/mob/living/B = get_duelist(gun_B) + if(!A || !B) + message_duelists("To begin the duel, both participants need to be holding paired dueling pistols.") + return + begin() + +/datum/duel/proc/begin() + state = DUEL_PREPARATION + confirmations.Cut() + fired.Cut() + countdown_step = countdown_length + + message_duelists("Set your gun setting and move [required_distance] steps away from your opponent.") + + START_PROCESSING(SSobj,src) + +/datum/duel/proc/get_duelist(obj/gun) + var/mob/living/G = gun.loc + if(!istype(G) || !G.is_holding(gun)) + return null + return G + +/datum/duel/proc/message_duelists(message) + var/mob/living/LA = get_duelist(gun_A) + if(LA) + to_chat(LA,message) + var/mob/living/LB = get_duelist(gun_B) + if(LB) + to_chat(LB,message) + +/datum/duel/proc/other_gun(obj/item/gun/energy/dueling/G) + return G == gun_A ? gun_B : gun_A + +/datum/duel/proc/end() + message_duelists("Duel finished. Re-engaging safety.") + STOP_PROCESSING(SSobj,src) + state = DUEL_IDLE + +/datum/duel/process() + switch(state) + if(DUEL_PREPARATION) + if(check_positioning()) + confirm_positioning() + else if (!get_duelist(gun_A) && !get_duelist(gun_B)) + end() + if(DUEL_READY) + if(!check_positioning()) + back_to_prep() + else if(confirmations.len == 2) + confirm_ready() + if(DUEL_COUNTDOWN) + if(!check_positioning()) + back_to_prep() + else + countdown_step() + if(DUEL_FIRING) + if(check_fired()) + end() + +/datum/duel/proc/back_to_prep() + message_duelists("Positions invalid. Please move to valid positions [required_distance] steps aways from each other to continue.") + state = DUEL_PREPARATION + confirmations.Cut() + countdown_step = countdown_length + +/datum/duel/proc/confirm_positioning() + message_duelists("Position confirmed. Confirm readiness by pulling the trigger once.") + state = DUEL_READY + +/datum/duel/proc/confirm_ready() + message_duelists("Readiness confirmed. Starting countdown. Commence firing at zero mark.") + state = DUEL_COUNTDOWN + +/datum/duel/proc/countdown_step() + countdown_step-- + if(countdown_step == 0) + state = DUEL_FIRING + message_duelists("Fire!") + else + message_duelists("[countdown_step]!") + +/datum/duel/proc/check_fired() + if(fired.len == 2) + return TRUE + //Let's say if gun was dropped/stowed the user is finished + if(!get_duelist(gun_A)) + return TRUE + if(!get_duelist(gun_B)) + return TRUE + return FALSE + +/datum/duel/proc/check_positioning() + var/mob/living/A = get_duelist(gun_A) + var/mob/living/B = get_duelist(gun_B) + if(!A || !B) + return FALSE + if(!isturf(A.loc) || !isturf(B.loc)) + return FALSE + if(get_dist(A,B) != required_distance) + return FALSE + for(var/turf/T in getline(get_turf(A),get_turf(B))) + if(is_blocked_turf(T,TRUE)) + return FALSE + return TRUE + +/obj/item/gun/energy/dueling + name = "dueling pistol" + desc = "High-tech dueling pistol. Launches chaff and projectile according to preset settings." + icon_state = "dueling_pistol" + item_state = "gun" + ammo_x_offset = 2 + w_class = WEIGHT_CLASS_SMALL + ammo_type = list(/obj/item/ammo_casing/energy/duel) + automatic_charge_overlays = FALSE + var/unlocked = FALSE + var/setting = DUEL_SETTING_A + var/datum/duel/duel + var/mutable_appearance/setting_overlay + var/hugbox = DUEL_HUGBOX_NONE + +/obj/item/gun/energy/dueling/hugbox + hugbox = DUEL_HUGBOX_LETHAL + +/obj/item/gun/energy/dueling/hugbox/stamina + hugbox = DUEL_HUGBOX_NONLETHAL + +/obj/item/gun/energy/dueling/Initialize() + . = ..() + setting_overlay = mutable_appearance(icon,setting_iconstate()) + add_overlay(setting_overlay) + +/obj/item/gun/energy/dueling/proc/setting_iconstate() + switch(setting) + if(DUEL_SETTING_A) + return "duel_red" + if(DUEL_SETTING_B) + return "duel_green" + if(DUEL_SETTING_C) + return "duel_blue" + return "duel_red" + +/obj/item/gun/energy/dueling/attack_self(mob/living/user) + . = ..() + if(duel.state == DUEL_IDLE) + duel.try_begin() + else + toggle_setting(user) + +/obj/item/gun/energy/dueling/proc/toggle_setting(mob/living/user) + switch(setting) + if(DUEL_SETTING_A) + setting = DUEL_SETTING_B + if(DUEL_SETTING_B) + setting = DUEL_SETTING_C + if(DUEL_SETTING_C) + setting = DUEL_SETTING_A + to_chat(user,"You switch [src] setting to [setting] mode.") + update_icon() + +/obj/item/gun/energy/dueling/update_icon(force_update) + . = ..() + if(setting_overlay) + cut_overlay(setting_overlay) + setting_overlay.icon_state = setting_iconstate() + add_overlay(setting_overlay) + +/obj/item/gun/energy/dueling/Destroy() + . = ..() + if(duel.gun_A == src) + duel.gun_A = null + if(duel.gun_B == src) + duel.gun_B = null + duel = null + +/obj/item/gun/energy/dueling/can_trigger_gun(mob/living/user) + . = ..() + switch(duel.state) + if(DUEL_FIRING) + return . && !duel.fired[src] + if(DUEL_READY) + return . + else + to_chat(user,"[src] is locked. Wait for FIRE signal before shooting.") + return FALSE + +/obj/item/gun/energy/dueling/proc/is_duelist(mob/living/L) + if(!istype(L)) + return FALSE + if(!L.is_holding(duel.other_gun(src))) + return FALSE + return TRUE + +/obj/item/gun/energy/dueling/process_fire(atom/target, mob/living/user, message, params, zone_override, bonus_spread) + if(duel.state == DUEL_READY) + duel.confirmations[src] = TRUE + to_chat(user,"You confirm your readiness.") + return + else if(!is_duelist(target)) //I kinda want to leave this out just to see someone shoot a bystander or missing. + to_chat(user,"[src] safety system prevents shooting anyone but your designated opponent.") + return + else + duel.fired[src] = TRUE + . = ..() + +/obj/item/gun/energy/dueling/before_firing(target,user) + var/obj/item/ammo_casing/energy/duel/D = chambered + D.setting = setting + D.hugbox = hugbox + +/obj/effect/temp_visual/dueling_chaff + icon = 'icons/effects/effects.dmi' + icon_state = "shield-old" + duration = 30 + var/setting + +/obj/effect/temp_visual/dueling_chaff/update_icon() + . = ..() + switch(setting) + if(DUEL_SETTING_A) + color = "red" + if(DUEL_SETTING_B) + color = "green" + if(DUEL_SETTING_C) + color = "blue" + +//Casing + +/obj/item/ammo_casing/energy/duel + e_cost = 0 + projectile_type = /obj/item/projectile/energy/duel + var/setting + var/hugbox = DUEL_HUGBOX_NONE + +/obj/item/ammo_casing/energy/duel/ready_proj(atom/target, mob/living/user, quiet, zone_override) + . = ..() + var/obj/item/projectile/energy/duel/D = BB + D.setting = setting + D.hugbox = hugbox + D.update_icon() + +/obj/item/ammo_casing/energy/duel/fire_casing(atom/target, mob/living/user, params, distro, quiet, zone_override, spread, atom/fired_from) + . = ..() + var/obj/effect/temp_visual/dueling_chaff/C = new(get_turf(user)) + C.setting = setting + C.update_icon() + +//Projectile + +/obj/item/projectile/energy/duel + name = "dueling beam" + icon_state = "declone" + is_reflectable = FALSE + homing = TRUE + var/setting + var/hugbox = DUEL_HUGBOX_NONE + +/obj/item/projectile/energy/duel/update_icon() + . = ..() + switch(setting) + if(DUEL_SETTING_A) + color = "red" + if(DUEL_SETTING_B) + color = "green" + if(DUEL_SETTING_C) + color = "blue" + +/obj/item/projectile/energy/duel/on_hit(atom/target, blocked) + . = ..() + var/turf/T = get_turf(target) + var/obj/effect/temp_visual/dueling_chaff/C = locate() in T + if(C) + var/counter_setting + switch(setting) + if(DUEL_SETTING_A) + counter_setting = DUEL_SETTING_B + if(DUEL_SETTING_B) + counter_setting = DUEL_SETTING_C + if(DUEL_SETTING_C) + counter_setting = DUEL_SETTING_A + if(C.setting == counter_setting) + return BULLET_ACT_BLOCK + + var/mob/living/L = target + if(!istype(target)) + return BULLET_ACT_BLOCK + + switch(hugbox) + if(DUEL_HUGBOX_NONE) + var/obj/item/bodypart/B = L.get_bodypart(BODY_ZONE_HEAD) + B.dismember() + qdel(B) + if(DUEL_HUGBOX_LETHAL) + L.adjustBruteLoss(180) + L.death() //Die, powergamers. + if(DUEL_HUGBOX_NONLETHAL) + L.adjustStaminaLoss(200, forced = TRUE) //Die, powergamers x 2 + L.Knockdown(100, override_hardstun = 100) //For good measure. + +//Storage case. +/obj/item/storage/lockbox/dueling + name = "dueling pistol case" + desc = "Let's solve this like gentlespacemen." + icon_state = "medalbox+l" + item_state = "syringe_kit" + lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' + w_class = WEIGHT_CLASS_NORMAL + req_access = list(ACCESS_CAPTAIN) + icon_locked = "medalbox+l" + icon_closed = "medalbox" + icon_broken = "medalbox+b" + var/gun_type = /obj/item/gun/energy/dueling + +/obj/item/storage/lockbox/dueling/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_w_class = WEIGHT_CLASS_SMALL + STR.max_items = 2 + STR.can_hold = typecacheof(/obj/item/gun/energy/dueling) + +/obj/item/storage/lockbox/dueling/update_icon() + cut_overlays() + var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED) + if(locked) + icon_state = "medalbox+l" + else + icon_state = "medalbox" + if(open) + icon_state += "open" + if(broken) + icon_state += "+b" + +/obj/item/storage/lockbox/dueling/PopulateContents() + . = ..() + var/obj/item/gun/energy/dueling/gun_A = new gun_type(src) + var/obj/item/gun/energy/dueling/gun_B = new gun_type(src) + var/datum/duel/D = new + gun_A.duel = D + gun_B.duel = D + D.gun_A = gun_A + D.gun_B = gun_B + +/obj/item/storage/lockbox/dueling/hugbox + gun_type = /obj/item/gun/energy/dueling/hugbox + +/obj/item/storage/lockbox/dueling/hugbox/stamina + gun_type = /obj/item/gun/energy/dueling/hugbox/stamina diff --git a/code/modules/vending/sovietvend.dm b/code/modules/vending/sovietvend.dm index 086b37e4ee..5157f68410 100644 --- a/code/modules/vending/sovietvend.dm +++ b/code/modules/vending/sovietvend.dm @@ -15,10 +15,9 @@ /obj/item/clothing/head/russobluecamohat = 20 ) contraband = list( - /obj/item/clothing/under/syndicate/tacticool = 4, + /obj/item/clothing/suit/armor/vest/russian_coat = 4, /obj/item/clothing/mask/balaclava = 4, - /obj/item/clothing/suit/russofurcoat = 4, - /obj/item/clothing/head/russofurhat = 4, + /obj/item/clothing/head/helmet/rus_ushanka = 4, /obj/item/clothing/suit/space/hardsuit/soviet = 3, /obj/item/gun/energy/laser/LaserAK = 4 ) diff --git a/html/changelogs/AutoChangeLog-pr-10746.yml b/html/changelogs/AutoChangeLog-pr-10746.yml new file mode 100644 index 0000000000..232c7a26b9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10746.yml @@ -0,0 +1,4 @@ +author: "kevinz000" +delete-after: True +changes: + - rscadd: "CTF CLAYMORES" diff --git a/html/changelogs/AutoChangeLog-pr-10749.yml b/html/changelogs/AutoChangeLog-pr-10749.yml new file mode 100644 index 0000000000..a3ed5989d1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10749.yml @@ -0,0 +1,4 @@ +author: "AnturK ported by kevinz000" +delete-after: True +changes: + - rscadd: "Dueling pistols have been added." diff --git a/html/changelogs/AutoChangeLog-pr-10773.yml b/html/changelogs/AutoChangeLog-pr-10773.yml new file mode 100644 index 0000000000..64ab5ce124 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10773.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - bugfix: "Hypno prefs work better." diff --git a/html/changelogs/AutoChangeLog-pr-9860.yml b/html/changelogs/AutoChangeLog-pr-9860.yml new file mode 100644 index 0000000000..c9d75aa7b9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9860.yml @@ -0,0 +1,5 @@ +author: "tralezab, bandit, Skoglol" +delete-after: True +changes: + - rscadd: "The mime's PDA messages are silent now!" + - rscadd: "30 new emoji have been added. Mime buff, mime now OP." diff --git a/icons/emoji.dmi b/icons/emoji.dmi index 925b072a5f..931cb7a916 100644 Binary files a/icons/emoji.dmi and b/icons/emoji.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index b0ea63611d..69d8966329 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/mob/uniform_digi.dmi b/icons/mob/uniform_digi.dmi index 3b86511013..0b8c495c5a 100644 Binary files a/icons/mob/uniform_digi.dmi and b/icons/mob/uniform_digi.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 901adb905d..ce458a1de3 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi index bba3efc951..c30e8aa6bd 100644 Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.dmi differ diff --git a/icons/pda_icons/pda_emoji.png b/icons/pda_icons/pda_emoji.png new file mode 100644 index 0000000000..39f789f520 Binary files /dev/null and b/icons/pda_icons/pda_emoji.png differ diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm index 89086ab1e5..82f4fbf1d9 100644 --- a/modular_citadel/code/datums/status_effects/chems.dm +++ b/modular_citadel/code/datums/status_effects/chems.dm @@ -211,10 +211,10 @@ /mob/living/verb/toggle_hypno() set category = "IC" - set name = "Toggle Lewd MKUltra" - set desc = "Allows you to toggle if you'd like lewd flavour messages for MKUltra." + set name = "Toggle Lewd Hypno" + set desc = "Allows you to toggle if you'd like lewd flavour messages for hypno features, such as MKUltra." client.prefs.cit_toggles ^= HYPNO - to_chat(usr, "You [((client.prefs.cit_toggles & HYPNO) ?"will":"no longer")] receive lewd flavour messages for MKUltra.") + to_chat(usr, "You [((client.prefs.cit_toggles & HYPNO) ?"will":"no longer")] receive lewd flavour messages for hypno.") /datum/status_effect/chem/enthrall id = "enthrall" diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm index 8b5e8f6522..92a1b26f01 100644 --- a/modular_citadel/code/modules/client/loadout/__donator.dm +++ b/modular_citadel/code/modules/client/loadout/__donator.dm @@ -488,3 +488,9 @@ datum/gear/darksabresheath category = SLOT_SHOES path = /obj/item/clothing/shoes/sneakers/mikuleggings ckeywhitelist = list("grandvegeta") + +/datum/gear/cosmos + name = "cosmic space bedsheet" + category = SLOT_IN_BACKPACK + path = /obj/item/bedsheet/cosmos + ckeywhitelist = list("grunnyyy") diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm index 86325faa91..f935fc5092 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm @@ -333,6 +333,8 @@ Creating a chem with a low purity will make you permanently fall in love with so ..() /datum/reagent/fermi/proc/FallInLove(mob/living/carbon/Lover, mob/living/carbon/Love) + if(Lover.client?.prefs.cit_toggles & NEVER_HYPNO) + return // doesn't even give a message, it's just ignored if(Lover.has_status_effect(STATUS_EFFECT_INLOVE)) to_chat(Lover, "You are already fully devoted to someone else!") return diff --git a/modular_citadel/icons/mob/citadel/uniforms.dmi b/modular_citadel/icons/mob/citadel/uniforms.dmi index 855872e9ab..717999c9f0 100644 Binary files a/modular_citadel/icons/mob/citadel/uniforms.dmi and b/modular_citadel/icons/mob/citadel/uniforms.dmi differ diff --git a/modular_citadel/icons/obj/clothing/vg_clothes.dmi b/modular_citadel/icons/obj/clothing/vg_clothes.dmi deleted file mode 100644 index a1d25aebf5..0000000000 Binary files a/modular_citadel/icons/obj/clothing/vg_clothes.dmi and /dev/null differ diff --git a/tgstation.dme b/tgstation.dme index 5a8549e27f..ee457b102e 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1631,12 +1631,10 @@ #include "code\modules\clothing\glasses\engine_goggles.dm" #include "code\modules\clothing\glasses\hud.dm" #include "code\modules\clothing\glasses\phantomthief.dm" -#include "code\modules\clothing\glasses\vg_glasses.dm" #include "code\modules\clothing\gloves\_gloves.dm" #include "code\modules\clothing\gloves\boxing.dm" #include "code\modules\clothing\gloves\color.dm" #include "code\modules\clothing\gloves\miscellaneous.dm" -#include "code\modules\clothing\gloves\vg_gloves.dm" #include "code\modules\clothing\head\_head.dm" #include "code\modules\clothing\head\beanie.dm" #include "code\modules\clothing\head\cit_hats.dm" @@ -1647,14 +1645,12 @@ #include "code\modules\clothing\head\misc.dm" #include "code\modules\clothing\head\misc_special.dm" #include "code\modules\clothing\head\soft_caps.dm" -#include "code\modules\clothing\head\vg_hats.dm" #include "code\modules\clothing\masks\_masks.dm" #include "code\modules\clothing\masks\boxing.dm" #include "code\modules\clothing\masks\breath.dm" #include "code\modules\clothing\masks\gasmask.dm" #include "code\modules\clothing\masks\hailer.dm" #include "code\modules\clothing\masks\miscellaneous.dm" -#include "code\modules\clothing\masks\vg_masks.dm" #include "code\modules\clothing\neck\_neck.dm" #include "code\modules\clothing\outfits\ert.dm" #include "code\modules\clothing\outfits\event.dm" @@ -1668,14 +1664,12 @@ #include "code\modules\clothing\shoes\magboots.dm" #include "code\modules\clothing\shoes\miscellaneous.dm" #include "code\modules\clothing\shoes\taeclowndo.dm" -#include "code\modules\clothing\shoes\vg_shoes.dm" #include "code\modules\clothing\spacesuits\_spacesuits.dm" #include "code\modules\clothing\spacesuits\chronosuit.dm" #include "code\modules\clothing\spacesuits\hardsuit.dm" #include "code\modules\clothing\spacesuits\miscellaneous.dm" #include "code\modules\clothing\spacesuits\plasmamen.dm" #include "code\modules\clothing\spacesuits\syndi.dm" -#include "code\modules\clothing\spacesuits\vg_spess.dm" #include "code\modules\clothing\suits\_suits.dm" #include "code\modules\clothing\suits\armor.dm" #include "code\modules\clothing\suits\bio.dm" @@ -1686,7 +1680,6 @@ #include "code\modules\clothing\suits\reactive_armour.dm" #include "code\modules\clothing\suits\toggles.dm" #include "code\modules\clothing\suits\utility.dm" -#include "code\modules\clothing\suits\vg_suits.dm" #include "code\modules\clothing\suits\wiz_robe.dm" #include "code\modules\clothing\under\_under.dm" #include "code\modules\clothing\under\accessories.dm" @@ -1697,7 +1690,6 @@ #include "code\modules\clothing\under\shorts.dm" #include "code\modules\clothing\under\syndicate.dm" #include "code\modules\clothing\under\trek.dm" -#include "code\modules\clothing\under\vg_under.dm" #include "code\modules\clothing\under\jobs\civilian.dm" #include "code\modules\clothing\under\jobs\engineering.dm" #include "code\modules\clothing\under\jobs\medsci.dm" @@ -2629,6 +2621,7 @@ #include "code\modules\projectiles\guns\ballistic\revolver.dm" #include "code\modules\projectiles\guns\ballistic\shotgun.dm" #include "code\modules\projectiles\guns\ballistic\toy.dm" +#include "code\modules\projectiles\guns\energy\dueling.dm" #include "code\modules\projectiles\guns\energy\energy_gun.dm" #include "code\modules\projectiles\guns\energy\kinetic_accelerator.dm" #include "code\modules\projectiles\guns\energy\laser.dm"