Show Player Polls (NEW!)
" else output += "" + */ output += "" diff --git a/code/modules/mob/new_player/sprite_accessories_extra_vr.dm b/code/modules/mob/new_player/sprite_accessories_extra_vr.dm index 201e0a6f81..cf1adc86a0 100644 --- a/code/modules/mob/new_player/sprite_accessories_extra_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_extra_vr.dm @@ -4,6 +4,8 @@ /datum/sprite_accessory/marking //Override for base markings color_blend_mode = ICON_ADD species_allowed = list() //This lets all races use + var/digitigrade_acceptance = MARKING_NONDIGI_ONLY + var/digitigrade_icon = 'icons/mob/human_races/markings_digi.dmi' /datum/sprite_accessory/marking/vr_vulp_belly name = "belly fur (Vulp)" @@ -1128,4 +1130,105 @@ icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "backsail" color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_TORSO) \ No newline at end of file + body_parts = list(BP_TORSO) + +//Digitigrade markings +/datum/sprite_accessory/marking/digi + icon = 'icons/mob/human_races/markings_digi.dmi' + digitigrade_acceptance = MARKING_DIGITIGRADE_ONLY + +/datum/sprite_accessory/marking/digi/fullleft + name = "Digitigrade Full Left Leg(Only works with digitigrade legs)" + icon_state = "full" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_LEG,BP_L_FOOT) + +/datum/sprite_accessory/marking/digi/fullright + name = "Digitigrade Full Right Leg(Only works with digitigrade legs)" + icon_state = "full" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_LEG,BP_R_FOOT) + +/datum/sprite_accessory/marking/digi/longsockleft + name = "Digitigrade Long Socks Left(Only works with digitigrade legs)" + icon_state = "longsock" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_LEG,BP_L_FOOT) + +/datum/sprite_accessory/marking/digi/longsockright + name = "Digitigrade Long Socks Right(Only works with digitigrade legs)" + icon_state = "longsock" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_LEG,BP_R_FOOT) + +/datum/sprite_accessory/marking/digi/medsockleft + name = "Digitigrade Medium Socks Left(Only works with digitigrade legs)" + icon_state = "medsock" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_LEG,BP_L_FOOT) + +/datum/sprite_accessory/marking/digi/medsockright + name = "Digitigrade Medium Socks Right(Only works with digitigrade legs)" + icon_state = "medsock" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_LEG,BP_R_FOOT) + +/datum/sprite_accessory/marking/digi/shortsockleft + name = "Digitigrade Short Socks Left(Only works with digitigrade legs)" + icon_state = "shortsock" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT) + +/datum/sprite_accessory/marking/digi/shortsockright + name = "Digitigrade Short Socks Right(Only works with digitigrade legs)" + icon_state = "shortsock" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_FOOT) + +/datum/sprite_accessory/marking/digi/toesleft + name = "Digitigrade Toes Left(Only works with digitigrade legs)" + icon_state = "toes" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_FOOT) + +/datum/sprite_accessory/marking/digi/toesright + name = "Digitigrade Toes Right(Only works with digitigrade legs)" + icon_state = "toes" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_FOOT) + +/datum/sprite_accessory/marking/digi/stripesleft + name = "Digitigrade Stripes Left(Only works with digitigrade legs)" + icon_state = "stripes" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_LEG,BP_L_FOOT) + +/datum/sprite_accessory/marking/digi/stripesright + name = "Digitigrade Stripes Right(Only works with digitigrade legs)" + icon_state = "stripes" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_LEG,BP_R_FOOT) + +/datum/sprite_accessory/marking/digi/smallspotsleft + name = "Digitigrade Small Spots Left(Only works with digitigrade legs)" + icon_state = "smallspots" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_LEG,BP_L_FOOT) + +/datum/sprite_accessory/marking/digi/smallspotsright + name = "Digitigrade Small Spots Right(Only works with digitigrade legs)" + icon_state = "smallspots" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_LEG,BP_R_FOOT) + +/datum/sprite_accessory/marking/digi/bigspotsleft + name = "Digitigrade Big Spots Left(Only works with digitigrade legs)" + icon_state = "bigspots" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_LEG,BP_L_FOOT) + +/datum/sprite_accessory/marking/digi/bigspotsright + name = "Digitigrade Big Spots Right(Only works with digitigrade legs)" + icon_state = "bigspots" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_LEG,BP_R_FOOT) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index b22ee48e98..76283cdf51 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -45,6 +45,8 @@ var/body_hair // Icon blend for body hair if any. var/mob/living/applied_pressure var/list/markings = list() // Markings (body_markings) to apply to the icon + var/skip_robo_icon = FALSE //to force it to use the normal species icon + var/digi_prosthetic = FALSE //is it a prosthetic that can be digitigrade // Wound and structural data. var/wound_update_accuracy = 1 // how often wounds should be updated, a higher number means less often @@ -201,6 +203,12 @@ O = O.parent return 0 +//new function to check for markings +/obj/item/organ/external/proc/is_hidden_by_markings() + for(var/M in markings) + var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"] + if(istype(mark_style,/datum/sprite_accessory/marking) && (organ_tag in mark_style.hide_body_parts)) + return 1 /obj/item/organ/external/proc/dislocate() if(dislocated == -1) diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm index 1c6be2a3e3..7304bb126a 100644 --- a/code/modules/organs/organ_icon.dm +++ b/code/modules/organs/organ_icon.dm @@ -81,6 +81,17 @@ var/global/list/limb_icon_cache = list() /obj/item/organ/external/proc/get_icon(var/skeletal, var/can_apply_transparency = TRUE) + var/digitigrade = 0 + + // preferentially take digitigrade value from owner if available, THEN DNA. + // this allows limbs to be set properly when being printed in the bioprinter without an owner + // this also allows the preview mannequin to update properly because customisation topic calls don't call a DNA check + var/check_digi = istype(src,/obj/item/organ/external/leg) || istype(src,/obj/item/organ/external/foot) + if(owner) + digitigrade = check_digi && owner.digitigrade + else if(dna) + digitigrade = check_digi && dna.digitigrade + for(var/M in markings) if (!markings[M]["on"]) continue @@ -139,8 +150,12 @@ var/global/list/limb_icon_cache = list() mob_icon = new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][gender ? "_[gender]" : ""]") should_apply_transparency = TRUE apply_colouration(mob_icon) + else if(is_hidden_by_markings()) + mob_icon = new /icon('icons/mob/human_races/r_blank.dmi', "[icon_name][gender ? "_[gender]" : ""]") + should_apply_transparency = TRUE else - mob_icon = new /icon(species.get_icobase(owner, (status & ORGAN_MUTATED)), "[icon_name][gender ? "_[gender]" : ""]") + //Use digi icon if digitigrade, otherwise use regular icon. Ternary operator is based. + mob_icon = new /icon(digitigrade ? species.icodigi : species.get_icobase(owner, (status & ORGAN_MUTATED)), "[icon_name][gender ? "_[gender]" : ""]") should_apply_transparency = TRUE apply_colouration(mob_icon) diff --git a/code/modules/pda/pda.dm b/code/modules/pda/pda.dm index e0408d024c..50d7cca9e7 100644 --- a/code/modules/pda/pda.dm +++ b/code/modules/pda/pda.dm @@ -147,6 +147,10 @@ var/global/list/obj/item/device/pda/PDAs = list() SPECIES_VR_TESHARI = 'icons/mob/species/teshari/pda_wrist.dmi', ) if(7) icon = 'icons/obj/pda_slider.dmi' //VOREStation edit + if(8) + icon = 'icons/obj/pda_vintage.dmi' + desc = "A vintage communication device. This device has been refitted for compatibility with modern messaging systems, ROM cartridges and ID cards. Despite its heavy modifications it does not feature voice communication." + else icon = 'icons/obj/pda_old.dmi' log_debug("Invalid switch for PDA, defaulting to old PDA icons. [pdachoice] chosen.") diff --git a/code/modules/projectiles/guns/launcher/confetti.dm b/code/modules/projectiles/guns/launcher/confetti.dm new file mode 100644 index 0000000000..3d23b19385 --- /dev/null +++ b/code/modules/projectiles/guns/launcher/confetti.dm @@ -0,0 +1,105 @@ +//The confetti cannon is a simple weapon meant to be a toy. You shoot confetti at people and it makes a funny sound. Don't give this any combat use. +/obj/item/weapon/gun/launcher/confetti_cannon + name = "confetti cannon" + desc = "For those times when you absolutely need colored paper everywhere." + icon = 'icons/obj/weapons_vr.dmi' + icon_state = "confetti_cannon" + item_state = "confetti_cannon" + w_class = ITEMSIZE_NORMAL + origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 2) + throw_distance = 7 + release_force = 5 + var/obj/item/weapon/grenade/confetti/party_ball/chambered = null + + var/confetti_charge = 0 + var/max_confetti = 20 + +/obj/item/weapon/gun/launcher/confetti_cannon/examine(mob/user) + . = ..() + if(get_dist(user, src) <= 2) + . += "It's loaded with [confetti_charge] ball\s of confetti." + +/obj/item/weapon/gun/launcher/confetti_cannon/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I, /obj/item/weapon/paper) || istype(I, /obj/item/weapon/shreddedp)) + if(confetti_charge < max_confetti) + user.drop_item() + ++confetti_charge + to_chat(usr, "You put the paper in the [src].") + qdel(I) + else + to_chat(usr, "[src] cannot hold more paper.") + +/obj/item/weapon/gun/launcher/confetti_cannon/proc/pump(mob/M as mob) + playsound(M, 'sound/weapons/shotgunpump.ogg', 60, 1) + if(!chambered) + if(confetti_charge) + chambered = new /obj/item/weapon/grenade/confetti/party_ball + --confetti_charge + to_chat(usr, "You compress a new confetti ball.") + else + to_chat(usr, "The [src] is out of confetti!") + else + to_chat(usr, "The [src] is already loaded!") + +/obj/item/weapon/gun/launcher/confetti_cannon/attack_self(mob/user) + pump(user) + +/obj/item/weapon/gun/launcher/confetti_cannon/consume_next_projectile() + if(chambered) + chambered.activate(null) + return chambered + +/obj/item/weapon/gun/launcher/confetti_cannon/handle_post_fire(mob/user) + chambered = null + +/obj/item/weapon/gun/launcher/confetti_cannon/overdrive + name = "overdrive confetti cannon" + desc = "For those times when you absolutely need colored paper everywhere, EVERYWHERE." + confetti_charge = 100 + max_confetti = 100 + +/obj/item/weapon/gun/launcher/confetti_cannon/fake_shottie + name = "horror movie shotgun" + desc = "The one necessary for survival of any Final Girl." + icon = 'icons/obj/gun2.dmi' + icon_state = "ithaca" + item_state = "ithaca" + confetti_charge = 20 + +/obj/item/weapon/gun/launcher/confetti_cannon/robot + name = "Party Cannon" + desc = "Confetti, pies, banana peels, chaos!" + +/obj/item/weapon/gun/launcher/confetti_cannon/robot/pump(mob/M as mob) + playsound(M, 'sound/weapons/shotgunpump.ogg', 60, 1) + if(!chambered) + var/choice = tgui_alert(usr, "Load the Party Canon with?", "Change What?", list("Confetti","Banana Peel","Cream Pie")) + if(!choice) + return + playsound(src, 'sound/effects/pop.ogg', 50, 0) + switch(choice) + if("Confetti") + chambered = new /obj/item/weapon/grenade/confetti/party_ball + to_chat(usr, "Confetti loaded.") + if(istype(usr,/mob/living/silicon/robot)) + var/mob/living/silicon/robot/R = usr + R.cell.charge -= 200 + if("Banana Peel") + chambered = new /obj/item/weapon/bananapeel + to_chat(usr, "Banana peel loaded.") + if(istype(usr,/mob/living/silicon/robot)) + var/mob/living/silicon/robot/R = usr + R.cell.charge -= 200 + if("Cream Pie") + chambered = new /obj/item/weapon/reagent_containers/food/snacks/pie + to_chat(usr, "Banana cream pie loaded.") + if(istype(usr,/mob/living/silicon/robot)) + var/mob/living/silicon/robot/R = usr + R.cell.charge -= 200 + else + to_chat(usr, "The [src] is already loaded!") + +/obj/item/weapon/gun/launcher/confetti_cannon/robot/consume_next_projectile() + if(istype(chambered,/obj/item/weapon/grenade/confetti/party_ball)) + chambered.activate(null) + return chambered \ No newline at end of file diff --git a/code/modules/research/prosfab_designs_vr.dm b/code/modules/research/prosfab_designs_vr.dm index 7cc81d794a..d5195b28ad 100644 --- a/code/modules/research/prosfab_designs_vr.dm +++ b/code/modules/research/prosfab_designs_vr.dm @@ -21,6 +21,12 @@ materials = list(MAT_STEEL = 4000, MAT_GLASS = 4000) build_path = /obj/item/borg/upgrade/bellysizeupgrade +/datum/design/item/prosfab/robot_upgrade/bellycapupgrade + name = "Robohound Capability Expansion Module" + id = "borg_hound_capability_module" + req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4) + materials = list(MAT_STEEL = 8000, MAT_GLASS = 6000) + build_path = /obj/item/borg/upgrade/bellycapupgrade /* Some job related borg upgrade modules, adding useful items for puppers. diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm index df40634606..4e7281af6e 100644 --- a/code/modules/resleeving/machines.dm +++ b/code/modules/resleeving/machines.dm @@ -99,6 +99,11 @@ for(var/modifier_type in R.genetic_modifiers) H.add_modifier(modifier_type) + //Apply legs + H.digitigrade = R.dna.digitigrade // ensure clone mob has digitigrade var set appropriately + if(H.dna.digitigrade <> R.dna.digitigrade) + H.dna.digitigrade = R.dna.digitigrade // ensure cloned DNA is set appropriately from record??? for some reason it doesn't get set right despite the override to datum/dna/Clone() + //Apply damage H.adjustCloneLoss(H.getMaxHealth()*1.5) H.Paralyse(4) diff --git a/code/modules/virus2/admin.dm b/code/modules/virus2/admin.dm index 30e673960c..687473c106 100644 --- a/code/modules/virus2/admin.dm +++ b/code/modules/virus2/admin.dm @@ -178,7 +178,7 @@ if("infectee") var/list/candidates = list() for(var/mob/living/carbon/G in living_mob_list) - if(G.stat != DEAD && G.species) + if(G.stat != DEAD && G.species && !isbelly(G.loc)) if(G.species.get_bodytype() in species) candidates["[G.name][G.client ? "" : " (no client)"]"] = G else diff --git a/code/modules/virus2/disease2.dm b/code/modules/virus2/disease2.dm index 0a89665a30..e8a275e838 100644 --- a/code/modules/virus2/disease2.dm +++ b/code/modules/virus2/disease2.dm @@ -284,7 +284,7 @@ var/global/list/virusDB = list() var/list/candidates = list() //list of candidate keys for(var/mob/living/carbon/human/G in player_list) - if(G.client && G.stat != DEAD) + if(G.client && G.stat != DEAD && !isbelly(G.loc)) candidates += G if(!candidates.len) return @@ -297,7 +297,7 @@ var/global/list/virusDB = list() var/list/candidates = list() //list of candidate keys for(var/mob/living/carbon/human/G in player_list) - if(G.client && G.stat != DEAD) + if(G.client && G.stat != DEAD && !isbelly(G.loc)) candidates += G if(!candidates.len) return diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index e2a16c9463..4914633fa1 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -1008,6 +1008,14 @@ set desc = "Switch sharp/fuzzy scaling for current mob." appearance_flags ^= PIXEL_SCALE fuzzy = !fuzzy + update_transform() + +/mob/living/proc/center_offset() + set name = "Switch center offset mode" + set category = "Preferences" + set desc = "Switch sprite center offset to fix even/odd symmetry." + offset_override = !offset_override + update_transform() /mob/living/examine(mob/user, infix, suffix) . = ..() diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 15d05d269d..4229a222d8 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -856,6 +856,11 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", l.adjust_nutrition(thismuch) ourtarget.death() // To make sure all on-death procs get properly called if(ourtarget) + if(ourtarget.is_preference_enabled(/datum/client_preference/digestion_noises)) + if(!b.fancy_vore) + SEND_SOUND(ourtarget, sound(get_sfx("classic_death_sounds"))) + else + SEND_SOUND(ourtarget, sound(get_sfx("fancy_death_prey"))) b.handle_digestion_death(ourtarget) if("Absorb") if(tgui_alert(ourtarget, "\The [usr] is attempting to instantly absorb you. Is this something you are okay with happening to you?","Instant Absorb", list("No", "Yes")) != "Yes") diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm index d31348300d..7b6c39d9ab 100644 --- a/code/modules/vore/resizing/resize_vr.dm +++ b/code/modules/vore/resizing/resize_vr.dm @@ -3,6 +3,8 @@ /mob var/step_mechanics_pref = TRUE // Allow participation in macro-micro step mechanics var/pickup_pref = TRUE // Allow participation in macro-micro pickup mechanics + var/center_offset = 0.5 // Center offset for uneven scaling symmetry. + var/offset_override = FALSE // Pref toggle for center offset. /mob/living var/holder_default @@ -30,9 +32,12 @@ /mob/living/update_icons() . = ..() ASSERT(!ishuman(src)) + var/cent_offset = center_offset + if(fuzzy || offset_override || dir == EAST || dir == WEST) + cent_offset = 0 var/matrix/M = matrix() M.Scale(size_multiplier * icon_scale_x, size_multiplier * icon_scale_y) - M.Translate(0, (vis_height/2)*(size_multiplier-1)) + M.Translate(cent_offset * size_multiplier * icon_scale_x, (vis_height/2)*(size_multiplier-1)) transform = M /** diff --git a/code/stylesheet.dm b/code/stylesheet.dm index 073d91bd39..b62c4a8146 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -73,7 +73,7 @@ h1.alert, h2.alert {color: #000000;} /* VOREStation Edit Start */ .emote {} -.emote_subtle {font-style: italic;} +.emotesubtle {font-style: italic;} /* VOREStation Edit End */ /* Game Messages */ diff --git a/icons/inventory/feet/mob_digi.dmi b/icons/inventory/feet/mob_digi.dmi new file mode 100644 index 0000000000..c2a1a9ab82 Binary files /dev/null and b/icons/inventory/feet/mob_digi.dmi differ diff --git a/icons/inventory/suit/mob_digi.dmi b/icons/inventory/suit/mob_digi.dmi new file mode 100644 index 0000000000..43ec6bc337 Binary files /dev/null and b/icons/inventory/suit/mob_digi.dmi differ diff --git a/icons/inventory/uniform/mob_digi.dmi b/icons/inventory/uniform/mob_digi.dmi new file mode 100644 index 0000000000..637e63b889 Binary files /dev/null and b/icons/inventory/uniform/mob_digi.dmi differ diff --git a/icons/mob/human_races/markings_digi.dmi b/icons/mob/human_races/markings_digi.dmi new file mode 100644 index 0000000000..c9f504c584 Binary files /dev/null and b/icons/mob/human_races/markings_digi.dmi differ diff --git a/icons/mob/human_races/masks/blood_digitigrade.dmi b/icons/mob/human_races/masks/blood_digitigrade.dmi new file mode 100644 index 0000000000..5980ce30f7 Binary files /dev/null and b/icons/mob/human_races/masks/blood_digitigrade.dmi differ diff --git a/icons/mob/human_races/r_blank.dmi b/icons/mob/human_races/r_blank.dmi new file mode 100644 index 0000000000..9b2fb0341d Binary files /dev/null and b/icons/mob/human_races/r_blank.dmi differ diff --git a/icons/mob/human_races/r_digi.dmi b/icons/mob/human_races/r_digi.dmi new file mode 100644 index 0000000000..4a38e7155e Binary files /dev/null and b/icons/mob/human_races/r_digi.dmi differ diff --git a/icons/mob/human_races/r_digi_xeno.dmi b/icons/mob/human_races/r_digi_xeno.dmi new file mode 100644 index 0000000000..fee592f02e Binary files /dev/null and b/icons/mob/human_races/r_digi_xeno.dmi differ diff --git a/icons/mob/human_races/r_xenomorph_hybrid.dmi b/icons/mob/human_races/r_xenomorph_hybrid.dmi new file mode 100644 index 0000000000..811456cd1f Binary files /dev/null and b/icons/mob/human_races/r_xenomorph_hybrid.dmi differ diff --git a/icons/mob/robot/clerical_wide.dmi b/icons/mob/robot/clerical_wide.dmi new file mode 100644 index 0000000000..d472990269 Binary files /dev/null and b/icons/mob/robot/clerical_wide.dmi differ diff --git a/icons/mob/robot/crisis_large.dmi b/icons/mob/robot/crisis_large.dmi index c15c4ee5c7..fe3eddf6ac 100644 Binary files a/icons/mob/robot/crisis_large.dmi and b/icons/mob/robot/crisis_large.dmi differ diff --git a/icons/mob/robot/protector_wide.dmi b/icons/mob/robot/protector_wide.dmi new file mode 100644 index 0000000000..7028585c11 Binary files /dev/null and b/icons/mob/robot/protector_wide.dmi differ diff --git a/icons/mob/robot/service_wide.dmi b/icons/mob/robot/service_wide.dmi index 1ec76e9e83..3c3613c94f 100644 Binary files a/icons/mob/robot/service_wide.dmi and b/icons/mob/robot/service_wide.dmi differ diff --git a/icons/mob/robot/syndie_large.dmi b/icons/mob/robot/syndie_large.dmi new file mode 100644 index 0000000000..3a0db17d6e Binary files /dev/null and b/icons/mob/robot/syndie_large.dmi differ diff --git a/icons/mob/robot/syndie_wide.dmi b/icons/mob/robot/syndie_wide.dmi new file mode 100644 index 0000000000..23e2b9d13e Binary files /dev/null and b/icons/mob/robot/syndie_wide.dmi differ diff --git a/icons/obj/food_package.dmi b/icons/obj/food_package.dmi index cf22ac48ed..ab8e1c901f 100644 Binary files a/icons/obj/food_package.dmi and b/icons/obj/food_package.dmi differ diff --git a/icons/obj/food_snacks.dmi b/icons/obj/food_snacks.dmi index 6962741815..3761135206 100644 Binary files a/icons/obj/food_snacks.dmi and b/icons/obj/food_snacks.dmi differ diff --git a/icons/obj/food_vr.dmi b/icons/obj/food_vr.dmi index 1e79233304..0f07fdeb2e 100644 Binary files a/icons/obj/food_vr.dmi and b/icons/obj/food_vr.dmi differ diff --git a/icons/obj/grenade.dmi b/icons/obj/grenade.dmi index 8f2ed0d8bb..f55e4af910 100644 Binary files a/icons/obj/grenade.dmi and b/icons/obj/grenade.dmi differ diff --git a/icons/obj/pda_vintage.dmi b/icons/obj/pda_vintage.dmi new file mode 100644 index 0000000000..a386937edd Binary files /dev/null and b/icons/obj/pda_vintage.dmi differ diff --git a/icons/obj/trash.dmi b/icons/obj/trash.dmi index e8841c78cc..8866b481c1 100644 Binary files a/icons/obj/trash.dmi and b/icons/obj/trash.dmi differ diff --git a/icons/obj/trash_vr.dmi b/icons/obj/trash_vr.dmi index cf0cdbd120..e90dc8b1da 100644 Binary files a/icons/obj/trash_vr.dmi and b/icons/obj/trash_vr.dmi differ diff --git a/icons/obj/vending_vr.dmi b/icons/obj/vending_vr.dmi index a11ef2b241..961483a8d2 100644 Binary files a/icons/obj/vending_vr.dmi and b/icons/obj/vending_vr.dmi differ diff --git a/icons/obj/weapons_vr.dmi b/icons/obj/weapons_vr.dmi index 968c6e8ef2..06274f9cf7 100644 Binary files a/icons/obj/weapons_vr.dmi and b/icons/obj/weapons_vr.dmi differ diff --git a/interface/fonts.dm b/interface/fonts.dm new file mode 100644 index 0000000000..31db4fa961 --- /dev/null +++ b/interface/fonts.dm @@ -0,0 +1,6 @@ +/// A font datum, it exists to define a custom font to use in a span style later. +/datum/font + /// Font name, just so people know what to put in their span style. + var/name + /// The font file we link to. + var/font_family diff --git a/interface/skin.dmf b/interface/skin.dmf index c3683f6846..2afdc438bb 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -1429,32 +1429,6 @@ window "rpane" is-checked = true group = "rpanemode" button-type = pushbox - elem "browseb" - type = BUTTON - pos = 580,0 - size = 60x16 - anchor1 = 100,0 - anchor2 = 100,0 - background-color = none - is-visible = false - saved-params = "is-checked" - text = "Browser" - command = ".winset \"rpanewindow.left=browserwindow\"" - group = "rpanemode" - button-type = pushbox - elem "infob" - type = BUTTON - pos = 60,0 - size = 60x16 - anchor1 = -1,-1 - anchor2 = -1,-1 - background-color = none - is-visible = false - saved-params = "is-checked" - text = "Info" - command = ".winset \"rpanewindow.left=infowindow\"" - group = "rpanemode" - button-type = pushbox elem "mediapanel" type = BROWSER pos = 392,25 @@ -1465,28 +1439,6 @@ window "rpane" is-visible = false saved-params = "" -window "browserwindow" - elem "browserwindow" - type = MAIN - pos = 281,0 - size = 640x480 - anchor1 = -1,-1 - anchor2 = -1,-1 - saved-params = "pos;size;is-minimized;is-maximized" - title = "Browser" - is-pane = true - elem "browser" - type = BROWSER - pos = 0,0 - size = 640x499 - anchor1 = 0,0 - anchor2 = 100,100 - background-color = #ffffff - is-default = true - saved-params = "" - on-show = ".winset\"rpane.infob.is-visible=true?rpane.infob.pos=130,0;rpane.textb.is-visible=true;rpane.browseb.is-visible=true;rpane.browseb.is-checked=true;rpane.rpanewindow.pos=0,30;rpane.rpanewindow.size=0x0;rpane.rpanewindow.left=browserwindow\"" - on-hide = ".winset\"rpane.infob.is-visible=true?rpane.infob.is-checked=true rpane.infob.pos=65,0 rpane.rpanewindow.left=infowindow:rpane.rpanewindow.left=textwindow rpane.textb.is-visible=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0\"" - window "preferences_window" elem "preferences_window" type = MAIN diff --git a/maps/stellar_delight/stellar_delight1.dmm b/maps/stellar_delight/stellar_delight1.dmm index d5a56d023a..10768614d8 100644 --- a/maps/stellar_delight/stellar_delight1.dmm +++ b/maps/stellar_delight/stellar_delight1.dmm @@ -3036,7 +3036,9 @@ /turf/simulated/floor/tiled/eris/steel/cargo, /area/stellardelight/deck1/oreprocessing) "fL" = ( -/obj/machinery/firealarm/angled, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/stellardelight/deck1/resleeving) "fM" = ( @@ -4303,6 +4305,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, +/obj/machinery/light, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/stellardelight/deck1/resleeving) "iq" = ( @@ -5409,6 +5412,9 @@ name = "Station Intercom (General)"; pixel_y = 21 }, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/tiled/techfloor, /area/stellardelight/deck1/starboard) "kN" = ( @@ -7407,12 +7413,12 @@ /turf/simulated/floor/tiled/techmaint, /area/stellardelight/deck1/port) "oW" = ( -/obj/machinery/light{ - dir = 8 - }, /obj/structure/cable/white{ icon_state = "1-2" }, +/obj/machinery/firealarm/angled{ + dir = 8 + }, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/stellardelight/deck1/resleeving) "oX" = ( @@ -8053,6 +8059,9 @@ "qo" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/structure/closet/emcloset, +/obj/machinery/light{ + dir = 8 + }, /turf/simulated/floor/tiled/techfloor, /area/stellardelight/deck1/port) "qp" = ( @@ -14369,6 +14378,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/stellardelight/deck1/lowermed) "Ev" = ( @@ -18280,9 +18292,6 @@ /obj/structure/closet/crate/bin{ anchored = 1 }, -/obj/machinery/light{ - dir = 1 - }, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/stellardelight/deck1/resleeving) "MZ" = ( diff --git a/maps/stellar_delight/stellar_delight3.dmm b/maps/stellar_delight/stellar_delight3.dmm index 1654195a57..256c4bdc0d 100644 --- a/maps/stellar_delight/stellar_delight3.dmm +++ b/maps/stellar_delight/stellar_delight3.dmm @@ -273,6 +273,18 @@ }, /turf/simulated/floor/tiled, /area/crew_quarters/heads/hop) +"aI" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/effect/landmark/vines, +/turf/simulated/open, +/area/stellardelight/deck2/fore) "aJ" = ( /obj/machinery/door/firedoor/glass, /obj/structure/window/bay/reinforced, @@ -288,6 +300,12 @@ }, /turf/simulated/floor/tiled, /area/crew_quarters/heads/hop) +"aL" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/open, +/area/stellardelight/deck2/fore) "aM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -296,6 +314,17 @@ /area/stellardelight/deck2/central) "aN" = ( /obj/structure/lattice, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/effect/landmark/vermin, +/turf/simulated/open, +/area/stellardelight/deck2/fore) +"aO" = ( +/obj/structure/lattice, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, @@ -305,8 +334,9 @@ /obj/structure/cable/blue{ icon_state = "1-2" }, +/obj/effect/landmark/vermin, /turf/simulated/open, -/area/stellardelight/deck2/starboard) +/area/stellardelight/deck2/fore) "aP" = ( /obj/structure/bed/chair/shuttle{ dir = 1 @@ -329,9 +359,58 @@ "aQ" = ( /turf/simulated/floor/tiled/eris/dark/gray_platform, /area/stellardelight/deck3/commandhall) +"aR" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/effect/landmark/vines, +/turf/simulated/open, +/area/stellardelight/deck2/fore) "aS" = ( /turf/simulated/floor, /area/maintenance/stellardelight/deck3/forestarrooma) +"aT" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/effect/landmark/vermin, +/turf/simulated/open, +/area/stellardelight/deck2/starboard) +"aU" = ( +/obj/structure/lattice, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/effect/landmark/vines, +/turf/simulated/open, +/area/stellardelight/deck2/port) +"aV" = ( +/obj/structure/lattice, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/landmark/vines, +/turf/simulated/open, +/area/stellardelight/deck2/starboard) "aX" = ( /obj/structure/sign/deck3{ pixel_x = 32 @@ -341,11 +420,6 @@ }, /turf/simulated/floor/tiled, /area/stellardelight/deck3/aft) -"ba" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/landmark/vines, -/turf/simulated/open, -/area/stellardelight/deck2/fore) "bb" = ( /obj/effect/floor_decal/techfloor/orange{ dir = 8 @@ -888,17 +962,6 @@ }, /turf/simulated/floor, /area/maintenance/stellardelight/deck3/foreportrooma) -"db" = ( -/obj/structure/lattice, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/open, -/area/stellardelight/deck2/starboard) "df" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -6032,13 +6095,6 @@ /obj/structure/low_wall/bay/reinforced/steel, /turf/simulated/floor, /area/stellardelight/deck2/port) -"wc" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/landmark/vermin, -/turf/simulated/open, -/area/stellardelight/deck2/starboard) "wd" = ( /obj/structure/table/standard, /obj/item/weapon/aiModule/oxygen, @@ -7841,13 +7897,6 @@ /obj/machinery/door/firedoor/glass, /turf/simulated/floor, /area/maintenance/stellardelight/deck3/portaft) -"Cb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/landmark/vermin, -/turf/simulated/open, -/area/stellardelight/deck2/fore) "Cc" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/door/airlock/angled_bay/hatch{ @@ -9525,13 +9574,6 @@ }, /turf/simulated/floor/tiled, /area/crew_quarters/heads/chief) -"ID" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/landmark/vines, -/turf/simulated/open, -/area/stellardelight/deck2/fore) "IG" = ( /obj/structure/cable/blue{ icon_state = "4-8" @@ -10679,13 +10721,6 @@ /obj/random/maintenance, /turf/simulated/floor, /area/maintenance/stellardelight/deck3/starboardfore) -"Mv" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/landmark/vines, -/turf/simulated/open, -/area/stellardelight/deck2/fore) "Mw" = ( /obj/machinery/atmospherics/pipe/manifold/hidden{ dir = 1 @@ -10905,13 +10940,6 @@ }, /turf/simulated/floor/tiled/techfloor, /area/stellardelight/deck3/cryo) -"Nd" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/landmark/vines, -/turf/simulated/open, -/area/stellardelight/deck2/port) "Ne" = ( /obj/structure/cable{ icon_state = "1-8" @@ -11569,13 +11597,6 @@ "OX" = ( /turf/simulated/floor, /area/maintenance/stellardelight/deck3/portcent) -"OY" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/landmark/vines, -/turf/simulated/open, -/area/stellardelight/deck2/starboard) "Pa" = ( /obj/structure/lattice, /turf/simulated/open, @@ -13769,16 +13790,6 @@ /obj/machinery/atmospherics/pipe/manifold4w/hidden, /turf/simulated/floor/airless, /area/maintenance/stellardelight/deck3/starboardcent) -"Xe" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/open, -/area/stellardelight/deck2/fore) "Xf" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/open, @@ -22020,7 +22031,7 @@ CS oW oW oW -Nd +QF oW oW oW @@ -22162,7 +22173,7 @@ Yw uf uf uf -Mk +aU uf uf uf @@ -22842,7 +22853,7 @@ qF qF qF qF -Cb +aL qF qF qF @@ -22851,7 +22862,7 @@ Cp qF qF qF -Mv +aL qF qF qF @@ -22984,7 +22995,7 @@ qi qi qi qi -Xe +aN qi qi qi @@ -22993,7 +23004,7 @@ kO qi qi qi -Xe +aR qi qi qi @@ -23829,8 +23840,8 @@ qp NF qp Qp -ba -Ie +Hf +aI tV cb gy @@ -25824,7 +25835,7 @@ sd sd sd sd -wy +aO sd sd sd @@ -25840,7 +25851,7 @@ sd sd Rj FL -aN +aT FL FL OI @@ -25966,7 +25977,7 @@ qF qF qF qF -ID +KF qF qF qF @@ -25982,7 +25993,7 @@ qF hC aJ ow -wc +ZC ow yP Ks @@ -26715,7 +26726,7 @@ mS mS mS mS -db +aV mS mS Rz @@ -26857,7 +26868,7 @@ ow ow ow ow -OY +ZC yP ow ZM diff --git a/maps/tether/tether-05-station1.dmm b/maps/tether/tether-05-station1.dmm index 424654bb77..b05742514c 100644 --- a/maps/tether/tether-05-station1.dmm +++ b/maps/tether/tether-05-station1.dmm @@ -133,6 +133,22 @@ /obj/machinery/door/airlock/maintenance/common, /turf/simulated/floor, /area/tether/exploration/hallway) +"aap" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/highsecurity{ + name = "Telecomms Access"; + req_access = list(61); + req_one_access = list() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/techfloor, +/area/tcommsat/entrance{ + name = "\improper Telecomms Entrance" + }) "aaq" = ( /turf/simulated/wall/r_wall, /area/maintenance/station/exploration) @@ -12607,7 +12623,7 @@ frequency = 1443; level = 3; name = "Distribution and Waste Monitor"; - sensors = list("dist_main_meter"="Surface - Distribution Loop","scrub_main_meter"="Surface - Scrubbers Loop","mair_main_meter"="Surface - Mixed Air Tank","dist_aux_meter"="Station - Distribution Loop","scrub_aux_meter"="Station - Scrubbers Loop","mair_aux_meter"="Station - Mixed Air Tank","mair_mining_meter"="Mining Outpost - Mixed Air Tank") + sensors = list("dist_main_meter" = "Surface - Distribution Loop", "scrub_main_meter" = "Surface - Scrubbers Loop", "mair_main_meter" = "Surface - Mixed Air Tank", "dist_aux_meter" = "Station - Distribution Loop", "scrub_aux_meter" = "Station - Scrubbers Loop", "mair_aux_meter" = "Station - Mixed Air Tank", "mair_mining_meter" = "Mining Outpost - Mixed Air Tank") }, /turf/simulated/floor/tiled, /area/engineering/engineering_monitoring) @@ -21737,21 +21753,6 @@ /obj/structure/sign/department/eng, /turf/simulated/wall/r_wall, /area/hallway/station/docks) -"jmn" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/highsecurity{ - name = "Telecomms Access"; - req_one_access = list(10,12,16,17,61) - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/techfloor, -/area/tcommsat/entrance{ - name = "\improper Telecomms Entrance" - }) "jms" = ( /obj/structure/table/rack, /obj/item/clothing/suit/space/void/mining, @@ -23210,7 +23211,6 @@ /area/gateway/prep_room) "kHf" = ( /obj/machinery/conveyor_switch/oneway{ - //convdir = -1; //Incompatable with new behavior -Reo; id = "QMLoad2" }, /obj/machinery/light{ @@ -28372,24 +28372,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/tiled, /area/quartermaster/office) -"qSM" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/tether/station/dock_two) "qTD" = ( /obj/item/weapon/bedsheet/brown, /obj/structure/bed/padded, @@ -47053,7 +47035,7 @@ aaa aaa fLT cOV -qSM +rQq vcG fLT aaa @@ -47195,7 +47177,7 @@ xIm jRT fLT kbq -qSM +rQq jGw fLT aaa @@ -49041,7 +49023,7 @@ aaa aaa fLT lNz -qSM +rQq qZs fLT aaa @@ -49574,7 +49556,7 @@ hkR lGY nJx acR -jmn +aap acZ adg adr diff --git a/sound/effects/confetti_ball.ogg b/sound/effects/confetti_ball.ogg new file mode 100644 index 0000000000..8db31be074 Binary files /dev/null and b/sound/effects/confetti_ball.ogg differ diff --git a/tgui/packages/tgui-dev-server/package.json b/tgui/packages/tgui-dev-server/package.json index a7cf248a48..ab45774318 100644 --- a/tgui/packages/tgui-dev-server/package.json +++ b/tgui/packages/tgui-dev-server/package.json @@ -4,7 +4,7 @@ "version": "4.4.1", "type": "module", "dependencies": { - "axios": "^0.27.2", + "axios": "^1.6.0", "glob": "^8.0.3", "source-map": "^0.7.3", "stacktrace-parser": "^0.1.10", diff --git a/tgui/packages/tgui-panel/Notifications.js b/tgui/packages/tgui-panel/Notifications.js new file mode 100644 index 0000000000..2b92995287 --- /dev/null +++ b/tgui/packages/tgui-panel/Notifications.js @@ -0,0 +1,28 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { Flex } from 'tgui/components'; + +export const Notifications = (props) => { + const { children } = props; + return