mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
Vox mutantrace, vox clothing, minor surgery mod for mutantrace specific surgery steps. Fixed captain's jacket sprite.
This commit is contained in:
@@ -53,9 +53,6 @@
|
|||||||
#define FILE_DIR "sound/voice"
|
#define FILE_DIR "sound/voice"
|
||||||
#define FILE_DIR "sound/voice/Serithi"
|
#define FILE_DIR "sound/voice/Serithi"
|
||||||
#define FILE_DIR "sound/weapons"
|
#define FILE_DIR "sound/weapons"
|
||||||
#define FILE_DIR "tools"
|
|
||||||
#define FILE_DIR "tools/AddToChangelog"
|
|
||||||
#define FILE_DIR "tools/AddToChangelog/AddToChangelog"
|
|
||||||
// END_FILE_DIR
|
// END_FILE_DIR
|
||||||
// BEGIN_PREFERENCES
|
// BEGIN_PREFERENCES
|
||||||
#define DEBUG
|
#define DEBUG
|
||||||
|
|||||||
@@ -122,6 +122,8 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
|
|||||||
icobase = 'icons/mob/human_races/r_lizard.dmi'
|
icobase = 'icons/mob/human_races/r_lizard.dmi'
|
||||||
if("Skrell")
|
if("Skrell")
|
||||||
icobase = 'icons/mob/human_races/r_skrell.dmi'
|
icobase = 'icons/mob/human_races/r_skrell.dmi'
|
||||||
|
if("Vox")
|
||||||
|
icobase = 'icons/mob/human_races/r_vox.dmi'
|
||||||
else
|
else
|
||||||
icobase = 'icons/mob/human_races/r_human.dmi'
|
icobase = 'icons/mob/human_races/r_human.dmi'
|
||||||
|
|
||||||
@@ -147,6 +149,9 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
|
|||||||
preview_icon.Blend(rgb(-H.s_tone, -H.s_tone, -H.s_tone), ICON_SUBTRACT)
|
preview_icon.Blend(rgb(-H.s_tone, -H.s_tone, -H.s_tone), ICON_SUBTRACT)
|
||||||
|
|
||||||
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes_s")
|
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes_s")
|
||||||
|
if(H.get_species()=="Vox")
|
||||||
|
eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "vox_eyes_s")
|
||||||
|
|
||||||
eyes_s.Blend(rgb(H.r_eyes, H.g_eyes, H.b_eyes), ICON_ADD)
|
eyes_s.Blend(rgb(H.r_eyes, H.g_eyes, H.b_eyes), ICON_ADD)
|
||||||
|
|
||||||
var/datum/sprite_accessory/hair_style = hair_styles_list[H.h_style]
|
var/datum/sprite_accessory/hair_style = hair_styles_list[H.h_style]
|
||||||
|
|||||||
@@ -730,7 +730,7 @@ client
|
|||||||
usr << "This can only be done to instances of type /mob/living/carbon/human"
|
usr << "This can only be done to instances of type /mob/living/carbon/human"
|
||||||
return
|
return
|
||||||
|
|
||||||
var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","slime","plant","shadow","tajaran","skrell")
|
var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","slime","plant","shadow","tajaran","skrell","vox")
|
||||||
switch(new_mutantrace)
|
switch(new_mutantrace)
|
||||||
if(null)
|
if(null)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -646,7 +646,7 @@ var/list/admin_verbs_mod = list(
|
|||||||
if(!istype(M, /mob/living/carbon/human))
|
if(!istype(M, /mob/living/carbon/human))
|
||||||
usr << "\red You can only do this to humans!"
|
usr << "\red You can only do this to humans!"
|
||||||
return
|
return
|
||||||
switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Unathi and Tajaran can result in unintended consequences.",,"Yes","No"))
|
switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Unathi, Vox and Tajaran can result in unintended consequences.",,"Yes","No"))
|
||||||
if("No")
|
if("No")
|
||||||
return
|
return
|
||||||
var/new_facial = input("Please select facial hair color.", "Character Generation") as color
|
var/new_facial = input("Please select facial hair color.", "Character Generation") as color
|
||||||
|
|||||||
@@ -792,6 +792,10 @@ datum/preferences
|
|||||||
if(is_alien_whitelisted(user, "Skrell")) //Check for Skrell and admins
|
if(is_alien_whitelisted(user, "Skrell")) //Check for Skrell and admins
|
||||||
new_species += "Skrell"
|
new_species += "Skrell"
|
||||||
whitelisted = 1
|
whitelisted = 1
|
||||||
|
if(is_alien_whitelisted(user, "Vox")) //Check for Skrell and admins
|
||||||
|
new_species += "Vox"
|
||||||
|
whitelisted = 1
|
||||||
|
|
||||||
|
|
||||||
if(!whitelisted)
|
if(!whitelisted)
|
||||||
alert(user, "You cannot change your species as you need to be whitelisted. If you wish to be whitelisted contact an admin in-game, on the forums, or on IRC.")
|
alert(user, "You cannot change your species as you need to be whitelisted. If you wish to be whitelisted contact an admin in-game, on the forums, or on IRC.")
|
||||||
@@ -799,6 +803,7 @@ datum/preferences
|
|||||||
new_species += "Tajaran"
|
new_species += "Tajaran"
|
||||||
new_species += "Unathi"
|
new_species += "Unathi"
|
||||||
new_species += "Skrell"
|
new_species += "Skrell"
|
||||||
|
new_species += "Vox"
|
||||||
species = input("Please select a species", "Character Generation", null) in new_species
|
species = input("Please select a species", "Character Generation", null) in new_species
|
||||||
|
|
||||||
if(prev_species != species)
|
if(prev_species != species)
|
||||||
|
|||||||
@@ -21,4 +21,70 @@
|
|||||||
armor = list(melee = 40, bullet = 30, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 50)
|
armor = list(melee = 40, bullet = 30, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 50)
|
||||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
|
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
|
||||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||||
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
|
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
|
||||||
|
|
||||||
|
// Vox space gear (vaccuum suit, low pressure armour)
|
||||||
|
// Can't be equipped by any other species due to bone structure and vox cybernetics.
|
||||||
|
|
||||||
|
/obj/item/clothing/head/helmet/space/vox/pressure
|
||||||
|
name = "alien helmet"
|
||||||
|
icon_state = "vox-pressure"
|
||||||
|
item_state = "vox-pressure"
|
||||||
|
desc = "Hey, wasn't this a prop in \'The Abyss\'?"
|
||||||
|
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/space/vox/pressure
|
||||||
|
name = "alien pressure suit"
|
||||||
|
icon_state = "vox-pressure"
|
||||||
|
item_state = "vox-pressure"
|
||||||
|
desc = "A huge, armoured, pressurized suit, designed for distinctly nonhuman proportions."
|
||||||
|
w_class = 3
|
||||||
|
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||||
|
slowdown = 2
|
||||||
|
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||||
|
|
||||||
|
/obj/item/clothing/head/helmet/space/vox/carapace
|
||||||
|
name = "alien visor"
|
||||||
|
icon_state = "vox-carapace"
|
||||||
|
item_state = "vox-carapace"
|
||||||
|
desc = "A glowing visor, perhaps stolen from a depressed Cylon."
|
||||||
|
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/space/vox/carapace
|
||||||
|
name = "alien carapace armour"
|
||||||
|
icon_state = "vox-carapace"
|
||||||
|
item_state = "vox-carapace"
|
||||||
|
desc = "An armoured, segmented carapace with glowing purple lights. It looks pretty run-down."
|
||||||
|
w_class = 3
|
||||||
|
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||||
|
slowdown = 1
|
||||||
|
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||||
|
|
||||||
|
/obj/item/clothing/head/helmet/space/vox/mob_can_equip(M as mob, slot)
|
||||||
|
var/mob/living/carbon/human/V = M
|
||||||
|
if(V.dna.mutantrace != "vox")
|
||||||
|
V << "<span class='warning'>This clearly isn't designed for your species!</span>"
|
||||||
|
return 0
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/space/vox/mob_can_equip(M as mob, slot)
|
||||||
|
var/mob/living/carbon/human/V = M
|
||||||
|
if(V.dna.mutantrace != "vox")
|
||||||
|
V << "<span class='warning'>This clearly isn't designed for your species!</span>"
|
||||||
|
return 0
|
||||||
|
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/obj/item/clothing/under/vox/vox_casual
|
||||||
|
name = "alien clothing"
|
||||||
|
desc = "This doesn't look very comfortable."
|
||||||
|
icon_state = "vox-casual-1"
|
||||||
|
color = "vox-casual-1"
|
||||||
|
item_state = "vox-casual-1"
|
||||||
|
|
||||||
|
/obj/item/clothing/under/vox/vox_robes
|
||||||
|
name = "alien robes"
|
||||||
|
desc = "Weird and flowing!"
|
||||||
|
icon_state = "vox-casual-2"
|
||||||
|
color = "vox-casual-2"
|
||||||
|
item_state = "vox-casual-2"
|
||||||
@@ -811,6 +811,8 @@
|
|||||||
return "Tajaran"
|
return "Tajaran"
|
||||||
if("skrell")
|
if("skrell")
|
||||||
return "Skrell"
|
return "Skrell"
|
||||||
|
if("vox")
|
||||||
|
return "Vox"
|
||||||
if("plant")
|
if("plant")
|
||||||
return "Mobile vegetation"
|
return "Mobile vegetation"
|
||||||
if("golem")
|
if("golem")
|
||||||
@@ -826,6 +828,8 @@
|
|||||||
return "Skrell"
|
return "Skrell"
|
||||||
else if(src.dna.mutantrace == "tajaran")
|
else if(src.dna.mutantrace == "tajaran")
|
||||||
return "Tajaran"
|
return "Tajaran"
|
||||||
|
else if(src.dna.mutantrace == "vox")
|
||||||
|
return "vox"
|
||||||
|
|
||||||
/mob/living/carbon/proc/update_mutantrace_languages()
|
/mob/living/carbon/proc/update_mutantrace_languages()
|
||||||
if(src.dna)
|
if(src.dna)
|
||||||
@@ -835,6 +839,8 @@
|
|||||||
src.skrell_talk_understand = 1
|
src.skrell_talk_understand = 1
|
||||||
else if(src.dna.mutantrace == "tajaran")
|
else if(src.dna.mutantrace == "tajaran")
|
||||||
src.tajaran_talk_understand = 1
|
src.tajaran_talk_understand = 1
|
||||||
|
else if(src.dna.mutantrace == "vox")
|
||||||
|
src.vox_talk_understand = 1
|
||||||
|
|
||||||
/mob/living/carbon/human/proc/play_xylophone()
|
/mob/living/carbon/human/proc/play_xylophone()
|
||||||
if(!src.xylophone)
|
if(!src.xylophone)
|
||||||
@@ -1105,4 +1111,4 @@
|
|||||||
.=..()
|
.=..()
|
||||||
if(istype(feet_blood_DNA, /list) && feet_blood_DNA.len)
|
if(istype(feet_blood_DNA, /list) && feet_blood_DNA.len)
|
||||||
del(feet_blood_DNA)
|
del(feet_blood_DNA)
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -392,6 +392,7 @@
|
|||||||
var/SA_para_min = 1
|
var/SA_para_min = 1
|
||||||
var/SA_sleep_min = 5
|
var/SA_sleep_min = 5
|
||||||
var/oxygen_used = 0
|
var/oxygen_used = 0
|
||||||
|
var/nitrogen_used = 0
|
||||||
var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
|
var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
|
||||||
|
|
||||||
//Partial pressure of the O2 in our breath
|
//Partial pressure of the O2 in our breath
|
||||||
@@ -401,8 +402,10 @@
|
|||||||
// And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun)
|
// And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun)
|
||||||
var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure // Tweaking to fit the hacky bullshit I've done with atmo -- TLE
|
var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure // Tweaking to fit the hacky bullshit I've done with atmo -- TLE
|
||||||
//var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*0.5 // The default pressure value
|
//var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*0.5 // The default pressure value
|
||||||
|
// Nitrogen, for Vox.
|
||||||
|
var/Nitrogen_pp = (breath.nitrogen/breath.total_moles())*breath_pressure
|
||||||
|
|
||||||
if(O2_pp < safe_oxygen_min) // Too little oxygen
|
if(O2_pp < safe_oxygen_min && src.dna.mutantrace!="vox") // Too little oxygen
|
||||||
if(prob(20))
|
if(prob(20))
|
||||||
spawn(0) emote("gasp")
|
spawn(0) emote("gasp")
|
||||||
if(O2_pp > 0)
|
if(O2_pp > 0)
|
||||||
@@ -420,6 +423,19 @@
|
|||||||
oxyloss += 5*ratio
|
oxyloss += 5*ratio
|
||||||
oxygen_used = breath.oxygen*ratio/6
|
oxygen_used = breath.oxygen*ratio/6
|
||||||
oxygen_alert = max(oxygen_alert, 1)*/
|
oxygen_alert = max(oxygen_alert, 1)*/
|
||||||
|
else if(Nitrogen_pp < safe_oxygen_min && src.dna.mutantrace=="vox") //Vox breathe nitrogen, not oxygen.
|
||||||
|
|
||||||
|
if(prob(20))
|
||||||
|
spawn(0) emote("gasp")
|
||||||
|
if(Nitrogen_pp > 0)
|
||||||
|
var/ratio = safe_oxygen_min/Nitrogen_pp
|
||||||
|
adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS))
|
||||||
|
failed_last_breath = 1
|
||||||
|
nitrogen_used = breath.nitrogen*ratio/6
|
||||||
|
else
|
||||||
|
adjustOxyLoss(HUMAN_MAX_OXYLOSS)
|
||||||
|
failed_last_breath = 1
|
||||||
|
oxygen_alert = max(oxygen_alert, 1)
|
||||||
else // We're in safe limits
|
else // We're in safe limits
|
||||||
failed_last_breath = 0
|
failed_last_breath = 0
|
||||||
adjustOxyLoss(-5)
|
adjustOxyLoss(-5)
|
||||||
@@ -427,6 +443,7 @@
|
|||||||
oxygen_alert = 0
|
oxygen_alert = 0
|
||||||
|
|
||||||
breath.oxygen -= oxygen_used
|
breath.oxygen -= oxygen_used
|
||||||
|
breath.nitrogen -= nitrogen_used
|
||||||
breath.carbon_dioxide += oxygen_used
|
breath.carbon_dioxide += oxygen_used
|
||||||
|
|
||||||
//CO2 does not affect failed_last_breath. So if there was enough oxygen in the air but too much co2, this will hurt you, but only once per 4 ticks, instead of once per tick.
|
//CO2 does not affect failed_last_breath. So if there was enough oxygen in the air but too much co2, this will hurt you, but only once per 4 ticks, instead of once per tick.
|
||||||
|
|||||||
@@ -313,6 +313,8 @@ proc/get_damage_icon_part(damage_state, body_part)
|
|||||||
//Eyes
|
//Eyes
|
||||||
if(!skeleton)
|
if(!skeleton)
|
||||||
var/icon/eyes_s = new/icon('icons/mob/human_face.dmi', "eyes_s")
|
var/icon/eyes_s = new/icon('icons/mob/human_face.dmi', "eyes_s")
|
||||||
|
if(src.get_species()=="Vox")
|
||||||
|
eyes_s = new/icon('icons/mob/human_face.dmi', "vox_eyes_s")
|
||||||
eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD)
|
eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD)
|
||||||
stand_icon.Blend(eyes_s, ICON_OVERLAY)
|
stand_icon.Blend(eyes_s, ICON_OVERLAY)
|
||||||
|
|
||||||
@@ -442,6 +444,9 @@ proc/get_damage_icon_part(damage_state, body_part)
|
|||||||
if("skrell")
|
if("skrell")
|
||||||
race_icon = 'icons/mob/human_races/r_skrell.dmi'
|
race_icon = 'icons/mob/human_races/r_skrell.dmi'
|
||||||
deform_icon = 'icons/mob/human_races/r_def_skrell.dmi'
|
deform_icon = 'icons/mob/human_races/r_def_skrell.dmi'
|
||||||
|
if("vox")
|
||||||
|
race_icon = 'icons/mob/human_races/r_vox.dmi'
|
||||||
|
deform_icon = 'icons/mob/human_races/r_def_vox.dmi'
|
||||||
else
|
else
|
||||||
race_icon = 'icons/mob/human_races/r_human.dmi'
|
race_icon = 'icons/mob/human_races/r_human.dmi'
|
||||||
deform_icon = 'icons/mob/human_races/r_def_human.dmi'
|
deform_icon = 'icons/mob/human_races/r_def_human.dmi'
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ var/list/department_radio_keys = list(
|
|||||||
":k" = "skrell", "#k" = "skrell", ".k" = "skrell",
|
":k" = "skrell", "#k" = "skrell", ".k" = "skrell",
|
||||||
":j" = "tajaran", "#j" = "tajaran", ".j" = "tajaran",
|
":j" = "tajaran", "#j" = "tajaran", ".j" = "tajaran",
|
||||||
":o" = "soghun", "#o" = "soghun", ".o" = "soghun",
|
":o" = "soghun", "#o" = "soghun", ".o" = "soghun",
|
||||||
|
":v" = "vox", "#v" = "vox", ".v" = "vox",
|
||||||
|
|
||||||
":R" = "right hand", "#R" = "right hand", ".R" = "right hand",
|
":R" = "right hand", "#R" = "right hand", ".R" = "right hand",
|
||||||
":L" = "left hand", "#L" = "left hand", ".L" = "left hand",
|
":L" = "left hand", "#L" = "left hand", ".L" = "left hand",
|
||||||
@@ -37,6 +38,7 @@ var/list/department_radio_keys = list(
|
|||||||
":K" = "skrell", "#K" = "skrell", ".K" = "skrell",
|
":K" = "skrell", "#K" = "skrell", ".K" = "skrell",
|
||||||
":J" = "tajaran", "#J" = "tajaran", ".J" = "tajaran",
|
":J" = "tajaran", "#J" = "tajaran", ".J" = "tajaran",
|
||||||
":O" = "soghun", "#O" = "soghun", ".O" = "soghun",
|
":O" = "soghun", "#O" = "soghun", ".O" = "soghun",
|
||||||
|
":V" = "vox", "#V" = "vox", ".V" = "vox",
|
||||||
|
|
||||||
//kinda localization -- rastaf0
|
//kinda localization -- rastaf0
|
||||||
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
|
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
|
||||||
@@ -185,6 +187,7 @@ var/list/department_radio_keys = list(
|
|||||||
var/is_speaking_skrell = 0
|
var/is_speaking_skrell = 0
|
||||||
var/is_speaking_soghun = 0
|
var/is_speaking_soghun = 0
|
||||||
var/is_speaking_taj = 0
|
var/is_speaking_taj = 0
|
||||||
|
var/is_speaking_vox = 0
|
||||||
var/is_speaking_radio = 0
|
var/is_speaking_radio = 0
|
||||||
|
|
||||||
switch (message_mode)
|
switch (message_mode)
|
||||||
@@ -283,6 +286,10 @@ var/list/department_radio_keys = list(
|
|||||||
if(skrell_talk_understand || universal_speak)
|
if(skrell_talk_understand || universal_speak)
|
||||||
is_speaking_skrell = 1
|
is_speaking_skrell = 1
|
||||||
|
|
||||||
|
if ("vox")
|
||||||
|
if(vox_talk_understand || universal_speak)
|
||||||
|
is_speaking_vox = 1
|
||||||
|
|
||||||
if("changeling")
|
if("changeling")
|
||||||
if(mind && mind.changeling)
|
if(mind && mind.changeling)
|
||||||
for(var/mob/Changeling in mob_list)
|
for(var/mob/Changeling in mob_list)
|
||||||
@@ -370,7 +377,7 @@ var/list/department_radio_keys = list(
|
|||||||
|
|
||||||
for (var/M in listening)
|
for (var/M in listening)
|
||||||
if(hascall(M,"say_understands"))
|
if(hascall(M,"say_understands"))
|
||||||
if (M:say_understands(src) && !is_speaking_skrell && !is_speaking_soghun && !is_speaking_taj)
|
if (M:say_understands(src) && !is_speaking_skrell && !is_speaking_soghun && !is_speaking_vox && !is_speaking_taj)
|
||||||
heard_a += M
|
heard_a += M
|
||||||
else if(ismob(M))
|
else if(ismob(M))
|
||||||
if(is_speaking_skrell && (M:skrell_talk_understand || M:universal_speak))
|
if(is_speaking_skrell && (M:skrell_talk_understand || M:universal_speak))
|
||||||
@@ -379,6 +386,8 @@ var/list/department_radio_keys = list(
|
|||||||
heard_a += M
|
heard_a += M
|
||||||
else if(is_speaking_taj && (M:tajaran_talk_understand || M:universal_speak))
|
else if(is_speaking_taj && (M:tajaran_talk_understand || M:universal_speak))
|
||||||
heard_a += M
|
heard_a += M
|
||||||
|
else if(is_speaking_vox && (M:vox_talk_understand || M:universal_speak))
|
||||||
|
heard_a += M
|
||||||
else
|
else
|
||||||
heard_b += M
|
heard_b += M
|
||||||
else
|
else
|
||||||
@@ -394,7 +403,7 @@ var/list/department_radio_keys = list(
|
|||||||
|
|
||||||
var/rendered = null
|
var/rendered = null
|
||||||
if (length(heard_a))
|
if (length(heard_a))
|
||||||
var/message_a = say_quote(message,is_speaking_soghun,is_speaking_skrell,is_speaking_taj)
|
var/message_a = say_quote(message,is_speaking_soghun,is_speaking_skrell,is_speaking_taj,is_speaking_vox)
|
||||||
|
|
||||||
if (italics)
|
if (italics)
|
||||||
message_a = "<i>[message_a]</i>"
|
message_a = "<i>[message_a]</i>"
|
||||||
@@ -419,7 +428,7 @@ var/list/department_radio_keys = list(
|
|||||||
message_b = voice_message
|
message_b = voice_message
|
||||||
else
|
else
|
||||||
message_b = stars(message)
|
message_b = stars(message)
|
||||||
message_b = say_quote(message_b,is_speaking_soghun,is_speaking_skrell,is_speaking_taj)
|
message_b = say_quote(message_b,is_speaking_soghun,is_speaking_skrell,is_speaking_taj,is_speaking_vox)
|
||||||
|
|
||||||
if (italics)
|
if (italics)
|
||||||
message_b = "<i>[message_b]</i>"
|
message_b = "<i>[message_b]</i>"
|
||||||
|
|||||||
@@ -211,6 +211,7 @@
|
|||||||
var/tajaran_talk_understand = 0
|
var/tajaran_talk_understand = 0
|
||||||
var/soghun_talk_understand = 0
|
var/soghun_talk_understand = 0
|
||||||
var/skrell_talk_understand = 0
|
var/skrell_talk_understand = 0
|
||||||
|
var/vox_talk_understand = 0
|
||||||
|
|
||||||
var/has_limbs = 1 //Whether this mob have any limbs he can move with
|
var/has_limbs = 1 //Whether this mob have any limbs he can move with
|
||||||
var/can_stand = 1 //Whether this mob have ability to stand
|
var/can_stand = 1 //Whether this mob have ability to stand
|
||||||
|
|||||||
@@ -349,6 +349,10 @@
|
|||||||
if(is_alien_whitelisted(src, "Skrell"|| !config.usealienwhitelist))
|
if(is_alien_whitelisted(src, "Skrell"|| !config.usealienwhitelist))
|
||||||
new_character.dna.mutantrace = "skrell"
|
new_character.dna.mutantrace = "skrell"
|
||||||
new_character.skrell_talk_understand = 1
|
new_character.skrell_talk_understand = 1
|
||||||
|
if(client.prefs.species == "Vox")
|
||||||
|
if(is_alien_whitelisted(src, "Vox"|| !config.usealienwhitelist))
|
||||||
|
new_character.dna.mutantrace = "vox"
|
||||||
|
new_character.vox_talk_understand = 1
|
||||||
|
|
||||||
if(ticker.random_players)
|
if(ticker.random_players)
|
||||||
new_character.gender = pick(MALE, FEMALE)
|
new_character.gender = pick(MALE, FEMALE)
|
||||||
|
|||||||
@@ -144,6 +144,8 @@ datum/preferences
|
|||||||
icobase = 'icons/mob/human_races/r_lizard.dmi'
|
icobase = 'icons/mob/human_races/r_lizard.dmi'
|
||||||
if("Skrell")
|
if("Skrell")
|
||||||
icobase = 'icons/mob/human_races/r_skrell.dmi'
|
icobase = 'icons/mob/human_races/r_skrell.dmi'
|
||||||
|
if("Vox")
|
||||||
|
icobase = 'icons/mob/human_races/r_vox.dmi'
|
||||||
else
|
else
|
||||||
icobase = 'icons/mob/human_races/r_human.dmi'
|
icobase = 'icons/mob/human_races/r_human.dmi'
|
||||||
preview_icon = new /icon(icobase, "torso_[g]")
|
preview_icon = new /icon(icobase, "torso_[g]")
|
||||||
@@ -172,6 +174,9 @@ datum/preferences
|
|||||||
preview_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
|
preview_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
|
||||||
|
|
||||||
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes_s")
|
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes_s")
|
||||||
|
if(species=="Vox")
|
||||||
|
eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "vox_eyes_s")
|
||||||
|
|
||||||
eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD)
|
eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD)
|
||||||
|
|
||||||
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
|
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
|
||||||
|
|||||||
@@ -306,7 +306,7 @@
|
|||||||
name = "Shaved"
|
name = "Shaved"
|
||||||
icon_state = "bald"
|
icon_state = "bald"
|
||||||
gender = NEUTER
|
gender = NEUTER
|
||||||
species_allowed = list("Human","Unathi","Tajaran","Skrell")
|
species_allowed = list("Human","Unathi","Tajaran","Skrell","Vox")
|
||||||
|
|
||||||
watson
|
watson
|
||||||
name = "Watson Mustache"
|
name = "Watson Mustache"
|
||||||
@@ -493,6 +493,11 @@
|
|||||||
icon_state = "hair_messy"
|
icon_state = "hair_messy"
|
||||||
species_allowed = list("Tajaran")
|
species_allowed = list("Tajaran")
|
||||||
|
|
||||||
|
vox_quills_short
|
||||||
|
name = "Short Vox Quills"
|
||||||
|
icon_state = "vox_shortquills"
|
||||||
|
species_allowed = list("Vox")
|
||||||
|
|
||||||
/datum/sprite_accessory/facial_hair
|
/datum/sprite_accessory/facial_hair
|
||||||
|
|
||||||
taj_sideburns
|
taj_sideburns
|
||||||
|
|||||||
@@ -69,7 +69,7 @@
|
|||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
/mob/proc/say_quote(var/text,var/is_speaking_soghun,var/is_speaking_skrell,var/is_speaking_tajaran)
|
/mob/proc/say_quote(var/text,var/is_speaking_soghun,var/is_speaking_skrell,var/is_speaking_tajaran,var/is_speaking_vox)
|
||||||
if(!text)
|
if(!text)
|
||||||
return "says, \"...\""; //not the best solution, but it will stop a large number of runtimes. The cause is somewhere in the Tcomms code
|
return "says, \"...\""; //not the best solution, but it will stop a large number of runtimes. The cause is somewhere in the Tcomms code
|
||||||
//tcomms code is still runtiming somewhere here
|
//tcomms code is still runtiming somewhere here
|
||||||
@@ -80,6 +80,8 @@
|
|||||||
return "<span class='say_quote'>warbles</span>, \"<span class='skrell'>[text]</span>\"";
|
return "<span class='say_quote'>warbles</span>, \"<span class='skrell'>[text]</span>\"";
|
||||||
if (is_speaking_tajaran)
|
if (is_speaking_tajaran)
|
||||||
return "<span class='say_quote'>mrowls</span>, \"<span class='tajaran'>[text]</span>\"";
|
return "<span class='say_quote'>mrowls</span>, \"<span class='tajaran'>[text]</span>\"";
|
||||||
|
if (is_speaking_vox)
|
||||||
|
return "<span class='say_quote'>chirps</span>, \"<span class='vox'>[text]</span>\"";
|
||||||
//Needs Virus2
|
//Needs Virus2
|
||||||
// if (src.disease_symptoms & DISEASE_HOARSE)
|
// if (src.disease_symptoms & DISEASE_HOARSE)
|
||||||
// return "rasps, \"[text]\"";
|
// return "rasps, \"[text]\"";
|
||||||
|
|||||||
@@ -740,6 +740,8 @@ obj/item/weapon/organ/New(loc, mob/living/carbon/human/H)
|
|||||||
base = new('icons/mob/human_races/r_lizard.dmi')
|
base = new('icons/mob/human_races/r_lizard.dmi')
|
||||||
if("skrell")
|
if("skrell")
|
||||||
base = new('icons/mob/human_races/r_skrell.dmi')
|
base = new('icons/mob/human_races/r_skrell.dmi')
|
||||||
|
if("vox")
|
||||||
|
base = new('icons/mob/human_races/r_vox.dmi')
|
||||||
else
|
else
|
||||||
base = new('icons/mob/human_races/r_human.dmi')
|
base = new('icons/mob/human_races/r_human.dmi')
|
||||||
if(base)
|
if(base)
|
||||||
|
|||||||
@@ -74,7 +74,7 @@
|
|||||||
|
|
||||||
var/mob/living/carbon/human/H = new_mob
|
var/mob/living/carbon/human/H = new_mob
|
||||||
if(H.dna)
|
if(H.dna)
|
||||||
H.dna.mutantrace = pick("lizard","tajaran","skrell","golem","slime","plant",4;"")
|
H.dna.mutantrace = pick("lizard","tajaran","skrell","golem","slime","plant","vox",4;"")
|
||||||
else
|
else
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,9 @@
|
|||||||
|
|
||||||
// type path referencing tools that can be used for this step, and how well are they suited for it
|
// type path referencing tools that can be used for this step, and how well are they suited for it
|
||||||
var/list/allowed_tools = null
|
var/list/allowed_tools = null
|
||||||
|
// type paths referencing mutantraces that this step applies to.
|
||||||
|
var/list/allowed_species = null
|
||||||
|
var/list/disallowed_species = null
|
||||||
|
|
||||||
// duration of the step
|
// duration of the step
|
||||||
var/min_duration = 0
|
var/min_duration = 0
|
||||||
@@ -22,6 +25,21 @@
|
|||||||
return allowed_tools[T]
|
return allowed_tools[T]
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
// Checks if this step applies to the mutantrace of the user.
|
||||||
|
proc/is_valid_mutantrace(mob/living/carbon/human/target)
|
||||||
|
|
||||||
|
if(allowed_species)
|
||||||
|
for(var/species in allowed_species)
|
||||||
|
if(target.dna.mutantrace == species)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
if(disallowed_species)
|
||||||
|
for(var/species in disallowed_species)
|
||||||
|
if (target.dna.mutantrace == species)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
return 1
|
||||||
|
|
||||||
// checks whether this step can be applied with the given user and target
|
// checks whether this step can be applied with the given user and target
|
||||||
proc/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
proc/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
return 0
|
return 0
|
||||||
@@ -63,7 +81,7 @@ proc/do_surgery(mob/living/M, mob/living/user, obj/item/tool)
|
|||||||
return 0
|
return 0
|
||||||
for(var/datum/surgery_step/S in surgery_steps)
|
for(var/datum/surgery_step/S in surgery_steps)
|
||||||
//check if tool is right or close enough and if this step is possible
|
//check if tool is right or close enough and if this step is possible
|
||||||
if( S.tool_quality(tool) && S.can_use(user, M, user.zone_sel.selecting, tool))
|
if( S.tool_quality(tool) && S.can_use(user, M, user.zone_sel.selecting, tool) && S.is_valid_mutantrace(M))
|
||||||
S.begin_step(user, M, user.zone_sel.selecting, tool) //start on it
|
S.begin_step(user, M, user.zone_sel.selecting, tool) //start on it
|
||||||
//We had proper tools! (or RNG smiled.) and User did not move or change hands.
|
//We had proper tools! (or RNG smiled.) and User did not move or change hands.
|
||||||
if( prob(S.tool_quality(tool)) && do_mob(user, M, rand(S.min_duration, S.max_duration)))
|
if( prob(S.tool_quality(tool)) && do_mob(user, M, rand(S.min_duration, S.max_duration)))
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ h1.alert, h2.alert {color: #000000;}
|
|||||||
.tajaran {color: #803B56;}
|
.tajaran {color: #803B56;}
|
||||||
.skrell {color: #00CED1;}
|
.skrell {color: #00CED1;}
|
||||||
.soghun {color: #228B22;}
|
.soghun {color: #228B22;}
|
||||||
|
.vox {color: #AA00AA;}
|
||||||
.say_quote {font-family: Georgia, Verdana, sans-serif;}
|
.say_quote {font-family: Georgia, Verdana, sans-serif;}
|
||||||
|
|
||||||
.interface {color: #330033;}
|
.interface {color: #330033;}
|
||||||
|
|||||||
Reference in New Issue
Block a user