This commit is contained in:
Fordoxia
2024-04-21 21:54:14 +01:00
97 changed files with 330 additions and 700 deletions

View File

@@ -27,6 +27,7 @@ CREATE TABLE `characters` (
`real_name` varchar(55) COLLATE utf8mb4_unicode_ci NOT NULL,
`name_is_always_random` tinyint(1) NOT NULL,
`gender` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL,
`body_type` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL,
`age` smallint(4) NOT NULL,
`species` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL,
`language` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL,

9
SQL/updates/54-55.sql Normal file
View File

@@ -0,0 +1,9 @@
# Updating DB from 54-55 - lewc
# Adds a new `body_type` (gender sprite) column to the `characters` table
# Add the new column next to the existing `gender` one
ALTER TABLE `characters`
ADD COLUMN `body_type` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL AFTER `gender`;
# Set the `body_type` column to whatever's already in `gender`, so that it doesn't change existing characters
UPDATE `characters` SET `body_type` = `gender` WHERE `gender` IS NOT NULL

View File

@@ -50,17 +50,18 @@
#define DNA_UI_EYES_G 35
#define DNA_UI_EYES_B 36
#define DNA_UI_GENDER 37
#define DNA_UI_BEARD_STYLE 38
#define DNA_UI_HAIR_STYLE 39
#define DNA_UI_HACC_STYLE 40
#define DNA_UI_BACC_STYLE 41
#define DNA_UI_HAIR_GRADIENT_STYLE 42
#define DNA_UI_HEAD_MARK_STYLE 43
#define DNA_UI_BODY_MARK_STYLE 44
#define DNA_UI_TAIL_MARK_STYLE 45
#define DNA_UI_PHYSIQUE 46
#define DNA_UI_HEIGHT 47
#define DNA_UI_LENGTH 48 // Update this when you add something, or you WILL break shit.
#define DNA_UI_BODY_TYPE 38
#define DNA_UI_BEARD_STYLE 39
#define DNA_UI_HAIR_STYLE 40
#define DNA_UI_HACC_STYLE 41
#define DNA_UI_BACC_STYLE 42
#define DNA_UI_HAIR_GRADIENT_STYLE 43
#define DNA_UI_HEAD_MARK_STYLE 44
#define DNA_UI_BODY_MARK_STYLE 45
#define DNA_UI_TAIL_MARK_STYLE 46
#define DNA_UI_PHYSIQUE 47
#define DNA_UI_HEIGHT 48
#define DNA_UI_LENGTH 49 // Update this when you add something, or you WILL break shit.
#define DNA_SE_LENGTH 55 // Was STRUCDNASIZE, size 27. 15 new blocks added = 42, plus room to grow.

View File

@@ -398,7 +398,7 @@
#define INVESTIGATE_BOMB "bombs"
// The SQL version required by this version of the code
#define SQL_VERSION 54
#define SQL_VERSION 55
// Vending machine stuff
#define CAT_NORMAL (1<<0)

View File

@@ -43,8 +43,6 @@
if(hairstyle == "Bald") //Just in case.
valid_hairstyles += hairstyle
continue
if((gender == MALE && S.gender == FEMALE) || (gender == FEMALE && S.gender == MALE))
continue
if(species == "Machine") //If the user is a species who can have a robotic head...
if(!robohead)
robohead = GLOB.all_robolimbs["Morpheus Cyberkinetics"]
@@ -72,8 +70,6 @@
if(facialhairstyle == "Shaved") //Just in case.
valid_facial_hairstyles += facialhairstyle
continue
if((gender == MALE && S.gender == FEMALE) || (gender == FEMALE && S.gender == MALE))
continue
if(species == "Machine") //If the user is a species who can have a robotic head...
if(!robohead)
robohead = GLOB.all_robolimbs["Morpheus Cyberkinetics"]
@@ -171,10 +167,13 @@
current_species = GLOB.all_species[species]
if(!current_species || current_species.name == "Human")
if(gender==FEMALE)
return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names))
else
return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names))
switch(gender)
if(FEMALE)
return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names))
if(MALE)
return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names))
else
return capitalize(pick(GLOB.first_names_male + GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names))
else
return current_species.get_random_name(gender)

View File

@@ -23,15 +23,15 @@
//more specialised stuff
/proc/sanitize_gender(gender,neuter=0,plural=0, default="male")
/proc/sanitize_gender(gender, neuter = FALSE, default = "male")
switch(gender)
if(MALE, FEMALE)return gender
if(MALE, FEMALE, PLURAL)
return gender
if(NEUTER)
if(neuter) return gender
else return default
if(PLURAL)
if(plural) return gender
else return default
if(neuter)
return gender
else
return default
return default
/proc/sanitize_hexcolor(color, default="#000000")

View File

@@ -22,12 +22,3 @@
/area/asteroid/artifactroom
name = "\improper Asteroid - Artifact"
icon_state = "cave"
//Labor camp
/area/mine/laborcamp
name = "Labor Camp"
icon_state = "brig"
/area/mine/laborcamp/security
name = "Labor Camp Security"
icon_state = "security"

View File

@@ -66,14 +66,11 @@
/area/awaycontent/a11
icon_state = "awaycontent11"
/area/awaycontent/a11
/area/awaycontent/a12
icon_state = "awaycontent12"
/area/awaycontent/a12
icon_state = "awaycontent13"
/area/awaycontent/a13
icon_state = "awaycontent14"
icon_state = "awaycontent13"
/area/awaycontent/a14
icon_state = "awaycontent14"

View File

@@ -136,6 +136,12 @@ GLOBAL_LIST_EMPTY(bad_blocks)
var/list/bodyacc = GLOB.body_accessory_by_name.Find(character.body_accessory?.name || "None")
SetUIValueRange(DNA_UI_BACC_STYLE, bodyacc, length(GLOB.body_accessory_by_name), 1)
switch(character.body_type)
if(FEMALE)
SetUIState(DNA_UI_BODY_TYPE, DNA_GENDER_FEMALE, TRUE)
if(MALE)
SetUIState(DNA_UI_BODY_TYPE, DNA_GENDER_MALE, TRUE)
//Set the Gender
switch(character.gender)
if(FEMALE)

View File

@@ -154,6 +154,12 @@
H.s_tone = 35 - dna.GetUIValueRange(DNA_UI_SKIN_TONE, 220) // Value can be negative.
switch(dna.GetUIState(DNA_UI_BODY_TYPE))
if(DNA_GENDER_FEMALE)
H.change_body_type(FEMALE, FALSE)
if(DNA_GENDER_MALE)
H.change_body_type(MALE, FALSE)
switch(dna.GetUITriState(DNA_UI_GENDER))
if(DNA_GENDER_FEMALE)
H.change_gender(FEMALE, FALSE)

View File

