Merge remote-tracking branch 'Citadel-Station-13/master' into Garlic
This commit is contained in:
@@ -16,14 +16,16 @@
|
||||
/obj/screen/combattoggle/Click()
|
||||
if(iscarbon(usr))
|
||||
var/mob/living/carbon/C = usr
|
||||
C.toggle_combat_mode()
|
||||
C.user_toggle_intentional_combat_mode()
|
||||
|
||||
/obj/screen/combattoggle/update_icon_state()
|
||||
var/mob/living/carbon/user = hud?.mymob
|
||||
if(!istype(user))
|
||||
return
|
||||
if(user.combatmode)
|
||||
if((user.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE))
|
||||
icon_state = "combat"
|
||||
else if(HAS_TRAIT(user, TRAIT_COMBAT_MODE_LOCKED))
|
||||
icon_state = "combat_locked"
|
||||
else
|
||||
icon_state = "combat_off"
|
||||
|
||||
@@ -41,7 +43,7 @@
|
||||
var/mob/living/carbon/user = hud?.mymob
|
||||
if(!istype(user))
|
||||
return
|
||||
if(user.voremode && !user.combatmode)
|
||||
if(user.voremode && !(user.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE))
|
||||
icon_state = "nom"
|
||||
else
|
||||
icon_state = "nom_off"
|
||||
|
||||
@@ -10,14 +10,16 @@
|
||||
/obj/screen/sprintbutton/Click()
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/H = usr
|
||||
H.togglesprint()
|
||||
H.default_toggle_sprint()
|
||||
|
||||
/obj/screen/sprintbutton/update_icon_state()
|
||||
var/mob/living/user = hud?.mymob
|
||||
if(!istype(user))
|
||||
return
|
||||
if(user.sprinting)
|
||||
if(user.combat_flags & COMBAT_FLAG_SPRINT_ACTIVE)
|
||||
icon_state = "act_sprint_on"
|
||||
else if(HAS_TRAIT(user, TRAIT_SPRINT_LOCKED))
|
||||
icon_state = "act_sprint_locked"
|
||||
else
|
||||
icon_state = "act_sprint"
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
var/mob/living/carbon/user = hud?.mymob
|
||||
if(!user)
|
||||
return
|
||||
if(user.stat == DEAD || user.recoveringstam || (user.hal_screwyhud in 1 to 2))
|
||||
if(user.stat == DEAD || (user.combat_flags & COMBAT_FLAG_HARD_STAMCRIT) || (user.hal_screwyhud in 1 to 2))
|
||||
icon_state = "staminacrit"
|
||||
else if(user.hal_screwyhud == 5)
|
||||
icon_state = "stamina0"
|
||||
@@ -37,7 +37,7 @@
|
||||
var/mob/living/carbon/user = hud?.mymob
|
||||
if(!user)
|
||||
return
|
||||
if(user.stat == DEAD || user.recoveringstam || (user.hal_screwyhud in 1 to 2))
|
||||
if(user.stat == DEAD || (user.combat_flags & COMBAT_FLAG_HARD_STAMCRIT) || (user.hal_screwyhud in 1 to 2))
|
||||
icon_state = "stambuffer7"
|
||||
else if(user.hal_screwyhud == 5)
|
||||
icon_state = "stambuffer0"
|
||||
|
||||
@@ -16,4 +16,5 @@
|
||||
return FALSE
|
||||
|
||||
/obj/item/proc/altafterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
SEND_SIGNAL(src, COMSIG_ITEM_ALT_AFTERATTACK, target, user, proximity_flag, click_parameters)
|
||||
return FALSE
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
to_chat(owner, "<span class='warning'>Lucidity shoots to your previously blank mind as your mind suddenly finishes the cloning process. You marvel for a moment at yourself, as your mind subconciously recollects all your memories up until the point when you cloned yourself. Curiously, you find that you memories are blank after you ingested the synthetic serum, leaving you to wonder where the other you is.</span>")
|
||||
to_chat(M, "<span class='warning'>Lucidity shoots to your previously blank mind as your mind suddenly finishes the cloning process. You marvel for a moment at yourself, as your mind subconciously recollects all your memories up until the point when you cloned yourself. Curiously, you find that you memories are blank after you ingested the synthetic serum, leaving you to wonder where the other you is.</span>")
|
||||
fermi_Clone = null
|
||||
return ..()
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -95,6 +96,7 @@
|
||||
to_chat(owner, "<span class='notice'>Your expansive chest has become a more managable size, liberating your movements.</b></span>")
|
||||
owner.remove_movespeed_modifier(BREAST_MOVEMENT_SPEED)
|
||||
sizeMoveMod(1)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/chem/breast_enlarger/proc/sizeMoveMod(var/value)
|
||||
if(cachedmoveCalc == value)
|
||||
@@ -164,6 +166,7 @@
|
||||
log_game("FERMICHEM: [owner]'s dick has reduced to an acceptable size. ID: [owner.key]")
|
||||
owner.remove_movespeed_modifier(DICK_MOVEMENT_SPEED)
|
||||
owner.ResetBloodVol()
|
||||
return ..()
|
||||
|
||||
///////////////////////////////////////////////
|
||||
// Astral INSURANCE
|
||||
@@ -192,15 +195,14 @@
|
||||
|
||||
/datum/status_effect/chem/astral_insurance/on_remove(mob/living/carbon/M) //God damnit get them home!
|
||||
if(owner.mind == originalmind) //If they're home, HOORAY
|
||||
return
|
||||
return ..()
|
||||
if(owner.mind)
|
||||
var/mob/living/simple_animal/astral/G = new(get_turf(M.loc))
|
||||
owner.mind.transfer_to(G)//Just in case someone else is inside of you, it makes them a ghost and should hopefully bring them home at the end.
|
||||
to_chat(G, "<span class='warning'>[M]'s conciousness snaps back to them as their astrogen runs out, kicking your projected mind out!'</b></span>")
|
||||
log_game("FERMICHEM: [M]'s possesser has been booted out into a astral ghost!")
|
||||
originalmind.transfer_to(original)
|
||||
|
||||
|
||||
return ..()
|
||||
|
||||
/*//////////////////////////////////////////
|
||||
Mind control functions!
|
||||
@@ -543,7 +545,7 @@
|
||||
if (statusStrength < 0)
|
||||
status = null
|
||||
owner.remove_movespeed_modifier(MOVESPEED_ID_MKULTRA)
|
||||
owner.Knockdown(50)
|
||||
owner.DefaultCombatKnockdown(50)
|
||||
to_chat(owner, "<span class='notice'><i>Your body gives out as the adrenaline in your system runs out.</i></span>")
|
||||
else
|
||||
statusStrength -= 1
|
||||
@@ -603,7 +605,7 @@
|
||||
REMOVE_TRAIT(owner, TRAIT_PACIFISM, "MKUltra")
|
||||
to_chat(owner, "<span class='big redtext'><i>You're now free of [master]'s influence, and fully independent!'</i></span>")
|
||||
UnregisterSignal(owner, COMSIG_GLOB_LIVING_SAY_SPECIAL)
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/chem/enthrall/proc/owner_hear(datum/source, list/hearing_args)
|
||||
if(lewd == FALSE)
|
||||
@@ -638,7 +640,7 @@
|
||||
H.adjust_arousal(5)
|
||||
C.jitteriness += 100
|
||||
C.stuttering += 25
|
||||
C.Knockdown(60)
|
||||
C.DefaultCombatKnockdown(60)
|
||||
C.Stun(60)
|
||||
to_chat(owner, "<span class='warning'><i>Your muscles seize up, then start spasming wildy!</i></span>")
|
||||
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
/datum/status_effect/incapacitating/knockdown/on_creation(mob/living/new_owner, set_duration, updating_canmove, override_duration, override_stam)
|
||||
if(iscarbon(new_owner) && (isnum(set_duration) || isnum(override_duration)))
|
||||
if(istype(new_owner.buckled, /obj/vehicle/ridden))
|
||||
var/obj/buckl = new_owner.buckled
|
||||
buckl.unbuckle_mob(new_owner)
|
||||
new_owner.resting = TRUE
|
||||
new_owner.adjustStaminaLoss(isnull(override_stam)? set_duration*0.25 : override_stam)
|
||||
if(isnull(override_duration) && (set_duration > 80))
|
||||
set_duration = set_duration*0.01
|
||||
return ..()
|
||||
else if(!isnull(override_duration))
|
||||
set_duration = override_duration
|
||||
return ..()
|
||||
else if(updating_canmove)
|
||||
new_owner.update_canmove()
|
||||
qdel(src)
|
||||
else
|
||||
. = ..()
|
||||
@@ -17,7 +17,7 @@
|
||||
to_chat(user, "Your head pounds for a moment, before your vision clears. The Wish Granter, sensing the darkness in your heart, has given you limitless power, and it's all yours!")
|
||||
user.dna.add_mutation(HULK)
|
||||
user.dna.add_mutation(XRAY)
|
||||
user.dna.add_mutation(COLDRES)
|
||||
user.dna.add_mutation(SPACEMUT)
|
||||
user.dna.add_mutation(TK)
|
||||
user.next_move_modifier *= 0.5 //half the delay between attacks!
|
||||
to_chat(user, "Things around you feel slower!")
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
//we vlambeer now
|
||||
|
||||
/obj/proc/shake_camera(mob/M, duration, strength=1)//byond's wonky with this shit
|
||||
set waitfor = FALSE
|
||||
if(!M || !M.client || duration <= 0)
|
||||
return
|
||||
var/client/C = M.client
|
||||
@@ -53,7 +54,7 @@
|
||||
if (1)
|
||||
shake_camera(M, ((force - 10) * 0.015 + 1), ((force - 10) * 0.015))
|
||||
if (2)
|
||||
if (!M.canmove)
|
||||
if(!CHECK_MOBILITY(M, MOBILITY_MOVE))
|
||||
shake_camera(M, ((force - 10) * 0.015 + 1), ((force - 10) * 0.015))
|
||||
|
||||
/obj/item/attack_obj(obj/O, mob/living/user)
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
name = "soul death"
|
||||
icon = 'modular_citadel/icons/effects/souldeath.dmi'
|
||||
icon_state = "souldeath"
|
||||
duration = 30
|
||||
duration = 30
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
/obj/item/electropack/shockcollar
|
||||
name = "shock collar"
|
||||
desc = "A reinforced metal collar. It seems to have some form of wiring near the front. Strange.."
|
||||
icon = 'modular_citadel/icons/obj/clothing/cit_neck.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/neck.dmi'
|
||||
icon_state = "shockcollar"
|
||||
item_state = "shockcollar"
|
||||
body_parts_covered = NECK
|
||||
slot_flags = ITEM_SLOT_NECK | ITEM_SLOT_DENYPOCKET //no more pocket shockers
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
strip_delay = 60
|
||||
equip_delay_other = 60
|
||||
materials = list(MAT_METAL=5000, MAT_GLASS=2000)
|
||||
var/tagname = null
|
||||
|
||||
/datum/design/electropack/shockcollar
|
||||
name = "Shockcollar"
|
||||
id = "shockcollar"
|
||||
build_type = AUTOLATHE
|
||||
build_path = /obj/item/electropack/shockcollar
|
||||
materials = list(MAT_METAL=5000, MAT_GLASS=2000)
|
||||
category = list("hacked", "Misc")
|
||||
|
||||
/obj/item/electropack/shockcollar/attack_hand(mob/user)
|
||||
if(loc == user && user.get_item_by_slot(SLOT_NECK))
|
||||
to_chat(user, "<span class='warning'>The collar is fastened tight! You'll need help taking this off!</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/electropack/shockcollar/receive_signal(datum/signal/signal)
|
||||
if(!signal || signal.data["code"] != code)
|
||||
return
|
||||
|
||||
if(isliving(loc) && on)
|
||||
if(shock_cooldown != 0)
|
||||
return
|
||||
shock_cooldown = 1
|
||||
spawn(100)
|
||||
shock_cooldown = 0
|
||||
var/mob/living/L = loc
|
||||
step(L, pick(GLOB.cardinals))
|
||||
|
||||
to_chat(L, "<span class='danger'>You feel a sharp shock from the collar!</span>")
|
||||
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
|
||||
s.set_up(3, 1, L)
|
||||
s.start()
|
||||
|
||||
L.DefaultCombatKnockdown(100)
|
||||
|
||||
if(master)
|
||||
master.receive_signal()
|
||||
return
|
||||
|
||||
/obj/item/electropack/shockcollar/attack_self(mob/user) //Turns out can't fully source this from the parent item, spritepath gets confused if power toggled. Will come back to this when I know how to code better and readd powertoggle..
|
||||
var/option = "Change Name"
|
||||
option = input(user, "What do you want to do?", "[src]", option) as null|anything in list("Change Name", "Change Frequency")
|
||||
switch(option)
|
||||
if("Change Name")
|
||||
var/t = input(user, "Would you like to change the name on the tag?", "Name your new pet", tagname ? tagname : "Spot") as null|text
|
||||
if(t)
|
||||
tagname = copytext(sanitize(t), 1, MAX_NAME_LEN)
|
||||
name = "[initial(name)] - [tagname]"
|
||||
if("Change Frequency")
|
||||
if(!ishuman(user))
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/dat = {"<SK><BR>
|
||||
<B>Frequency/Code</B> for shock collar:<BR>
|
||||
Frequency:
|
||||
<A href='byond://?src=\ref[src];freq=-10'>-</A>
|
||||
<A href='byond://?src=\ref[src];freq=-2'>-</A> [format_frequency(frequency)]
|
||||
<A href='byond://?src=\ref[src];freq=2'>+</A>
|
||||
<A href='byond://?src=\ref[src];freq=10'>+</A><BR>
|
||||
Code:
|
||||
<A href='byond://?src=\ref[src];code=-5'>-</A>
|
||||
<A href='byond://?src=\ref[src];code=-1'>-</A> [code]
|
||||
<A href='byond://?src=\ref[src];code=1'>+</A>
|
||||
<A href='byond://?src=\ref[src];code=5'>+</A><BR>
|
||||
</SK>"}
|
||||
|
||||
user << browse(dat, "window=radio")
|
||||
onclose(user, "radio")
|
||||
return
|
||||
@@ -0,0 +1,21 @@
|
||||
/obj/structure/chair/alt_attack_hand(mob/living/user)
|
||||
if(Adjacent(user) && istype(user))
|
||||
if(!item_chair || !user.can_hold_items() || !has_buckled_mobs() || buckled_mobs.len > 1 || dir != user.dir || flags_1 & NODECONSTRUCT_1)
|
||||
return TRUE
|
||||
if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return TRUE
|
||||
if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
|
||||
to_chat(user, "<span class='warning'>You're too exhausted for that.</span>")
|
||||
return TRUE
|
||||
var/mob/living/poordude = buckled_mobs[1]
|
||||
if(!istype(poordude))
|
||||
return TRUE
|
||||
user.visible_message("<span class='notice'>[user] pulls [src] out from under [poordude].</span>", "<span class='notice'>You pull [src] out from under [poordude].</span>")
|
||||
var/C = new item_chair(loc)
|
||||
user.put_in_hands(C)
|
||||
poordude.DefaultCombatKnockdown(20)//rip in peace
|
||||
user.adjustStaminaLoss(5)
|
||||
unbuckle_all_mobs(TRUE)
|
||||
qdel(src)
|
||||
return TRUE
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/organ/genital
|
||||
color = "#fcccb3"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
var/shape = "human"
|
||||
var/shape
|
||||
var/sensitivity = 1 // wow if this were ever used that'd be cool but it's not but i'm keeping it for my unshit code
|
||||
var/genital_flags //see citadel_defines.dm
|
||||
var/masturbation_verb = "masturbate"
|
||||
@@ -208,12 +208,6 @@
|
||||
give_genital(/obj/item/organ/genital/breasts)
|
||||
if(dna.features["has_cock"])
|
||||
give_genital(/obj/item/organ/genital/penis)
|
||||
/*
|
||||
if(dna.features["has_ovi"])
|
||||
give_genital(/obj/item/organ/genital/ovipositor)
|
||||
if(dna.features["has_eggsack"])
|
||||
give_genital(/obj/item/organ/genital/eggsack)
|
||||
*/
|
||||
|
||||
/mob/living/carbon/human/proc/give_genital(obj/item/organ/genital/G)
|
||||
if(!dna || (NOGENITALS in dna.species.species_traits) || getorganslot(initial(G.slot)))
|
||||
@@ -312,7 +306,7 @@
|
||||
|
||||
genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size][dna.species.use_skintones ? "_s" : ""]_[aroused_state]_[layertext]"
|
||||
|
||||
if(layer == GENITALS_FRONT_LAYER && CHECK_BITFIELD(G.genital_flags, GENITAL_THROUGH_CLOTHES))
|
||||
if(layers_num[layer] == GENITALS_FRONT_LAYER && CHECK_BITFIELD(G.genital_flags, GENITAL_THROUGH_CLOTHES))
|
||||
genital_overlay.layer = -GENITALS_EXPOSED_LAYER
|
||||
LAZYADD(fully_exposed, genital_overlay) // to be added to a layer with higher priority than clothes, hence the name of the bitflag.
|
||||
else
|
||||
|
||||
@@ -137,14 +137,3 @@
|
||||
/datum/sprite_accessory/breasts/sextuple
|
||||
icon_state = "sextuple"
|
||||
name = "Sextuple"
|
||||
|
||||
//OVIPOSITORS BE HERE
|
||||
/datum/sprite_accessory/ovipositor
|
||||
icon = 'modular_citadel/icons/obj/genitals/penis_onmob.dmi'
|
||||
icon_state = null
|
||||
name = "Ovipositor" //the preview name of the accessory
|
||||
color_src = "cock_color"
|
||||
|
||||
/datum/sprite_accessory/ovipositor/knotted
|
||||
icon_state = "knotted"
|
||||
name = "Knotted"
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
icon = 'modular_citadel/icons/obj/genitals/breasts.dmi'
|
||||
zone = BODY_ZONE_CHEST
|
||||
slot = ORGAN_SLOT_BREASTS
|
||||
size = "c" //refer to the breast_values static list below for the cups associated number values
|
||||
size = BREASTS_SIZE_DEF // "c". Refer to the breast_values static list below for the cups associated number values
|
||||
fluid_id = /datum/reagent/consumable/milk
|
||||
fluid_rate = MILK_RATE
|
||||
shape = "pair"
|
||||
shape = DEF_BREASTS_SHAPE
|
||||
genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_FUID_PRODUCTION|GENITAL_CAN_AROUSE
|
||||
masturbation_verb = "massage"
|
||||
arousal_verb = "Your breasts start feeling sensitive"
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
/obj/item/organ/genital/eggsack
|
||||
name = "Egg sack"
|
||||
desc = "An egg producing reproductive organ."
|
||||
icon_state = "egg_sack"
|
||||
icon = 'modular_citadel/icons/obj/genitals/ovipositor.dmi'
|
||||
zone = BODY_ZONE_PRECISE_GROIN
|
||||
slot = ORGAN_SLOT_TESTICLES
|
||||
genital_flags = GENITAL_INTERNAL|GENITAL_BLACKLISTED //unimplemented
|
||||
linked_organ_slot = ORGAN_SLOT_PENIS
|
||||
color = null //don't use the /genital color since it already is colored
|
||||
var/egg_girth = EGG_GIRTH_DEF
|
||||
var/cum_mult = CUM_RATE_MULT
|
||||
var/cum_rate = CUM_RATE
|
||||
var/cum_efficiency = CUM_EFFICIENCY
|
||||
@@ -1,16 +0,0 @@
|
||||
/obj/item/organ/genital/ovipositor
|
||||
name = "Ovipositor"
|
||||
desc = "An egg laying reproductive organ."
|
||||
icon_state = "ovi_knotted_2"
|
||||
icon = 'modular_citadel/icons/obj/genitals/ovipositor.dmi'
|
||||
zone = BODY_ZONE_PRECISE_GROIN
|
||||
slot = ORGAN_SLOT_PENIS
|
||||
genital_flags = GENITAL_BLACKLISTED //unimplemented
|
||||
shape = "knotted"
|
||||
size = 3
|
||||
layer_index = PENIS_LAYER_INDEX
|
||||
var/length = 6 //inches
|
||||
var/girth = 0
|
||||
var/girth_ratio = COCK_GIRTH_RATIO_DEF //citadel_defines.dm for these defines
|
||||
var/knot_girth_ratio = KNOT_GIRTH_RATIO_DEF
|
||||
var/list/oviflags = list()
|
||||
@@ -11,12 +11,14 @@
|
||||
genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_CAN_AROUSE
|
||||
linked_organ_slot = ORGAN_SLOT_TESTICLES
|
||||
fluid_transfer_factor = 0.5
|
||||
size = 2 //arbitrary value derived from length and girth for sprites.
|
||||
shape = DEF_COCK_SHAPE
|
||||
size = 2 //arbitrary value derived from length and diameter for sprites.
|
||||
layer_index = PENIS_LAYER_INDEX
|
||||
var/length = 6 //inches
|
||||
var/prev_length = 6
|
||||
var/girth = 4.38
|
||||
var/girth_ratio = COCK_GIRTH_RATIO_DEF //0.73; check citadel_defines.dm
|
||||
|
||||
var/prev_length = 6 //really should be renamed to prev_length
|
||||
var/diameter = 4.38
|
||||
var/diameter_ratio = COCK_DIAMETER_RATIO_DEF //0.25; check citadel_defines.dm
|
||||
|
||||
/obj/item/organ/genital/penis/modify_size(modifier, min = -INFINITY, max = INFINITY)
|
||||
var/new_value = CLAMP(length + modifier, min, max)
|
||||
@@ -68,7 +70,7 @@
|
||||
else if ((round(length) < round(prev_length)) && (length > 0.5))
|
||||
to_chat(owner, "<span class='warning'>Your [pick(GLOB.gentlemans_organ_names)] [pick("shrinks down to", "decreases into", "diminishes into", "deflates into", "shrivels regretfully into", "contracts into")] a [uppertext(round(length))] inch penis.</b></span>")
|
||||
icon_state = sanitize_text("penis_[shape]_[size]")
|
||||
girth = (length * girth_ratio)//Is it just me or is this ludicous, why not make it exponentially decay?
|
||||
diameter = (length * diameter_ratio)//Is it just me or is this ludicous, why not make it exponentially decay?
|
||||
|
||||
|
||||
/obj/item/organ/genital/penis/update_appearance()
|
||||
@@ -77,7 +79,8 @@
|
||||
var/icon_shape = S ? S.icon_state : "human"
|
||||
icon_state = "penis_[icon_shape]_[size]"
|
||||
var/lowershape = lowertext(shape)
|
||||
desc = "You see [aroused_state ? "an erect" : "a flaccid"] [lowershape] [name]. You estimate it's about [round(length, 0.25)] inch[round(length, 0.25) != 1 ? "es" : ""] long and [round(girth, 0.25)] inch[round(girth, 0.25) != 1 ? "es" : ""] in girth."
|
||||
desc = "You see [aroused_state ? "an erect" : "a flaccid"] [lowershape] [name]. You estimate it's about [round(length, 0.25)] inch[round(length, 0.25) != 1 ? "es" : ""] long and [round(diameter, 0.25)] inch[round(diameter, 0.25) != 1 ? "es" : ""] in diameter."
|
||||
|
||||
if(owner)
|
||||
if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"])
|
||||
if(ishuman(owner)) // Check before recasting type, although someone fucked up if you're not human AND have use_skintones somehow...
|
||||
@@ -97,6 +100,6 @@
|
||||
else
|
||||
color = "#[D.features["cock_color"]]"
|
||||
length = D.features["cock_length"]
|
||||
girth_ratio = D.features["cock_girth_ratio"]
|
||||
diameter_ratio = D.features["cock_diameter_ratio"]
|
||||
shape = D.features["cock_shape"]
|
||||
prev_length = length
|
||||
|
||||
@@ -11,8 +11,7 @@
|
||||
linked_organ_slot = ORGAN_SLOT_PENIS
|
||||
genital_flags = CAN_MASTURBATE_WITH|MASTURBATE_LINKED_ORGAN|GENITAL_FUID_PRODUCTION
|
||||
var/size_name = "average"
|
||||
shape = "Single"
|
||||
var/sack_size = BALLS_SACK_SIZE_DEF
|
||||
shape = DEF_BALLS_SHAPE
|
||||
fluid_id = /datum/reagent/consumable/semen
|
||||
masturbation_verb = "massage"
|
||||
layer_index = TESTICLES_LAYER_INDEX
|
||||
@@ -64,7 +63,6 @@
|
||||
color = "#[skintone2hex(H.skin_tone)]"
|
||||
else
|
||||
color = "#[D.features["balls_color"]]"
|
||||
sack_size = D.features["balls_sack_size"]
|
||||
shape = D.features["balls_shape"]
|
||||
if(D.features["balls_shape"] == "Hidden")
|
||||
ENABLE_BITFIELD(genital_flags, GENITAL_INTERNAL)
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
zone = BODY_ZONE_PRECISE_GROIN
|
||||
slot = "vagina"
|
||||
size = 1 //There is only 1 size right now
|
||||
shape = DEF_VAGINA_SHAPE
|
||||
genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_CAN_AROUSE
|
||||
masturbation_verb = "finger"
|
||||
arousal_verb = "You feel wetness on your crotch"
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
/datum/gear/geisha
|
||||
name = "Geisha suit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/geisha
|
||||
path = /obj/item/clothing/under/costume/geisha
|
||||
ckeywhitelist = list("atiefling")
|
||||
|
||||
/datum/gear/specialscarf
|
||||
@@ -123,7 +123,7 @@
|
||||
/datum/gear/mankini
|
||||
name = "Mankini"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/mankini
|
||||
path = /obj/item/clothing/under/misc/stripper/mankini
|
||||
ckeywhitelist = list("zigfie")
|
||||
|
||||
/datum/gear/pinkshoes
|
||||
@@ -160,7 +160,7 @@
|
||||
/datum/gear/performersoutfit
|
||||
name = "Bluish performer's outfit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/singery/custom
|
||||
path = /obj/item/clothing/under/costume/singer/yellow/custom
|
||||
ckeywhitelist = list("killer402402")
|
||||
|
||||
/datum/gear/vermillion
|
||||
@@ -184,7 +184,7 @@
|
||||
/datum/gear/naomisweater
|
||||
name = "worn black sweater"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/bb_sweater/black/naomi
|
||||
path = /obj/item/clothing/under/sweater/black/naomi
|
||||
ckeywhitelist = list("technicalmagi")
|
||||
|
||||
/datum/gear/naomicollar
|
||||
@@ -196,7 +196,7 @@
|
||||
/datum/gear/gladiator
|
||||
name = "Gladiator Armor"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/under/gladiator
|
||||
path = /obj/item/clothing/under/costume/gladiator
|
||||
ckeywhitelist = list("aroche")
|
||||
|
||||
/datum/gear/bloodredtie
|
||||
@@ -330,7 +330,7 @@ datum/gear/darksabresheath
|
||||
/datum/gear/Divine_robes
|
||||
name = "Divine robes"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/lunasune
|
||||
path = /obj/item/clothing/under/custom/lunasune
|
||||
ckeywhitelist = list("invader4352")
|
||||
|
||||
/datum/gear/gothcoat
|
||||
@@ -348,7 +348,7 @@ datum/gear/darksabresheath
|
||||
/datum/gear/sharkcloth
|
||||
name = "Leon's Skimpy Outfit"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/under/leoskimpy
|
||||
path = /obj/item/clothing/under/custom/leoskimpy
|
||||
ckeywhitelist = list("spectrosis")
|
||||
|
||||
/datum/gear/mimemask
|
||||
@@ -360,7 +360,7 @@ datum/gear/darksabresheath
|
||||
/datum/gear/mimeoveralls
|
||||
name = "Mime's Overalls"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/under/mimeoveralls
|
||||
path = /obj/item/clothing/under/custom/mimeoveralls
|
||||
ckeywhitelist = list("pireamaineach")
|
||||
|
||||
/datum/gear/soulneck
|
||||
@@ -408,7 +408,7 @@ datum/gear/darksabresheath
|
||||
/datum/gear/mw2_russian_para
|
||||
name = "Russian Paratrooper Jumper"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/mw2_russian_para
|
||||
path = /obj/item/clothing/under/custom/mw2_russian_para
|
||||
ckeywhitelist = list("investigator77")
|
||||
|
||||
/datum/gear/longblackgloves
|
||||
@@ -420,13 +420,13 @@ datum/gear/darksabresheath
|
||||
/datum/gear/trendy_fit
|
||||
name = "Trendy Fit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/trendy_fit
|
||||
path = /obj/item/clothing/under/custom/trendy_fit
|
||||
ckeywhitelist = list("midgetdragon")
|
||||
|
||||
/datum/gear/singery
|
||||
name = "Yellow Performer Outfit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/singery
|
||||
path = /obj/item/clothing/under/costume/singer/yellow
|
||||
ckeywhitelist = list("maxlynchy")
|
||||
|
||||
/datum/gear/csheet
|
||||
@@ -462,7 +462,7 @@ datum/gear/darksabresheath
|
||||
/datum/gear/mikubikini
|
||||
name = "starlight singer bikini"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/mikubikini
|
||||
path = /obj/item/clothing/under/custom/mikubikini
|
||||
ckeywhitelist = list("grandvegeta")
|
||||
|
||||
/datum/gear/mikujacket
|
||||
|
||||
@@ -14,21 +14,21 @@
|
||||
/datum/gear/bluescrubs
|
||||
name = "Blue Scrubs"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/medical/blue
|
||||
path = /obj/item/clothing/under/rank/medical/doctor/blue
|
||||
restricted_roles = list("Medical Doctor", "Chief Medical Officer", "Geneticist", "Chemist", "Virologist")
|
||||
restricted_desc = "Medical"
|
||||
|
||||
/datum/gear/greenscrubs
|
||||
name = "Green Scrubs"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/medical/green
|
||||
path = /obj/item/clothing/under/rank/medical/doctor/green
|
||||
restricted_roles = list("Medical Doctor", "Chief Medical Officer", "Geneticist", "Chemist", "Virologist")
|
||||
restricted_desc = "Medical"
|
||||
|
||||
/datum/gear/purplescrubs
|
||||
name = "Purple Scrubs"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/medical/purple
|
||||
path = /obj/item/clothing/under/rank/medical/doctor/purple
|
||||
restricted_roles = list("Medical Doctor", "Chief Medical Officer", "Geneticist", "Chemist", "Virologist")
|
||||
restricted_desc = "Medical"
|
||||
|
||||
@@ -42,6 +42,6 @@
|
||||
/datum/gear/nursesuit
|
||||
name = "Nurse Suit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/nursesuit
|
||||
path = /obj/item/clothing/under/rank/medical/doctor/nurse
|
||||
restricted_roles = list("Medical Doctor", "Chief Medical Officer", "Geneticist", "Chemist", "Virologist")
|
||||
restricted_desc = "Medical"
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/gear/navyblueuniformhos
|
||||
name = "Head of Security navyblue uniform"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/head_of_security/navyblue
|
||||
path = /obj/item/clothing/under/rank/security/head_of_security/formal
|
||||
restricted_roles = list("Head of Security")
|
||||
|
||||
/datum/gear/navybluehosberet
|
||||
@@ -31,7 +31,7 @@
|
||||
/datum/gear/navyblueuniformofficer
|
||||
name = "Security officer navyblue uniform"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/security/navyblue
|
||||
path = /obj/item/clothing/under/rank/security/officer/formal
|
||||
restricted_roles = list("Security Officer")
|
||||
|
||||
/datum/gear/navybluejacketwarden
|
||||
@@ -49,19 +49,19 @@
|
||||
/datum/gear/navyblueuniformwarden
|
||||
name = "Warden navyblue uniform"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/warden/navyblue
|
||||
path = /obj/item/clothing/under/rank/security/warden/formal
|
||||
restricted_roles = list("Warden")
|
||||
|
||||
/datum/gear/secskirt
|
||||
name = "Security skirt"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/security/skirt
|
||||
path = /obj/item/clothing/under/rank/security/officer/skirt
|
||||
restricted_roles = list("Security Officer", "Warden", "Head of Security")
|
||||
|
||||
/datum/gear/hosskirt
|
||||
name = "Head of security's skirt"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/head_of_security/skirt
|
||||
path = /obj/item/clothing/under/rank/security/head_of_security/skirt
|
||||
restricted_roles = list("Head of Security")
|
||||
|
||||
/datum/gear/sechud
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/gear/greytidestationwide
|
||||
name = "Staff Assistant's jumpsuit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/staffassistant
|
||||
path = /obj/item/clothing/under/misc/staffassistant
|
||||
restricted_roles = list("Assistant")
|
||||
|
||||
/datum/gear/neetsuit
|
||||
|
||||
@@ -1,136 +1,136 @@
|
||||
/datum/gear/suitblack
|
||||
name = "Black suit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/suit_jacket
|
||||
path = /obj/item/clothing/under/suit/black
|
||||
|
||||
/datum/gear/suitgreen
|
||||
name = "Green suit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/suit_jacket/green
|
||||
path = /obj/item/clothing/under/suit/green
|
||||
|
||||
/datum/gear/suitred
|
||||
name = "Red suit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/suit_jacket/red
|
||||
path = /obj/item/clothing/under/suit/red
|
||||
|
||||
/datum/gear/suitcharcoal
|
||||
name = "Charcoal suit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/suit_jacket/charcoal
|
||||
path = /obj/item/clothing/under/suit/charcoal
|
||||
|
||||
/datum/gear/suitnavy
|
||||
name = "Navy suit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/suit_jacket/navy
|
||||
path = /obj/item/clothing/under/suit/navy
|
||||
|
||||
/datum/gear/suitburgundy
|
||||
name = "Burgundy suit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/suit_jacket/burgundy
|
||||
path = /obj/item/clothing/under/suit/burgundy
|
||||
|
||||
/datum/gear/suittan
|
||||
name = "Tan suit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/suit_jacket/tan
|
||||
path = /obj/item/clothing/under/suit/tan
|
||||
|
||||
/datum/gear/suitwhite
|
||||
name = "White suit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/suit_jacket/white
|
||||
path = /obj/item/clothing/under/suit/white
|
||||
|
||||
/datum/gear/assistantformal
|
||||
name = "Assistant's formal uniform"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/assistantformal
|
||||
path = /obj/item/clothing/under/misc/assistantformal
|
||||
|
||||
/datum/gear/maidcostume
|
||||
name = "Maid costume"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/maid
|
||||
path = /obj/item/clothing/under/costume/maid
|
||||
|
||||
/datum/gear/mailmanuniform
|
||||
name = "Mailman's jumpsuit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/mailman
|
||||
path = /obj/item/clothing/under/misc/mailman
|
||||
|
||||
/datum/gear/skirtblack
|
||||
name = "Black skirt"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/skirt/black
|
||||
path = /obj/item/clothing/under/dress/skirt
|
||||
|
||||
/datum/gear/skirtblue
|
||||
name = "Blue skirt"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/skirt/blue
|
||||
path = /obj/item/clothing/under/dress/skirt/blue
|
||||
|
||||
/datum/gear/skirtred
|
||||
name = "Red skirt"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/skirt/red
|
||||
path = /obj/item/clothing/under/dress/skirt/red
|
||||
|
||||
/datum/gear/skirtpurple
|
||||
name = "Purple skirt"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/skirt/purple
|
||||
path = /obj/item/clothing/under/dress/skirt/purple
|
||||
|
||||
/datum/gear/skirtplaid
|
||||
name = "Plaid skirt"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/plaid_skirt
|
||||
path = /obj/item/clothing/under/dress/skirt/plaid
|
||||
|
||||
/datum/gear/schoolgirlblue
|
||||
name = "Blue Schoolgirl Uniform"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/schoolgirl
|
||||
path = /obj/item/clothing/under/costume/schoolgirl
|
||||
|
||||
/datum/gear/schoolgirlred
|
||||
name = "Red Schoolgirl Uniform"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/schoolgirl/red
|
||||
path = /obj/item/clothing/under/costume/schoolgirl/red
|
||||
|
||||
/datum/gear/schoolgirlgreen
|
||||
name = "Green Schoolgirl Uniform"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/schoolgirl/green
|
||||
path = /obj/item/clothing/under/costume/schoolgirl/green
|
||||
|
||||
/datum/gear/schoolgirlorange
|
||||
name = "Orange Schoolgirl Uniform"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/schoolgirl/orange
|
||||
path = /obj/item/clothing/under/costume/schoolgirl/orange
|
||||
|
||||
/datum/gear/stripeddress
|
||||
name = "Striped Dress"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/stripeddress
|
||||
path = /obj/item/clothing/under/dress/striped
|
||||
|
||||
/datum/gear/sundresswhite
|
||||
name = "White Sundress"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/sundresswhite
|
||||
path = /obj/item/clothing/under/dress/sundress/white
|
||||
|
||||
/datum/gear/sundress
|
||||
name = "Sundress"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/sundress
|
||||
path = /obj/item/clothing/under/dress/sundress
|
||||
|
||||
/datum/gear/greendress
|
||||
name = "Green Dress"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/greendress
|
||||
path = /obj/item/clothing/under/dress/green
|
||||
|
||||
/datum/gear/pinkdress
|
||||
name = "Pink Dress"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/pinkdress
|
||||
path = /obj/item/clothing/under/dress/pink
|
||||
/datum/gear/flowerdress
|
||||
name = "Flower Dress"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/flowerdress
|
||||
path = /obj/item/clothing/under/dress/flower
|
||||
|
||||
/datum/gear/sweptskirt
|
||||
name = "Swept skirt"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/sweptskirt
|
||||
path = /obj/item/clothing/under/dress/skirt/swept
|
||||
|
||||
/datum/gear/croptop
|
||||
name = "Croptop"
|
||||
@@ -145,7 +145,7 @@
|
||||
/datum/gear/kilt
|
||||
name = "Kilt"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/kilt
|
||||
path = /obj/item/clothing/under/costume/kilt
|
||||
|
||||
/datum/gear/camoshorts
|
||||
name = "Camo Pants"
|
||||
@@ -222,54 +222,54 @@
|
||||
/datum/gear/creamsweater
|
||||
name = "Cream Commando Sweater"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/bb_sweater
|
||||
path = /obj/item/clothing/under/sweater
|
||||
|
||||
/datum/gear/blacksweater
|
||||
name = "Black Commando Sweater"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/bb_sweater/black
|
||||
path = /obj/item/clothing/under/sweater/black
|
||||
|
||||
/datum/gear/purpsweater
|
||||
name = "Purple Commando Sweater"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/bb_sweater/purple
|
||||
path = /obj/item/clothing/under/sweater/purple
|
||||
|
||||
/datum/gear/greensweater
|
||||
name = "Green Commando Sweater"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/bb_sweater/green
|
||||
path = /obj/item/clothing/under/sweater/green
|
||||
|
||||
/datum/gear/redsweater
|
||||
name = "Red Commando Sweater"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/bb_sweater/red
|
||||
path = /obj/item/clothing/under/sweater/red
|
||||
|
||||
/datum/gear/bluesweater
|
||||
name = "Navy Commando Sweater"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/bb_sweater/blue
|
||||
path = /obj/item/clothing/under/sweater/blue
|
||||
|
||||
/datum/gear/keyholesweater
|
||||
name = "Keyhole Sweater"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/keyholesweater
|
||||
path = /obj/item/clothing/under/misc/keyholesweater
|
||||
|
||||
/datum/gear/polykilt
|
||||
name = "Polychromic Kilt"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/polychromic/kilt
|
||||
path = /obj/item/clothing/under/costume/kilt/polychromic
|
||||
cost = 3
|
||||
|
||||
/datum/gear/polyshorts
|
||||
name = "Polychromic Shorts"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/polychromic/shorts
|
||||
path = /obj/item/clothing/under/misc/polyshorts
|
||||
cost = 3
|
||||
|
||||
/datum/gear/polyshortpants
|
||||
name = "Polychromic Athletic Shorts"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/polychromic/shortpants
|
||||
path = /obj/item/clothing/under/shorts/polychromic
|
||||
cost = 2
|
||||
|
||||
// Trekie things
|
||||
@@ -277,21 +277,21 @@
|
||||
/datum/gear/trekcmdtos
|
||||
name = "TOS uniform, cmd"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/command
|
||||
path = /obj/item/clothing/under/trek/command
|
||||
restricted_desc = "Heads of Staff"
|
||||
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
|
||||
|
||||
/datum/gear/trekmedscitos
|
||||
name = "TOS uniform, med/sci"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/medsci
|
||||
path = /obj/item/clothing/under/trek/medsci
|
||||
restricted_desc = "Medical and Science"
|
||||
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
|
||||
|
||||
/datum/gear/trekengtos
|
||||
name = "TOS uniform, ops/sec"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/engsec
|
||||
path = /obj/item/clothing/under/trek/engsec
|
||||
restricted_desc = "Engineering and Security"
|
||||
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
|
||||
|
||||
@@ -299,21 +299,21 @@
|
||||
/datum/gear/trekcmdtng
|
||||
name = "TNG uniform, cmd"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/command/next
|
||||
path = /obj/item/clothing/under/trek/command/next
|
||||
restricted_desc = "Heads of Staff"
|
||||
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
|
||||
|
||||
/datum/gear/trekmedscitng
|
||||
name = "TNG uniform, med/sci"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/medsci/next
|
||||
path = /obj/item/clothing/under/trek/medsci/next
|
||||
restricted_desc = "Medical and Science"
|
||||
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
|
||||
|
||||
/datum/gear/trekengtng
|
||||
name = "TNG uniform, ops/sec"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/engsec/next
|
||||
path = /obj/item/clothing/under/trek/engsec/next
|
||||
restricted_desc = "Engineering and Security"
|
||||
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
|
||||
|
||||
@@ -321,21 +321,21 @@
|
||||
/datum/gear/trekcmdvoy
|
||||
name = "VOY uniform, cmd"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/command/voy
|
||||
path = /obj/item/clothing/under/trek/command/voy
|
||||
restricted_desc = "Heads of Staff"
|
||||
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
|
||||
|
||||
/datum/gear/trekmedscivoy
|
||||
name = "VOY uniform, med/sci"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/medsci/voy
|
||||
path = /obj/item/clothing/under/trek/medsci/voy
|
||||
restricted_desc = "Medical and Science"
|
||||
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
|
||||
|
||||
/datum/gear/trekengvoy
|
||||
name = "VOY uniform, ops/sec"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/engsec/voy
|
||||
path = /obj/item/clothing/under/trek/engsec/voy
|
||||
restricted_desc = "Engineering and Security"
|
||||
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
|
||||
|
||||
@@ -343,21 +343,21 @@
|
||||
/datum/gear/trekcmdds9
|
||||
name = "DS9 uniform, cmd"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/command/ds9
|
||||
path = /obj/item/clothing/under/trek/command/ds9
|
||||
restricted_desc = "Heads of Staff"
|
||||
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
|
||||
|
||||
/datum/gear/trekmedscids9
|
||||
name = "DS9 uniform, med/sci"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/medsci/ds9
|
||||
path = /obj/item/clothing/under/trek/medsci/ds9
|
||||
restricted_desc = "Medical and Science"
|
||||
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
|
||||
|
||||
/datum/gear/trekengds9
|
||||
name = "DS9 uniform, ops/sec"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/engsec/ds9
|
||||
path = /obj/item/clothing/under/trek/engsec/ds9
|
||||
restricted_desc = "Engineering and Security"
|
||||
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
|
||||
|
||||
@@ -365,21 +365,21 @@
|
||||
/datum/gear/trekcmdent
|
||||
name = "ENT uniform, cmd"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/command/ent
|
||||
path = /obj/item/clothing/under/trek/command/ent
|
||||
restricted_desc = "Heads of Staff"
|
||||
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
|
||||
|
||||
/datum/gear/trekmedscient
|
||||
name = "ENT uniform, med/sci"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/medsci/ent
|
||||
path = /obj/item/clothing/under/trek/medsci/ent
|
||||
restricted_desc = "Medical and Science"
|
||||
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
|
||||
|
||||
/datum/gear/trekengent
|
||||
name = "ENT uniform, ops/sec"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/trek/engsec/ent
|
||||
path = /obj/item/clothing/under/trek/engsec/ent
|
||||
restricted_desc = "Engineering and Security"
|
||||
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
|
||||
|
||||
@@ -387,75 +387,75 @@
|
||||
/datum/gear/gear_harnesses
|
||||
name = "Gear Harness"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/gear_harness
|
||||
path = /obj/item/clothing/under/misc/gear_harness
|
||||
|
||||
//Christmas
|
||||
/*Commenting out Until next Christmas or made automatic
|
||||
/datum/gear/christmasmaler
|
||||
name = "Red Masculine Christmas Suit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/christmas/christmasmaler
|
||||
path = /obj/item/clothing/under/costume/christmas
|
||||
|
||||
/datum/gear/christmasmaleg
|
||||
name = "Green Masculine Christmas Suit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/christmas/christmasmaleg
|
||||
path = /obj/item/clothing/under/costume/christmas/green
|
||||
|
||||
/datum/gear/christmasfemaler
|
||||
name = "Red Feminine Christmas Suit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/christmas/christmasfemaler
|
||||
path = /obj/item/clothing/under/costume/christmas/croptop
|
||||
|
||||
/datum/gear/christmasfemaleg
|
||||
name = "Green Feminine Christmas Suit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/christmas/christmasfemaleg
|
||||
path = /obj/item/clothing/under/costume/christmas/croptop/green
|
||||
|
||||
/datum/gear/pinkstripper
|
||||
name = "Pink stripper outfit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/stripper_pink
|
||||
path = /obj/item/clothing/under/misc/stripper
|
||||
cost = 3
|
||||
*/
|
||||
|
||||
/datum/gear/greenstripper
|
||||
name = "Green stripper outfit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/stripper_green
|
||||
path = /obj/item/clothing/under/misc/stripper/green
|
||||
cost = 3
|
||||
|
||||
/datum/gear/qipao
|
||||
name = "Qipao, Black"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/lunar/qipao
|
||||
path = /obj/item/clothing/under/costume/qipao
|
||||
cost = 3
|
||||
|
||||
/datum/gear/qipao/white
|
||||
name = "Qipao, White"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/lunar/qipao/white
|
||||
path = /obj/item/clothing/under/costume/qipao/white
|
||||
cost = 3
|
||||
|
||||
/datum/gear/qipao/red
|
||||
name = "Qipao, Red"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/lunar/qipao/red
|
||||
path = /obj/item/clothing/under/costume/qipao/red
|
||||
cost = 3
|
||||
|
||||
/datum/gear/cheongsam
|
||||
name = "Cheongsam, Black"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/lunar/cheongsam
|
||||
path = /obj/item/clothing/under/costume/cheongsam
|
||||
cost = 3
|
||||
|
||||
/datum/gear/cheongsam/white
|
||||
name = "Cheongsam, White"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/lunar/cheongsam/white
|
||||
path = /obj/item/clothing/under/costume/cheongsam/white
|
||||
cost = 3
|
||||
|
||||
/datum/gear/cheongsam/red
|
||||
name = "Cheongsam, Red"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/lunar/cheongsam/red
|
||||
path = /obj/item/clothing/under/costume/cheongsam/red
|
||||
cost = 3
|
||||
@@ -49,6 +49,5 @@
|
||||
/datum/preferences/copy_to(mob/living/carbon/human/character, icon_updates = 1)
|
||||
..()
|
||||
character.give_genitals(TRUE)
|
||||
character.flavor_text = features["flavor_text"] //Let's update their flavor_text at least initially
|
||||
if(icon_updates)
|
||||
character.update_genitals()
|
||||
|
||||
@@ -50,13 +50,11 @@
|
||||
WRITE_FILE(S["feature_cock_color"], features["cock_color"])
|
||||
WRITE_FILE(S["feature_cock_length"], features["cock_length"])
|
||||
WRITE_FILE(S["feature_cock_girth"], features["cock_girth"])
|
||||
WRITE_FILE(S["feature_has_sheath"], features["sheath_color"])
|
||||
//balls features
|
||||
WRITE_FILE(S["feature_has_balls"], features["has_balls"])
|
||||
WRITE_FILE(S["feature_balls_color"], features["balls_color"])
|
||||
WRITE_FILE(S["feature_balls_size"], features["balls_size"])
|
||||
WRITE_FILE(S["feature_balls_shape"], features["balls_shape"])
|
||||
WRITE_FILE(S["feature_balls_sack_size"], features["balls_sack_size"])
|
||||
//breasts features
|
||||
WRITE_FILE(S["feature_has_breasts"], features["has_breasts"])
|
||||
WRITE_FILE(S["feature_breasts_size"], features["breasts_size"])
|
||||
|
||||
+3
-96
@@ -8,85 +8,6 @@
|
||||
// Armor lists for even Heads of Staff is Nulled out do round start armor as well most armor going onto the suit itself rather then a armor slot - Trilby
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/trek
|
||||
name = "Section 31 Uniform"
|
||||
desc = "Oooh... right."
|
||||
icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
|
||||
mutantrace_variation = NONE
|
||||
item_state = ""
|
||||
can_adjust = FALSE //to prevent you from "wearing it casually"
|
||||
|
||||
//TOS
|
||||
/obj/item/clothing/under/rank/trek/command
|
||||
name = "Command Uniform"
|
||||
desc = "The uniform worn by command officers in the mid 2260s."
|
||||
icon_state = "trek_command"
|
||||
item_state = "trek_command"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/trek/engsec
|
||||
name = "Operations Uniform"
|
||||
desc = "The uniform worn by operations officers of the mid 2260s. You feel strangely vulnerable just seeing this..."
|
||||
icon_state = "trek_engsec"
|
||||
item_state = "trek_engsec"
|
||||
|
||||
/obj/item/clothing/under/rank/trek/medsci
|
||||
name = "MedSci Uniform"
|
||||
desc = "The uniform worn by medsci officers in the mid 2260s."
|
||||
icon_state = "trek_medsci"
|
||||
item_state = "trek_medsci"
|
||||
permeability_coefficient = 0.50
|
||||
|
||||
//TNG
|
||||
/obj/item/clothing/under/rank/trek/command/next
|
||||
desc = "The uniform worn by command officers. This one's from the mid 2360s."
|
||||
icon_state = "trek_next_command"
|
||||
item_state = "trek_next_command"
|
||||
|
||||
/obj/item/clothing/under/rank/trek/engsec/next
|
||||
desc = "The uniform worn by operation officers. This one's from the mid 2360s."
|
||||
icon_state = "trek_next_engsec"
|
||||
item_state = "trek_next_engsec"
|
||||
|
||||
/obj/item/clothing/under/rank/trek/medsci/next
|
||||
desc = "The uniform worn by medsci officers. This one's from the mid 2360s."
|
||||
icon_state = "trek_next_medsci"
|
||||
item_state = "trek_next_medsci"
|
||||
|
||||
//ENT
|
||||
/obj/item/clothing/under/rank/trek/command/ent
|
||||
desc = "The uniform worn by command officers of the 2140s."
|
||||
icon_state = "trek_ent_command"
|
||||
item_state = "trek_ent_command"
|
||||
|
||||
/obj/item/clothing/under/rank/trek/engsec/ent
|
||||
desc = "The uniform worn by operations officers of the 2140s."
|
||||
icon_state = "trek_ent_engsec"
|
||||
item_state = "trek_ent_engsec"
|
||||
|
||||
/obj/item/clothing/under/rank/trek/medsci/ent
|
||||
desc = "The uniform worn by medsci officers of the 2140s."
|
||||
icon_state = "trek_ent_medsci"
|
||||
item_state = "trek_ent_medsci"
|
||||
|
||||
//VOY
|
||||
/obj/item/clothing/under/rank/trek/command/voy
|
||||
desc = "The uniform worn by command officers of the 2370s."
|
||||
icon_state = "trek_voy_command"
|
||||
item_state = "trek_voy_command"
|
||||
|
||||
/obj/item/clothing/under/rank/trek/engsec/voy
|
||||
desc = "The uniform worn by operations officers of the 2370s."
|
||||
icon_state = "trek_voy_engsec"
|
||||
item_state = "trek_voy_engsec"
|
||||
|
||||
/obj/item/clothing/under/rank/trek/medsci/voy
|
||||
desc = "The uniform worn by medsci officers of the 2370s."
|
||||
icon_state = "trek_voy_medsci"
|
||||
item_state = "trek_voy_medsci"
|
||||
|
||||
//DS9
|
||||
|
||||
/obj/item/clothing/suit/storage/trek/ds9
|
||||
@@ -116,21 +37,6 @@
|
||||
permeability_coefficient = 0.01
|
||||
armor = list("melee" = 50, "bullet" = 50, "laser" = 50,"energy" = 50, "bomb" = 50, "bio" = 50, "rad" = 50, "fire" = 50, "acid" = 50)
|
||||
|
||||
/obj/item/clothing/under/rank/trek/command/ds9
|
||||
desc = "The uniform worn by command officers of the 2380s."
|
||||
icon_state = "trek_ds9_command"
|
||||
item_state = "trek_ds9_command"
|
||||
|
||||
/obj/item/clothing/under/rank/trek/engsec/ds9
|
||||
desc = "The uniform worn by operations officers of the 2380s."
|
||||
icon_state = "trek_ds9_engsec"
|
||||
item_state = "trek_ds9_engsec"
|
||||
|
||||
/obj/item/clothing/under/rank/trek/medsci/ds9
|
||||
desc = "The uniform undershirt worn by medsci officers of the 2380s."
|
||||
icon_state = "trek_ds9_medsci"
|
||||
item_state = "trek_ds9_medsci"
|
||||
|
||||
//MODERN ish Joan sqrl sprites. I think
|
||||
|
||||
//For general use
|
||||
@@ -168,8 +74,9 @@
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(!usr.canmove || usr.stat || usr.restrained())
|
||||
return 0
|
||||
var/mob/living/L = usr
|
||||
if(!istype(L) || !CHECK_MOBILITY(L, MOBILITY_USE))
|
||||
return FALSE
|
||||
|
||||
switch(unbuttoned)
|
||||
if(0)
|
||||
@@ -1,80 +0,0 @@
|
||||
/*
|
||||
* Turtlenecks in general go here!
|
||||
*/
|
||||
|
||||
//CMO's Turtleneck, because they don't have any unique clothes!
|
||||
|
||||
/obj/item/clothing/under/rank/chief_medical_officer/turtleneck
|
||||
desc = "It's a turtleneck worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection, for an officer with a superior sense of style and practicality."
|
||||
name = "chief medical officer's turtleneck"
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/clothing/turtlenecks.dmi'
|
||||
icon = 'modular_citadel/icons/obj/clothing/turtlenecks.dmi'
|
||||
icon_state = "cmoturtle"
|
||||
item_state = "w_suit"
|
||||
item_color = "cmoturtle"
|
||||
permeability_coefficient = 0.5
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0, fire = 0, acid = 0)
|
||||
can_adjust = TRUE
|
||||
alt_covers_chest = TRUE
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/structure/closet/secure_closet/CMO/PopulateContents() //This is placed here because it's a very specific addition for a very specific niche
|
||||
..()
|
||||
new /obj/item/clothing/under/rank/chief_medical_officer/turtleneck(src)
|
||||
|
||||
/obj/item/clothing/under/syndicate/cosmetic
|
||||
name = "tactitool turtleneck"
|
||||
desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
|
||||
icon_state = "tactifool"
|
||||
item_state = "bl_suit"
|
||||
item_color = "tactifool"
|
||||
has_sensor = TRUE
|
||||
mutantrace_variation = NONE
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
|
||||
|
||||
/obj/item/clothing/under/syndicate/tacticool
|
||||
has_sensor = TRUE
|
||||
|
||||
// Sweaters are good enough for this category too.
|
||||
|
||||
/obj/item/clothing/under/bb_sweater
|
||||
name = "cream sweater"
|
||||
desc = "Why trade style for comfort? Now you can go commando down south and still be cozy up north."
|
||||
icon_state = "bb_turtle"
|
||||
item_state = "w_suit"
|
||||
item_color = "bb_turtle"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
can_adjust = TRUE
|
||||
icon = 'modular_citadel/icons/obj/clothing/turtlenecks.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/under/bb_sweater/black
|
||||
name = "black sweater"
|
||||
icon_state = "bb_turtleblk"
|
||||
item_state = "bl_suit"
|
||||
item_color = "bb_turtleblk"
|
||||
|
||||
/obj/item/clothing/under/bb_sweater/purple
|
||||
name = "purple sweater"
|
||||
icon_state = "bb_turtlepur"
|
||||
item_state = "p_suit"
|
||||
item_color = "bb_turtlepur"
|
||||
|
||||
/obj/item/clothing/under/bb_sweater/green
|
||||
name = "green sweater"
|
||||
icon_state = "bb_turtlegrn"
|
||||
item_state = "g_suit"
|
||||
item_color = "bb_turtlegrn"
|
||||
|
||||
/obj/item/clothing/under/bb_sweater/red
|
||||
name = "red sweater"
|
||||
icon_state = "bb_turtlered"
|
||||
item_state = "r_suit"
|
||||
item_color = "bb_turtlered"
|
||||
|
||||
/obj/item/clothing/under/bb_sweater/blue
|
||||
name = "blue sweater"
|
||||
icon_state = "bb_turtleblu"
|
||||
item_state = "b_suit"
|
||||
item_color = "bb_turtleblu"
|
||||
@@ -1,29 +0,0 @@
|
||||
/*/////////////////////////////////////////////////////////////////////////////////
|
||||
/////// ///////
|
||||
/////// Cit's exclusive jumpsuits, uniforms, etc. go here ///////
|
||||
/////// ///////
|
||||
*//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/obj/item/clothing/under/corporateuniform
|
||||
name = "corporate uniform"
|
||||
desc = "A comfortable, tight fitting jumpsuit made of premium materials. Not space-proof."
|
||||
icon = 'modular_citadel/icons/obj/clothing/cit_clothes.dmi'
|
||||
icon_state = "tssuit"
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
item_state = "r_suit"
|
||||
can_adjust = FALSE
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/under/rank/captain/femformal
|
||||
name ="captain's female formal outfit"
|
||||
desc = ""
|
||||
icon = 'modular_citadel/icons/obj/clothing/cit_clothes.dmi'
|
||||
icon_state = "lewdcap"
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
item_state = "lewdcap"
|
||||
item_color = "lewdcap"
|
||||
can_adjust = FALSE
|
||||
sensor_mode = SENSOR_COORDS //it's still a captain's suit nerd
|
||||
random_sensor = FALSE
|
||||
mutantrace_variation = NONE
|
||||
@@ -266,7 +266,7 @@
|
||||
item_state = "petcollar-stripe"
|
||||
tagname = null
|
||||
|
||||
/obj/item/clothing/under/singery/custom
|
||||
/obj/item/clothing/under/costume/singer/yellow/custom
|
||||
name = "bluish performer's outfit"
|
||||
desc = "Just looking at this makes you want to sing."
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
@@ -313,7 +313,7 @@
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/under/bb_sweater/black/naomi
|
||||
/obj/item/clothing/under/sweater/black/naomi
|
||||
name = "worn black sweater"
|
||||
mutantrace_variation = NONE
|
||||
desc = "A well-loved sweater, showing signs of several cleanings and re-stitchings. And a few stains. Is that cat fur?"
|
||||
@@ -382,7 +382,7 @@
|
||||
icon_state = "luckyjack"
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/under/lunasune
|
||||
/obj/item/clothing/under/custom/lunasune
|
||||
name = "Divine Robes"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
@@ -391,7 +391,7 @@
|
||||
icon_state = "Divine_robes"
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/under/leoskimpy
|
||||
/obj/item/clothing/under/custom/leoskimpy
|
||||
name = "Leon's Skimpy Outfit"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
@@ -400,7 +400,7 @@
|
||||
icon_state = "shark_cloth"
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/under/mimeoveralls
|
||||
/obj/item/clothing/under/custom/mimeoveralls
|
||||
name = "Mime's Overalls"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
@@ -461,7 +461,7 @@
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/under/mw2_russian_para
|
||||
/obj/item/clothing/under/custom/mw2_russian_para
|
||||
name = "Russian Paratrooper Jumper"
|
||||
desc = "A Russian made old paratrooper jumpsuit, has many pockets for easy storage of gear from a by gone era. As bulky as it looks, its shockingly light!"
|
||||
icon_state = "mw2_russian_para"
|
||||
@@ -478,7 +478,7 @@
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
|
||||
/obj/item/clothing/under/trendy_fit
|
||||
/obj/item/clothing/under/custom/trendy_fit
|
||||
name = "Trendy Fitting Clothing"
|
||||
desc = "An outfit straight from the boredom of space, its the type of thing only someone trying to entertain themselves on the way to their next destination would wear."
|
||||
icon_state = "trendy_fit"
|
||||
@@ -512,7 +512,7 @@
|
||||
item_state = "onion"
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
|
||||
/obj/item/clothing/under/mikubikini
|
||||
/obj/item/clothing/under/custom/mikubikini
|
||||
name = "starlight singer bikini"
|
||||
desc = " "
|
||||
icon_state = "mikubikini"
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
/client/proc/cmd_mentor_dementor()
|
||||
set category = "Mentor"
|
||||
set name = "dementor"
|
||||
if(!is_mentor())
|
||||
return
|
||||
remove_mentor_verbs()
|
||||
if (/client/proc/mentor_unfollow in verbs)
|
||||
mentor_unfollow()
|
||||
GLOB.mentors -= src
|
||||
verbs += /client/proc/cmd_mentor_rementor
|
||||
|
||||
/client/proc/cmd_mentor_rementor()
|
||||
set category = "Mentor"
|
||||
set name = "rementor"
|
||||
if(!is_mentor())
|
||||
return
|
||||
add_mentor_verbs()
|
||||
GLOB.mentors += src
|
||||
verbs -= /client/proc/cmd_mentor_rementor
|
||||
@@ -14,8 +14,7 @@ GLOBAL_PROTECT(mentor_href_token)
|
||||
/datum/mentors/New(ckey)
|
||||
if(!ckey)
|
||||
QDEL_IN(src, 0)
|
||||
throw EXCEPTION("Mentor datum created without a ckey")
|
||||
return
|
||||
CRASH("Mentor datum created without a ckey")
|
||||
target = ckey(ckey)
|
||||
name = "[ckey]'s mentor datum"
|
||||
href_token = GenerateToken()
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
GLOBAL_LIST_INIT(mentor_verbs, list(
|
||||
/client/proc/cmd_mentor_say,
|
||||
/client/proc/show_mentor_memo
|
||||
/client/proc/show_mentor_memo,
|
||||
/client/proc/cmd_mentor_dementor
|
||||
))
|
||||
GLOBAL_PROTECT(mentor_verbs)
|
||||
|
||||
|
||||
@@ -38,8 +38,9 @@
|
||||
if(!msg)
|
||||
msg = input(src,"Message:", "Private message") as text|null
|
||||
|
||||
if(!msg && is_mentor(whom))
|
||||
to_chat(GLOB.admins | GLOB.mentors, "<span class='purple'>[src] has stopped their reply to [whom]'s mhelp.</span>")
|
||||
if(!msg)
|
||||
if (is_mentor(whom))
|
||||
to_chat(GLOB.admins | GLOB.mentors, "<span class='purple'>[src] has stopped their reply to [whom]'s mhelp.</span>")
|
||||
return
|
||||
|
||||
if(!C)
|
||||
@@ -54,10 +55,10 @@
|
||||
return
|
||||
|
||||
msg = sanitize(copytext_char(msg, 1, MAX_MESSAGE_LEN))
|
||||
if(!msg && is_mentor(whom))
|
||||
to_chat(GLOB.admins | GLOB.mentors, "<span class='purple'>[src] has stopped their reply to [whom]'s mhelp.</span>")
|
||||
if(!msg)
|
||||
if (is_mentor(whom))
|
||||
to_chat(GLOB.admins | GLOB.mentors, "<span class='purple'>[src] has stopped their reply to [whom]'s mhelp.</span>")
|
||||
return
|
||||
|
||||
log_mentor("Mentor PM: [key_name(src)]->[key_name(C)]: [msg]")
|
||||
|
||||
msg = emoji_parse(msg)
|
||||
|
||||
@@ -1,83 +1,29 @@
|
||||
/mob/living/carbon
|
||||
var/combatmode = FALSE //literally lifeweb
|
||||
var/lastmousedir
|
||||
var/wrongdirmovedelay
|
||||
var/lastdirchange
|
||||
var/combatmessagecooldown
|
||||
|
||||
//oh no vore time
|
||||
var/voremode = FALSE
|
||||
|
||||
/mob/living/carbon/CanPass(atom/movable/mover, turf/target)
|
||||
. = ..()
|
||||
if(.)
|
||||
var/mob/living/mobdude = mover
|
||||
if(istype(mobdude))
|
||||
if(!resting && mobdude.resting)
|
||||
if(!(mobdude.pass_flags & PASSMOB))
|
||||
return FALSE
|
||||
return .
|
||||
|
||||
/mob/living/carbon/proc/toggle_combat_mode(forced, silent)
|
||||
if(!forced)
|
||||
if(recoveringstam || stat != CONSCIOUS)
|
||||
return TRUE
|
||||
for(var/i in status_effects)
|
||||
var/datum/status_effect/S = i
|
||||
if(S.blocks_combatmode)
|
||||
return TRUE
|
||||
combatmode = !combatmode
|
||||
if(voremode)
|
||||
toggle_vore_mode()
|
||||
if(!silent)
|
||||
if(combatmode)
|
||||
if(world.time >= combatmessagecooldown)
|
||||
if(a_intent != INTENT_HELP)
|
||||
visible_message("<span class='warning'>[src] [resting ? "tenses up" : (prob(95)? "drops into a combative stance" : (prob(95)? "poses aggressively" : "asserts dominance with their pose"))].</span>")
|
||||
else
|
||||
visible_message("<span class='notice'>[src] [pick("looks","seems","goes")] [pick("alert","attentive","vigilant")].</span>")
|
||||
playsound_local(src, 'sound/misc/ui_toggle.ogg', 50, FALSE, pressure_affected = FALSE) //Sound from interbay!
|
||||
else
|
||||
playsound_local(src, 'sound/misc/ui_toggleoff.ogg', 50, FALSE, pressure_affected = FALSE) //Slightly modified version of the above!
|
||||
if(client)
|
||||
client.show_popup_menus = !combatmode // So we can right-click for alternate actions and all that other good shit. Also moves examine to shift+rightclick to make it possible to attack while sprinting
|
||||
var/obj/screen/combattoggle/T = locate() in hud_used?.static_inventory
|
||||
T?.update_icon_state()
|
||||
combatmessagecooldown = 10 SECONDS + world.time //This is set 100% of the time to make sure squeezing regen out of process cycles doesn't result in the combat mode message getting spammed
|
||||
SEND_SIGNAL(src, COMSIG_COMBAT_TOGGLED, src, combatmode)
|
||||
return TRUE
|
||||
|
||||
mob/living/carbon/proc/toggle_vore_mode()
|
||||
/mob/living/carbon/proc/toggle_vore_mode()
|
||||
voremode = !voremode
|
||||
var/obj/screen/voretoggle/T = locate() in hud_used?.static_inventory
|
||||
T?.update_icon_state()
|
||||
if(combatmode)
|
||||
if(combat_flags & COMBAT_FLAG_COMBAT_TOGGLED)
|
||||
return FALSE //let's not override the main draw of the game these days
|
||||
SEND_SIGNAL(src, COMSIG_VORE_TOGGLED, src, voremode)
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/Move(atom/newloc, direct = 0)
|
||||
var/currentdirection = dir
|
||||
. = ..()
|
||||
wrongdirmovedelay = FALSE
|
||||
if(combatmode && client && lastmousedir)
|
||||
if((combat_flags & COMBAT_FLAG_COMBAT_ACTIVE) && client && lastmousedir)
|
||||
if(lastmousedir != dir)
|
||||
wrongdirmovedelay = TRUE
|
||||
setDir(lastmousedir, ismousemovement = TRUE)
|
||||
if(currentdirection != dir)
|
||||
lastdirchange = world.time
|
||||
|
||||
|
||||
/mob/living/carbon/onMouseMove(object, location, control, params)
|
||||
if(!combatmode)
|
||||
if(!(combat_flags & COMBAT_FLAG_COMBAT_ACTIVE))
|
||||
return
|
||||
mouse_face_atom(object)
|
||||
lastmousedir = dir
|
||||
|
||||
/mob/living/carbon/setDir(newdir, ismousemovement = FALSE)
|
||||
if(!combatmode || ismousemovement)
|
||||
if(dir != newdir)
|
||||
lastdirchange = world.time
|
||||
. = ..()
|
||||
else
|
||||
return
|
||||
|
||||
@@ -15,24 +15,6 @@
|
||||
if(!forced && (status_flags & GODMODE))
|
||||
return FALSE
|
||||
apply_damage(amount > 0 ? amount*incomingstammult : amount, STAMINA, affected_zone)
|
||||
if(recoveringstam && amount > 20)
|
||||
if((combat_flags & COMBAT_FLAG_HARD_STAMCRIT) && amount > 20)
|
||||
incomingstammult = max(0.01, incomingstammult/(amount*0.05))
|
||||
return amount
|
||||
|
||||
/mob/living/carbon/doSprintLossTiles(tiles)
|
||||
doSprintBufferRegen(FALSE) //first regen.
|
||||
if(sprint_buffer)
|
||||
var/use = min(tiles, sprint_buffer)
|
||||
sprint_buffer -= use
|
||||
tiles -= use
|
||||
update_hud_sprint_bar()
|
||||
if(!tiles) //we had enough, we're done!
|
||||
return
|
||||
adjustStaminaLoss(tiles * sprint_stamina_cost) //use stamina to cover deficit.
|
||||
|
||||
/mob/living/carbon/proc/doSprintBufferRegen(updating = TRUE)
|
||||
var/diff = world.time - sprint_buffer_regen_last
|
||||
sprint_buffer_regen_last = world.time
|
||||
sprint_buffer = min(sprint_buffer_max, sprint_buffer + sprint_buffer_regen_ds * diff)
|
||||
if(updating)
|
||||
update_hud_sprint_bar()
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/mob/living/carbon/human/resist_embedded()
|
||||
if(handcuffed || legcuffed || (wear_suit && wear_suit.breakouttime))
|
||||
return
|
||||
if(canmove && !on_fire)
|
||||
if(CHECK_MOBILITY(src, MOBILITY_MOVE) && !on_fire)
|
||||
for(var/obj/item/bodypart/L in bodyparts)
|
||||
if(istype(L) && L.embedded_objects.len)
|
||||
for(var/obj/item/I in L.embedded_objects)
|
||||
@@ -19,10 +19,10 @@
|
||||
L.embedded_objects -= I
|
||||
L.receive_damage(I.embedding.embedded_unsafe_removal_pain_multiplier*I.w_class*painmul)//It hurts to rip it out, get surgery you dingus. And if you're ripping it out quickly via resist, it's gonna hurt even more
|
||||
I.forceMove(get_turf(src))
|
||||
I.unembedded()
|
||||
user.put_in_hands(I)
|
||||
user.emote("scream")
|
||||
user.visible_message("[user] rips [I] out of [user.p_their()] [L.name]!","<span class='notice'>You remove [I] from your [L.name].</span>")
|
||||
if(!has_embedded_objects())
|
||||
clear_alert("embeddedobject")
|
||||
SEND_SIGNAL(user, COMSIG_CLEAR_MOOD_EVENT, "embedded")
|
||||
return
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
/mob/living/carbon/human/Move(NewLoc, direct)
|
||||
var/oldpseudoheight = pseudo_z_axis
|
||||
. = ..()
|
||||
if(. && sprinting && !(movement_type & FLYING) && canmove && !resting && m_intent == MOVE_INTENT_RUN && has_gravity(loc) && !pulledby)
|
||||
if(!HAS_TRAIT(src, TRAIT_FREESPRINT))
|
||||
doSprintLossTiles(1)
|
||||
if((oldpseudoheight - pseudo_z_axis) >= 8)
|
||||
to_chat(src, "<span class='warning'>You trip off of the elevated surface!</span>")
|
||||
for(var/obj/item/I in held_items)
|
||||
accident(I)
|
||||
Knockdown(80)
|
||||
|
||||
/mob/living/carbon/human/movement_delay()
|
||||
. = 0
|
||||
if(!resting && m_intent == MOVE_INTENT_RUN && sprinting)
|
||||
var/static/datum/config_entry/number/movedelay/sprint_speed_increase/SSI
|
||||
if(!SSI)
|
||||
SSI = CONFIG_GET_ENTRY(number/movedelay/sprint_speed_increase)
|
||||
. -= SSI.config_entry_value
|
||||
if(wrongdirmovedelay)
|
||||
. += 1
|
||||
. += ..()
|
||||
|
||||
/mob/living/carbon/human/proc/togglesprint() // If you call this proc outside of hotkeys or clicking the HUD button, I'll be disappointed in you.
|
||||
sprinting = !sprinting
|
||||
if(!resting && m_intent == MOVE_INTENT_RUN && canmove)
|
||||
if(sprinting)
|
||||
playsound_local(src, 'sound/misc/sprintactivate.ogg', 50, FALSE, pressure_affected = FALSE)
|
||||
else
|
||||
playsound_local(src, 'sound/misc/sprintdeactivate.ogg', 50, FALSE, pressure_affected = FALSE)
|
||||
var/obj/screen/sprintbutton/S = locate() in hud_used?.static_inventory
|
||||
S?.update_icon_state()
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/human/proc/sprint_hotkey(targetstatus)
|
||||
if(targetstatus ? !sprinting : sprinting)
|
||||
togglesprint()
|
||||
@@ -1,5 +1,2 @@
|
||||
/mob/living/proc/adjustStaminaLossBuffered(amount, updating_health = TRUE, forced = FALSE)
|
||||
return
|
||||
|
||||
/mob/living/proc/doSprintLossTiles(amount)
|
||||
return
|
||||
|
||||
@@ -1,32 +1,4 @@
|
||||
/mob/living
|
||||
var/sprinting = FALSE
|
||||
var/recoveringstam = FALSE
|
||||
var/incomingstammult = 1
|
||||
var/bufferedstam = 0
|
||||
var/stambuffer = 20
|
||||
var/stambufferregentime
|
||||
var/attemptingstandup = FALSE
|
||||
var/intentionalresting = FALSE
|
||||
var/attemptingcrawl = FALSE
|
||||
|
||||
//Sprint buffer---
|
||||
var/sprint_buffer = 42 //Tiles
|
||||
var/sprint_buffer_max = 42
|
||||
var/sprint_buffer_regen_ds = 0.3 //Tiles per world.time decisecond
|
||||
var/sprint_buffer_regen_last = 0 //last world.time this was regen'd for math.
|
||||
var/sprint_stamina_cost = 0.70 //stamina loss per tile while insufficient sprint buffer.
|
||||
//---End
|
||||
|
||||
/mob/living/update_config_movespeed()
|
||||
. = ..()
|
||||
sprint_buffer_max = CONFIG_GET(number/movedelay/sprint_buffer_max)
|
||||
sprint_buffer_regen_ds = CONFIG_GET(number/movedelay/sprint_buffer_regen_per_ds)
|
||||
sprint_stamina_cost = CONFIG_GET(number/movedelay/sprint_stamina_cost)
|
||||
|
||||
/mob/living/movement_delay(ignorewalk = 0)
|
||||
. = ..()
|
||||
if(resting)
|
||||
. += 6
|
||||
|
||||
/atom
|
||||
var/pseudo_z_axis
|
||||
@@ -53,87 +25,25 @@
|
||||
pseudo_z_axis = newloc.get_fake_z()
|
||||
pixel_z = pseudo_z_axis
|
||||
|
||||
/mob/living/proc/lay_down()
|
||||
set name = "Rest"
|
||||
set category = "IC"
|
||||
|
||||
if(client && client.prefs && client.prefs.autostand)
|
||||
intentionalresting = !intentionalresting
|
||||
to_chat(src, "<span class='notice'>You are now attempting to [intentionalresting ? "[!resting ? "lay down and ": ""]stay down" : "[resting ? "get up and ": ""]stay up"].</span>")
|
||||
if(intentionalresting && !resting)
|
||||
resting = TRUE
|
||||
update_canmove()
|
||||
else
|
||||
resist_a_rest()
|
||||
else
|
||||
if(!resting)
|
||||
resting = TRUE
|
||||
to_chat(src, "<span class='notice'>You are now laying down.</span>")
|
||||
update_canmove()
|
||||
else
|
||||
resist_a_rest()
|
||||
|
||||
/mob/living/proc/resist_a_rest(automatic = FALSE, ignoretimer = FALSE) //Lets mobs resist out of resting. Major QOL change with combat reworks.
|
||||
if(!resting || stat || attemptingstandup)
|
||||
return FALSE
|
||||
if(ignoretimer)
|
||||
resting = FALSE
|
||||
update_canmove()
|
||||
return TRUE
|
||||
else
|
||||
var/totaldelay = 3 //A little bit less than half of a second as a baseline for getting up from a rest
|
||||
if(getStaminaLoss() >= STAMINA_SOFTCRIT)
|
||||
to_chat(src, "<span class='warning'>You're too exhausted to get up!")
|
||||
return FALSE
|
||||
attemptingstandup = TRUE
|
||||
var/health_deficiency = max((maxHealth - (health - getStaminaLoss()))*0.5, 0)
|
||||
if(!has_gravity())
|
||||
health_deficiency = health_deficiency*0.2
|
||||
totaldelay += health_deficiency
|
||||
var/standupwarning = "[src] and everyone around them should probably yell at the dev team"
|
||||
switch(health_deficiency)
|
||||
if(-INFINITY to 10)
|
||||
standupwarning = "[src] stands right up!"
|
||||
if(10 to 35)
|
||||
standupwarning = "[src] tries to stand up."
|
||||
if(35 to 60)
|
||||
standupwarning = "[src] slowly pushes [p_them()]self upright."
|
||||
if(60 to 80)
|
||||
standupwarning = "[src] weakly attempts to stand up."
|
||||
if(80 to INFINITY)
|
||||
standupwarning = "[src] struggles to stand up."
|
||||
var/usernotice = automatic ? "<span class='notice'>You are now getting up. (Auto)</span>" : "<span class='notice'>You are now getting up.</span>"
|
||||
visible_message("<span class='notice'>[standupwarning]</span>", usernotice, vision_distance = 5)
|
||||
if(do_after(src, totaldelay, target = src))
|
||||
resting = FALSE
|
||||
attemptingstandup = FALSE
|
||||
update_canmove()
|
||||
return TRUE
|
||||
else
|
||||
visible_message("<span class='notice'>[src] falls right back down.</span>", "<span class='notice'>You fall right back down.</span>")
|
||||
attemptingstandup = FALSE
|
||||
if(has_gravity())
|
||||
playsound(src, "bodyfall", 20, 1)
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/update_stamina()
|
||||
var/total_health = getStaminaLoss()
|
||||
if(total_health >= STAMINA_SOFTCRIT)
|
||||
if(!(combat_flags & COMBAT_FLAG_SOFT_STAMCRIT))
|
||||
ENABLE_BITFIELD(combat_flags, COMBAT_FLAG_SOFT_STAMCRIT)
|
||||
else
|
||||
if(combat_flags & COMBAT_FLAG_SOFT_STAMCRIT)
|
||||
DISABLE_BITFIELD(combat_flags, COMBAT_FLAG_SOFT_STAMCRIT)
|
||||
if(total_health)
|
||||
if(!recoveringstam && total_health >= STAMINA_CRIT && !stat)
|
||||
if(!(combat_flags & COMBAT_FLAG_HARD_STAMCRIT) && total_health >= STAMINA_CRIT && !stat)
|
||||
to_chat(src, "<span class='notice'>You're too exhausted to keep going...</span>")
|
||||
resting = TRUE
|
||||
if(combatmode)
|
||||
toggle_combat_mode(TRUE)
|
||||
recoveringstam = TRUE
|
||||
set_resting(TRUE, FALSE, FALSE)
|
||||
disable_intentional_combat_mode(TRUE, FALSE)
|
||||
ENABLE_BITFIELD(combat_flags, COMBAT_FLAG_HARD_STAMCRIT)
|
||||
filters += CIT_FILTER_STAMINACRIT
|
||||
update_canmove()
|
||||
if(recoveringstam && total_health <= STAMINA_SOFTCRIT)
|
||||
update_mobility()
|
||||
if((combat_flags & COMBAT_FLAG_HARD_STAMCRIT) && total_health <= STAMINA_SOFTCRIT)
|
||||
to_chat(src, "<span class='notice'>You don't feel nearly as exhausted anymore.</span>")
|
||||
recoveringstam = FALSE
|
||||
DISABLE_BITFIELD(combat_flags, COMBAT_FLAG_HARD_STAMCRIT | COMBAT_FLAG_SOFT_STAMCRIT)
|
||||
filters -= CIT_FILTER_STAMINACRIT
|
||||
update_canmove()
|
||||
update_mobility()
|
||||
update_health_hud()
|
||||
|
||||
/mob/living/proc/update_hud_sprint_bar()
|
||||
if(hud_used && hud_used.sprint_buffer)
|
||||
hud_used.sprint_buffer.update_to_mob(src)
|
||||
|
||||
@@ -54,8 +54,8 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
|
||||
var/mob/living/M = A
|
||||
var/cachedstam = M.getStaminaLoss()
|
||||
var/totalstuntime = cachedstam * stamtostunconversion * (M.lying ? 2 : 1)
|
||||
if(!M.resting)
|
||||
M.Knockdown(cachedstam*2) //BORK BORK. GET DOWN.
|
||||
if(CHECK_MOBILITY(M, MOBILITY_STAND))
|
||||
M.DefaultCombatKnockdown(cachedstam*2) //BORK BORK. GET DOWN.
|
||||
M.Stun(totalstuntime)
|
||||
user.do_attack_animation(A, ATTACK_EFFECT_BITE)
|
||||
user.start_pulling(M, TRUE) //Yip yip. Come with.
|
||||
@@ -284,7 +284,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
|
||||
to_chat(R, "Insufficent Power!")
|
||||
return
|
||||
L.Stun(4) // normal stunbaton is force 7 gimme a break good sir!
|
||||
L.Knockdown(80)
|
||||
L.DefaultCombatKnockdown(80)
|
||||
L.apply_effect(EFFECT_STUTTER, 4)
|
||||
L.visible_message("<span class='danger'>[R] has shocked [L] with its tongue!</span>", \
|
||||
"<span class='userdanger'>[R] has shocked you with its tongue!</span>")
|
||||
@@ -426,13 +426,13 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
|
||||
var/mob/living/L = hit_atom
|
||||
if(!L.check_shields(0, "the [name]", src, attack_type = LEAP_ATTACK))
|
||||
L.visible_message("<span class ='danger'>[src] pounces on [L]!</span>", "<span class ='userdanger'>[src] pounces on you!</span>")
|
||||
L.Knockdown(iscarbon(L) ? 60 : 45, override_stamdmg = CLAMP(pounce_stamloss, 0, pounce_stamloss_cap-L.getStaminaLoss())) // Temporary. If someone could rework how dogborg pounces work to accomodate for combat changes, that'd be nice.
|
||||
L.DefaultCombatKnockdown(iscarbon(L) ? 60 : 45, override_stamdmg = CLAMP(pounce_stamloss, 0, pounce_stamloss_cap-L.getStaminaLoss())) // Temporary. If someone could rework how dogborg pounces work to accomodate for combat changes, that'd be nice.
|
||||
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1)
|
||||
sleep(2)//Runtime prevention (infinite bump() calls on hulks)
|
||||
step_towards(src,L)
|
||||
log_combat(src, L, "borg pounced")
|
||||
else
|
||||
Knockdown(15, 1, 1)
|
||||
DefaultCombatKnockdown(15, 1, 1)
|
||||
|
||||
pounce_cooldown = !pounce_cooldown
|
||||
spawn(pounce_cooldown_time) //3s by default
|
||||
@@ -440,10 +440,10 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
|
||||
else if(hit_atom.density && !hit_atom.CanPass(src))
|
||||
visible_message("<span class ='danger'>[src] smashes into [hit_atom]!</span>", "<span class ='userdanger'>You smash into [hit_atom]!</span>")
|
||||
playsound(src, 'sound/items/trayhit1.ogg', 50, 1)
|
||||
Knockdown(15, 1, 1)
|
||||
DefaultCombatKnockdown(15, 1, 1)
|
||||
|
||||
if(leaping)
|
||||
leaping = 0
|
||||
pixel_y = initial(pixel_y)
|
||||
update_icons()
|
||||
update_canmove()
|
||||
update_mobility()
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
/mob/living/silicon/robot/Move(NewLoc, direct)
|
||||
. = ..()
|
||||
if(. && sprinting && !(movement_type & FLYING) && canmove && !resting)
|
||||
if(!(cell?.use(25)))
|
||||
togglesprint(TRUE)
|
||||
|
||||
/mob/living/silicon/robot/movement_delay()
|
||||
. = ..()
|
||||
if(!resting && !sprinting)
|
||||
. += 1
|
||||
. += speed
|
||||
|
||||
/mob/living/silicon/robot/proc/togglesprint(shutdown = FALSE) //Basically a copypaste of the proc from /mob/living/carbon/human
|
||||
if(!shutdown && (!cell || cell.charge < 25) || !cansprint)
|
||||
return FALSE
|
||||
sprinting = shutdown ? FALSE : !sprinting
|
||||
if(!resting && canmove)
|
||||
if(sprinting)
|
||||
playsound_local(src, 'sound/misc/sprintactivate.ogg', 50, FALSE, pressure_affected = FALSE)
|
||||
else
|
||||
if(shutdown)
|
||||
playsound_local(src, 'sound/effects/light_flicker.ogg', 50, FALSE, pressure_affected = FALSE)
|
||||
playsound_local(src, 'sound/misc/sprintdeactivate.ogg', 50, FALSE, pressure_affected = FALSE)
|
||||
var/obj/screen/sprintbutton/S = locate() in hud_used?.static_inventory
|
||||
S?.update_icon_state()
|
||||
return TRUE
|
||||
|
||||
/mob/living/silicon/robot/proc/sprint_hotkey(targetstatus)
|
||||
if(targetstatus ? !sprinting : sprinting)
|
||||
togglesprint()
|
||||
@@ -185,10 +185,15 @@
|
||||
name = "electron blast"
|
||||
icon_state = "stunjectile"
|
||||
color = null
|
||||
nodamage = 1
|
||||
nodamage = TRUE
|
||||
knockdown = 100
|
||||
stamina = 5
|
||||
knockdown_stamoverride = 0
|
||||
knockdown_stam_max = 0
|
||||
stamina = 18
|
||||
stutter = 5
|
||||
jitter = 20
|
||||
strong_tase = FALSE
|
||||
tase_duration = 0
|
||||
hitsound = 'sound/weapons/taserhit.ogg'
|
||||
range = 7
|
||||
range = 3
|
||||
strong_tase = FALSE
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
if(addiction_stage == 11)
|
||||
to_chat(M, "<span class='userdanger'>You start to convlse violently as you feel your consciousness split and merge across realities as your possessions fly wildy off your body.</span>")
|
||||
M.Jitter(200)
|
||||
M.Knockdown(200)
|
||||
M.DefaultCombatKnockdown(200)
|
||||
M.Stun(80)
|
||||
var/items = M.get_contents()
|
||||
if(!LAZYLEN(items))
|
||||
@@ -154,8 +154,8 @@
|
||||
do_sparks(5,FALSE,M)
|
||||
M.Sleeping(100, 0)
|
||||
M.Jitter(50)
|
||||
M.Knockdown(100)
|
||||
to_chat(M, "<span class='userdanger'>You feel your eigenstate settle, snapping an alternative version of yourself into reality. All your previous memories are lost and replaced with the alternative version of yourself. This version of you feels more [pick("affectionate", "happy", "lusty", "radical", "shy", "ambitious", "frank", "voracious", "sensible", "witty")] than your previous self, sent to god knows what universe.</span>")
|
||||
M.DefaultCombatKnockdown(100)
|
||||
to_chat(M, "<span class='userdanger'>You feel your eigenstate settle, snapping an alternative version of yourself into reality. All your previous memories are lost and replaced with the alternative version of yourself.</span>")
|
||||
M.emote("me",1,"flashes into reality suddenly, gasping as they gaze around in a bewildered and highly confused fashion!",TRUE)
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has become an alternative universe version of themselves.")
|
||||
M.reagents.remove_all_type(/datum/reagent, 100, 0, 1)
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
M.visible_message("<span class='warning'>A pair of breasts suddenly fly out of the [M]!</b></span>")
|
||||
var/T2 = get_random_station_turf()
|
||||
M.adjustBruteLoss(25)
|
||||
M.Knockdown(50)
|
||||
M.DefaultCombatKnockdown(50)
|
||||
M.Stun(50)
|
||||
B.throw_at(T2, 8, 1)
|
||||
M.reagents.del_reagent(type)
|
||||
@@ -104,8 +104,7 @@
|
||||
var/obj/item/organ/genital/womb/W = M.getorganslot(ORGAN_SLOT_WOMB)
|
||||
|
||||
if(M.gender == MALE)
|
||||
M.gender = FEMALE
|
||||
M.visible_message("<span class='boldnotice'>[M] suddenly looks more feminine!</span>", "<span class='boldwarning'>You suddenly feel more feminine!</span>")
|
||||
M.set_gender(FEMALE)
|
||||
|
||||
if(P)
|
||||
P.modify_size(-0.05)
|
||||
@@ -196,7 +195,7 @@
|
||||
M.visible_message("<span class='warning'>A penis suddenly flies out of the [M]!</b></span>")
|
||||
var/T2 = get_random_station_turf()
|
||||
M.adjustBruteLoss(25)
|
||||
M.Knockdown(50)
|
||||
M.DefaultCombatKnockdown(50)
|
||||
M.Stun(50)
|
||||
P.throw_at(T2, 8, 1)
|
||||
M.reagents.del_reagent(type)
|
||||
@@ -251,8 +250,7 @@
|
||||
var/obj/item/organ/genital/womb/W = M.getorganslot(ORGAN_SLOT_WOMB)
|
||||
|
||||
if(M.gender == FEMALE)
|
||||
M.gender = MALE
|
||||
M.visible_message("<span class='boldnotice'>[M] suddenly looks more masculine!</span>", "<span class='boldwarning'>You suddenly feel more masculine!</span>")
|
||||
M.set_gender(MALE)
|
||||
|
||||
if(B)
|
||||
B.modify_size(-0.05)
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
if(method == INJECT)
|
||||
var/turf/T = get_turf(M)
|
||||
M.adjustOxyLoss(15)
|
||||
M.Knockdown(50)
|
||||
M.DefaultCombatKnockdown(50)
|
||||
M.Stun(50)
|
||||
M.emote("cough")
|
||||
var/obj/item/toy/plush/P = pick(subtypesof(/obj/item/toy/plush))
|
||||
@@ -191,7 +191,7 @@
|
||||
var/datum/component/nanites/N = C.GetComponent(/datum/component/nanites)
|
||||
if(prob(5))
|
||||
to_chat(C, "<span class='warning'>The residual voltage from the nanites causes you to seize up!</b></span>")
|
||||
C.electrocute_act(10, (get_turf(C)), 1, FALSE, FALSE, FALSE, TRUE)
|
||||
C.electrocute_act(10, (get_turf(C)), 1, SHOCK_ILLUSION)
|
||||
if(prob(10))
|
||||
var/atom/T = C
|
||||
T.emp_act(EMP_HEAVY)
|
||||
@@ -218,7 +218,7 @@ datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume)
|
||||
/datum/reagent/fermi/nanite_b_goneTox/on_mob_life(mob/living/carbon/C)//Damages the taker if their purity is low. Extended use of impure chemicals will make the original die. (thus can't be spammed unless you've very good)
|
||||
if(prob(15))
|
||||
to_chat(C, "<span class='warning'>The residual voltage in your system causes you to seize up!</b></span>")
|
||||
C.electrocute_act(10, (get_turf(C)), 1, FALSE, FALSE, FALSE, TRUE)
|
||||
C.electrocute_act(10, (get_turf(C)), 1, SHOCK_ILLUSION)
|
||||
if(prob(50))
|
||||
var/atom/T = C
|
||||
T.emp_act(EMP_HEAVY)
|
||||
|
||||
@@ -349,14 +349,9 @@
|
||||
E.data["creatorID"] = B.data["ckey"]
|
||||
E.creatorID = B.data["ckey"]
|
||||
|
||||
/datum/chemical_reaction/fermi/enthrall/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)
|
||||
var/turf/T = get_turf(my_atom)
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
var/datum/effect_system/smoke_spread/chem/s = new()
|
||||
R.add_reagent(/datum/reagent/fermi/enthrallExplo, volume)
|
||||
s.set_up(R, volume/2, T)
|
||||
s.start()
|
||||
my_atom.reagents.clear_reagents()
|
||||
/datum/chemical_reaction/fermi/enthrall/FermiExplode(datum/reagents/R0, var/atom/my_atom, volume, temp, pH)
|
||||
R0.clear_reagents()
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/fermi/hatmium // done
|
||||
name = "Hat growth serum"
|
||||
|
||||
Reference in New Issue
Block a user