Merge branch 'master' into shep-dev-simplemob-injury
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
|
Before Width: | Height: | Size: 800 KiB After Width: | Height: | Size: 857 KiB |
|
Before Width: | Height: | Size: 763 KiB After Width: | Height: | Size: 792 KiB |
|
Before Width: | Height: | Size: 654 KiB After Width: | Height: | Size: 680 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 150 KiB After Width: | Height: | Size: 154 KiB |
|
Before Width: | Height: | Size: 134 KiB After Width: | Height: | Size: 135 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 391 KiB After Width: | Height: | Size: 387 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 177 KiB After Width: | Height: | Size: 181 KiB |
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 134 KiB After Width: | Height: | Size: 160 KiB |
|
Before Width: | Height: | Size: 159 KiB After Width: | Height: | Size: 159 KiB |
|
After Width: | Height: | Size: 124 KiB |
|
After Width: | Height: | Size: 733 B |
|
After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 49 KiB |
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||