@@ -1,11 +1,7 @@
// This list is basically a copy of GLOB.greek_letters, but it also removes letters when a changeling spawns in with that ID
GLOBAL_LIST_INIT(possible_changeling_IDs, list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega"))
/datum/game_mode
var/list/datum/mind/changelings = list()
/datum/game_mode/changeling
name = "changeling"
config_tag = "changeling"

View File

@@ -1,6 +1,3 @@
/datum/game_mode
var/datum/team/cult/cult_team
/datum/game_mode/proc/get_cult_team()
if(!cult_team)
new /datum/team/cult() // assignment happens in create_team()

View File

@@ -45,6 +45,51 @@
/// Each item in this list can only be rolled once on average.
var/list/single_antag_positions = list("Head of Personnel", "Chief Engineer", "Research Director", "Chief Medical Officer", "Quartermaster")
/// A list of all minds which have the traitor antag datum.
var/list/datum/mind/traitors = list()
/// An associative list with mindslave minds as keys and their master's minds as values.
var/list/datum/mind/implanted = list()
/// A list of all minds which have the changeling antag datum
var/list/datum/mind/changelings = list()
/// A list of all minds which have the vampire antag datum
var/list/datum/mind/vampires = list()
/// A list of all minds which are thralled by a vampire
var/list/datum/mind/vampire_enthralled = list()
/// A list of all minds which have the wizard special role
var/list/datum/mind/wizards = list()
/// A list of all minds that are wizard apprentices
var/list/datum/mind/apprentices = list()
/// The cult team datum
var/datum/team/cult/cult_team
/// How many abductor teams do we have
var/abductor_teams = 0
/// A list which contains the minds of all abductors
var/list/datum/mind/abductors = list()
/// A list which contains the minds of all abductees
var/list/datum/mind/abductees = list()
/// A list of all the nuclear operatives' minds
var/list/datum/mind/syndicates = list()
/// A list of all the minds of head revolutionaries
var/list/datum/mind/head_revolutionaries = list()
/// A list of all the minds of revolutionaries
var/list/datum/mind/revolutionaries = list()
/// The revololution team datum
var/datum/team/revolution/rev_team
/// A list of all the minds with the superhero special role
var/list/datum/mind/superheroes = list()
/// A list of all the minds with the supervillain special role
var/list/datum/mind/supervillains = list()
/// A list of all the greyshirt minds
var/list/datum/mind/greyshirts = list()
/// A list of all the minds that have the ERT special role
var/list/datum/mind/ert = list()
/datum/game_mode/proc/announce() //to be calles when round starts
to_chat(world, "<B>Notice</B>: [src] did not define announce()")

View File

@@ -131,7 +131,7 @@
/datum/objective/abductee/party
explanation_text = "You're throwing a huge rager. Make it as awesome as possible so the whole crew comes... OR ELSE!"
/datum/objective/abductee/pets
/datum/objective/abductee/cooler_pets
explanation_text = "All the pets around here suck. You need to make them cooler. Replace them with exotic beasts!"
/datum/objective/abductee/conspiracy

View File

@@ -1,8 +1,3 @@
/datum/game_mode
var/abductor_teams = 0
var/list/datum/mind/abductors = list()
var/list/datum/mind/abductees = list()
/datum/game_mode/abduction
name = "abduction"
config_tag = "abduction"

View File

@@ -1,8 +1,5 @@
#define NUKESCALINGMODIFIER 6
/datum/game_mode
var/list/datum/mind/syndicates = list()
/proc/issyndicate(mob/living/M as mob)
return istype(M) && M.mind && SSticker && SSticker.mode && (M.mind in SSticker.mode.syndicates)

View File

@@ -4,11 +4,6 @@
#define REV_VICTORY 1
#define STATION_VICTORY 2
/datum/game_mode
var/list/datum/mind/head_revolutionaries = list()
var/list/datum/mind/revolutionaries = list()
var/datum/team/revolution/rev_team
/datum/game_mode/revolution
name = "revolution"
config_tag = "revolution"

View File

@@ -1,9 +1,3 @@
/datum/game_mode
/// A list of all minds which have the traitor antag datum.
var/list/datum/mind/traitors = list()
/// An associative list with mindslave minds as keys and their master's minds as values.
var/list/datum/mind/implanted = list()
/datum/game_mode/traitor
name = "traitor"
config_tag = "traitor"

View File

@@ -1,7 +1,3 @@
/datum/game_mode
var/list/datum/mind/vampires = list()
var/list/datum/mind/vampire_enthralled = list() //those controlled by a vampire
/datum/game_mode/vampire
name = "vampire"
config_tag = "vampire"

View File

@@ -1,7 +1,3 @@
/datum/game_mode
var/list/datum/mind/wizards = list()
var/list/datum/mind/apprentices = list()
/datum/game_mode/wizard
name = "wizard"
config_tag = "wizard"

View File

@@ -36,6 +36,10 @@
var/toggle_sound = 'sound/items/wirecutter.ogg'
blocks_emissive = EMISSIVE_BLOCK_GENERIC
var/list/localMotionTargets = list()
var/detectTime = 0
var/area/station/ai_monitored/area_motion = null
var/alarm_delay = 30 // Don't forget, there's another 3 seconds in queueAlarm()
/obj/machinery/camera/Initialize(mapload, should_add_to_cameranet = TRUE)
. = ..()

View File

@@ -1,9 +1,3 @@
/obj/machinery/camera
var/list/localMotionTargets = list()
var/detectTime = 0
var/area/station/ai_monitored/area_motion = null
var/alarm_delay = 30 // Don't forget, there's another 3 seconds in queueAlarm()
/obj/machinery/camera/process()
// motion camera event loop
if(!isMotion())

View File

@@ -134,11 +134,6 @@
to_chat(user, "<span class='notice'>The electronic systems in this door are far too advanced for your primitive hacking peripherals.</span>")
return
/obj/machinery/door/poddoor/multi_tile/impassable/two_tile_hor
icon = 'icons/obj/doors/1x2blast_hor.dmi'
width = 2
dir = EAST
/obj/machinery/door/poddoor/multi_tile/impassable/four_tile_ver
icon = 'icons/obj/doors/1x4blast_vert.dmi'
width = 4

View File

@@ -103,6 +103,20 @@
hud_possible = list (DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_TRACK_HUD)
//Action datums
var/datum/action/innate/mecha/mech_eject/eject_action = new
var/datum/action/innate/mecha/mech_toggle_internals/internals_action = new
var/datum/action/innate/mecha/mech_toggle_lights/lights_action = new
var/datum/action/innate/mecha/mech_view_stats/stats_action = new
var/datum/action/innate/mecha/mech_defence_mode/defense_action = new
var/datum/action/innate/mecha/mech_overload_mode/overload_action = new
var/datum/action/innate/mecha/mech_toggle_thrusters/thrusters_action = new
var/datum/effect_system/smoke_spread/smoke_system = new //not an action, but trigged by one
var/datum/action/innate/mecha/mech_smoke/smoke_action = new
var/datum/action/innate/mecha/mech_zoom/zoom_action = new
var/datum/action/innate/mecha/mech_toggle_phasing/phasing_action = new
var/datum/action/innate/mecha/mech_switch_damtype/switch_damtype_action = new
/obj/mecha/Initialize()
. = ..()
icon_state += "-open"

View File

@@ -1,18 +1,3 @@
/obj/mecha
//Action datums
var/datum/action/innate/mecha/mech_eject/eject_action = new
var/datum/action/innate/mecha/mech_toggle_internals/internals_action = new
var/datum/action/innate/mecha/mech_toggle_lights/lights_action = new
var/datum/action/innate/mecha/mech_view_stats/stats_action = new
var/datum/action/innate/mecha/mech_defence_mode/defense_action = new
var/datum/action/innate/mecha/mech_overload_mode/overload_action = new
var/datum/action/innate/mecha/mech_toggle_thrusters/thrusters_action = new
var/datum/effect_system/smoke_spread/smoke_system = new //not an action, but trigged by one
var/datum/action/innate/mecha/mech_smoke/smoke_action = new
var/datum/action/innate/mecha/mech_zoom/zoom_action = new
var/datum/action/innate/mecha/mech_toggle_phasing/phasing_action = new
var/datum/action/innate/mecha/mech_switch_damtype/switch_damtype_action = new
/obj/mecha/proc/GrantActions(mob/living/user, human_occupant = 0)
if(human_occupant)
eject_action.Grant(user, src)

View File

@@ -13,6 +13,7 @@
var/looking_for_personality = 0
var/mob/living/silicon/pai/pai
var/list/faction = list("neutral") // The factions the pAI will inherit from the card
var/current_emotion = 1
resistance_flags = FIRE_PROOF | ACID_PROOF | INDESTRUCTIBLE
/obj/item/paicard/syndicate
@@ -302,8 +303,6 @@
overlays.Cut()
overlays += "pai-off"
/obj/item/paicard
var/current_emotion = 1
/obj/item/paicard/proc/setEmotion(emotion)
if(pai)
overlays.Cut()

View File

@@ -148,17 +148,6 @@
icon_state = "com_cypherkey"
channels = list("Command" = 1, "Security" = 1)
/*
/obj/item/encryptionkey/headset_mine
name = "Mining Radio Encryption Key"
icon_state = "mine_cypherkey"
channels = list("Mining" = 1)
/obj/item/encryptionkey/heads/qm
name = "Quartermaster's Encryption Key"
icon_state = "qm_cypherkey"
channels = list("Cargo" = 1, "Mining" = 1)
*/
/obj/item/encryptionkey/headset_cargo
name = "Supply Radio Encryption Key"
icon_state = "cargo_cypherkey"

View File

@@ -3,6 +3,7 @@
***********************************************************************/
/obj/item/borg
icon = 'icons/mob/robot_items.dmi'
var/powerneeded // Percentage of power remaining required to run item
/obj/item/borg/stun
name = "electrically-charged arm"

View File

@@ -67,7 +67,7 @@
/obj/item/storage/box/disks
name = "Diskette Box"
icon_state = "disk_kit"
icon_state = "disk_box"
/obj/item/storage/box/disks/populate_contents()
for(var/i in 1 to 7)

View File

@@ -209,7 +209,6 @@
name = "DNA injector"
desc = "Good. Let the hate flow through you."
/obj/item/dnainjector/antitele
name = "DNA-Injector (Anti-Tele.)"
desc = "Will make you not able to control your mind."
@@ -553,28 +552,6 @@
block = GLOB.blindblock
..()
/obj/item/dnainjector/telemut
name = "DNA-Injector (Tele.)"
desc = "Super brain man!"
datatype = DNA2_BUF_SE
value = 0xFFF
forcedmutation = TRUE
/obj/item/dnainjector/telemut/Initialize()
block = GLOB.teleblock
..()
/obj/item/dnainjector/antitele
name = "DNA-Injector (Anti-Tele.)"
desc = "Will make you not able to control your mind."
datatype = DNA2_BUF_SE
value = 0x001
forcedmutation = TRUE
/obj/item/dnainjector/antitele/Initialize()
block = GLOB.teleblock
..()
/obj/item/dnainjector/deafmut
name = "DNA-Injector (Deaf)"
desc = "Sorry, what did you say?"

View File

@@ -169,16 +169,16 @@
desc = "No matter what, do not EVER use this."
payload = /obj/singularity
/obj/item/grenade/clusterbuster/tools
name = "\improper Quick Repair Grenade"
desc = "An assistant's every dream."
payload = /obj/random/tool
/obj/item/grenade/clusterbuster/tools
name = "\improper Engineering Deployment Platfom"
desc = "For the that time when gearing up was just too hard."
payload = /obj/random/tech_supply
/obj/item/grenade/clusterbuster/tide
name = "\improper Quick Repair Grenade"
desc = "An assistant's every dream."
payload = /obj/random/tool
/obj/item/grenade/clusterbuster/toys
name = "\improper Toy Delivery System"
desc = "Who needs skill at arcades anyway?"

View File

@@ -126,156 +126,6 @@
//////////////////
/* Common Boxes */
//////////////////
/obj/item/storage/box/gloves
name = "box of latex gloves"
desc = "Contains white gloves."
icon_state = "latex"
/obj/item/storage/box/gloves/populate_contents()
for(var/I in 1 to 7)
new /obj/item/clothing/gloves/color/latex(src)
/obj/item/storage/box/masks
name = "sterile masks"
desc = "This box contains masks of sterility."
icon_state = "sterile"
/obj/item/storage/box/masks/populate_contents()
for(var/I in 1 to 7)
new /obj/item/clothing/mask/surgical(src)
/obj/item/storage/box/syringes
name = "syringes"
desc = "A box full of syringes."
desc = "A biohazard alert warning is printed on the box"
icon_state = "syringe"
/obj/item/storage/box/syringes/populate_contents()
for(var/I in 1 to 7)
new /obj/item/reagent_containers/syringe(src)
/obj/item/storage/box/beakers
name = "beaker box"
icon_state = "beaker"
/obj/item/storage/box/beakers/populate_contents()
for(var/I in 1 to 7)
new /obj/item/reagent_containers/glass/beaker(src)
/obj/item/storage/box/beakers/bluespace
name = "box of bluespace beakers"
icon_state = "beaker"
/obj/item/storage/box/beakers/bluespace/populate_contents()
for(var/I in 1 to 7)
new /obj/item/reagent_containers/glass/beaker/bluespace(src)
/obj/item/storage/box/iv_bags
name = "IV Bags"
desc = "A box full of empty IV bags."
icon_state = "beaker"
/obj/item/storage/box/iv_bags/populate_contents()
for(var/I in 1 to 7)
new /obj/item/reagent_containers/iv_bag(src)
/obj/item/storage/box/injectors
name = "\improper DNA injectors"
desc = "This box contains injectors it seems."
/obj/item/storage/box/injectors/populate_contents()
for(var/I in 1 to 6)
new /obj/item/dnainjector/h2m(src)
/obj/item/storage/box/slug
name = "ammunition box (Slug)"
desc = "A small box capable of holding seven shotgun shells."
icon_state = "slugbox"
/obj/item/storage/box/slug/populate_contents()
for(var/I in 1 to 7)
new /obj/item/ammo_casing/shotgun(src)
/obj/item/storage/box/buck
name = "ammunition box (Buckshot)"
desc = "A small box capable of holding seven shotgun shells."
icon_state = "buckshotbox"
/obj/item/storage/box/buck/populate_contents()
for(var/I in 1 to 7)
new /obj/item/ammo_casing/shotgun/buckshot(src)
/obj/item/storage/box/dragonsbreath
name = "ammunition box (Dragonsbreath)"
desc = "A small box capable of holding seven shotgun shells."
icon_state = "dragonsbreathbox"
/obj/item/storage/box/dragonsbreath/populate_contents()
for(var/I in 1 to 7)
new /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath(src)
/obj/item/storage/box/stun
name = "ammunition box (Stun shells)"
desc = "A small box capable of holding seven shotgun shells."
icon_state = "stunbox"
/obj/item/storage/box/stun/populate_contents()
for(var/I in 1 to 7)
new /obj/item/ammo_casing/shotgun/stunslug(src)
/obj/item/storage/box/beanbag
name = "ammunition box (Beanbag shells)"
desc = "A small box capable of holding seven shotgun shells."
icon_state = "beanbagbox"
/obj/item/storage/box/beanbag/populate_contents()
for(var/I in 1 to 7)
new /obj/item/ammo_casing/shotgun/beanbag(src)
/obj/item/storage/box/rubbershot
name = "ammunition box (Rubbershot shells)"
desc = "A small box capable of holding seven shotgun shells."
icon_state = "rubbershotbox"
/obj/item/storage/box/rubbershot/populate_contents()
for(var/I in 1 to 7)
new /obj/item/ammo_casing/shotgun/rubbershot(src)
/obj/item/storage/box/tranquilizer
name = "ammunition box (Tranquilizer darts)"
desc = "A small box capable of holding seven shotgun shells."
icon_state = "tranqbox"
/obj/item/storage/box/tranquilizer/populate_contents()
for(var/I in 1 to 7)
new /obj/item/ammo_casing/shotgun/tranquilizer(src)
/obj/item/storage/box/flashes
name = "box of flashbulbs"
desc = "<B>WARNING: Flashes can cause serious eye damage, protective eyewear is required.</B>"
icon_state = "flashbang"
/obj/item/storage/box/flashes/populate_contents()
for(var/I in 1 to 6)
new /obj/item/flash(src)
/obj/item/storage/box/teargas
name = "box of tear gas grenades (WARNING)"
desc = "<B>WARNING: These devices are extremely dangerous and can cause blindness and skin irritation.</B>"
icon_state = "flashbang"
/obj/item/storage/box/teargas/populate_contents()
for(var/I in 1 to 7)
new /obj/item/grenade/chem_grenade/teargas(src)
/obj/item/storage/box/emps
name = "emp grenades"
desc = "A box with 5 emp grenades."
icon_state = "flashbang"
/obj/item/storage/box/emps/populate_contents()
for(var/I in 1 to 5)
new /obj/item/grenade/empgrenade(src)
/obj/item/storage/box/tapes
name = "Tape Box"
@@ -368,14 +218,6 @@
for(var/i in 1 to 7)
new /obj/item/disk/plantgene(src)
/obj/item/storage/box/disks
name = "genetics diskette box"
icon_state = "disk_box"
/obj/item/storage/box/disks/populate_contents()
for(var/i in 1 to 7)
new /obj/item/disk/data(src)
/obj/item/storage/box/PDAs
name = "spare PDAs"
desc = "A box of spare PDA microcomputers."

View File

@@ -401,13 +401,6 @@
mounted_head = null
qdel(src)
/obj/item/spear/kidan
name = "\improper Kidan spear"
desc = "A spear brought over from the Kidan homeworld."
base_icon_state = "kindanspear"
icon_state = "kidanspear0"
// DIY CHAINSAW
/obj/item/chainsaw
name = "chainsaw"

View File

@@ -1,6 +1,8 @@
/turf/space/transit
var/pushdirection // push things that get caught in the transit tile this direction
plane = PLANE_SPACE
icon_state = "black"
dir = SOUTH
//Overwrite because we dont want people building rods in space.
/turf/space/transit/attackby(obj/O as obj, mob/user as mob, params)
@@ -107,10 +109,6 @@
icon_state = "speedspace_ew_15"
//-tg- stuff
/turf/space/transit
icon_state = "black"
dir = SOUTH
/turf/space/transit/horizontal
dir = WEST

View File

@@ -16,6 +16,7 @@ GLOBAL_PROTECT(href_token)
var/rights = 0
var/fakekey
var/big_brother = FALSE
var/current_tab = 0
/// Unique-to-session randomly generated token given to each admin to help add detail to logs on admin interactions with hrefs
var/href_token

View File

@@ -1,6 +1,3 @@
/datum/admins
var/current_tab =0
/datum/admins/proc/Secrets()

View File

@@ -61,7 +61,8 @@
custom_emotes,
physique,
height,
cyborg_brain_type
cyborg_brain_type,
body_type
FROM characters WHERE ckey=:ckey"}, list(
"ckey" = C.ckey
))

