Merge branch 'master' into shep-dev-simplemob-injury

This commit is contained in:
Heroman3003
2023-04-15 08:38:41 +10:00
committed by GitHub
60 changed files with 1206 additions and 460 deletions
@@ -0,0 +1,276 @@
/obj/item/weapon/melee/shock_maul
name = "concussion maul"
desc = "A heavy-duty concussion hammer, typically used for mining. An iconic weapon for the many uprisings of Mars. It uses a manually engaged concussive-force amplifier unit in the head to multiply impact force, but its weight and the charge up time makes it difficult to use effectively. Devastating if used correctly, but requires skill."
icon_state = "forcemaul"
item_state = "forcemaul"
slot_flags = SLOT_BACK
//stopping power/lethality
force = 35
armor_penetration = 20 //the sheer impact force bypasses quite a bit of armour
var/unwielded_force_divisor = 0.25
var/wielded = 0
var/force_unwielded = 8.75
var/wieldsound = null
var/unwieldsound = null
var/charge_force_mult = 1.75 //damage and AP multiplier on charged hits
var/launch_force = 3 //yeet distance
var/launch_force_unwielded = 1 //awful w/ one hand, but still gets a little distance
var/launch_force_disarm = 1.5 //distance multiplier when swinging in disarm mode, since disarm attacks do half damage
var/weaken_force = 2 //stun power
var/weaken_force_unwielded = 0 //can't stun at all if used onehanded
var/weaken_force_disarm = 1.5 //stun multiplier when in disarm mode
//mining interacts
var/excavation_amount = 200
var/destroy_artefacts = TRUE //sorry, breaks stuff
can_cleave = TRUE //SSSSMITE!
attackspeed = 15 //very slow!!
sharp = FALSE
edge = FALSE
throwforce = 25
flags = NOCONDUCT
w_class = ITEMSIZE_HUGE
drop_sound = 'sound/items/drop/metalweapon.ogg'
pickup_sound = 'sound/items/pickup/metalweapon.ogg'
origin_tech = list(TECH_COMBAT = 5)
attack_verb = list("beaten","slammed","smashed","mauled","hammered","bludgeoned")
var/lightcolor = "#D3FDFD"
var/status = 0 //whether the thing is on or not
var/obj/item/weapon/cell/bcell = null
var/hitcost = 600 //you get 4 hits out of a standard cell
/obj/item/weapon/melee/shock_maul/update_held_icon()
var/mob/living/M = loc
if(istype(M) && M.can_wield_item(src) && is_held_twohanded(M))
wielded = 1
if(status)
force = initial(force)*charge_force_mult
armor_penetration *= charge_force_mult
else
force = initial(force)
armor_penetration = initial(armor_penetration)
launch_force = initial(launch_force)
weaken_force = initial(weaken_force)
name = "[initial(name)] (wielded)"
update_icon()
else
wielded = 0
if(status)
force = force_unwielded*charge_force_mult
armor_penetration *= charge_force_mult
else
force = force_unwielded
armor_penetration = initial(armor_penetration)
launch_force = launch_force_unwielded
weaken_force = weaken_force_unwielded
name = "[initial(name)]"
update_icon()
..()
/obj/item/weapon/melee/shock_maul/New()
..()
update_held_icon()
return
/obj/item/weapon/melee/shock_maul/get_cell()
return bcell
/obj/item/weapon/melee/shock_maul/MouseDrop(obj/over_object as obj)
if(!canremove)
return
if (ishuman(usr) || issmall(usr)) //so monkeys can take off their backpacks -- Urist
if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech. why?
return
if (!( istype(over_object, /obj/screen) ))
return ..()
//makes sure that the thing is equipped, so that we can't drag it into our hand from miles away.
//there's got to be a better way of doing this.
if (!(src.loc == usr) || (src.loc && src.loc.loc == usr))
return
if (( usr.restrained() ) || ( usr.stat ))
return
if ((src.loc == usr) && !(istype(over_object, /obj/screen)) && !usr.unEquip(src))
return
switch(over_object.name)
if("r_hand")
usr.u_equip(src)
usr.put_in_r_hand(src)
if("l_hand")
usr.u_equip(src)
usr.put_in_l_hand(src)
src.add_fingerprint(usr)
/obj/item/weapon/melee/shock_maul/loaded/New() //this one starts with a cell pre-installed.
..()
bcell = new/obj/item/weapon/cell/device/weapon(src)
update_icon()
return
/obj/item/weapon/melee/shock_maul/proc/deductcharge()
if(status == 1) //Only deducts charge when it's on
if(bcell)
if(bcell.checked_use(hitcost))
return 1
else
return 0
return null
/obj/item/weapon/melee/shock_maul/proc/powercheck()
if(bcell)
if(bcell.charge < hitcost)
status = 0
update_held_icon()
/obj/item/weapon/melee/shock_maul/update_icon()
if(status)
icon_state = "[initial(icon_state)]_active[wielded]"
item_state = icon_state
else if(!bcell)
icon_state = "[initial(icon_state)]_nocell[wielded]"
item_state = icon_state
else
icon_state = "[initial(icon_state)][wielded]"
item_state = icon_state
if(icon_state == "[initial(icon_state)]_active[wielded]")
set_light(2, 1, lightcolor)
else
set_light(0)
/obj/item/weapon/melee/shock_maul/dropped()
..()
if(status)
status = 0
visible_message("<span class='warning'>\The [src]'s grip safety engages!</span>")
update_held_icon()
/obj/item/weapon/melee/shock_maul/examine(mob/user)
. = ..()
if(Adjacent(user))
if(bcell)
. += "<span class='notice'>The concussion maul is [round(bcell.percent())]% charged.</span>"
if(!bcell)
. += "<span class='warning'>The concussion maul does not have a power source installed.</span>"
/obj/item/weapon/melee/shock_maul/attackby(obj/item/weapon/W, mob/user)
if(!user.IsAdvancedToolUser())
return
if(istype(W, /obj/item/weapon/cell))
if(istype(W, /obj/item/weapon/cell/device))
if(!bcell)
user.drop_item()
W.loc = src
bcell = W
to_chat(user, "<span class='notice'>You install a cell in \the [src].</span>")
update_held_icon()
else
to_chat(user, "<span class='notice'>\The [src] already has a cell.</span>")
else
to_chat(user, "<span class='notice'>This cell is not fitted for [src].</span>")
/obj/item/weapon/melee/shock_maul/attack_hand(mob/user as mob)
if(user.get_inactive_hand() == src)
if(!user.IsAdvancedToolUser())
return
else if(bcell)
bcell.update_icon()
user.put_in_hands(bcell)
bcell = null
to_chat(user, "<span class='notice'>You remove the cell from the [src].</span>")
status = 0
update_held_icon()
return
..()
else
return ..()
/obj/item/weapon/melee/shock_maul/attack_self(mob/user)
if(!user.IsAdvancedToolUser())
return
if(!status && bcell && bcell.charge >= hitcost)
if(do_after(user, 2 SECONDS))
status = 1
user.visible_message("<span class='warning'>[user] charges \the [src]!</span>","<span class='warning'>You charge \the [src]. <b>It's hammer time!</b></span>")
playsound(src, "sparks", 75, 1, -1)
update_held_icon()
else if(status)
status = 0
user.visible_message("<span class='notice'>[user] safely disengages \the [src]'s power field.</span>","<span class='notice'>\The [src] is now off.</span>")
update_held_icon()
playsound(src, "sparks", 75, 1, -1)
if(!bcell)
to_chat(user, "<span class='warning'>\The [src] does not have a power source!</span>")
else
to_chat(user, "<span class='warning'>\The [src] is out of charge.</span>")
add_fingerprint(user)
/obj/item/weapon/melee/shock_maul/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
if(!proximity) return
..()
if(A && wielded && status)
deductcharge()
status = 0
user.visible_message("<span class='warning'>\The [src] discharges with a thunderous, hair-raising crackle!</span>")
playsound(src, 'sound/weapons/resonator_blast.ogg', 100, 1, -1)
update_held_icon()
if(istype(A,/obj/structure/window))
var/obj/structure/window/W = A
visible_message("<span class='warning'>\The [W] crumples under the force of the impact!</span>")
W.shatter()
else if(istype(A,/obj/structure/barricade))
var/obj/structure/barricade/B = A
B.dismantle()
else if(istype(A,/obj/structure/grille))
qdel(A)
powercheck(hitcost)
/obj/item/weapon/melee/shock_maul/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
. = ..()
if(user.a_intent == I_DISARM)
launch_force *= launch_force_disarm
weaken_force *= weaken_force_disarm
//yeet 'em away, boys!
if(status)
var/atom/target_zone = get_edge_target_turf(user,get_dir(user, target))
if(!target.anchored) //unless they're secured in place, natch
target.throw_at(target_zone, launch_force, 2, user, FALSE)
target.Weaken(weaken_force)
deductcharge()
status = 0
user.visible_message("<span class='warning'>\The [src] discharges with a thunderous, hair-raising crackle!</span>")
playsound(src, 'sound/weapons/resonator_blast.ogg', 100, 1, -1)
update_held_icon()
powercheck(hitcost)
/obj/item/weapon/melee/shock_maul/emp_act(severity)
if(bcell)
bcell.emp_act(severity) //let's not duplicate code everywhere if we don't have to please.
if(status)
status = 0
visible_message("<span class='warning'>\The [src]'s power field hisses and sputters out.</span>")
update_held_icon()
..()
/obj/item/weapon/melee/shock_maul/get_description_interaction()
var/list/results = list()
if(bcell)
results += "[desc_panel_image("offhand")]to remove the weapon cell."
else
results += "[desc_panel_image("weapon cell")]to add a new weapon cell."
results += ..()
return results
+1
View File
@@ -73,6 +73,7 @@
prob(2);/obj/item/weapon/twohanded/fireaxe,\
prob(2);/obj/item/weapon/gun/projectile/luger/brown,\
prob(2);/obj/item/weapon/gun/launcher/crossbow,\
prob(2);/obj/item/weapon/melee/shock_maul,\
/* prob(1);/obj/item/weapon/gun/projectile/automatic/battlerifle,\ */ // Too OP
prob(1);/obj/item/weapon/gun/projectile/deagle/gold,\
prob(1);/obj/item/weapon/gun/energy/imperial,\
@@ -6,11 +6,12 @@
description_info = "This contains a growing xenomorph larva, which may wake up at any moment. The larva will be another player, once activated."
icon = 'icons/mob/alien.dmi'
icon_state = "egg"
icon_state_opened = "egg_opened" //Can be placed on map with used = 1 for POI decorations
icon_state_opened = "egg_opened"
var/health = 50 //So they can be destroyed by the crew
density = FALSE
ghost_query_type = /datum/ghost_query/xenomorph_larva
delay_to_try_again = 1 MINUTES //10 minutes for egg to grow, 5 minutes for larva to mature
anchored = TRUE
/obj/structure/ghost_pod/automatic/xenomorph_egg/create_occupant(var/mob/M)
var/mob/living/carbon/alien/larva/R = new(get_turf(src))
@@ -1,5 +1,6 @@
/datum/preferences
var/extra_languages = 0
var/preferred_language = "common" // VOREStation Edit: Allow selecting a preferred language
/datum/category_item/player_setup_item/general/language
name = "Language"
@@ -12,6 +13,9 @@
if(islist(pref.alternate_languages)) // Because aparently it may not be?
testing("LANGSANI: Loaded from [pref.client]'s character [pref.real_name || "-name not yet loaded-"] savefile: [english_list(pref.alternate_languages || list())]")
S["language_prefixes"] >> pref.language_prefixes
//VORE Edit Begin
S["preflang"] >> pref.preferred_language
//VORE Edit End
S["language_custom_keys"] >> pref.language_custom_keys
/datum/category_item/player_setup_item/general/language/save_character(var/savefile/S)
@@ -21,6 +25,7 @@
testing("LANGSANI: Loaded from [pref.client]'s character [pref.real_name || "-name not yet loaded-"] savefile: [english_list(pref.alternate_languages || list())]")
S["language_prefixes"] << pref.language_prefixes
S["language_custom_keys"] << pref.language_custom_keys
S["preflang"] << pref.preferred_language // VOREStation Edit
/datum/category_item/player_setup_item/general/language/sanitize_character()
if(!islist(pref.alternate_languages))
@@ -36,6 +41,11 @@
testing("LANGSANI: Truncated [pref.client]'s character [pref.real_name || "-name not yet loaded-"] language list because it was too long (len: [pref.alternate_languages.len], allowed: [S.num_alternate_languages])")
pref.alternate_languages.len = (S.num_alternate_languages + pref.extra_languages) // Truncate to allowed length
// VOREStation Edit Start
if(!(pref.preferred_language in pref.alternate_languages) || !pref.preferred_language) // Safety handling for if our preferred language is ever somehow removed from the character's list of langauges, or they don't have one set
pref.preferred_language = S.language // Reset to default, for safety
// VOREStation Edit end
// Sanitize illegal languages
for(var/language in pref.alternate_languages)
var/datum/language/L = GLOB.all_languages[language]
@@ -80,6 +90,7 @@
. += "<b>Language Keys</b><br>"
. += " [jointext(pref.language_prefixes, " ")] <a href='?src=\ref[src];change_prefix=1'>Change</a> <a href='?src=\ref[src];reset_prefix=1'>Reset</a><br>"
. += "<b>Preferred Language</b> <a href='?src=\ref[src];pref_lang=1'>[pref.preferred_language]</a><br>" // VOREStation Add
/datum/category_item/player_setup_item/general/language/OnTopic(var/href,var/list/href_list, var/mob/user)
if(href_list["remove_language"])
@@ -167,4 +178,22 @@
return TOPIC_REFRESH
// VOREStation Add: Preferred Language
else if(href_list["pref_lang"])
if(pref.species) // Safety to prevent a null runtime here
var/datum/species/S = GLOB.all_species[pref.species]
var/list/lang_opts = list(S.language) + pref.alternate_languages + LANGUAGE_GALCOM
var/selection = tgui_input_list(user, "Choose your preferred spoken language:", "Preferred Spoken Language", lang_opts, pref.preferred_language)
if(!selection) // Set our preferred to default, just in case.
tgui_alert_async(user, "Preferred Language not modified.", "Selection Canceled")
if(selection)
pref.preferred_language = selection
if(selection == "common" || selection == S.language)
tgui_alert_async(user, "You will now speak your standard default language, [S.language ? S.language : "common"], if you do not specify a language when speaking.", "Preferred Set to Default")
else // Did they set anything else?
tgui_alert_async(user, "You will now speak [pref.preferred_language] if you do not specify a language when speaking.", "Preferred Language Set")
return TOPIC_REFRESH
// VOREStation Add End
return ..()
@@ -35,6 +35,13 @@
character_name = list("Malady Blanche")
// A CKEYS
/datum/gear/fluff/mira_medal
path = /obj/item/clothing/accessory/medal/silver/fluff/abc314
display_name = "Mira's Health Service Achievement medal"
ckeywhitelist = list("abc314")
character_name = list("Mira Nesyne")
/datum/gear/fluff/lethe_helmet
path = /obj/item/clothing/head/helmet/hos/fluff/lethe
display_name = "Lethe's Helmet"
@@ -1,6 +1,13 @@
// Define a place to save appearance in character setup
// VOREStation Add Start: Doing this here bc AUTOHISS_FULL is more readable than #
#define AUTOHISS_OFF 0
#define AUTOHISS_BASIC 1
#define AUTOHISS_FULL 2
// VOREStation Add End
/datum/preferences
var/vore_egg_type = "Egg" //The egg type they have.
var/autohiss = "Full" // VOREStation Add: Whether we have Autohiss on. I'm hijacking the egg panel bc this one has a shitton of unused space.
// Definition of the stuff for the egg type.
/datum/category_item/player_setup_item/vore/egg
@@ -9,19 +16,35 @@
/datum/category_item/player_setup_item/vore/egg/load_character(var/savefile/S)
S["vore_egg_type"] >> pref.vore_egg_type
S["autohiss"] >> pref.autohiss // VOREStation Add
/datum/category_item/player_setup_item/vore/egg/save_character(var/savefile/S)
S["vore_egg_type"] << pref.vore_egg_type
S["autohiss"] << pref.autohiss // VOREStation Add
/datum/category_item/player_setup_item/vore/egg/sanitize_character()
pref.vore_egg_type = sanitize_inlist(pref.vore_egg_type, global_vore_egg_types, initial(pref.vore_egg_type))
/datum/category_item/player_setup_item/vore/egg/copy_to_mob(var/mob/living/carbon/human/character)
character.vore_egg_type = pref.vore_egg_type
// VOREStation Add
if(pref.client) // Safety, just in case so we don't runtime.
if(!pref.autohiss)
pref.client.autohiss_mode = AUTOHISS_FULL
else
switch(pref.autohiss)
if("Full")
pref.client.autohiss_mode = AUTOHISS_FULL
if("Basic")
pref.client.autohiss_mode = AUTOHISS_BASIC
if("Off")
pref.client.autohiss_mode = AUTOHISS_OFF
// VOREStation Add
/datum/category_item/player_setup_item/vore/egg/content(var/mob/user)
. += "<br>"
. += " Egg Type: <a href='?src=\ref[src];vore_egg_type=1'>[pref.vore_egg_type]</a><br>"
. += "<b>Autohiss Default Setting:</b> <a href='?src=\ref[src];autohiss=1'>[pref.autohiss]</a><br>" // VOREStation Add
/datum/category_item/player_setup_item/vore/egg/OnTopic(var/href, var/list/href_list, var/mob/user)
if(!CanUseTopic(user))
@@ -33,5 +56,21 @@
if(selection)
pref.vore_egg_type = selection
return TOPIC_REFRESH
// VOREStation Add Start
else if(href_list["autohiss"])
var/list/autohiss_selection = list("Full", "Basic", "Off")
var/selection = tgui_input_list(user, "Choose your default autohiss setting:", "Character Preference", autohiss_selection, pref.autohiss)
if(selection)
pref.autohiss = selection
else if(!selection)
pref.autohiss = "Full"
return TOPIC_REFRESH
// VOREStation Add End
else
return
// VOREStation Add Start: Doing this here bc AUTOHISS_FULL is more readable than #
#undef AUTOHISS_OFF
#undef AUTOHISS_BASIC
#undef AUTOHISS_FULL
// VOREStation Add End
+34 -1
View File
@@ -13,6 +13,8 @@
var/flash_prot = 0 //0 for none, 1 for flash weapon protection, 2 for welder protection
enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_AUGMENTED)
plane_slots = list(slot_glasses)
var/ar_toggled = TRUE //Used for toggle_ar_planes() verb
/obj/item/clothing/glasses/omnihud/New()
..()
@@ -28,6 +30,14 @@
SStgui.close_uis(src)
..()
/obj/item/clothing/glasses/omnihud/examine()
. = ..()
if(ar_toggled)
. += "\n <span class='notice'>The HUD indicator reads ON.</span>"
else
. += "\n <span class='notice'>The HUD indicator reads OFF.</span>"
/obj/item/clothing/glasses/omnihud/emp_act(var/severity)
if(tgarscreen)
SStgui.close_uis(src)
@@ -114,6 +124,29 @@
to_chat(usr, "The [src] don't seem to support this functionality.")
update_clothing_icon()
/obj/item/clothing/glasses/omnihud/verb/toggle_ar_planes()
set name = "Toggle AR Heads-Up Display"
set desc = "Toggles the job icon and other non-manually requested displays. Does not disable Crew monitor and similar."
set category = "Object"
set src in usr
//We do not check if user can move or not, since this system is inspired to help see chat bubbles during scenes primarily.
//Preventing turning off the HUD could get in the way of scene flow.
usr.visible_emote("toggles a button on their [src.name]!") //Since we're turning stuff like arrest/medical HUD on/off, we should inform those nearby.
if(ar_toggled)
away_planes = enables_planes
enables_planes = null
to_chat(usr, SPAN_NOTICE("You disabled the Augmented Reality HUD of your [src.name]."))
else
enables_planes = away_planes
away_planes = null
to_chat(usr, SPAN_NOTICE("You enabled the Augmented Reality HUD of your [src.name]."))
ar_toggled = !ar_toggled
usr.update_action_buttons()
usr.recalculate_vis()
/obj/item/clothing/glasses/omnihud/proc/ar_interact(var/mob/living/carbon/human/user)
return 0 //The base models do nothing.
@@ -305,4 +338,4 @@
icon_state = "[icon_state]_1"
else
icon_state = initial(icon_state)
update_clothing_icon()
update_clothing_icon()
+3
View File
@@ -91,7 +91,10 @@
/obj/item/clothing/head/pizzaguy
name = "pizza delivery visor"
desc = "A fancy visor showing alignment to pizza delivery service. Extremely risky career choice."
icon = 'icons/inventory/head/item_vr.dmi'
icon_override = 'icons/inventory/head/mob_vr.dmi'
icon_state = "pizzadelivery"
item_state = "pizzadelivery"
/obj/item/clothing/head/wedding
name = "wedding veil"
@@ -238,3 +238,8 @@
key = "coyawoo5"
emote_message_3p = "lets out a scraggly, whine-awoo."
emote_sound = 'sound/voice/coyoteawoo5.ogg'
/decl/emote/audible/roarbark // Upstream port from CHOMP
key = "roarbark"
emote_message_3p = "lets out a roar-bark!"
emote_sound = 'sound/voice/roarbark.ogg'
+5 -2
View File
@@ -374,9 +374,12 @@
// If a weed growth is sufficient, this proc is called.
/obj/machinery/portable_atmospherics/hydroponics/proc/weed_invasion()
var/previous_plant
//Remove the seed if something is already planted.
if(seed) seed = null
if(seed)
previous_plant = seed.display_name
seed = null
seed = SSplants.seeds[pick(list("reishi","nettle","amanita","mushrooms","plumphelmet","towercap","harebells","weeds"))]
if(!seed) return //Weed does not exist, someone fucked up.
@@ -389,7 +392,7 @@
pestlevel = 0
sampled = 0
update_icon()
visible_message("<span class='notice'>[src] has been overtaken by [seed.display_name].</span>")
visible_message("<span class='notice'>\The [previous_plant ? previous_plant : initial(name)] has been overtaken by [seed.display_name].</span>")
return
@@ -99,6 +99,7 @@
list(pick(/obj/item/weapon/grenade/spawnergrenade/spesscarp, /obj/item/weapon/grenade/spawnergrenade/spider, /obj/item/weapon/grenade/explosive/frag), 7) = 1,
list(/obj/item/weapon/grenade/flashbang/clusterbang, 7) = 1,
list(/obj/item/weapon/card/emag, 11) = 1,
list(/obj/item/weapon/melee/shock_maul, 11) = 5,
list(/obj/item/weapon/storage/backpack/sport/hyd/catchemall, 11) = 1
))
var/path = choice[1]
+15
View File
@@ -97,6 +97,21 @@
new outcropdrop(get_turf(src))
qdel(src)
return
if (istype(W, /obj/item/weapon/melee/shock_maul))
var/obj/item/weapon/melee/shock_maul/S = W
if(!S.wielded || !S.status)
to_chat(user, "<span class='warning'>\The [src] must be wielded in two hands and powered on to be used for mining!</span>")
return
to_chat(user, "<span class='notice'>You pulverize \the [src]!</span>")
for(var/i=0;i<(rand(mindrop,upperdrop));i++)
new outcropdrop(get_turf(src))
playsound(src, 'sound/weapons/resonator_blast.ogg', 100, 1, -1)
user.visible_message("<span class='warning'>\The [S] discharges with a thunderous, hair-raising crackle!</span>")
S.deductcharge()
S.status = 0
S.update_held_icon()
qdel(src)
return
/obj/random/outcrop //In case you want an outcrop without pre-determining the type of ore.
name = "random rock outcrop"
+45 -1
View File
@@ -371,7 +371,6 @@ var/list/mining_overlay_cache = list()
valid_tool = 1
digspeed = P.digspeed
if(valid_tool)
if (sand_dug)
to_chat(user, "<span class='warning'>This area has already been dug.</span>")
@@ -442,6 +441,51 @@ var/list/mining_overlay_cache = list()
to_chat(user, "<span class='notice'>\The [src] has been excavated to a depth of [excavation_level]cm.</span>")
return
if (istype(W, /obj/item/weapon/melee/shock_maul))
if(!istype(user.loc, /turf))
return
var/obj/item/weapon/melee/shock_maul/S = W
if(!S.wielded || !S.status) //if we're not wielded OR not powered up, do nothing
to_chat(user, "<span class='warning'>\The [src] must be wielded in two hands and powered on to be used for mining!</span>")
return
var/newDepth = excavation_level + S.excavation_amount // Used commonly below
//handle any archaeological finds we might uncover
var/fail_message = ""
if(finds && finds.len)
var/datum/find/F = finds[1]
if(newDepth > F.excavation_required) // Digging too deep can break the item. At least you won't summon a Balrog (probably)
fail_message = ". <b>[pick("There is a crunching noise","[S] collides with some different rock","Part of the rock face crumbles away","Something breaks under [S]")]</b>"
wreckfinds(S.destroy_artefacts)
to_chat(user, "<span class='notice'>You smash through \the [src][fail_message].</span>")
if(newDepth >= 200) // This means the rock is mined out fully
if(S.destroy_artefacts)
GetDrilled(0)
else
excavate_turf()
return
excavation_level += S.excavation_amount
update_archeo_overlays(S.excavation_amount)
//drop some rocks
next_rock += S.excavation_amount
while(next_rock > 50)
next_rock -= 50
var/obj/item/weapon/ore/O = new(src)
geologic_data.UpdateNearbyArtifactInfo(src)
O.geologic_data = geologic_data
user.visible_message("<span class='warning'>\The [src] discharges with a thunderous, hair-raising crackle!</span>")
playsound(src, 'sound/weapons/resonator_blast.ogg', 100, 1, -1)
S.deductcharge()
S.status = 0
S.update_held_icon()
if (istype(W, /obj/item/weapon/pickaxe))
if(!istype(user.loc, /turf))
return
@@ -170,7 +170,8 @@ var/list/_human_default_emotes = list(
/decl/emote/visible/vibrate,
/decl/emote/audible/croon,
/decl/emote/audible/lwarble,
/decl/emote/audible/croak_skrell
/decl/emote/audible/croak_skrell,
/decl/emote/audible/roarbark
//VOREStation Add End
)
+26 -1
View File
@@ -1,5 +1,30 @@
// VOREStation Add Start: Doing this here bc AUTOHISS_FULL is more readable than #
#define AUTOHISS_OFF 0
#define AUTOHISS_BASIC 1
#define AUTOHISS_FULL 2
// VOREStation Add End
/mob/living/carbon/human/Login()
..()
update_hud()
// VOREStation Add
if(client.prefs) // Safety, just in case so we don't runtime.
if(!client.prefs.autohiss)
client.autohiss_mode = AUTOHISS_FULL
else
switch(client.prefs.autohiss)
if("Full")
client.autohiss_mode = AUTOHISS_FULL
if("Basic")
client.autohiss_mode = AUTOHISS_BASIC
if("Off")
client.autohiss_mode = AUTOHISS_OFF
// VOREStation Add
if(species) species.handle_login_special(src)
return
return
// VOREStation Add Start: Doing this here bc AUTOHISS_FULL is more readable than #
#undef AUTOHISS_OFF
#undef AUTOHISS_BASIC
#undef AUTOHISS_FULL
// VOREStation Add End
@@ -145,32 +145,25 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
var/matrix/M = matrix()
var/anim_time = 3
// VOREStation Edit Start: Porting Taur Loafing
if(tail_style?.can_loaf && resting) // Only call these if we're resting?
update_tail_showing()
return // No need to do the rest, we return early
/* // Commenting this out as sleeping is fucky
if(tail_style?.can_loaf && lying && sleeping) // If we're put under by anesthetic or fainting
update_tail_showing()
// return // No need to do the rest, we return early
*/
// VOREStation Edit End
//Due to some involuntary means, you're laying now
if(lying && !resting && !sleeping)
anim_time = 1 //Thud
if(lying && !species.prone_icon) //Only rotate them if we're not drawing a specific icon for being prone.
var/randn = rand(1, 2)
if(randn <= 1) // randomly choose a rotation
M.Turn(-90)
if(tail_style?.can_loaf && resting) // Only call these if we're resting?
update_tail_showing()
M.Scale(desired_scale_x, desired_scale_y)
else
M.Turn(90)
M.Scale(desired_scale_y, desired_scale_x)//VOREStation Edit
if(species.icon_height == 64)//VOREStation Edit
M.Translate(13,-22)
else
M.Translate(1,-6)
var/randn = rand(1, 2)
if(randn <= 1) // randomly choose a rotation
M.Turn(-90)
else
M.Turn(90)
if(species.icon_height == 64)
M.Translate(13,-22)
else
M.Translate(1,-6)
M.Scale(desired_scale_y, desired_scale_x)
layer = MOB_LAYER -0.01 // Fix for a byond bug where turf entry order no longer matters
else
M.Scale(desired_scale_x, desired_scale_y)//VOREStation Edit
@@ -1270,13 +1263,13 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
//If you have a custom tail selected
if(tail_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL && !istaurtail(tail_style)) && !tail_hidden)
var/icon/tail_s = new/icon("icon" = tail_style.icon, "icon_state" = (tail_style.can_loaf && resting) ? "[tail_style.icon_state]_loaf" : (wagging && tail_style.ani_state ? tail_style.ani_state : tail_style.icon_state)) // VOREStation Edit: Taur Loafing
var/icon/tail_s = new/icon("icon" = (tail_style.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = (wagging && tail_style.ani_state ? tail_style.ani_state : tail_style.icon_state)) //CHOMPEdit
if(tail_style.can_loaf && !is_shifted)
pixel_y = (resting) ? -tail_style.loaf_offset*size_multiplier : default_pixel_y //move player down, then taur up, to fit the overlays correctly // VOREStation Edit: Taur Loafing
if(tail_style.do_colouration)
tail_s.Blend(rgb(src.r_tail, src.g_tail, src.b_tail), tail_style.color_blend_mode)
if(tail_style.extra_overlay)
var/icon/overlay = new/icon("icon" = tail_style.icon, "icon_state" = (tail_style?.can_loaf && resting) ? "[tail_style.extra_overlay]_loaf" : tail_style.extra_overlay) // VOREStation Edit: Taur Loafing
var/icon/overlay = new/icon("icon" = (tail_style?.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = tail_style.extra_overlay) //CHOMPEdit
if(wagging && tail_style.ani_state)
overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay_w)
overlay.Blend(rgb(src.r_tail2, src.g_tail2, src.b_tail2), tail_style.color_blend_mode)
@@ -1288,7 +1281,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
qdel(overlay)
if(tail_style.extra_overlay2)
var/icon/overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay2)
var/icon/overlay = new/icon("icon" = (tail_style?.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = tail_style.extra_overlay2) //CHOMPEdit
if(wagging && tail_style.ani_state)
overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay2_w)
overlay.Blend(rgb(src.r_tail3, src.g_tail3, src.b_tail3), tail_style.color_blend_mode)
@@ -1306,7 +1299,6 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
if(istaurtail(tail_style))
var/datum/sprite_accessory/tail/taur/taurtype = tail_style
working.pixel_x = -16
working.pixel_y = (tail_style.can_loaf && resting) ? tail_style.loaf_offset : 0 // VOREStation Edit: Taur Loafing
if(taurtype.can_ride && !riding_datum)
riding_datum = new /datum/riding/taur(src)
verbs |= /mob/living/carbon/human/proc/taur_mount
@@ -46,7 +46,8 @@
"catslug",
"car",
"typeone",
"13"
"13",
"pai-raptor"
)
//These vars keep track of whether you have the related software, used for easily updating the UI
var/soft_ut = FALSE //universal translator
@@ -165,9 +165,8 @@
var/limb_icon_key
var/understands_common = TRUE //VOREStation Edit - Makes it so that simplemobs can understand galcomm without being able to speak it.
var/heal_countdown = 5 //VOREStation Edit - A cooldown ticker for passive healing
var/obj/item/weapon/card/id/mobcard = null //VOREStation Edit
var/list/mobcard_access = list() //VOREStation Edit
var/mobcard_provided = FALSE //VOREStation Edit
var/list/myid_access = list() //VOREStation Edit
var/ID_provided = FALSE //VOREStation Edit
// VOREStation Add: Move/Shoot/Attack delays based on damage
var/damage_fatigue_mult = 0 // Our multiplier for how heavily mobs are affected by injury. [UPDATE THIS IF THE FORMULA CHANGES]: Formula = injury_level = round(rand(1,3) * damage_fatigue_mult * clamp(((rand(2,5) * (h / getMaxHealth())) - rand(0,2)), 1, 5))
var/injury_level = 0 // What our injury level is. Rather than being the flat damage, this is the amount added to various delays to simulate injuries in a manner as lightweight as possible.
@@ -179,9 +178,9 @@
verbs -= /mob/verb/observe
health = maxHealth
if(mobcard_provided) //VOREStation Edit
mobcard = new /obj/item/weapon/card/id(src)
mobcard.access = mobcard_access.Copy()
if(ID_provided) //VOREStation Edit
myid = new /obj/item/weapon/card/id(src)
myid.access = myid_access.Copy()
for(var/L in has_langs)
languages |= GLOB.all_languages[L]
@@ -347,4 +346,4 @@
get_injury_level() // We check how injured we are, then actually update the mob on how hurt we are.
. = ..() // Calling parent here, actually updating our mob on how hurt we are.
// VOREStation Add End
// VOREStation Add End
@@ -44,7 +44,7 @@
friendly = list("hugs")
see_in_dark = 8
mobcard_provided = TRUE
ID_provided = TRUE
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug)
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive/catslug
@@ -426,7 +426,7 @@
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug/custom/engislug)
holder_type = /obj/item/weapon/holder/catslug/custom/engislug
say_list_type = /datum/say_list/catslug/custom/engislug
mobcard_access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_construction, access_atmospherics)
myid_access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_construction, access_atmospherics)
siemens_coefficient = 0 //Noodly fella's gone and built up an immunity from many small shocks
minbodytemp = 200
@@ -543,7 +543,7 @@
"bio" = 0,
"rad" = 0
) //Similarly, \some\ armour values for a smidge more survivability compared to other catslugs.
mobcard_access = list(access_security, access_sec_doors, access_forensics_lockers, access_maint_tunnels)
myid_access = list(access_security, access_sec_doors, access_forensics_lockers, access_maint_tunnels)
/datum/say_list/catslug/custom/gatslug
speak = list("Have any flashbangs?", "Valids!", "Heard spiders?", "What is that?", "Freeze!", "What are you doing?", "How did you get here?", "Red alert means big bangsticks.", "No being naughty now.", "WAOW!", "Who ate all the donuts?")
@@ -580,7 +580,7 @@
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug/custom/medislug)
holder_type = /obj/item/weapon/holder/catslug/custom/medislug
say_list_type = /datum/say_list/catslug/custom/medislug
mobcard_access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
myid_access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
/datum/say_list/catslug/custom/medislug
speak = list("Have any osteodaxon?", "What is that?", "Suit sensors!", "What are you doing?", "How did you get here?", "Put a mask on!", "No smoking!", "WAOW!", "Stop getting blood everywhere!", "WHERE IN MAINT?")
@@ -616,7 +616,7 @@
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug/custom/scienceslug)
holder_type = /obj/item/weapon/holder/catslug/custom/scienceslug
say_list_type = /datum/say_list/catslug/custom/scienceslug
mobcard_access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_xenoarch)
myid_access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_xenoarch)
/datum/say_list/catslug/custom/scienceslug
@@ -654,7 +654,7 @@
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug/custom/cargoslug)
holder_type = /obj/item/weapon/holder/catslug/custom/cargoslug
say_list_type = /datum/say_list/catslug/custom/cargoslug
mobcard_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_mining, access_mining_station)
myid_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_mining, access_mining_station)
/datum/say_list/catslug/custom/cargoslug
speak = list("Disposals is not for slip and slide.", "What is that?", "Stamp those manifests!", "What are you doing?", "How did you get here?", "Can order pizza crate?", "WAOW!", "Where are all of our materials?", "Got glubbs?")
@@ -693,7 +693,7 @@
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug/custom/capslug)
holder_type = /obj/item/weapon/holder/catslug/custom/capslug
say_list_type = /datum/say_list/catslug/custom/capslug
mobcard_access = list(access_maint_tunnels) //The all_station_access part below adds onto this.
myid_access = list(access_maint_tunnels) //The all_station_access part below adds onto this.
/datum/say_list/catslug/custom/capslug
speak = list("How open big glass box with shiny inside?.", "What is that?", "Respect my authority!", "What are you doing?", "How did you get here?", "Fax for yellow-shirts!", "WAOW!", "Why is that console blinking and clicking?", "Do we need to call for ERT?", "Have been called comdom before, not sure why they thought I was a balloon.")
@@ -708,7 +708,7 @@
mob_radio.ks2type = /obj/item/device/encryptionkey/heads/captain //Might not be able to speak, but the catslug can listen.
mob_radio.keyslot2 = new /obj/item/device/encryptionkey/heads/captain(mob_radio)
mob_radio.recalculateChannels(1)
mobcard.access |= get_all_station_access()
myid.access |= get_all_station_access()
//=============================================================================
//Admin-spawn only catslugs below - Expect overpowered things & silliness below
@@ -725,7 +725,7 @@
icon_dead = "deathslug_dead"
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug) //So they don't get the spaceslug's cataloguer entry
say_list_type = /datum/say_list/catslug //Similarly, so they don't get the spaceslug's speech lines.
mobcard_access = list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage)
myid_access = list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage)
maxHealth = 100 //Tough noodles
health = 100
taser_kill = 0
@@ -750,7 +750,7 @@
. = ..()
mob_radio = new /obj/item/device/radio/headset/mob_headset(src)
mob_radio.frequency = DTH_FREQ //Can't tell if bugged, deathsquad freq in general seems broken
mobcard.access |= get_all_station_access()
myid.access |= get_all_station_access()
//Syndicate catslug
/mob/living/simple_mob/vore/alienanimals/catslug/custom/spaceslug/syndislug
@@ -763,7 +763,7 @@
icon_dead = "syndislug_dead"
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug)
say_list_type = /datum/say_list/catslug
mobcard_access = list(access_maint_tunnels, access_syndicate, access_external_airlocks)
myid_access = list(access_maint_tunnels, access_syndicate, access_external_airlocks)
faction = "syndicate"
maxHealth = 100 //Tough noodles
health = 100
@@ -795,7 +795,7 @@
mob_radio.ks2type = /obj/item/device/encryptionkey/syndicate
mob_radio.keyslot2 = new /obj/item/device/encryptionkey/syndicate(mob_radio)
mob_radio.recalculateChannels(1)
mobcard.access |= get_all_station_access()
myid.access |= get_all_station_access()
//ERT catslug
/mob/living/simple_mob/vore/alienanimals/catslug/custom/spaceslug/responseslug
@@ -808,7 +808,7 @@
icon_dead = "responseslug_dead"
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug)
say_list_type = /datum/say_list/catslug
mobcard_access = list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage)
myid_access = list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage)
maxHealth = 100 //Tough noodles
health = 100
taser_kill = 0
@@ -839,7 +839,7 @@
mob_radio.ks2type = /obj/item/device/encryptionkey/ert
mob_radio.keyslot2 = new /obj/item/device/encryptionkey/ert(mob_radio)
mob_radio.recalculateChannels(1)
mobcard.access |= get_all_station_access()
myid.access |= get_all_station_access()
//Pilot Catslug
@@ -616,6 +616,12 @@
var/datum/language/keylang = GLOB.all_languages[client.prefs.language_custom_keys[key]]
if(keylang)
new_character.language_keys[key] = keylang
// VOREStation Add: Preferred Language Setting;
if(client.prefs.preferred_language) // Do we have a preferred language?
var/datum/language/def_lang = GLOB.all_languages[client.prefs.preferred_language]
if(def_lang)
new_character.default_language = def_lang
// VOREStation Add End
// And uncomment this, too.
//new_character.dna.UpdateSE()
@@ -901,4 +901,41 @@
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "unathi_blocky_head_eyes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/manedwolf1
name = "Maned Wolf Primary Markings"
icon_state = "manedwolf1"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD,BP_TORSO,BP_R_ARM,BP_L_ARM,BP_R_HAND,BP_L_HAND,BP_R_LEG,BP_L_LEG,BP_R_FOOT,BP_L_FOOT)
/datum/sprite_accessory/marking/vr/manedwolf2
name = "Maned Wolf Secondary Markings"
icon_state = "manedwolf2"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD,BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/head_paint_front
name = "Head Paint Front"
icon_state = "paintfront"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/head_paint_back
name = "Head Paint"
icon_state = "paint"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/sect_drone
name = "Sect Drone Bodytype"
icon_state = "sectdrone"
color_blend_mode = ICON_MULTIPLY
hide_body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/sect_drone_eyes
name = "Sect Drone Eyes"
icon_state = "sectdrone_eyes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
@@ -12,6 +12,7 @@
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use
var/list/lower_layer_dirs = list(SOUTH)
var/icon_loaf = null
/datum/sprite_accessory/tail/New()
. = ..()
@@ -1328,6 +1329,14 @@
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/sectdrone_tail
name = "Sect Drone Tail (To use with bodytype-marking)"
icon = 'icons/mob/vore/tails_vr.dmi'
icon_state = "sectdrone_tail"
extra_overlay = "sectdrone_tail_mark"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
//LONG TAILS ARE NOT TAUR BUTTS >:O
/datum/sprite_accessory/tail/longtail
name = "You should not see this..."
@@ -56,11 +56,15 @@
under_sprites = 'icons/mob/taursuits_wolf_vr.dmi'
suit_sprites = 'icons/mob/taursuits_wolf_vr.dmi'
icon_sprite_tag = "wolf"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 4
/datum/sprite_accessory/tail/taur/wolf/fatwolf
name = "Fat Wolf (Taur)"
icon_state = "fatwolf_s"
//icon_sprite_tag = "wolf" //This could be modified later.
loaf_offset = 3
/datum/sprite_accessory/tail/taur/wolf/wolf_wag
name = "Wolf (Taur, Fat vwag)"
@@ -76,19 +80,22 @@
/datum/sprite_accessory/tail/taur/wolf/fatwolf_2c
name = "Fat Wolf 3-color (Taur)"
icon = 'icons/mob/vore/taurs_ch.dmi' //CHOMPEdit
icon_state = "fatwolf_s"
extra_overlay = "fatwolf_markings"
extra_overlay2 = "wolf_markings_2"
extra_overlay2 = "fatwolf_markings_2" //CHOMPEdit
//icon_sprite_tag = "fatwolf2c"
loaf_offset = 3
/datum/sprite_accessory/tail/taur/wolf/wolf_2c_wag
name = "Wolf 3-color (Taur, Fat vwag)"
icon = 'icons/mob/vore/taurs_ch.dmi' //CHOMPEdit
icon_state = "wolf_s"
extra_overlay = "wolf_markings"
extra_overlay2 = "wolf_markings_2"
ani_state = "fatwolf_s"
extra_overlay_w = "fatwolf_markings"
extra_overlay2_w = "wolf_markings_2"
extra_overlay2_w = "fatwolf_markings_2" //CHOMPEdit
/datum/sprite_accessory/tail/taur/wolf/synthwolf
name = "SynthWolf dual-color (Taur)"
@@ -96,12 +103,14 @@
extra_overlay = "synthwolf_markings"
extra_overlay2 = "synthwolf_glow"
//icon_sprite_tag = "synthwolf"
loaf_offset = 3
/datum/sprite_accessory/tail/taur/wolf/fatsynthwolf
name = "Fat SynthWolf dual-color (Taur)"
icon_state = "fatsynthwolf_s"
extra_overlay = "fatsynthwolf_markings"
extra_overlay2 = "fatsynthwolf_glow"
loaf_offset = 3
/datum/sprite_accessory/tail/taur/wolf/fatsynthwolf_wag
name = "SynthWolf dual-color (Taur, Fat vwag)"
@@ -118,6 +127,9 @@
extra_overlay = "skunk_markings"
extra_overlay2 = "skunk_markings_2"
icon_sprite_tag = "skunk"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 3
/datum/sprite_accessory/tail/taur/naga
name = "Naga (Taur)"
@@ -192,6 +204,9 @@
under_sprites = 'icons/mob/taursuits_horse_vr.dmi'
suit_sprites = 'icons/mob/taursuits_horse_vr.dmi'
icon_sprite_tag = "horse"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 4
msg_owner_disarm_run = "You quickly push %prey to the ground with your hoof!"
msg_prey_disarm_run = "%owner pushes you down to the ground with their hoof!"
@@ -214,12 +229,18 @@
extra_overlay = "synthhorse_markings"
extra_overlay2 = "synthhorse_glow"
//icon_sprite_tag = "synthhorse"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 3
/datum/sprite_accessory/tail/taur/cow
name = "Cow (Taur)"
icon_state = "cow_s"
suit_sprites = 'icons/mob/taursuits_cow_vr.dmi'
icon_sprite_tag = "cow"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 3
msg_owner_disarm_run = "You quickly push %prey to the ground with your hoof!"
msg_prey_disarm_run = "%owner pushes you down to the ground with their hoof!"
@@ -242,6 +263,9 @@
extra_overlay = "deer_markings"
suit_sprites = 'icons/mob/taursuits_deer_vr.dmi'
icon_sprite_tag = "deer"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 6
msg_owner_disarm_run = "You quickly push %prey to the ground with your hoof!"
msg_prey_disarm_run = "%owner pushes you down to the ground with their hoof!"
@@ -261,12 +285,19 @@
/datum/sprite_accessory/tail/taur/lizard
name = "Lizard (Taur)"
icon_state = "lizard_s"
suit_sprites = 'icons/mob/taursuits_lizard_vr.dmi'
// suit_sprites = 'icons/mob/taursuits_lizard_vr.dmi' ///Chomp edit
suit_sprites = 'icons/mob/taursuits_lizard_ch.dmi'
icon_sprite_tag = "lizard"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 5
/datum/sprite_accessory/tail/taur/lizard/fatlizard
name = "Fat Lizard (Taur)"
icon_state = "fatlizard_s"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 3
/datum/sprite_accessory/tail/taur/lizard/lizard_wag
name = "Lizard (Taur, Fat vwag)"
@@ -278,11 +309,17 @@
icon_state = "lizard_s"
extra_overlay = "lizard_markings"
//icon_sprite_tag = "lizard2c"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 5
/datum/sprite_accessory/tail/taur/lizard/fatlizard_2c
name = "Fat Lizard (Taur, dual-color)"
icon_state = "fatlizard_s"
extra_overlay = "fatlizard_markings"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 3
/datum/sprite_accessory/tail/taur/lizard/lizard_2c_wag
name = "Fat Lizard (Taur, dual-color, Fat vwag)"
@@ -297,12 +334,18 @@
extra_overlay = "synthlizard_markings"
extra_overlay2 = "synthlizard_glow"
//icon_sprite_tag = "synthlizard"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 3
/datum/sprite_accessory/tail/taur/lizard/fatsynthlizard
name = "Fat SynthLizard dual-color (Taur)"
icon_state = "fatsynthlizard_s"
extra_overlay = "fatsynthlizard_markings"
extra_overlay2 = "fatsynthlizard_glow"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 3
/datum/sprite_accessory/tail/taur/lizard/synthlizard_wag
name = "SynthLizard dual-color (Taur, Fat vwag)"
@@ -366,16 +409,25 @@
icon_state = "feline_s"
suit_sprites = 'icons/mob/taursuits_feline_vr.dmi'
icon_sprite_tag = "feline"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 5
/datum/sprite_accessory/tail/taur/fatfeline
name = "Fat Feline (Taur)"
icon_state = "fatfeline_s"
//icon_sprite_tag = "fatfeline"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 3
/datum/sprite_accessory/tail/taur/fatfeline_wag
name = "Fat Feline (Taur, Fat vwag)"
icon_state = "fatfeline_s"
ani_state = "fatfeline_w"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 3
/datum/sprite_accessory/tail/taur/feline/feline_2c
name = "Feline 3-color (Taur)"
@@ -383,22 +435,30 @@
extra_overlay = "feline_markings"
extra_overlay2 = "feline_markings_2"
//icon_sprite_tag = "feline2c"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
/datum/sprite_accessory/tail/taur/feline/fatfeline_2c
name = "Fat Feline 3-color (Taur)"
icon = 'icons/mob/vore/taurs_ch.dmi' //CHOMPEdit
icon_state = "fatfeline_s"
extra_overlay = "fatfeline_markings"
extra_overlay2 = "feline_markings_2"
extra_overlay2 = "fatfeline_markings_2" //CHOMPEdit
//icon_sprite_tag = "fatfeline2c"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 3
/datum/sprite_accessory/tail/taur/feline/feline_2c_wag
name = "Feline 3-color (Taur, Fat vwag)"
icon = 'icons/mob/vore/taurs_ch.dmi' //CHOMPEdit
icon_state = "feline_s"
extra_overlay = "feline_markings"
extra_overlay2 = "feline_markings_2"
ani_state = "fatfeline_s"
extra_overlay_w = "fatfeline_markings"
extra_overlay2_w = "feline_markings_2"
extra_overlay2_w = "fatfeline_markings_2" //CHOMPEdit
loaf_offset = 3
/datum/sprite_accessory/tail/taur/feline/synthfeline
name = "SynthFeline dual-color (Taur)"
@@ -406,12 +466,18 @@
extra_overlay = "synthfeline_markings"
extra_overlay2 = "synthfeline_glow"
//icon_sprite_tag = "synthfeline"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 3
/datum/sprite_accessory/tail/taur/feline/fatsynthfeline
name = "Fat SynthFeline dual-color (Taur)"
icon_state = "fatsynthfeline_s"
extra_overlay = "fatsynthfeline_markings"
extra_overlay2 = "fatsynthfeline_glow"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 3
/datum/sprite_accessory/tail/taur/feline/synthfeline_wag
name = "SynthFeline dual-color (Taur, Fat vwag)"
@@ -491,16 +557,20 @@
name = "Drake (Taur)"
icon_state = "drake_s"
extra_overlay = "drake_markings"
suit_sprites = 'icons/mob/taursuits_drake_vr.dmi'
/// suit_sprites = 'icons/mob/taursuits_drake_vr.dmi' ///Chomp edit
suit_sprites = 'icons/mob/taursuits_drake_ch.dmi'
icon_sprite_tag = "drake"
can_loaf = TRUE // VOREStation Edit: Taur Loafing
loaf_offset = 6 // VOREStation Edit: Taur Loafing
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 6
/datum/sprite_accessory/tail/taur/drake/fat
name = "Fat Drake (Taur)"
icon_state = "fatdrake_s"
extra_overlay = "fatdrake_markings"
can_loaf = FALSE
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 6
/datum/sprite_accessory/tail/taur/drake/drake_vwag
name = "Drake (Taur, Fat vwag)"
@@ -508,8 +578,7 @@
extra_overlay = "drake_markings"
ani_state = "fatdrake_s"
extra_overlay_w = "fatdrake_markings"
can_loaf = FALSE
can_loaf = TRUE
/datum/sprite_accessory/tail/taur/otie
name = "Otie (Taur)"
@@ -518,6 +587,9 @@
extra_overlay2 = "otie_markings_2"
suit_sprites = 'icons/mob/taursuits_otie_vr.dmi'
icon_sprite_tag = "otie"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi'
loaf_offset = 5
/datum/sprite_accessory/tail/taur/alraune/alraune_2c
name = "Alraune (dual color)"
@@ -624,12 +696,14 @@
name = "Feline (wickedtemp) (Taur)"
icon_state = "tempest_s"
ckeys_allowed = list("wickedtemp")
can_loaf = FALSE
//silencedmp5a5: Serdykov Antoz
/datum/sprite_accessory/tail/taur/wolf/serdy
name = "CyberSerdy (silencedmp5a5) (Taur)"
icon_state = "serdy_s"
ckeys_allowed = list("silencedmp5a5")
can_loaf = FALSE
//liquidfirefly: Ariana Scol
/datum/sprite_accessory/tail/taur/centipede
@@ -700,7 +774,7 @@
suit_sprites = 'icons/mob/taursuits_noodle_vr.dmi'
clip_mask_state = "taur_clip_mask_noodle"
icon_sprite_tag = "noodle"
/* CHOMPEdit - removed as a sprite accessory of the same name already exists for us, and having this here stops it from registering as a sprite accessory.
/datum/sprite_accessory/tail/taur/sect_drone
name = "Sect Drone (Taur)"
icon_state = "sect_drone"
@@ -721,11 +795,12 @@
msg_owner_grab_fail = "You step down onto %prey, squishing them and forcing them down to the ground!"
msg_prey_grab_fail = "%owner steps down and squishes you with their leg, forcing you down to the ground!"
*/
/datum/sprite_accessory/tail/taur/sect_drone/fat
name = "Fat Sect Drone (Taur)"
icon_state = "fat_sect_drone"
extra_overlay = "fat_sect_drone_markings"
icon_sprite_tag = "sect_drone" //CHOMPEdit addition
/datum/sprite_accessory/tail/taur/sect_drone/drone_wag
name = "Sect Drone (Taur, Fat vwag)"
@@ -733,6 +808,7 @@
extra_overlay = "sect_drone_markings"
ani_state = "fat_sect_drone"
extra_overlay_w = "fat_sect_drone_markings"
icon_sprite_tag = "sect_drone" //CHOMPEdit addition
/datum/sprite_accessory/tail/taur/giantspider_colorable//these are honestly better fit for vass icontypes whoops
name = "Giant Spider dual-color (Taur)"
@@ -311,3 +311,11 @@
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "snail_shell_markings"
/datum/sprite_accessory/wing/sectdrone_wing //We should some day make a variable to make some wings not be able to fly
name = "Sect drone wings (To use with bodytype marking)"
desc = ""
icon = 'icons/mob/vore/wings_vr.dmi'
icon_state = "sectdrone_wing"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
+28 -2
View File
@@ -16,6 +16,11 @@
var/real_desc
/// Icon_state prior to being scanned if !known
var/unknown_state = "field"
//Set to null. Exists only for admins/GMs when spawning overmap objects.
//We need these as normal functionality relies on initial() which do not work at all with GM shenanigans.
var/real_icon //Holds the .dmi file for icon_state to pick from. Leave null if using standard overmap.dmi
var/real_icon_state //actual icon name to be used. Find examples inside 'icons/obj/overmap.dmi'
var/real_color
var/list/map_z = list()
var/list/extra_z_levels //if you need to manually insist that these z-levels are part of this sector, for things like edge-of-map step trigger transitions rather than multi-z complexes
@@ -84,6 +89,19 @@
//at the moment only used for the OM location renamer. Initializing here in case we want shuttles incl as well in future. Also proc definition convenience.
visitable_overmap_object_instances |= src
//To be used by GMs and calling through var edits for the overmap object
//It causes the overmap object to "reinitialize" its real_appearance for known = FALSE objects
//Includes an argument that allows GMs/Admins to set a previously known sector to unknown. Set to any value except 0/False/Null to activate
/obj/effect/overmap/visitable/proc/gmtools_update_omobject_vars(var/setToHidden)
real_appearance = image(real_icon, src, real_icon_state)
real_appearance.override = TRUE
if(setToHidden && known) //
name = unknown_name
icon = 'icons/obj/overmap.dmi'
icon_state = unknown_state
color = null
desc = "Scan this to find out more information."
known = FALSE
// You generally shouldn't destroy these.
@@ -141,8 +159,16 @@
name = real_name
else
name = initial(name)
icon_state = initial(icon_state)
color = initial(color)
if(real_icon_state) //Only true when GMs/Admins play with the object
if(real_icon) //Only true if GMs/Admins want a non-standard icon from outside 'icons/obj/overmap.dmi'
icon = real_icon
icon_state = real_icon_state
else
icon_state = initial(icon_state)
if(real_color)
color = real_color
else
color = initial(color)
if(real_desc)
desc = real_desc
else
@@ -9,7 +9,10 @@
density = FALSE
unacidable = TRUE
use_power = USE_POWER_OFF
light_range = 4
light_on = TRUE
light_range = 2
light_power = 0.5
light_color = "#5BA8FF"
var/obj/machinery/field_generator/FG1 = null
var/obj/machinery/field_generator/FG2 = null
var/list/shockdirs
@@ -36,6 +36,10 @@ field_generator power level display
var/gen_power_draw = 5500 //power needed per generator
var/field_power_draw = 2000 //power needed per field object
var/light_range_on = 3
var/light_power_on = 1
light_color = "#5BA8FF"
/obj/machinery/field_generator/update_icon()
cut_overlays()
@@ -177,6 +181,7 @@ field_generator power level display
active = 0
spawn(1)
src.cleanup()
set_light(0)
update_icon()
/obj/machinery/field_generator/proc/turn_on()
@@ -189,6 +194,7 @@ field_generator power level display
update_icon()
if(warming_up >= 3)
start_fields()
set_light(light_range_on, light_power_on)
update_icon()
+6
View File
@@ -172,6 +172,12 @@
var/datum/language/keylang = GLOB.all_languages[ghost_client.prefs.language_custom_keys[key]]
if(keylang)
new_character.language_keys[key] = keylang
// VOREStation Add: Preferred Language Setting;
if(ghost_client.prefs.preferred_language) // Do we have a preferred language?
var/datum/language/def_lang = GLOB.all_languages[ghost_client.prefs.preferred_language]
if(def_lang)
new_character.default_language = def_lang
// VOREStation Add End
//If desired, apply equipment.
if(equip_body)
+1 -1
View File
@@ -69,7 +69,7 @@ var/list/ventcrawl_machinery = list(
return 1
if(isanimal(src))
var/mob/living/simple_mob/S = src
if(carried_item == S.mobcard) //VOREStation Edit
if(carried_item == S.myid) //VOREStation Edit
return 1 //VOREStation Edit
//Try to find it in our allowed list (istype includes subtypes)
var/listed = FALSE
+7 -1
View File
@@ -166,6 +166,12 @@ Please do not abuse this ability.
var/datum/language/keylang = GLOB.all_languages[prey.prefs.language_custom_keys[key]]
if(keylang)
new_character.language_keys[key] = keylang
// VOREStation Add: Preferred Language Setting;
if(prey.prefs.preferred_language) // Do we have a preferred language?
var/datum/language/def_lang = GLOB.all_languages[prey.prefs.preferred_language]
if(def_lang)
new_character.default_language = def_lang
// VOREStation Add End
new_character.regenerate_icons()
@@ -179,4 +185,4 @@ Please do not abuse this ability.
log_admin("[prey] (as [new_character.real_name] has spawned inside one of [pred]'s bellies.") // Log it. Avoid abuse.
message_admins("[prey] (as [new_character.real_name] has spawned inside one of [pred]'s bellies.", 1)
return new_character // incase its ever needed
return new_character // incase its ever needed
@@ -1570,3 +1570,12 @@
/obj/item/weapon/dice/loaded/ceph/New()
icon_state = "ceph_d6[rand(1,sides)]"
//abc123: Mira Nesyne
/obj/item/clothing/accessory/medal/silver/fluff/abc314
name = "Health Service Achievement medal"
desc = "A small silver medal with the inscription \"For going above and beyond in the field.\" on it, along with the name Mira Nesyne."
icon = 'icons/inventory/accessory/item.dmi'
icon_state = "silver"
+2
View File
@@ -43,8 +43,10 @@ exgame - Vox
falloutdog3 - Black-Eyed Shadekin
flaktual - Vox
flurriee - Protean
foxglovepurpur - Diona
funnyman2003 - Xenochimera
fuzlet - Protean
grallstonefist - Black-Eyed Shadekin
greennyy - Protean
h0lysquirr3l - Protean
hawkerthegreat - Vox
Binary file not shown.

Before

Width:  |  Height:  |  Size: 800 KiB

After

Width:  |  Height:  |  Size: 857 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 763 KiB

After

Width:  |  Height:  |  Size: 792 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 654 KiB

After

Width:  |  Height:  |  Size: 680 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 391 KiB

After

Width:  |  Height:  |  Size: 387 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

After

Width:  |  Height:  |  Size: 181 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 49 KiB

+444 -364
View File
File diff suppressed because it is too large Load Diff
+16 -23
View File
@@ -906,13 +906,6 @@
outdoors = 0
},
/area/groundbase/level3/escapepad)
"oF" = (
/turf/unsimulated/wall/planetary/normal{
desc = "It's quite impassable";
icon_state = "rock-dark";
name = "impassable rock"
},
/area/groundbase/level3/sw)
"oI" = (
/obj/machinery/light{
dir = 1
@@ -3526,7 +3519,7 @@ Bg
Bg
Bg
Bg
oF
Bg
zh
hO
"}
@@ -14061,11 +14054,11 @@ IS
IS
IS
IS
IS
IS
IS
IS
IS
vs
vs
vs
sP
sP
oK
iT
iT
@@ -14203,11 +14196,11 @@ IS
IS
IS
IS
IS
IS
IS
IS
IS
vs
vs
vs
sP
sP
oK
iT
iT
@@ -14345,11 +14338,11 @@ IS
IS
IS
IS
IS
IS
IS
IS
IS
vs
vs
vs
sP
sP
oK
Px
xs
+3
View File
@@ -337,6 +337,9 @@
/area/groundbase/cargo/office
name = "Cargo Office"
lightswitch = 1
/area/groundbase/cargo/storage
name = "Cargo Storage"
lightswitch = 0
/area/groundbase/cargo/bay
name = "Cargo Bay"
lightswitch = 1
Binary file not shown.
+2 -1
View File
@@ -1414,6 +1414,7 @@
#include "code\game\objects\items\weapons\melee\energy_vr.dm"
#include "code\game\objects\items\weapons\melee\misc.dm"
#include "code\game\objects\items\weapons\melee\misc_vr.dm"
#include "code\game\objects\items\weapons\melee\shock_maul.dm"
#include "code\game\objects\items\weapons\storage\backpack.dm"
#include "code\game\objects\items\weapons\storage\backpack_vr.dm"
#include "code\game\objects\items\weapons\storage\bags.dm"
@@ -4201,13 +4202,13 @@
#include "maps\expedition_vr\beach\submaps\mountains.dm"
#include "maps\expedition_vr\beach\submaps\mountains_areas.dm"
#include "maps\gateway_archive_vr\blackmarketpackers.dm"
#include "maps\groundbase\groundbase.dm"
#include "maps\southern_cross\items\clothing\sc_accessory.dm"
#include "maps\southern_cross\items\clothing\sc_suit.dm"
#include "maps\southern_cross\items\clothing\sc_under.dm"
#include "maps\southern_cross\loadout\loadout_suit.dm"
#include "maps\southern_cross\loadout\loadout_uniform.dm"
#include "maps\southern_cross\loadout\loadout_vr.dm"
#include "maps\stellar_delight\stellar_delight.dm"
#include "maps\submaps\_helpers.dm"
#include "maps\submaps\_readme.dm"
#include "maps\submaps\engine_submaps\engine.dm"