mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-31 09:09:49 +01:00
Merge branch 'master' into protean-rework
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
/obj/machinery/cash_register/medical
|
||||
req_access = list()
|
||||
req_one_access = list(access_medical,access_heads)
|
||||
|
||||
/obj/machinery/cash_register/engineering
|
||||
req_access = list()
|
||||
req_one_access = list(access_engine_equip,access_heads)
|
||||
|
||||
/obj/machinery/cash_register/science
|
||||
req_access = list()
|
||||
req_one_access = list(access_tox,access_heads)
|
||||
|
||||
/obj/machinery/cash_register/security
|
||||
req_access = list()
|
||||
req_one_access = list(access_brig,access_heads)
|
||||
|
||||
/obj/machinery/cash_register/cargo
|
||||
req_access = list()
|
||||
req_one_access = list(access_cargo,access_heads)
|
||||
|
||||
/obj/machinery/cash_register/civilian
|
||||
req_access = list()
|
||||
req_one_access = list(access_kitchen,access_bar,access_hydroponics,access_heads)
|
||||
@@ -13,3 +13,6 @@
|
||||
var/hide_glasses = FALSE
|
||||
var/speech_sound_enabled = TRUE
|
||||
var/nutrition_hidden = FALSE
|
||||
|
||||
/mob/living/carbon/human/ai_controlled
|
||||
low_priority = TRUE
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/datum/species/vox
|
||||
icobase = 'icons/mob/human_races/r_vox_ch.dmi'
|
||||
tail = "voxtail"
|
||||
tail_animation = 'icons/mob/species/vox/tail.dmi'
|
||||
speech_chance = 50 // As long as we're making the option to disable it, might as well bump up the chances when it is enabled
|
||||
inherent_verbs = list(
|
||||
/mob/living/carbon/human/proc/toggle_speech_sounds
|
||||
|
||||
+3
-3
@@ -28,7 +28,8 @@
|
||||
if(!istype(refactory))
|
||||
to_chat(caller,"<span class='warning'>You don't have a working refactory module!</span>")
|
||||
return
|
||||
var/choice = tgui_input_list(caller,"Pick the bodypart to change:", "Refactor - One Bodypart", species.has_limbs)
|
||||
|
||||
var/choice = tgui_input_list(src,"Pick the bodypart to change:", "Refactor - One Bodypart", species.has_limbs)
|
||||
if(!choice)
|
||||
return
|
||||
|
||||
@@ -69,7 +70,7 @@
|
||||
var/datum/robolimb/M = chargen_robolimbs[company]
|
||||
if(!(choice in M.parts))
|
||||
continue
|
||||
if(impersonate_bodytype in M.species_cannot_use)
|
||||
if(species?.base_species in M.species_cannot_use)
|
||||
continue
|
||||
if(M.whitelisted_to && !(ckey in M.whitelisted_to))
|
||||
continue
|
||||
@@ -238,7 +239,6 @@
|
||||
|
||||
var/new_species = tgui_input_list(usr, "Please select a species to emulate.", "Shapeshifter Body", GLOB.playable_species)
|
||||
if(new_species)
|
||||
impersonate_bodytype = new_species
|
||||
species?.base_species = new_species // Really though you better have a species
|
||||
regenerate_icons() //Expensive, but we need to recrunch all the icons we're wearing
|
||||
|
||||
|
||||
+9
-3
@@ -10,6 +10,9 @@
|
||||
knockout_message = "collapses inwards, forming a disordered puddle of gray goo."
|
||||
remains_type = /obj/effect/decal/cleanable/ash
|
||||
|
||||
selects_bodytype = SELECTS_BODYTYPE_SHAPESHIFTER
|
||||
base_species = SPECIES_HUMAN
|
||||
|
||||
blood_color = "#505050" //This is the same as the 80,80,80 below, but in hex
|
||||
flesh_color = "#505050"
|
||||
base_color = "#FFFFFF" //Color mult, start out with this
|
||||
@@ -134,9 +137,12 @@
|
||||
saved_nif.quick_implant(H)
|
||||
|
||||
/datum/species/protean/get_bodytype(var/mob/living/carbon/human/H)
|
||||
if(H)
|
||||
return H.impersonate_bodytype || ..()
|
||||
return ..()
|
||||
if(!H || base_species == name) return ..()
|
||||
var/datum/species/S = GLOB.all_species[base_species]
|
||||
return S.get_bodytype(H)
|
||||
|
||||
/datum/species/protean/get_valid_shapeshifter_forms(var/mob/living/carbon/human/H)
|
||||
return GLOB.playable_species
|
||||
|
||||
/datum/species/protean/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
..()
|
||||
|
||||
@@ -44,6 +44,9 @@
|
||||
/datum/species/custom
|
||||
digi_allowed = TRUE
|
||||
|
||||
/datum/species/shapeshifter/promethean
|
||||
digi_allowed = TRUE
|
||||
|
||||
/datum/species/unathi
|
||||
digi_allowed = TRUE
|
||||
vore_belly_default_variant = "L"
|
||||
@@ -72,3 +75,6 @@
|
||||
/datum/species/xenochimera
|
||||
digi_allowed = TRUE
|
||||
|
||||
/datum/species/protean
|
||||
digi_allowed = TRUE
|
||||
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
|
||||
var/mob/living/carbon/human/DraggedH = src
|
||||
|
||||
//make sure src (the dragged) is a teshari
|
||||
if(DraggedH.species.name == SPECIES_TESHARI)
|
||||
//make sure src (the dragged) is a teshari (or shaped like one)
|
||||
if(DraggedH.species.get_bodytype() == SPECIES_TESHARI)
|
||||
var/mob/living/M = over_object
|
||||
// only perform the grab if; grabber and grabbed adjacent, caller is grabbed OR grabber, and the grabbed's grab preference is true.
|
||||
if(holder_type && istype(M) && Adjacent(M) && (usr == M || usr == DraggedH) && DraggedH != M && !M.incapacitated() && DraggedH.pickup_pref && (M != usr || (M == usr && M.pickup_active)) && (DraggedH.a_intent == I_HELP && M.a_intent == I_HELP)) //VOREStation Edit
|
||||
@@ -23,7 +23,7 @@
|
||||
/obj/structure/plasticflaps/CanPass(atom/A, turf/T)
|
||||
var/mob/living/carbon/human/H = A
|
||||
if(istype(H))
|
||||
if(H.species.name == SPECIES_TESHARI)
|
||||
if(H.species.get_bodytype() == SPECIES_TESHARI)
|
||||
return 1
|
||||
|
||||
return ..()
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
for(var/f in list(BP_L_FOOT, BP_R_FOOT))
|
||||
var/obj/item/organ/external/foot/foot = get_organ(f)
|
||||
if(istype(foot) && foot.is_hidden_by_tail()) //If either foot is hidden by the tail, don't render footwear.
|
||||
if(istype(foot) && foot.is_hidden_by_sprite_accessory()) //If either foot is hidden by the tail, don't render footwear.
|
||||
return
|
||||
|
||||
var/obj/item/clothing/shoes/shoe = shoes
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/fireball //Teleporting Cultists, now with fireballs
|
||||
name = "Burning Mage"
|
||||
desc = "An indiuval wrapped up in red robes, with orange highlights, their paws glowing.."
|
||||
icon_state = "fire-fluff"
|
||||
icon_living = "fire-fluff"
|
||||
special_attack_min_range = 4
|
||||
special_attack_max_range = 7
|
||||
special_attack_cooldown = 10 SECONDS
|
||||
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 10
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/ranged
|
||||
projectiletype = /obj/item/projectile/energy/fireball
|
||||
|
||||
/mob/living/simple_mob/humanoid/cultist/noodle
|
||||
name = "Converted"
|
||||
desc = "An indiuval wrapped up in a makeshift rig, made from fallen cultist."
|
||||
icon_state = "cobra-cultist"
|
||||
icon_living = "cobra-cultist"
|
||||
maxHealth = 150
|
||||
health = 150
|
||||
|
||||
faction = "cult"
|
||||
|
||||
status_flags = 0
|
||||
|
||||
response_help = "pokes"
|
||||
response_disarm = "shoves"
|
||||
response_harm = "hits"
|
||||
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 25
|
||||
attack_sharp = 1
|
||||
attack_edge = 1
|
||||
attacktext = list("slashed", "stabbed")
|
||||
armor = list(melee = 60, bullet = 40, laser = 60, energy = 80, bomb = 25, bio = 100, rad = 100)
|
||||
attack_sound = 'sound/weapons/rapidslice.ogg'
|
||||
movement_cooldown = 4
|
||||
projectiletype = /obj/item/projectile/energy/plasma/vepr
|
||||
projectilesound = 'sound/weapons/spiderlunge.ogg'
|
||||
movement_cooldown = 2
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/ranged
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
/mob/living/simple_mob/construct/juggernaut/behemoth/unstoppable
|
||||
name = "Behemoth"
|
||||
real_name = "Behemoth"
|
||||
desc = "The pinnacle of occult technology, Behemoths are nothing shy of both an Immovable Object, and Unstoppable Force."
|
||||
melee_damage_lower = 45
|
||||
melee_damage_upper = 55
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
|
||||
projectiletype = /obj/item/projectile/icicle
|
||||
|
||||
|
||||
/mob/living/simple_mob/construct/juggernaut/behemoth/unstoppable/bullet_act(var/obj/item/projectile/P)
|
||||
var/reflectchance = 20 - round(P.damage/3)
|
||||
if(prob(reflectchance))
|
||||
visible_message("<span class='danger'>The [P.name] gets reflected by [src]'s shell!</span>", \
|
||||
"<span class='userdanger'>The [P.name] gets reflected by [src]'s shell!</span>")
|
||||
|
||||
// Find a turf near or on the original location to bounce to
|
||||
if(P.starting)
|
||||
var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
|
||||
var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
|
||||
var/turf/curloc = get_turf(src)
|
||||
|
||||
// redirect the projectile
|
||||
P.redirect(new_x, new_y, curloc, src)
|
||||
P.reflected = 1
|
||||
|
||||
return -1 // complete projectile permutation
|
||||
|
||||
return (..(P))
|
||||
@@ -15,10 +15,11 @@
|
||||
vore_icon_bellies = list("stomach", "neck1", "neck2", "neck3", "neck4")
|
||||
vore_icons = 0
|
||||
vore_pounce_chance = 100
|
||||
vore_pounce_maxhealth = 125
|
||||
vore_pounce_maxhealth = 200
|
||||
has_hands = TRUE
|
||||
adminbus_trash = TRUE //You know what, sure whatever. It's not like anyone's gonna be taking this bird on unga trips to be their gamer backpack, which kinda was the main reason for the trash eater restrictions in the first place anyway.
|
||||
faction = "neutral"
|
||||
say_list_type = /datum/say_list/swoopie
|
||||
|
||||
/mob/living/simple_mob/vore/aggressive/corrupthound/swoopie/init_vore()
|
||||
if(!voremob_loaded)
|
||||
@@ -121,6 +122,21 @@
|
||||
for(var/obj/O in T)
|
||||
if(O.clean_blood())
|
||||
adjust_nutrition(1)
|
||||
if(has_AI())
|
||||
if(is_type_in_list(O, edible_trash) && !O.anchored)
|
||||
put_in_active_hand(O)
|
||||
break
|
||||
if(has_AI())
|
||||
var/obj/item/I = get_active_hand()
|
||||
if(istype(I))
|
||||
if(!voremob_loaded)
|
||||
voremob_loaded = TRUE
|
||||
init_vore()
|
||||
eat_trash()
|
||||
drop_item()
|
||||
for(var/mob/living/simple_mob/animal/passive/mouse/M in T)
|
||||
perform_the_nom(src,M,src,src.vore_selected,1)
|
||||
break
|
||||
if(istype(T, /turf/simulated))
|
||||
var/turf/simulated/S = T
|
||||
if(T.clean_blood())
|
||||
@@ -128,3 +144,10 @@
|
||||
if(S.dirt > 50)
|
||||
S.dirt = 0
|
||||
adjust_nutrition(1)
|
||||
|
||||
/datum/say_list/swoopie
|
||||
speak = list("Scanning for debris...", "Scanning for dirt...", "Scanning for pests...", "Squawk!")
|
||||
emote_hear = list("squawks!", "whirrs idly.", "revs up its vacuum.")
|
||||
emote_see = list("twitches.", "sways.", "stretches its neck.", "stomps idly.")
|
||||
say_maybe_target = list("Pest detected?")
|
||||
say_got_target = list("PEST DETECTED!")
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
/datum/sprite_accessory/marking
|
||||
var/hide_body_parts = list()
|
||||
|
||||
/datum/sprite_accessory/marking/ch/anthrovirus_ra
|
||||
name = "Anthro Virus (Right Arm)"
|
||||
icon_state = "anthrovirus"
|
||||
@@ -181,4 +178,4 @@
|
||||
name = "Normal Eyes"
|
||||
icon_state = "normeyes"
|
||||
body_parts = list(BP_HEAD)
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
|
||||
@@ -5,6 +5,103 @@
|
||||
/datum/sprite_accessory/tail/taur/wolf
|
||||
vore_tail_sprite_variant = "N"
|
||||
|
||||
/datum/sprite_accessory/tail/taur/ch
|
||||
icon = 'icons/mob/vore/taurs_ch.dmi'//Parent which allows us to not need to set icon every time.
|
||||
|
||||
/datum/sprite_accessory/tail/taur/ch/zorgoia
|
||||
name = "Zorgoia (Taur)"
|
||||
icon_state = "zorgoia"
|
||||
extra_overlay = "zorgoia_fluff"
|
||||
|
||||
/datum/sprite_accessory/tail/taur/ch/zorgoia/fat
|
||||
name = "Zorgoia (Fat Taur)"
|
||||
extra_overlay = "zorgoia_fat"
|
||||
|
||||
/datum/sprite_accessory/tail/taur/ch/redpanda
|
||||
name = "Red Panda (Taur)"
|
||||
icon_state = "redpanda"
|
||||
|
||||
/datum/sprite_accessory/tail/taur/ch/redpandadc
|
||||
name = "Red Panda (Taur dual-color)"
|
||||
icon_state = "redpanda_dc"
|
||||
extra_overlay = "redpanda_dc_markings"
|
||||
|
||||
/datum/sprite_accessory/tail/taur/ch/wolf/fatwolf_2c/fatwolfalt
|
||||
name = "Fat Wolf 3-color-alt (Taur)"
|
||||
icon_state = "fatwolfalt_s"
|
||||
extra_overlay = "fatwolfalt_markings1"
|
||||
extra_overlay2 = "fatwolfalt_markings2"
|
||||
icon_sprite_tag = "wolf"
|
||||
|
||||
/datum/sprite_accessory/tail/taur/ch/naga/alt
|
||||
name = "Naga alt (Taur)"
|
||||
icon_state = "naga_alt_s"
|
||||
suit_sprites = 'modular_chomp/icons/mob/taursuits_naga_ch.dmi'
|
||||
|
||||
msg_owner_help_walk = "You carefully slither around %prey."
|
||||
msg_prey_help_walk = "%owner's huge tail slithers past beside you!"
|
||||
|
||||
msg_owner_help_run = "You carefully slither around %prey."
|
||||
msg_prey_help_run = "%owner's huge tail slithers past beside you!"
|
||||
|
||||
msg_owner_disarm_run = "Your tail slides over %prey, pushing them down to the ground!"
|
||||
msg_prey_disarm_run = "%owner's tail slides over you, forcing you down to the ground!"
|
||||
|
||||
msg_owner_disarm_walk = "You push down on %prey with your tail, pinning them down under you!"
|
||||
msg_prey_disarm_walk = "%owner pushes down on you with their tail, pinning you down below them!"
|
||||
|
||||
msg_owner_harm_run = "Your heavy tail carelessly slides past %prey, crushing them!"
|
||||
msg_prey_harm_run = "%owner quickly goes over your body, carelessly crushing you with their heavy tail!"
|
||||
|
||||
msg_owner_harm_walk = "Your heavy tail slowly and methodically slides down upon %prey, crushing against the floor below!"
|
||||
msg_prey_harm_walk = "%owner's thick, heavy tail slowly and methodically slides down upon your body, mercilessly crushing you into the floor below!"
|
||||
|
||||
msg_owner_grab_success = "You slither over %prey with your large, thick tail, smushing them against the ground before coiling up around them, trapping them within the tight confines of your tail!"
|
||||
msg_prey_grab_success = "%owner slithers over you with their large, thick tail, smushing you against the ground before coiling up around you, trapping you within the tight confines of their tail!"
|
||||
|
||||
msg_owner_grab_fail = "You squish %prey under your large, thick tail, forcing them onto the ground!"
|
||||
msg_prey_grab_fail = "%owner pins you under their large, thick tail, forcing you onto the ground!"
|
||||
|
||||
msg_prey_stepunder = "You jump over %prey's thick tail."
|
||||
msg_owner_stepunder = "%owner bounds over your tail."
|
||||
|
||||
|
||||
/datum/sprite_accessory/tail/taur/ch/naga/alt_2c
|
||||
name = "Naga dual-color alt (Taur)"
|
||||
icon_state = "naga_alt_s"
|
||||
extra_overlay = "naga_alt_markings"
|
||||
suit_sprites = 'modular_chomp/icons/mob/taursuits_naga_ch.dmi'
|
||||
|
||||
/datum/sprite_accessory/tail/taur/ch/horse/scoli
|
||||
name = "Scolipede (Taur)"
|
||||
icon_state = "scoli_s"
|
||||
extra_overlay = "scoli_markings1"
|
||||
extra_overlay2 = "scoli_markings2"
|
||||
|
||||
/datum/sprite_accessory/tail/taur/ch/sergal/wheaties
|
||||
name = "Sergal (Taur)"
|
||||
icon_state = "sergwheat"
|
||||
icon_sprite_tag = "wolf"
|
||||
vore_tail_sprite_variant = "N"
|
||||
|
||||
/datum/sprite_accessory/tail/taur/ch/sergal/fatwheaties
|
||||
name = "Fat Sergal (Taur)"
|
||||
icon_state = "fatsergal"
|
||||
icon_sprite_tag = "wolf"
|
||||
|
||||
/datum/sprite_accessory/tail/taur/ch/sergal/wheaties_2c
|
||||
name = "Sergal (Taur, dual-color)"
|
||||
icon_state = "sergwheat"
|
||||
extra_overlay = "sergwheat_markings"
|
||||
icon_sprite_tag = "wolf"
|
||||
vore_tail_sprite_variant = "N"
|
||||
|
||||
/datum/sprite_accessory/tail/taur/ch/sergal/fatwheaties_2c
|
||||
name = "Fat Sergal (Taur, dual-color)"
|
||||
icon_state = "fatsergal"
|
||||
extra_overlay = "sergwheat_markings"
|
||||
icon_sprite_tag = "wolf"
|
||||
|
||||
/datum/sprite_accessory/tail/taur/ch/longvirus
|
||||
name = "Long Virus (Taur)"
|
||||
icon_state = "longvirus_s"
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
/obj/item/organ/external
|
||||
var/prosthetic_digi = FALSE //CHOMPStation edit - when it's prosthetic, can it be a digitigrade
|
||||
|
||||
//new function to check for markings
|
||||
/obj/item/organ/external/proc/is_hidden_by_markings()
|
||||
//code that checked all limbs.
|
||||
|
||||
@@ -5,169 +5,82 @@
|
||||
// this allows limbs to be set properly when being printed in the bioprinter without an owner
|
||||
// this also allows the preview mannequin to update properly because customisation topic calls don't call a DNA check
|
||||
if(owner)
|
||||
digitigrade = owner.digitigrade
|
||||
digitigrade = owner.digitigrade && (istype(src,/obj/item/organ/external/leg) || istype(src,/obj/item/organ/external/foot))
|
||||
else if(dna)
|
||||
digitigrade = dna.digitigrade
|
||||
digitigrade = dna.digitigrade && (istype(src,/obj/item/organ/external/leg) || istype(src,/obj/item/organ/external/foot))
|
||||
|
||||
if( !model && ( istype(src,/obj/item/organ/external/leg) || istype(src,/obj/item/organ/external/foot) ) ) //All leg icons go through here now.
|
||||
var/robotic_digi = prosthetic_digi && digitigrade //could make it so the prosthetic digi var is more of a "does this limb have a custom digitigrade sprite for its robospriting" but this is fine for now
|
||||
|
||||
var/gender = "m"
|
||||
if(owner && owner.gender == FEMALE)
|
||||
gender = "f"
|
||||
|
||||
if(!force_icon_key)
|
||||
icon_cache_key = "[icon_name]_[species ? species.get_bodytype() : SPECIES_HUMAN]" //VOREStation Edit
|
||||
else
|
||||
icon_cache_key = "[icon_name]_[force_icon_key]"
|
||||
|
||||
if(force_icon)
|
||||
mob_icon = new /icon(force_icon, "[icon_name][gendered_icon ? "_[gender]" : ""]")
|
||||
else
|
||||
if(!dna)
|
||||
mob_icon = new /icon('icons/mob/human_races/r_human.dmi', "[icon_name][gendered_icon ? "_[gender]" : ""]")
|
||||
else
|
||||
|
||||
if(!gendered_icon)
|
||||
gender = null
|
||||
else
|
||||
if(dna.GetUIState(DNA_UI_GENDER))
|
||||
gender = "f"
|
||||
else
|
||||
gender = "m"
|
||||
|
||||
if(skeletal)
|
||||
mob_icon = new /icon('icons/mob/human_races/r_skeleton.dmi', "[icon_name][gender ? "_[gender]" : ""]")
|
||||
else if (robotic >= ORGAN_ROBOT)
|
||||
mob_icon = new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][gender ? "_[gender]" : ""]")
|
||||
apply_colouration(mob_icon)
|
||||
else
|
||||
if(is_hidden_by_markings())
|
||||
mob_icon = new /icon('icons/mob/human_races/r_blank.dmi', "[icon_name][gender ? "_[gender]" : ""]")
|
||||
else
|
||||
//Use digi icon if digitigrade, otherwise use regular icon. Ternary operator is based.
|
||||
mob_icon = new /icon(digitigrade ? species.icodigi : species.get_icobase(owner, (status & ORGAN_MUTATED)), "[icon_name][gender ? "_[gender]" : ""]")
|
||||
apply_colouration(mob_icon)
|
||||
|
||||
//Code here is copied from organ_icon.dm line 118 at time of writing (9/20/21), VOREStation edits are left in intentionally, because I think it's worth keeping track of the fact that the code is from Virgo's edits.
|
||||
//Body markings, actually does not include head this time. Done separately above.
|
||||
if(!istype(src,/obj/item/organ/external/head))
|
||||
for(var/M in markings)
|
||||
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
|
||||
var/isdigitype = istype(mark_style,/datum/sprite_accessory/marking/digi)
|
||||
if(!(digitigrade ^ isdigitype)) //Equivalent to XNOR; this code will only run if either both digitigrade and isdigitype are true, or if both are false.
|
||||
var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]")
|
||||
mark_s.Blend(markings[M]["color"], mark_style.color_blend_mode) // VOREStation edit
|
||||
add_overlay(mark_s) //So when it's not on your body, it has icons
|
||||
mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons
|
||||
icon_cache_key += "[M][markings[M]["color"]]"
|
||||
if(body_hair && islist(h_col) && h_col.len >= 3)
|
||||
var/cache_key = "[body_hair]-[icon_name]-[h_col[1]][h_col[2]][h_col[3]]"
|
||||
if(!limb_icon_cache[cache_key])
|
||||
var/icon/I = icon(species.get_icobase(owner), "[icon_name]_[body_hair]")
|
||||
I.Blend(rgb(h_col[1],h_col[2],h_col[3]), ICON_MULTIPLY) //VOREStation edit
|
||||
limb_icon_cache[cache_key] = I
|
||||
mob_icon.Blend(limb_icon_cache[cache_key], ICON_OVERLAY)
|
||||
|
||||
// VOREStation edit start
|
||||
if(nail_polish)
|
||||
var/icon/I = new(nail_polish.icon, nail_polish.icon_state)
|
||||
I.Blend(nail_polish.color, ICON_MULTIPLY)
|
||||
add_overlay(I)
|
||||
mob_icon.Blend(I, ICON_OVERLAY)
|
||||
icon_cache_key += "_[nail_polish.icon]_[nail_polish.icon_state]_[nail_polish.color]"
|
||||
// VOREStation edit end
|
||||
dir = EAST
|
||||
icon = mob_icon
|
||||
return mob_icon
|
||||
var/gender = "m"
|
||||
if(owner && owner.gender == FEMALE)
|
||||
gender = "f"
|
||||
|
||||
if(!force_icon_key)
|
||||
icon_cache_key = "[icon_name]_[species ? species.get_bodytype() : SPECIES_HUMAN]" //VOREStation Edit
|
||||
else
|
||||
//. = ..()
|
||||
//due to the wierd fact that this calls the old code, and defining it here makes a duplicate procedure error, i'm gonna have to bring the whole code here and modify it. if there is a more condensed way, it is appreciated.
|
||||
icon_cache_key = "[icon_name]_[force_icon_key]"
|
||||
|
||||
var/gender = "m"
|
||||
if(owner && owner.gender == FEMALE)
|
||||
gender = "f"
|
||||
|
||||
if(!force_icon_key)
|
||||
icon_cache_key = "[icon_name]_[species ? species.get_bodytype() : SPECIES_HUMAN]" //VOREStation Edit
|
||||
if(force_icon && !robotic_digi)
|
||||
mob_icon = new /icon(force_icon, "[icon_name][gendered_icon ? "_[gender]" : ""]")
|
||||
else
|
||||
if(!dna)
|
||||
mob_icon = new /icon('icons/mob/human_races/r_human.dmi', "[icon_name][gendered_icon ? "_[gender]" : ""]")
|
||||
else
|
||||
icon_cache_key = "[icon_name]_[force_icon_key]"
|
||||
|
||||
if(force_icon)
|
||||
mob_icon = new /icon(force_icon, "[icon_name][gendered_icon ? "_[gender]" : ""]")
|
||||
else
|
||||
if(!dna)
|
||||
mob_icon = new /icon('icons/mob/human_races/r_human.dmi', "[icon_name][gendered_icon ? "_[gender]" : ""]")
|
||||
if(!gendered_icon)
|
||||
gender = null
|
||||
else
|
||||
if(!gendered_icon)
|
||||
gender = null
|
||||
if(dna.GetUIState(DNA_UI_GENDER))
|
||||
gender = "f"
|
||||
else
|
||||
if(dna.GetUIState(DNA_UI_GENDER))
|
||||
gender = "f"
|
||||
else
|
||||
gender = "m"
|
||||
gender = "m"
|
||||
|
||||
if(skeletal)
|
||||
mob_icon = new /icon('icons/mob/human_races/r_skeleton.dmi', "[icon_name][gender ? "_[gender]" : ""]")
|
||||
else if (robotic >= ORGAN_ROBOT)
|
||||
mob_icon = new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][gender ? "_[gender]" : ""]")
|
||||
if(skeletal)
|
||||
mob_icon = new /icon('icons/mob/human_races/r_skeleton.dmi', "[icon_name][gender ? "_[gender]" : ""]")
|
||||
else if (robotic >= ORGAN_ROBOT && !robotic_digi)
|
||||
mob_icon = new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][gender ? "_[gender]" : ""]")
|
||||
apply_colouration(mob_icon)
|
||||
else
|
||||
if(is_hidden_by_markings())
|
||||
mob_icon = new /icon('icons/mob/human_races/r_blank.dmi', "[icon_name][gender ? "_[gender]" : ""]")
|
||||
else
|
||||
//Use digi icon if digitigrade, otherwise use regular icon. Ternary operator is based.
|
||||
mob_icon = new /icon(digitigrade ? species.icodigi : species.get_icobase(owner, (status & ORGAN_MUTATED)), "[icon_name][gender ? "_[gender]" : ""]")
|
||||
apply_colouration(mob_icon)
|
||||
else
|
||||
if(is_hidden_by_markings())
|
||||
mob_icon = new /icon('icons/mob/human_races/r_blank.dmi', "[icon_name][gender ? "_[gender]" : ""]")
|
||||
else
|
||||
//Use digi icon if digitigrade, otherwise use regular icon. Ternary operator is based.
|
||||
mob_icon = new /icon(species.get_icobase(owner, (status & ORGAN_MUTATED)), "[icon_name][gender ? "_[gender]" : ""]")
|
||||
apply_colouration(mob_icon)
|
||||
|
||||
//Body markings, actually does not include head this time. Done separately above.
|
||||
if(!istype(src,/obj/item/organ/external/head))
|
||||
for(var/M in markings)
|
||||
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
|
||||
var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]")
|
||||
mark_s.Blend(markings[M]["color"], mark_style.color_blend_mode) // VOREStation edit
|
||||
add_overlay(mark_s) //So when it's not on your body, it has icons
|
||||
mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons
|
||||
icon_cache_key += "[M][markings[M]["color"]]"
|
||||
if (model && !robotic_digi)
|
||||
icon_cache_key += "_model_[model]"
|
||||
apply_colouration(mob_icon)
|
||||
|
||||
if(body_hair && islist(h_col) && h_col.len >= 3)
|
||||
var/cache_key = "[body_hair]-[icon_name]-[h_col[1]][h_col[2]][h_col[3]]"
|
||||
if(!limb_icon_cache[cache_key])
|
||||
var/icon/I = icon(species.get_icobase(owner), "[icon_name]_[body_hair]")
|
||||
I.Blend(rgb(h_col[1],h_col[2],h_col[3]), ICON_MULTIPLY) //VOREStation edit
|
||||
limb_icon_cache[cache_key] = I
|
||||
mob_icon.Blend(limb_icon_cache[cache_key], ICON_OVERLAY)
|
||||
//Code here is copied from organ_icon.dm line 118 at time of writing (9/20/21), VOREStation edits are left in intentionally, because I think it's worth keeping track of the fact that the code is from Virgo's edits.
|
||||
//Body markings, actually does not include head this time. Done separately above.
|
||||
if((!istype(src,/obj/item/organ/external/head) && !(force_icon && !robotic_digi)) || (model && owner && owner.synth_markings))
|
||||
for(var/M in markings)
|
||||
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
|
||||
var/isdigitype = istype(mark_style,/datum/sprite_accessory/marking/digi)
|
||||
if(!(digitigrade ^ isdigitype)) //Equivalent to XNOR; this code will only run if either both digitigrade and isdigitype are true, or if both are false.
|
||||
var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]")
|
||||
mark_s.Blend(markings[M]["color"], mark_style.color_blend_mode) // VOREStation edit
|
||||
add_overlay(mark_s) //So when it's not on your body, it has icons
|
||||
mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons
|
||||
icon_cache_key += "[M][markings[M]["color"]]"
|
||||
if(body_hair && islist(h_col) && h_col.len >= 3)
|
||||
var/cache_key = "[body_hair]-[icon_name]-[h_col[1]][h_col[2]][h_col[3]]"
|
||||
if(!limb_icon_cache[cache_key])
|
||||
var/icon/I = icon(species.get_icobase(owner), "[icon_name]_[body_hair]")
|
||||
I.Blend(rgb(h_col[1],h_col[2],h_col[3]), ICON_MULTIPLY) //VOREStation edit
|
||||
limb_icon_cache[cache_key] = I
|
||||
mob_icon.Blend(limb_icon_cache[cache_key], ICON_OVERLAY)
|
||||
|
||||
// VOREStation edit start
|
||||
if(nail_polish)
|
||||
var/icon/I = new(nail_polish.icon, nail_polish.icon_state)
|
||||
I.Blend(nail_polish.color, ICON_MULTIPLY)
|
||||
add_overlay(I)
|
||||
mob_icon.Blend(I, ICON_OVERLAY)
|
||||
icon_cache_key += "_[nail_polish.icon]_[nail_polish.icon_state]_[nail_polish.color]"
|
||||
// VOREStation edit end
|
||||
// VOREStation edit start
|
||||
if(nail_polish && (force_icon && !robotic_digi))
|
||||
var/icon/I = new(nail_polish.icon, nail_polish.icon_state)
|
||||
I.Blend(nail_polish.color, ICON_MULTIPLY)
|
||||
add_overlay(I)
|
||||
mob_icon.Blend(I, ICON_OVERLAY)
|
||||
icon_cache_key += "_[nail_polish.icon]_[nail_polish.icon_state]_[nail_polish.color]"
|
||||
// VOREStation edit end
|
||||
|
||||
if(model)
|
||||
icon_cache_key += "_model_[model]"
|
||||
apply_colouration(mob_icon)
|
||||
if(owner && owner.synth_markings)
|
||||
for(var/M in markings)
|
||||
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
|
||||
var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]")
|
||||
mark_s.Blend(markings[M]["color"], mark_style.color_blend_mode) // VOREStation edit
|
||||
add_overlay(mark_s) //So when it's not on your body, it has icons
|
||||
mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons
|
||||
icon_cache_key += "[M][markings[M]["color"]]"
|
||||
|
||||
if(body_hair && islist(h_col) && h_col.len >= 3)
|
||||
var/cache_key = "[body_hair]-[icon_name]-[h_col[1]][h_col[2]][h_col[3]]"
|
||||
if(!limb_icon_cache[cache_key])
|
||||
var/icon/I = icon(species.get_icobase(owner), "[icon_name]_[body_hair]")
|
||||
I.Blend(rgb(h_col[1],h_col[2],h_col[3]), ICON_MULTIPLY) //VOREStation edit
|
||||
limb_icon_cache[cache_key] = I
|
||||
mob_icon.Blend(limb_icon_cache[cache_key], ICON_OVERLAY)
|
||||
// VOREStation edit ends here
|
||||
|
||||
dir = EAST
|
||||
icon = mob_icon
|
||||
return mob_icon
|
||||
dir = EAST
|
||||
icon = mob_icon
|
||||
return mob_icon
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
icon_state = "meb_m_nu"
|
||||
matter = list(MAT_STEEL = 400, MAT_GLASS = 80)
|
||||
self_recharge = TRUE
|
||||
charge_amount = 120
|
||||
charge_amount = 60 //2.5%
|
||||
charge_delay = 75
|
||||
origin_tech = list(TECH_POWER = 5, TECH_PRECURSOR = 1)
|
||||
|
||||
@@ -225,7 +225,7 @@
|
||||
/obj/item/weapon/cell/device/weapon/recharge/alien/omni
|
||||
name = "omni weapon power cell"
|
||||
desc = "A mix between alien technology and phoron tech. Seems to fit in almost any cell slot..."
|
||||
charge_amount = 240 // 5%.
|
||||
charge_amount = 120 // 2.5%.
|
||||
maxcharge = 4800
|
||||
charge_delay = 50
|
||||
origin_tech = list(TECH_POWER = 8, TECH_ENGINEERING = 6, TECH_PHORON = 6, TECH_ARCANE = 2, TECH_PRECURSOR = 2)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "Stuff it with paper and shoot! You'll be a hit at every party."
|
||||
id = "confetti_cannon"
|
||||
req_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 3000)
|
||||
materials = list(MAT_STEEL = 3000, MAT_GLASS = 3000)
|
||||
build_path = /obj/item/weapon/gun/launcher/confetti_cannon
|
||||
sort_string = "MAAVD"
|
||||
|
||||
@@ -11,34 +11,71 @@
|
||||
/datum/design/item/weapon/phase/phase_pistol
|
||||
id = "phasepistol"
|
||||
req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2, TECH_POWER = 2)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 4000, MAT_COPPER = 30)
|
||||
materials = list(MAT_STEEL = 4000, MAT_GLASS = 500)
|
||||
build_path = /obj/item/weapon/gun/energy/locked/phasegun/pistol
|
||||
sort_string = "MACAA"
|
||||
|
||||
/datum/design/item/weapon/phase/phase_carbine
|
||||
id = "phasecarbine"
|
||||
req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2, TECH_POWER = 2)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 6000, "glass" = 1500, MAT_COPPER = 40)
|
||||
materials = list(MAT_STEEL = 6000, MAT_GLASS = 500)
|
||||
build_path = /obj/item/weapon/gun/energy/locked/phasegun
|
||||
sort_string = "MACAB"
|
||||
|
||||
/datum/design/item/weapon/phase/phase_rifle
|
||||
id = "phaserifle"
|
||||
req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7000, "glass" = 2000, "silver" = 500)
|
||||
materials = list(MAT_STEEL = 7000, MAT_GLASS = 500, MAT_SILVER = 500)
|
||||
build_path = /obj/item/weapon/gun/energy/locked/phasegun/rifle
|
||||
sort_string = "MACAC"
|
||||
|
||||
/datum/design/item/weapon/phase/phase_cannon
|
||||
id = "phasecannon"
|
||||
req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 4, TECH_POWER = 4)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 2000, "silver" = 1000, "diamond" = 750)
|
||||
materials = list(MAT_STEEL = 10000, MAT_GLASS = 2000, MAT_SILVER = 2000, MAT_DIAMOND = 750)
|
||||
build_path = /obj/item/weapon/gun/energy/locked/phasegun/cannon
|
||||
sort_string = "MACAD"
|
||||
|
||||
/datum/design/item/weapon/phase/frontier_holdout
|
||||
id = "holdout frontier phaser"
|
||||
req_tech = list(TECH_COMBAT = 4, TECH_POWER = 7, TECH_MATERIAL = 6, TECH_PHORON = 6)
|
||||
materials = list(MAT_STEEL = 6000, MAT_GLASS = 900, MAT_DURASTEEL = 100, MAT_METALHYDROGEN = 150, MAT_VERDANTIUM = 100, MAT_PHORON = 1000)
|
||||
build_path = /obj/item/weapon/gun/energy/locked/frontier/holdout
|
||||
sort_string = "MACAE"
|
||||
|
||||
/datum/design/item/weapon/phase/frontier_phaser
|
||||
id = "frontier phaser"
|
||||
req_tech = list(TECH_COMBAT = 4, TECH_POWER = 7, TECH_MATERIAL = 6, TECH_PHORON = 6)
|
||||
materials = list(MAT_STEEL = 7000, MAT_GLASS = 900, MAT_DURASTEEL = 100, MAT_METALHYDROGEN = 200, MAT_VERDANTIUM = 150, MAT_PHORON = 2000)
|
||||
build_path = /obj/item/weapon/gun/energy/locked/frontier
|
||||
sort_string = "MACAF"
|
||||
|
||||
/datum/design/item/weapon/phase/frontier_carbine
|
||||
id = "carbine frontier phaser"
|
||||
req_tech = list(TECH_COMBAT = 4, TECH_POWER = 8, TECH_MATERIAL = 6, TECH_PHORON = 6)
|
||||
materials = list(MAT_STEEL = 6500, MAT_GLASS = 900, MAT_DURASTEEL = 150, MAT_METALHYDROGEN = 250, MAT_VERDANTIUM = 200, MAT_PHORON = 4000)
|
||||
build_path = /obj/item/weapon/gun/energy/locked/frontier/carbine
|
||||
sort_string = "MACAG"
|
||||
|
||||
/datum/design/item/weapon/phase/frontier_rifle
|
||||
id = "marksman rifle frontier phaser"
|
||||
req_tech = list(TECH_COMBAT = 4, TECH_POWER = 7, TECH_MATERIAL = 6, TECH_PHORON = 6)
|
||||
materials = list(MAT_STEEL = 8000, MAT_GLASS = 900, MAT_DURASTEEL = 200, MAT_METALHYDROGEN = 300, MAT_VERDANTIUM = 250, MAT_PHORON = 2000)
|
||||
build_path = /obj/item/weapon/gun/energy/locked/frontier/rifle
|
||||
sort_string = "MACAH"
|
||||
|
||||
/datum/design/item/weapon/phase/frontier_handbow
|
||||
id = "handbow frontier phaser"
|
||||
req_tech = list(TECH_COMBAT = 4, TECH_POWER = 7, TECH_MATERIAL = 6, TECH_PHORON = 6)
|
||||
materials = list(MAT_STEEL = 5000, MAT_GLASS = 900, MAT_DURASTEEL = 100, MAT_METALHYDROGEN = 200, MAT_VERDANTIUM = 150, MAT_PHORON = 1000)
|
||||
build_path = /obj/item/weapon/gun/energy/locked/frontier/handbow
|
||||
sort_string = "MACAI"
|
||||
|
||||
//Leathals And any new CHOMP weapons.
|
||||
/datum/design/item/weapon/gun/projectile/caseless/prototype
|
||||
id = "caselessrifle"
|
||||
req_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 5, TECH_PHORON = 5)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7000, "titanium" = 4000)
|
||||
materials = list(MAT_STEEL = 7000, MAT_TITANIUM = 4000)
|
||||
build_path = /obj/item/weapon/gun/projectile/caseless/prototype
|
||||
sort_string = "MACAE"
|
||||
sort_string = "MACBA"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user