View File

@@ -6,6 +6,7 @@
var/real_name //our character's name
var/be_random_name = FALSE //whether we are a random name every round
var/gender = MALE //gender of character (well duh)
var/body_type = MALE //body sprite variant
var/age = 30 //age of character
var/b_type = "A+" //blood type (not-chooseable)
var/underwear = "Nude" //underwear type
@@ -118,13 +119,13 @@
var/markingcolourslist = list2params(m_colours)
var/markingstyleslist = list2params(m_styles)
if(!isemptylist(organ_data))
if(length(organ_data))
organ_list = list2params(organ_data)
if(!isemptylist(rlimb_data))
if(length(rlimb_data))
rlimb_list = list2params(rlimb_data)
if(!isemptylist(player_alt_titles))
if(length(player_alt_titles))
playertitlelist = list2params(player_alt_titles)
if(!isemptylist(loadout_gear))
if(length(loadout_gear))
gearlist = json_encode(loadout_gear)
var/datum/db_query/firstquery = SSdbcore.NewQuery("SELECT slot FROM characters WHERE ckey=:ckey ORDER BY slot", list(
@@ -141,6 +142,7 @@
real_name=:real_name,
name_is_always_random=:be_random_name,
gender=:gender,
body_type=:body_type,
age=:age,
species=:species,
language=:language,
@@ -193,7 +195,8 @@
hair_gradient_colour=:h_grad_colour,
hair_gradient_alpha=:h_grad_alpha,
custom_emotes=:custom_emotes,
cyborg_brain_type=:cyborg_brain_type
cyborg_brain_type=:cyborg_brain_type,
body_type=:body_type
WHERE ckey=:ckey
AND slot=:slot"}, list(
// OH GOD SO MANY PARAMETERS
@@ -201,6 +204,7 @@
"real_name" = real_name,
"be_random_name" = be_random_name,
"gender" = gender,
"body_type" = body_type,
"age" = age,
"species" = species,
"language" = language,
@@ -294,7 +298,7 @@
player_alt_titles,
disabilities, organ_data, rlimb_data, nanotrasen_relation, physique, height, speciesprefs,
socks, body_accessory, gear, autohiss,
hair_gradient, hair_gradient_offset, hair_gradient_colour, hair_gradient_alpha, custom_emotes, cyborg_brain_type)
hair_gradient, hair_gradient_offset, hair_gradient_colour, hair_gradient_alpha, custom_emotes, cyborg_brain_type, body_type)
VALUES
(:ckey, :slot, :metadata, :name, :be_random_name, :gender,
:age, :species, :language,
@@ -321,7 +325,7 @@
:playertitlelist,
:disabilities, :organ_list, :rlimb_list, :nanotrasen_relation, :physique, :height, :speciesprefs,
:socks, :body_accessory, :gearlist, :autohiss_mode,
:h_grad_style, :h_grad_offset, :h_grad_colour, :h_grad_alpha, :custom_emotes, :cyborg_brain_type)
:h_grad_style, :h_grad_offset, :h_grad_colour, :h_grad_alpha, :custom_emotes, :cyborg_brain_type, :body_type)
"}, list(
// This has too many params for anyone to look at this without going insae
"ckey" = C.ckey,
@@ -330,6 +334,7 @@
"name" = real_name,
"be_random_name" = be_random_name,
"gender" = gender,
"body_type" = body_type,
"age" = age,
"species" = species,
"language" = language,
@@ -394,6 +399,10 @@
return 1
/**
* Load in and process the database's information on the player's character save.
* The order of indices here is the relative order from get_query() in 20-load-characters.dm.
*/
/datum/character_save/proc/load(datum/db_query/query)
//Character
metadata = query.item[1]
@@ -471,6 +480,7 @@
physique = query.item[56]
height = query.item[57]
cyborg_brain_type = query.item[58]
body_type = query.item[59]
//Sanitize
var/datum/species/SP = GLOB.all_species[species]
@@ -504,7 +514,7 @@
real_name = random_name(gender, species)
be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name))
gender = sanitize_gender(gender, FALSE, !SP.has_gender)
gender = sanitize_gender(gender, FALSE)
age = sanitize_integer(age, SP.min_age, SP.max_age, initial(age))
h_colour = sanitize_hexcolor(h_colour)
h_sec_colour = sanitize_hexcolor(h_sec_colour)
@@ -590,9 +600,10 @@
gender = gender_override
else
gender = pick(MALE, FEMALE)
underwear = random_underwear(gender, species)
undershirt = random_undershirt(gender, species)
socks = random_socks(gender, species)
body_type = pick(MALE, FEMALE)
underwear = random_underwear(body_type, species)
undershirt = random_undershirt(body_type, species)
socks = random_socks(body_type, species)
if(length(GLOB.body_accessory_by_species[species]))
body_accessory = random_body_accessory(species, S.optional_body_accessory)
if(S.bodyflags & (HAS_SKIN_TONE|HAS_ICON_SKIN_TONE))
@@ -794,7 +805,8 @@
qdel(preview_icon)
var/g = "m"
if(gender == FEMALE) g = "f"
if(body_type == FEMALE)
g = "f"
var/icon/icobase
var/datum/species/current_species = GLOB.all_species[species]
@@ -1808,6 +1820,7 @@
character.gen_record = gen_record
character.change_gender(gender)
character.body_type = body_type // TODO does this update the character properly or do we need a setter here
character.age = age
//Head-specific
@@ -1885,10 +1898,10 @@
character.backbag = backbag
//Debugging report to track down a bug, which randomly assigned the plural gender to people.
if(character.dna.species.has_gender && (character.gender in list(PLURAL, NEUTER)))
if(character.gender == NEUTER)
if(isliving(src)) //Ghosts get neuter by default
message_admins("[key_name_admin(character)] has spawned with their gender as plural or neuter. Please notify coders.")
character.change_gender(MALE)
message_admins("[key_name_admin(character)] has spawned with their gender as neuter. Please notify coders.")
character.change_gender(PLURAL)
character.change_eye_color(e_colour, skip_icons = TRUE)
character.original_eye_color = e_colour

View File

@@ -168,13 +168,13 @@
if(S.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings.
active_character.m_colours["tail"] = rand_hex_color()
if("underwear")
active_character.underwear = random_underwear(active_character.gender, active_character.species)
active_character.underwear = random_underwear(active_character.body_type, active_character.species)
ShowChoices(user)
if("undershirt")
active_character.undershirt = random_undershirt(active_character.gender, active_character.species)
active_character.undershirt = random_undershirt(active_character.body_type, active_character.species)
ShowChoices(user)
if("socks")
active_character.socks = random_socks(active_character.gender, active_character.species)
active_character.socks = random_socks(active_character.body_type, active_character.species)
ShowChoices(user)
if("eyes")
active_character.e_colour = rand_hex_color()
@@ -226,8 +226,6 @@
return
if(prev_species != active_character.species)
active_character.age = clamp(active_character.age, NS.min_age, NS.max_age)
if(NS.has_gender && active_character.gender == PLURAL)
active_character.gender = pick(MALE,FEMALE)
var/datum/robolimb/robohead
if(NS.bodyflags & ALL_RPARTS)
var/head_model = "[!active_character.rlimb_data["head"] ? "Morpheus Cyberkinetics" : active_character.rlimb_data["head"]]"
@@ -265,15 +263,15 @@
// Don't wear another species' underwear!
var/datum/sprite_accessory/SA = GLOB.underwear_list[active_character.underwear]
if(!SA || !(active_character.species in SA.species_allowed))
active_character.underwear = random_underwear(active_character.gender, active_character.species)
active_character.underwear = random_underwear(active_character.body_type, active_character.species)
SA = GLOB.undershirt_list[active_character.undershirt]
if(!SA || !(active_character.species in SA.species_allowed))
active_character.undershirt = random_undershirt(active_character.gender, active_character.species)
active_character.undershirt = random_undershirt(active_character.body_type, active_character.species)
SA = GLOB.socks_list[active_character.socks]
if(!SA || !(active_character.species in SA.species_allowed))
active_character.socks = random_socks(active_character.gender, active_character.species)
active_character.socks = random_socks(active_character.body_type, active_character.species)
//reset skin tone and colour
if(NS.bodyflags & (HAS_SKIN_TONE|HAS_ICON_SKIN_TONE))
@@ -579,10 +577,6 @@
if(facialhairstyle == "Shaved") //Just in case.
valid_facial_hairstyles += facialhairstyle
continue
if(active_character.gender == MALE && SA.gender == FEMALE)
continue
if(active_character.gender == FEMALE && SA.gender == MALE)
continue
if(S.bodyflags & ALL_RPARTS) //Species that can use prosthetic heads.
var/head_model
if(!active_character.rlimb_data["head"]) //Handle situations where the head is default.
@@ -608,9 +602,10 @@
var/list/valid_underwear = list()
for(var/underwear in GLOB.underwear_list)
var/datum/sprite_accessory/SA = GLOB.underwear_list[underwear]
if(active_character.gender == MALE && SA.gender == FEMALE)
// soon...
if(active_character.body_type == MALE && SA.body_type == FEMALE)
continue
if(active_character.gender == FEMALE && SA.gender == MALE)
if(active_character.body_type == FEMALE && SA.body_type == MALE)
continue
if(!(active_character.species in SA.species_allowed))
continue
@@ -624,12 +619,12 @@
var/list/valid_undershirts = list()
for(var/undershirt in GLOB.undershirt_list)
var/datum/sprite_accessory/SA = GLOB.undershirt_list[undershirt]
if(active_character.gender == MALE && SA.gender == FEMALE)
continue
if(active_character.gender == FEMALE && SA.gender == MALE)
continue
if(!(active_character.species in SA.species_allowed))
continue
if(active_character.body_type == MALE && SA.body_type == FEMALE)
continue
if(active_character.body_type == FEMALE && SA.body_type == MALE)
continue
valid_undershirts[undershirt] = GLOB.undershirt_list[undershirt]
sortTim(valid_undershirts, GLOBAL_PROC_REF(cmp_text_asc))
var/new_undershirt = tgui_input_list(user, "Choose your character's undershirt", "Character Preference", valid_undershirts)
@@ -641,12 +636,12 @@
var/list/valid_sockstyles = list()
for(var/sockstyle in GLOB.socks_list)
var/datum/sprite_accessory/SA = GLOB.socks_list[sockstyle]
if(active_character.gender == MALE && SA.gender == FEMALE)
continue
if(active_character.gender == FEMALE && SA.gender == MALE)
continue
if(!(active_character.species in SA.species_allowed))
continue
if(active_character.body_type == MALE && SA.body_type == FEMALE)
continue
if(active_character.body_type == FEMALE && SA.body_type == MALE)
continue
valid_sockstyles[sockstyle] = GLOB.socks_list[sockstyle]
sortTim(valid_sockstyles, GLOBAL_PROC_REF(cmp_text_asc))
var/new_socks = tgui_input_list(user, "Choose your character's socks", "Character Preference", valid_sockstyles)
@@ -896,23 +891,25 @@
toggles ^= PREFTOGGLE_DONATOR_PUBLIC
if("gender")
if(!S.has_gender)
var/newgender = tgui_input_list(user, "Who are you?", "Choose Gender", list("Male", "Female", "Genderless"))
if(!newgender)
return
switch(newgender)
if("Male")
active_character.gender = MALE
if("Female")
active_character.gender = FEMALE
if("Genderless")
active_character.gender = PLURAL
else
if(active_character.gender == MALE)
active_character.gender = FEMALE
else
var/newgender = tgui_input_list(user, "Who are you?", "Choose Gender", list("Male", "Female", "Genderless"))
if(!newgender)
return
switch(newgender)
if("Male")
active_character.gender = MALE
active_character.underwear = random_underwear(active_character.gender)
if("Female")
active_character.gender = FEMALE
if("Genderless")
active_character.gender = PLURAL
if("body_type")
if(active_character.body_type == MALE)
active_character.body_type = FEMALE
else
active_character.body_type = MALE
active_character.underwear = random_underwear(active_character.body_type)
if("hear_adminhelps")
sound ^= SOUND_ADMINHELP

View File

@@ -195,11 +195,12 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
dat += "</td></tr></table>"
dat += "<table width='100%'><tr><td width='405px' height='200px' valign='top'>"
dat += "<h2>Identity</h2>"
dat += "<b>Gender:</b> <a href='byond://?_src_=prefs;preference=gender'>[active_character.gender == MALE ? "Male" : (active_character.gender == FEMALE ? "Female" : "Genderless")]</a>"
dat += "<br>"
dat += "<b>Age:</b> <a href='byond://?_src_=prefs;preference=age;task=input'>[active_character.age]</a><br>"
dat += "<b>Body:</b> <a href='byond://?_src_=prefs;preference=all;task=random'>(&reg;)</a><br>"
dat += "<b>Species:</b> <a href='byond://?_src_=prefs;preference=species;task=input'>[active_character.species]</a><br>"
dat += "<b>Gender:</b> <a href='byond://?_src_=prefs;preference=gender'>[active_character.gender == MALE ? "Male" : (active_character.gender == FEMALE ? "Female" : "Genderless")]</a><br>"
dat += "<b>Body Type:</b> <a href='byond://?_src_=prefs;preference=body_type'>[active_character.body_type == MALE ? "Masculine" : "Feminine"]</a>"
dat += "<br>"
if(active_character.species == "Vox") // Purge these bastards
dat += "<b>N2 Tank:</b> <a href='byond://?_src_=prefs;preference=speciesprefs;task=input'>[active_character.speciesprefs ? "Large N2 Tank" : "Specialized N2 Tank"]</a><br>"
if(active_character.species == "Plasmaman")

View File

@@ -262,6 +262,7 @@
var/safe_from_poison = FALSE
strip_delay = 20
put_on_delay = 40
var/transfer_blood = FALSE
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/gloves.dmi',

View File

@@ -5,6 +5,26 @@
item_state = "boxing"
put_on_delay = 60
species_exception = list(/datum/species/golem) // now you too can be a golem boxing champion
var/datum/martial_art/boxing/style
/obj/item/clothing/gloves/boxing/Initialize()
. = ..()
style = new()
/obj/item/clothing/gloves/boxing/equipped(mob/user, slot)
if(!ishuman(user))
return
if(slot == SLOT_HUD_GLOVES)
var/mob/living/carbon/human/H = user
style.teach(H, TRUE)
/obj/item/clothing/gloves/boxing/dropped(mob/user)
..()
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
if(H.get_item_by_slot(SLOT_HUD_GLOVES) == src)
style.remove(H)
/obj/item/clothing/gloves/boxing/green
icon_state = "boxinggreen"

View File

@@ -13,7 +13,8 @@
/obj/item/clothing/head/collectable/slime
name = "collectable slime cap!"
desc = "It just latches right in place!"
icon_state = "slime"
icon_state = "headslime"
item_state = "headslime"
/obj/item/clothing/head/collectable/xenom
name = "collectable xenomorph helmet!"
@@ -79,12 +80,6 @@
"Grey" = 'icons/mob/clothing/species/grey/helmet.dmi'
)
/obj/item/clothing/head/collectable/slime
name = "collectable slime hat"
desc = "Just like a real Brain Slug!"
icon_state = "headslime"
item_state = "headslime"
/obj/item/clothing/head/collectable/flatcap
name = "collectable flat cap"
desc = "A Collectable farmer's Flat Cap!"

View File

@@ -126,14 +126,6 @@
"Grey" = 'icons/mob/clothing/species/grey/head.dmi'
)
/obj/item/clothing/head/that
name = "sturdy top-hat"
desc = "It's an amish looking armored top hat."
icon_state = "tophat"
item_state = "that"
flags_inv = 0
/obj/item/clothing/head/greenbandana
name = "green bandana"
desc = "It's a green bandana with some fine nanotech lining."

View File

@@ -20,6 +20,7 @@
name = "brown shoes"
desc = "A pair of brown shoes."
icon_state = "brown"
item_color = "brown"
/obj/item/clothing/shoes/brown/captain
item_color = "captain" //Exists for washing machines. Is not different from brown shoes in any way.
@@ -59,11 +60,6 @@
icon_state = "purple"
item_color = "purple"
/obj/item/clothing/shoes/brown
name = "brown shoes"
icon_state = "brown"
item_color = "brown"
/obj/item/clothing/shoes/red
name = "red shoes"
desc = "Stylish red shoes."

View File

@@ -146,11 +146,6 @@
icon_state = "lightgreen"
item_color = "lightgreen"
/obj/item/clothing/under/color/lightblue
name = "light blue jumpsuit"
icon_state = "lightblue"
item_color = "lightblue"
/obj/item/clothing/under/color/lightbrown
name = "light brown jumpsuit"
icon_state = "lightbrown"

View File

@@ -1,6 +1,3 @@
/obj/item/clothing/gloves
var/transfer_blood = 0
/obj/item/reagent_containers/glass/rag
name = "damp rag"
desc = "For cleaning up messes, you suppose."

View File

@@ -562,6 +562,10 @@
bitesize = 3
list_reagents = list("protein" = 4, "vitamin" = 4)
/obj/item/food/snacks/organ/Initialize(mapload)
. = ..()
reagents.add_reagent("nutriment", 5)
/obj/item/food/snacks/appendix
//yes, this is the same as meat. I might do something different in future
name = "appendix"

View File

@@ -387,13 +387,6 @@
)
result = /obj/item/food/snacks/soup/coldchili
/datum/recipe/microwave/spellburger
items = list(
/obj/item/food/snacks/bun,
/obj/item/clothing/head/wizard/fake
)
result = /obj/item/food/snacks/burger/spell
/datum/recipe/microwave/spellburger
items = list(
/obj/item/food/snacks/bun,

View File

@@ -1,13 +1,3 @@
/* Example for reference when defining recipes
/datum/crafting_recipe/food
name = "" //in-game display name
reqs[] = list() //type paths of items/reagents consumed associated with how many are needed (equivalent to var/list/items and var/list/reagents combined)
result //type path of item resulting from this craft
tools[] = list() //type paths of items needed but not consumed
time = 30 //time in deciseconds
parts[] = list() //type paths of items that will be placed in the result
*/
/datum/crafting_recipe/sandwich
name = "Sandwich"
reqs = list(

View File

@@ -411,8 +411,6 @@
/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office
access = ACCESS_CHAPEL_OFFICE
/obj/effect/mapping_helpers/airlock/access/all/service/crematorium
access = ACCESS_CREMATORIUM
/obj/effect/mapping_helpers/airlock/access/all/service/crematorium
access = ACCESS_CREMATORIUM

View File

@@ -414,9 +414,6 @@
/obj/effect/mapping_helpers/airlock/windoor/access/all/service/crematorium
access = ACCESS_CREMATORIUM
/obj/effect/mapping_helpers/airlock/windoor/access/all/service/crematorium
access = ACCESS_CREMATORIUM
/obj/effect/mapping_helpers/airlock/windoor/access/all/service/library
access = ACCESS_LIBRARY

View File

@@ -256,31 +256,6 @@
else
to_chat(H, "<span class='warning'>Your hands are full.</span>")
//ITEMS
/obj/item/clothing/gloves/boxing
var/datum/martial_art/boxing/style
/obj/item/clothing/gloves/boxing/Initialize()
. = ..()
style = new()
/obj/item/clothing/gloves/boxing/equipped(mob/user, slot)
if(!ishuman(user))
return
if(slot == SLOT_HUD_GLOVES)
var/mob/living/carbon/human/H = user
style.teach(H, TRUE)
return
/obj/item/clothing/gloves/boxing/dropped(mob/user)
..()
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
if(H.get_item_by_slot(SLOT_HUD_GLOVES) == src)
style.remove(H)
/obj/item/storage/belt/champion/wrestling
name = "Wrestling Belt"
var/datum/martial_art/wrestling/style

View File

@@ -23,47 +23,6 @@
prefs.active_character.autohiss_mode = AUTOHISS_OFF
to_chat(src, "Auto-hiss is now OFF.")
/datum/species/unathi
autohiss_basic_map = list(
"s" = list("ss", "sss", "ssss")
)
autohiss_extra_map = list(
"x" = list("ks", "kss", "ksss")
)
autohiss_exempt = list("Sinta'unathi")
/datum/species/tajaran
autohiss_basic_map = list(
"r" = list("rr", "rrr", "rrrr")
)
autohiss_exempt = list("Siik'tajr")
/datum/species/plasmaman
autohiss_basic_map = list(
"s" = list("ss", "sss", "ssss")
)
/datum/species/kidan
autohiss_basic_map = list(
"z" = list("zz", "zzz", "zzzz"),
"v" = list("vv", "vvv", "vvvv")
)
autohiss_extra_map = list(
"s" = list("z", "zs", "zzz", "zzsz")
)
autohiss_exempt = list("Chittin")
/datum/species/drask
autohiss_basic_map = list(
"o" = list ("oo", "ooo"),
"u" = list ("uu", "uuu")
)
autohiss_extra_map = list(
"m" = list ("mm", "mmm")
)
autohiss_exempt = list("Orluum")
/datum/species/proc/handle_autohiss(message, datum/language/lang, mode)
if(!autohiss_basic_map)
return message

View File

@@ -1,3 +1,4 @@
#define XENO_TOTAL_LAYERS 6
/mob/living/carbon/alien/humanoid
name = "alien"
icon_state = "alien_s"
@@ -11,6 +12,7 @@
var/alien_slash_damage = 20 //Aliens deal a good amount of damage on harm intent
var/alien_movement_delay = 0 //This can be + or -, how fast an alien moves
var/temperature_resistance = T0C+75
var/list/overlays_standing[XENO_TOTAL_LAYERS]
pass_flags = PASSTABLE
hud_type = /datum/hud/alien
@@ -96,3 +98,5 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list(
/mob/living/carbon/alien/humanoid/get_permeability_protection()
return 0.8
#undef XENO_TOTAL_LAYERS

View File

@@ -5,12 +5,8 @@
#define X_R_HAND_LAYER 4
#define X_TARGETED_LAYER 5
#define X_FIRE_LAYER 6
#define X_TOTAL_LAYERS 6
/////////////////////////////////
/mob/living/carbon/alien/humanoid
var/list/overlays_standing[X_TOTAL_LAYERS]
/mob/living/carbon/alien/humanoid/update_icons()
overlays.Cut()
for(var/image/I in overlays_standing)
@@ -144,4 +140,3 @@
#undef X_R_HAND_LAYER
#undef X_TARGETED_LAYER
#undef X_FIRE_LAYER
#undef X_TOTAL_LAYERS

View File

@@ -4,27 +4,28 @@
AC.ui_interact(user)
/mob/living/carbon/human/proc/change_gender(new_gender, update_dna = TRUE)
var/obj/item/organ/external/head/H = bodyparts_by_name["head"]
if(gender == new_gender || (gender == PLURAL && !dna.species.has_gender))
if(gender == new_gender)
return
gender = new_gender
if(istype(H))
var/datum/sprite_accessory/hair/current_hair = GLOB.hair_styles_full_list[H.h_style]
if(current_hair.gender != NEUTER && current_hair.gender != gender)
reset_head_hair()
var/datum/sprite_accessory/hair/current_fhair = GLOB.facial_hair_styles_list[H.f_style]
if(current_fhair.gender != NEUTER && current_fhair.gender != gender)
reset_facial_hair()
if(update_dna)
update_dna()
sync_organ_dna(assimilate = FALSE)
update_body()
return TRUE
/mob/living/carbon/human/proc/change_body_type(new_body, update_dna = TRUE)
if(!new_body || new_body == body_type)
return
body_type = new_body
if(update_dna)
update_dna()
sync_organ_dna(FALSE)
update_body(TRUE)
/mob/living/carbon/human/proc/change_hair(hair_style, fluff)
var/obj/item/organ/external/head/H = get_organ("head")
@@ -373,8 +374,6 @@
if(hairstyle == "Bald") //Just in case.
valid_hairstyles += hairstyle
continue
if((H.gender == MALE && S.gender == FEMALE) || (H.gender == FEMALE && S.gender == MALE))
continue
if(H.dna.species.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head...
var/datum/robolimb/robohead = GLOB.all_robolimbs[H.model]
if((H.dna.species.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
@@ -401,8 +400,6 @@
if(facialhairstyle == "Shaved") //Just in case.
valid_facial_hairstyles += facialhairstyle
continue
if((H.gender == MALE && S.gender == FEMALE) || (H.gender == FEMALE && S.gender == MALE))
continue
if(H.dna.species.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head...
var/datum/robolimb/robohead = GLOB.all_robolimbs[H.model]
if(H.dna.species.name in S.species_allowed) //If this is a facial hair style native to the user's species...

View File

@@ -32,6 +32,8 @@
var/height = "average height"
/// Players physique (even MORE fluff)
var/physique = "average"
/// The body type associated with the body
var/body_type = MALE
var/underwear = "Nude" //Which underwear the player wants
var/undershirt = "Nude" //Which undershirt the player wants

View File

@@ -1087,9 +1087,6 @@
if(oldspecies.default_language)
remove_language(oldspecies.default_language)
if(gender == PLURAL && oldspecies.has_gender)
change_gender(pick(MALE, FEMALE))
oldspecies.handle_dna(src, TRUE) // Remove any mutations that belong to the old species
oldspecies.on_species_loss(src)

View File

@@ -118,7 +118,6 @@
var/forced_heartattack = FALSE //Some species have blood, but we still want them to have heart attacks
var/dies_at_threshold = FALSE // Do they die or get knocked out at specific thresholds, or do they go through complex crit?
var/can_revive_by_healing // Determines whether or not this species can be revived by simply healing them
var/has_gender = TRUE
var/blacklisted = FALSE
var/dangerous_existence = FALSE

View File

@@ -22,7 +22,6 @@
inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_PLANT
clothing_flags = HAS_SOCKS
default_hair_colour = "#000000"
has_gender = FALSE
bodyflags = SHAVED
dietflags = DIET_HERB //Diona regenerate nutrition in light and water, no diet necessary, but if they must, they eat other plants *scream
taste_sensitivity = TASTE_SENSITIVITY_DULL

View File

@@ -32,7 +32,6 @@
species_traits = list(LIPS, NO_HAIR)
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT
bodyflags = HAS_SKIN_TONE | HAS_BODY_MARKINGS | BALD | SHAVED
has_gender = FALSE
dietflags = DIET_OMNI
cold_level_1 = -1 //Default 260 - Lower is better
@@ -58,6 +57,14 @@
"eyes" = /obj/item/organ/internal/eyes/drask, //5 darksight.
"brain" = /obj/item/organ/internal/brain/drask
)
autohiss_basic_map = list(
"o" = list ("oo", "ooo"),
"u" = list ("uu", "uuu")
)
autohiss_extra_map = list(
"m" = list ("mm", "mmm")
)
autohiss_exempt = list("Orluum")
/datum/species/drask/get_species_runechat_color(mob/living/carbon/human/H)
var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)

View File

@@ -143,21 +143,21 @@
/datum/species/golem/plasma/on_species_gain(mob/living/carbon/C, datum/species/old_species)
..()
if(ishuman(C))
var/datum/action/innate/ignite/ignite = new()
ignite.Grant(C)
var/datum/action/innate/golem_ignite/golem_ignite = new()
golem_ignite.Grant(C)
/datum/species/golem/plasma/on_species_loss(mob/living/carbon/C)
for(var/datum/action/innate/ignite/ignite in C.actions)
ignite.Remove(C)
for(var/datum/action/innate/golem_ignite/golem_ignite in C.actions)
golem_ignite.Remove(C)
..()
/datum/action/innate/ignite
/datum/action/innate/golem_ignite
name = "Ignite"
desc = "Set yourself aflame, bringing yourself closer to exploding!"
check_flags = AB_CHECK_CONSCIOUS
button_icon_state = "sacredflame"
/datum/action/innate/ignite/Activate()
/datum/action/innate/golem_ignite/Activate()
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
if(H.fire_stacks)

View File

@@ -26,7 +26,6 @@
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = HAS_BODY_MARKINGS | HAS_BODYACC_COLOR | SHAVED | BALD
dietflags = DIET_HERB
has_gender = FALSE
reagent_tag = PROCESS_ORG
flesh_color = "#a598ad"
blood_color = "#A200FF"

View File

@@ -47,6 +47,14 @@
"is cracking their exoskeleton!",
"is stabbing themselves with their mandibles!",
"is holding their breath!")
autohiss_basic_map = list(
"z" = list("zz", "zzz", "zzzz"),
"v" = list("vv", "vvv", "vvvv")
)
autohiss_extra_map = list(
"s" = list("z", "zs", "zzz", "zzsz")
)
autohiss_exempt = list("Chittin")
/datum/species/kidan/get_species_runechat_color(mob/living/carbon/human/H)

View File

@@ -34,7 +34,6 @@
default_hair = "Blue IPC Screen"
dies_at_threshold = TRUE
can_revive_by_healing = 1
has_gender = FALSE
reagent_tag = PROCESS_SYN
male_scream_sound = 'sound/goonstation/voice/robot_scream.ogg'
female_scream_sound = 'sound/goonstation/voice/robot_scream.ogg'

View File

@@ -47,6 +47,9 @@
speciesbox = /obj/item/storage/box/survival_plasmaman
flesh_color = "#8b3fba"
autohiss_basic_map = list(
"s" = list("ss", "sss", "ssss")
)
/datum/species/plasmaman/before_equip_job(datum/job/J, mob/living/carbon/human/H, visualsOnly = FALSE)
var/current_job = J.title

View File

@@ -51,6 +51,10 @@
"is jamming their claws into their eye sockets!",
"is twisting their own neck!",
"is holding their breath!")
autohiss_basic_map = list(
"r" = list("rr", "rrr", "rrrr")
)
autohiss_exempt = list("Siik'tajr")
/datum/species/tajaran/handle_death(gibbed, mob/living/carbon/human/H)
H.stop_tail_wagging()

View File

@@ -54,18 +54,25 @@
"is jamming their claws into their eye sockets!",
"is twisting their own neck!",
"is holding their breath!")
autohiss_basic_map = list(
"s" = list("ss", "sss", "ssss")
)
autohiss_extra_map = list(
"x" = list("ks", "kss", "ksss")
)
autohiss_exempt = list("Sinta'unathi")
/datum/species/unathi/on_species_gain(mob/living/carbon/human/H)
..()
var/datum/action/innate/ignite/fire = new()
var/datum/action/innate/unathi_ignite/fire = new()
fire.Grant(H)
/datum/species/unathi/on_species_loss(mob/living/carbon/human/H)
..()
for(var/datum/action/innate/ignite/fire in H.actions)
for(var/datum/action/innate/unathi_ignite/fire in H.actions)
fire.Remove(H)
/datum/action/innate/ignite
/datum/action/innate/unathi_ignite
name = "Ignite"
desc = "A fire forms in your mouth, fierce enough to... light a cigarette. Requires you to drink welding fuel beforehand."
icon_icon = 'icons/obj/cigarettes.dmi'
@@ -75,7 +82,7 @@
var/welding_fuel_used = 3 //one sip, with less strict timing
check_flags = AB_CHECK_HANDS_BLOCKED
/datum/action/innate/ignite/Activate()
/datum/action/innate/unathi_ignite/Activate()
var/mob/living/carbon/human/user = owner
if(world.time <= cooldown)
to_chat(user, "<span class='warning'>Your throat hurts too much to do it right now. Wait [round((cooldown - world.time) / 10)] seconds and try again.</span>")
@@ -95,7 +102,6 @@
else
to_chat(user, "<span class='warning'>You need to drink welding fuel first.</span>")
/datum/species/unathi/handle_death(gibbed, mob/living/carbon/human/H)
H.stop_tail_wagging()
@@ -127,14 +133,14 @@
/datum/species/unathi/ashwalker/on_species_gain(mob/living/carbon/human/H)
..()
for(var/datum/action/innate/ignite/fire in H.actions)
for(var/datum/action/innate/unathi_ignite/fire in H.actions)
fire.Remove(H)
var/datum/action/innate/ignite/ash_walker/fire = new()
var/datum/action/innate/unathi_ignite/ash_walker/fire = new()
fire.Grant(H)
/datum/species/unathi/ashwalker/on_species_loss(mob/living/carbon/human/H)
..()
for(var/datum/action/innate/ignite/ash_walker/fire in H.actions)
for(var/datum/action/innate/unathi_ignite/ash_walker/fire in H.actions)
fire.Remove(H)
/datum/species/unathi/ashwalker/movement_delay(mob/living/carbon/human/H)
@@ -143,7 +149,7 @@
if(!is_mining_level(our_turf.z))
. -= speed_mod
/datum/action/innate/ignite/ash_walker
/datum/action/innate/unathi_ignite/ash_walker
desc = "You form a fire in your mouth, fierce enough to... light a cigarette."
cooldown_duration = 3 MINUTES
welding_fuel_used = 0 // Ash walkers dont need welding fuel to use ignite

View File

@@ -30,7 +30,6 @@
flesh_color = "#808D11"
//Default styles for created mobs.
default_hair = "Short Vox Quills"
has_gender = FALSE
default_hair_colour = "#614f19" //R: 97, G: 79, B: 25
butt_sprite = "vox"

View File

@@ -1,8 +1,3 @@
/datum/game_mode
var/list/datum/mind/superheroes = list()
var/list/datum/mind/supervillains = list()
var/list/datum/mind/greyshirts = list()
/datum/superheroes
var/name
var/desc

View File

@@ -65,8 +65,6 @@
//Personal shielding for the combat module.
/obj/item/borg
var/powerneeded // Percentage of power remaining required to run item
/obj/item/borg/destroyer/mobility
name = "mobility module"

View File

@@ -475,10 +475,6 @@
else if(prob(30) && ishuman(movement_target.loc)) // mean hooman has stolen it
custom_emote(EMOTE_VISIBLE, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face.")
/obj/item/food/snacks/meat/corgi
name = "Corgi meat"
desc = "Tastes like... well you know..."
/mob/living/simple_animal/pet/dog/corgi/Ian/narsie_act()
playsound(src, 'sound/misc/demon_dies.ogg', 75, TRUE)
var/mob/living/simple_animal/pet/dog/corgi/narsie/N = new(loc)

View File

@@ -719,7 +719,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
set category = "IC"
msg = copytext(msg, 1, MAX_MESSAGE_LEN)
msg = sanitize(msg, list("\n" = "<BR>"))
msg = sanitize_simple(html_encode(msg), list("\n" = "<br>"))
var/combined = length(memory + msg)
if(mind && (combined < MAX_PAPER_MESSAGE_LEN))

View File

@@ -10,7 +10,6 @@
icon = 'icons/mob/human_face.dmi' // Special case, use the bald icon in human face
name = "Shaved"
icon_state = "bald"
gender = NEUTER
species_allowed = list("Human", "Unathi", "Tajaran", "Skrell", "Vox", "Diona", "Kidan", "Greys", "Vulpkanin", "Slime People")
/datum/sprite_accessory/facial_hair/watson

View File

@@ -563,7 +563,6 @@
/datum/sprite_accessory/hair/joestar
name = "Joestar"
icon_state = "joestar"
gender = MALE
species_allowed = list("Human", "Slime People", "Unathi", "Tajaran", "Vulpkanin")
/datum/sprite_accessory/hair/nitori
@@ -757,11 +756,6 @@
icon_state = "longovereye"
species_allowed = list("Human", "Slime People", "Unathi", "Tajaran", "Vulpkanin")
/datum/sprite_accessory/hair/father
name = "Father"
icon_state = "father"
species_allowed = list("Human", "Slime People", "Unathi", "Tajaran", "Vulpkanin")
/// Due to a vulp hairstyle called bun
/datum/sprite_accessory/hair/bun4
name = "Bun 4"

View File

@@ -16,10 +16,6 @@
name = "Curious Antennae"
icon_state = "curious"
/datum/sprite_accessory/head_accessory/kidan/mopey_antennae
name = "Mopey Antennae"
icon_state = "mopey"
/datum/sprite_accessory/head_accessory/kidan/crescent_antennae
name = "Crescent Antennae"
icon_state = "crescent"

View File

@@ -5,12 +5,10 @@
/datum/sprite_accessory/hair/skrell/skr_tentacle_m
name = "Skrell Male Tentacles"
icon_state = "male"
gender = MALE
/datum/sprite_accessory/hair/skrell/skr_tentacle_f
name = "Skrell Female Tentacles"
icon_state = "female"
gender = FEMALE
/datum/sprite_accessory/hair/skrell/skr_tentacleslong
name = "Long Skrell Tentacles"
@@ -23,39 +21,33 @@
/datum/sprite_accessory/hair/skrell/skr_gold_m
name = "Gold plated Skrell Male Tentacles"
icon_state = "male"
gender = MALE
secondary_theme = "gold"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_gold_f
name = "Gold chained Skrell Female Tentacles"
icon_state = "female"
gender = FEMALE
secondary_theme = "gold"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_clothtentacle_m
name = "Cloth draped Skrell Male Tentacles"
icon_state = "male"
gender = MALE
secondary_theme = "cloth"
/datum/sprite_accessory/hair/skrell/skr_clothtentacle_f
name = "Cloth draped Skrell Female Tentacles"
icon_state = "female"
gender = FEMALE
secondary_theme = "cloth"
/datum/sprite_accessory/hair/skrell/skr_gclothtentacle_m
name = "Ombre Dye, Skrell Male Tentacles"
icon_state = "male"
gender = MALE
secondary_theme = "gradient"
/datum/sprite_accessory/hair/skrell/skr_gclothtentacle_f
name = "Ombre Dye, Skrell Female Tentacles"
icon_state = "female"
gender = FEMALE
secondary_theme = "gradient"
/datum/sprite_accessory/hair/skrell/skr_gclothtentacleslong
@@ -71,14 +63,12 @@
/datum/sprite_accessory/hair/skrell/skr_diablacktentacle_m
name = "Black headress Skrell Male Tentacles"
icon_state = "male"
gender = MALE
secondary_theme = "blackdia"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_diablacktentacle_f
name = "Black headress Skrell Female Tentacles"
icon_state = "female"
gender = FEMALE
secondary_theme = "blackdia"
no_sec_colour = 1
@@ -92,14 +82,12 @@
/datum/sprite_accessory/hair/skrell/skr_diagoldtentacle_m
name = "Gold headress Skrell Male Tentacles"
icon_state = "male"
gender = MALE
secondary_theme = "golddia"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_diagoldtentacle_f
name = "Gold headress Skrell Female Tentacles"
icon_state = "female"
gender = FEMALE
secondary_theme = "golddia"
no_sec_colour = 1
@@ -112,14 +100,12 @@
/datum/sprite_accessory/hair/skrell/skr_diasilvertentacle_m
name = "Silver headress Skrell Male Tentacles"
icon_state = "male"
gender = MALE
secondary_theme = "silvdia"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_diasilvertentacle_f
name = "Silver headress Skrell Female Tentacles"
icon_state = "female"
gender = FEMALE
secondary_theme = "silvdia"
no_sec_colour = 1
@@ -132,14 +118,12 @@
/datum/sprite_accessory/hair/skrell/skr_festivetentacle_m
name = "Festive headress Skrell Male Tentacles"
icon_state = "male"
gender = MALE
secondary_theme = "fest"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_festivetentacle_f
name = "Festive headress Skrell Female Tentacles"
icon_state = "female"
gender = FEMALE
secondary_theme = "fest"
no_sec_colour = 1

View File

@@ -18,10 +18,14 @@
*/
/proc/init_sprite_accessory_subtypes(prototype, list/L, list/male, list/female, list/full_list)
if(!istype(L)) L = list()
if(!istype(male)) male = list()
if(!istype(female)) female = list()
if(!istype(full_list)) full_list = list()
if(!istype(L))
L = list()
if(!istype(male))
male = list()
if(!istype(female))
female = list()
if(!istype(full_list))
full_list = list()
for(var/path in subtypesof(prototype))
var/datum/sprite_accessory/D = new path()
@@ -33,9 +37,11 @@
L[D.name] = D
full_list[D.name] = D
switch(D.gender)
if(MALE) male[D.name] = D
if(FEMALE) female[D.name] = D
switch(D.body_type)
if(MALE)
male[D.name] = D
if(FEMALE)
female[D.name] = D
else
male[D.name] = D
female[D.name] = D
@@ -45,7 +51,7 @@
var/icon //the icon file the accessory is located in
var/icon_state //the icon_state of the accessory
var/name //the preview name of the accessory
var/gender = NEUTER //Determines if the accessory will be skipped or included in random hair generations
var/body_type = NEUTER //Determines if the accessory will be skipped or included in random hair generations
// Restrict some styles to specific species
var/list/species_allowed = list("Human", "Slime People")
@@ -74,7 +80,6 @@
glasses_over = 1
/datum/sprite_accessory/facial_hair
gender = MALE // barf (unless you're a dorf, dorfs dig chix /w beards :P)
icon = 'icons/mob/sprite_accessories/human/human_facial_hair.dmi'
var/over_hair
@@ -174,7 +179,6 @@
"Grey" = 'icons/mob/clothing/species/grey/underwear.dmi',
"Kidan" = 'icons/mob/clothing/species/kidan/underwear.dmi'
)
gender = NEUTER
/datum/sprite_accessory/underwear/nude
name = "Nude"
@@ -182,7 +186,7 @@
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian")
/datum/sprite_accessory/underwear/male
gender = MALE
body_type = MALE
/datum/sprite_accessory/underwear/male/male_white
name = "Mens White"
@@ -192,7 +196,7 @@
name = "Mens Grey"
icon_state = "male_grey"
/datum/sprite_accessory/underwear/male/male_grey
/datum/sprite_accessory/underwear/male/male_grey_alt
name = "Mens Grey Alt"
icon_state = "male_greyalt"
@@ -233,7 +237,7 @@
icon_state = "male_mankini"
/datum/sprite_accessory/underwear/female
gender = FEMALE
body_type = FEMALE
/datum/sprite_accessory/underwear/female/female_red
name = "Ladies Red"
@@ -305,7 +309,6 @@
"Grey" = 'icons/mob/clothing/species/grey/underwear.dmi',
"Kidan" = 'icons/mob/clothing/species/kidan/underwear.dmi'
)
gender = NEUTER
/datum/sprite_accessory/undershirt/nude
name = "Nude"
@@ -494,17 +497,17 @@
/datum/sprite_accessory/undershirt/tank_redtop
name = "Red Crop-Top"
icon_state = "tank_redtop"
gender = FEMALE
body_type = FEMALE
/datum/sprite_accessory/undershirt/tank_whitetop
name = "White Crop-Top"
icon_state = "tank_whitetop"
gender = FEMALE
body_type = FEMALE
/datum/sprite_accessory/undershirt/tank_midriff
name = "White Mid Tank-Top"
icon_state = "tank_midriff"
gender = FEMALE
body_type = FEMALE
/datum/sprite_accessory/undershirt/tank_white
name = "White Tank-Top"
@@ -547,7 +550,6 @@
"Nian" = 'icons/mob/clothing/species/nian/underwear.dmi'
)
gender = NEUTER
/datum/sprite_accessory/socks/nude
name = "Nude"
@@ -581,7 +583,7 @@
/datum/sprite_accessory/socks/thin_knee
name = "Knee-high Thin"
icon_state = "thin_knee"
gender = FEMALE
body_type = FEMALE
/datum/sprite_accessory/socks/striped_norm
name = "Normal Striped"
@@ -606,7 +608,7 @@
/datum/sprite_accessory/socks/thin_thigh
name = "Thigh-high Thin"
icon_state = "thin_thigh"
gender = FEMALE
body_type = FEMALE
/datum/sprite_accessory/socks/striped_thigh
name = "Thigh-high Striped"
@@ -619,7 +621,7 @@
/datum/sprite_accessory/socks/pantyhose
name = "Pantyhose"
icon_state = "pantyhose"
gender = FEMALE
body_type = FEMALE
/datum/sprite_accessory/socks/black_fishnet
name = "Black Fishnet"

View File

@@ -1,7 +1,6 @@
/datum/sprite_accessory/facial_hair/unathi
icon = 'icons/mob/sprite_accessories/unathi/unathi_facial_hair.dmi'
species_allowed = list("Unathi")
gender = NEUTER
over_hair = 1
/datum/sprite_accessory/facial_hair/unathi/una_spines_long

View File

@@ -1,7 +1,6 @@
/datum/sprite_accessory/facial_hair/vox
icon = 'icons/mob/sprite_accessories/vox/vox_facial_hair.dmi'
species_allowed = list("Vox")
gender = NEUTER
/datum/sprite_accessory/facial_hair/vox/vox_colonel
name = "Vox Colonel Beard"

View File

@@ -1,7 +1,6 @@
/datum/sprite_accessory/facial_hair/vulpkanin
icon = 'icons/mob/sprite_accessories/vulpkanin/vulpkanin_facial_hair.dmi'
species_allowed = list("Vulpkanin")
gender = NEUTER
/datum/sprite_accessory/facial_hair/vulpkanin/vulp_earfluff
name = "Vulpkanin Earfluff"

View File

@@ -84,7 +84,6 @@
/datum/sprite_accessory/hair/vulpkanin/vulp_hair_raine
name = "Raine"
icon_state = "raine"
gender = FEMALE
/datum/sprite_accessory/hair/vulpkanin/vulp_hair_jeremy
name = "Jeremy"

File diff suppressed because one or more lines are too long

View File

@@ -1,10 +0,0 @@
/obj/machinery/the_singularitygen/tesla
name = "energy ball generator"
desc = "Makes the wardenclyffe look like a child's plaything when shot with a particle accelerator."
icon = 'icons/obj/tesla_engine/tesla_generator.dmi'
icon_state = "TheSingGen"
creation_type = /obj/singularity/energy_ball
/obj/machinery/the_singularitygen/tesla/zap_act(power, zap_flags)
if(zap_flags & ZAP_MACHINE_EXPLOSIVE)
energy += power

View File

@@ -187,7 +187,7 @@
projectile_type = /obj/item/projectile/plasma
muzzle_flash_color = LIGHT_COLOR_PURPLE
select_name = "plasma burst"
fire_sound = 'sound/weapons/plasma_cutter.ogg'
fire_sound = 'sound/weapons/pulse.ogg'
delay = 15
e_cost = 75
@@ -241,15 +241,6 @@
projectile_type = /obj/item/projectile/beam/instakill/red
muzzle_flash_color = LIGHT_COLOR_DARKRED
/obj/item/ammo_casing/energy/plasma
projectile_type = /obj/item/projectile/plasma
muzzle_flash_color = LIGHT_COLOR_PURPLE
select_name = "plasma burst"
fire_sound = 'sound/weapons/pulse.ogg'
/obj/item/ammo_casing/energy/plasma/adv
projectile_type = /obj/item/projectile/plasma/adv
/obj/item/ammo_casing/energy/tesla_bolt
fire_sound = 'sound/magic/lightningbolt.ogg'
e_cost = 200

View File

@@ -190,7 +190,7 @@
build_path = /obj/item/ammo_box/wt550/wttx
category = list("Weapons")
/datum/design/mag_laser
/datum/design/laser_rifle_magazine
name = "Laser Rifle Projector Magazine"
desc = "A 20 round encased projector magazine for the IK Laser Rifle series"
id = "mag_laser"
@@ -200,10 +200,10 @@
build_path = /obj/item/ammo_box/magazine/laser
category = list("Weapons")
/datum/design/mag_laser
/datum/design/laser_rifle_ammo_box
name = "Laser Rifle Projector Ammunition"
desc = "A 20 round encased projector box for the IK Laser Rifle series."
id = "mag_laser"
id = "box_laser"
build_type = PROTOLATHE
req_tech = list("combat" = 4, "powerstorage" = 4)
materials = list(MAT_METAL = 4000, MAT_PLASMA = 600)

View File

@@ -4,9 +4,6 @@
#define ERT_TYPE_RED 2
#define ERT_TYPE_GAMMA 3
/datum/game_mode
var/list/datum/mind/ert = list()
GLOBAL_LIST_EMPTY(response_team_members)
GLOBAL_VAR_INIT(responseteam_age, 21) // Minimum account age to play as an ERT member
GLOBAL_DATUM(active_team, /datum/response_team)

View File

@@ -18,13 +18,3 @@
/area/ruin/powered
requires_power = FALSE
//Areas
/area/ruin/powered/snow_biodome
/area/ruin/powered/golem_ship
name = "Free Golem Ship"

View File

@@ -151,7 +151,7 @@
return mob_icon //Don't need to blend the above into this as it's handled in human/update_icons(). The overlays are for rendering stuff on disembodied heads.
/obj/item/organ/external/proc/get_icon_state(skeletal)
var/gender
var/body
var/icon_file
var/new_icon_state
if(!dna)
@@ -159,18 +159,17 @@
new_icon_state = "[icon_name][gendered_icon ? "_f" : ""]"
else
if(gendered_icon)
switch(dna.GetUITriState(DNA_UI_GENDER))
switch(dna.GetUITriState(DNA_UI_BODY_TYPE))
if(DNA_GENDER_FEMALE)
gender = "f"
if(DNA_GENDER_MALE)
gender = "m"
body = "f"
else
gender = "f" //Default to "f" (per line 162). Using a pick("m", "f") will make different body parts different genders for the same character.
body = "m"
if(limb_name == "head")
var/obj/item/organ/external/head/head_organ = src
head_organ.handle_alt_icon()
new_icon_state = "[icon_name][gender ? "_[gender]" : ""]"
new_icon_state = "[icon_name][body ? "_[body]" : ""]"
if(skeletal)
icon_file = 'icons/mob/human_races/r_skeleton.dmi'

View File

@@ -188,15 +188,6 @@
/obj/item/organ/internal/proc/render()
return
/obj/item/food/snacks/organ
name = "appendix"
icon_state = "appendix"
icon = 'icons/obj/surgery.dmi'
/obj/item/food/snacks/organ/Initialize(mapload)
. = ..()
reagents.add_reagent("nutriment", 5)
/obj/item/organ/internal/attack(mob/living/carbon/M, mob/user)
if(M == user && ishuman(user))
var/mob/living/carbon/human/H = user

View File

@@ -214,7 +214,6 @@
data["specimen"] = owner.dna.species.name
data["gender"] = owner.gender
data["has_gender"] = owner.dna.species.has_gender
data["change_race"] = can_change(APPEARANCE_RACE)
if(data["change_race"])
var/list/species = list()

View File

@@ -145,7 +145,7 @@ ipc_screens = [
# Enable/disable the database on a whole
sql_enabled = false
# SQL version. If this is a mismatch, round start will be delayed
sql_version = 54
sql_version = 55
# SQL server address. Can be an IP or DNS name
sql_address = "127.0.0.1"
# SQL server port

Binary file not shown.

Before

Width:  |  Height:  |  Size: 900 KiB

After

Width:  |  Height:  |  Size: 901 KiB

View File

@@ -2523,7 +2523,6 @@
#include "code\modules\power\engines\supermatter\supermatter_event.dm"
#include "code\modules\power\engines\tesla\coil.dm"
#include "code\modules\power\engines\tesla\energy_ball.dm"
#include "code\modules\power\engines\tesla\generator.dm"
#include "code\modules\power\engines\tesla\teslagen.dm"
#include "code\modules\power\generators\solar.dm"
#include "code\modules\power\generators\thermo_electric_generator.dm"

View File

@@ -10,7 +10,6 @@ export const AppearanceChanger = (props, context) => {
specimen,
change_gender,
gender,
has_gender,
change_eye_color,
change_skin_tone,
change_skin_color,
@@ -95,13 +94,13 @@ export const AppearanceChanger = (props, context) => {
selected={gender === 'female'}
onClick={() => act('gender', { gender: 'female' })}
/>
{!has_gender && (
{
<Button
content="Genderless"
selected={gender === 'plural'}
onClick={() => act('gender', { gender: 'plural' })}
/>
)}
}
</LabeledList.Item>
)}
{!!has_colours && <ColorContent />}

File diff suppressed because one or more lines are too long