Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into Ghommie-cit45
This commit is contained in:
@@ -13,8 +13,12 @@
|
||||
canmove = FALSE
|
||||
|
||||
anchored = TRUE // don't get pushed around
|
||||
|
||||
var/mob/living/new_character //for instant transfer once the round is set up
|
||||
|
||||
//Used to make sure someone doesn't get spammed with messages if they're ineligible for roles
|
||||
var/ineligible_for_roles = FALSE
|
||||
|
||||
/mob/dead/new_player/Initialize()
|
||||
if(client && SSticker.state == GAME_STATE_STARTUP)
|
||||
var/obj/screen/splash/S = new(client, TRUE, TRUE)
|
||||
@@ -34,7 +38,7 @@
|
||||
|
||||
/mob/dead/new_player/proc/new_player_panel()
|
||||
var/output = "<center><p>Welcome, <b>[client ? client.prefs.real_name : "Unknown User"]</b></p>"
|
||||
output += "<p><a href='byond://?src=[REF(src)];show_preferences=1'>Setup Character</a></p>"
|
||||
output += "<center><p><a href='byond://?src=[REF(src)];show_preferences=1'>Setup Character</a></p>"
|
||||
|
||||
if(SSticker.current_state <= GAME_STATE_PREGAME)
|
||||
switch(ready)
|
||||
@@ -75,7 +79,7 @@
|
||||
var/datum/browser/popup = new(src, "playersetup", "<div align='center'>New Player Options</div>", 250, 265)
|
||||
popup.set_window_options("can_close=0")
|
||||
popup.set_content(output)
|
||||
popup.open(0)
|
||||
popup.open(FALSE)
|
||||
|
||||
/mob/dead/new_player/Topic(href, href_list[])
|
||||
if(src != usr)
|
||||
@@ -432,6 +436,8 @@
|
||||
|
||||
var/level = "green"
|
||||
switch(GLOB.security_level)
|
||||
if(SEC_LEVEL_GREEN)
|
||||
level = "green"
|
||||
if(SEC_LEVEL_BLUE)
|
||||
level = "blue"
|
||||
if(SEC_LEVEL_AMBER)
|
||||
@@ -439,10 +445,9 @@
|
||||
if(SEC_LEVEL_RED)
|
||||
level = "red"
|
||||
if(SEC_LEVEL_DELTA)
|
||||
level = "delta"
|
||||
level = "delta"
|
||||
|
||||
var/dat = "<div class='notice'>Round Duration: [DisplayTimeText(world.time - SSticker.round_start_time)]<br>Alert Level: [capitalize(level)]</div>"
|
||||
|
||||
if(SSshuttle.emergency)
|
||||
switch(SSshuttle.emergency.mode)
|
||||
if(SHUTTLE_ESCAPE)
|
||||
@@ -450,37 +455,62 @@
|
||||
if(SHUTTLE_CALL)
|
||||
if(!SSshuttle.canRecall())
|
||||
dat += "<div class='notice red'>The station is currently undergoing evacuation procedures.</div><br>"
|
||||
for(var/datum/job/prioritized_job in SSjob.prioritized_jobs)
|
||||
if(prioritized_job.current_positions >= prioritized_job.total_positions)
|
||||
SSjob.prioritized_jobs -= prioritized_job
|
||||
dat += "<center><table><tr><td valign='top'>"
|
||||
var/column_counter = 0
|
||||
var/free_space = 0
|
||||
for(var/list/category in list(GLOB.command_positions) + list(GLOB.supply_positions) + list(GLOB.engineering_positions) + list(GLOB.nonhuman_positions - "pAI") + list(GLOB.civilian_positions) + list(GLOB.medical_positions) + list(GLOB.science_positions) + list(GLOB.security_positions))
|
||||
var/cat_color = "fff" //random default
|
||||
if(SSjob.name_occupations && SSjob.name_occupations[category[1]])
|
||||
cat_color = SSjob.name_occupations[category[1]].selection_color //use the color of the first job in the category (the department head) as the category color
|
||||
else
|
||||
cat_color = SSjob.occupations[category[1]].selection_color
|
||||
dat += "<fieldset style='width: 185px; border: 2px solid [cat_color]; display: inline'>"
|
||||
dat += "<legend align='center' style='color: [cat_color]'>[SSjob.name_occupations[category[1]].exp_type_department]</legend>"
|
||||
|
||||
var/available_job_count = 0
|
||||
for(var/datum/job/job in SSjob.occupations)
|
||||
if(job && IsJobUnavailable(job.title, TRUE) == JOB_AVAILABLE)
|
||||
available_job_count++
|
||||
var/list/dept_dat = list()
|
||||
for(var/job in category)
|
||||
var/datum/job/job_datum = SSjob.name_occupations[job]
|
||||
if(job_datum && IsJobUnavailable(job_datum.title, TRUE) == JOB_AVAILABLE)
|
||||
var/command_bold = ""
|
||||
if(job in GLOB.command_positions)
|
||||
command_bold = " command"
|
||||
if(job_datum in SSjob.prioritized_jobs)
|
||||
dept_dat += "<a class='job[command_bold]' style='display:block;width:170px' href='byond://?src=[REF(src)];SelectedJob=[job_datum.title]'><span class='priority'>[job_datum.title] ([job_datum.current_positions])</span></a>"
|
||||
else
|
||||
dept_dat += "<a class='job[command_bold]' style='display:block;width:170px' href='byond://?src=[REF(src)];SelectedJob=[job_datum.title]'>[job_datum.title] ([job_datum.current_positions])</a>"
|
||||
if(!dept_dat.len)
|
||||
dept_dat += "<span class='nopositions'>No positions open.</span>"
|
||||
dat += jointext(dept_dat, "")
|
||||
dat += "</fieldset><br>"
|
||||
column_counter++
|
||||
if(free_space <=4)
|
||||
free_space++
|
||||
if(column_counter > 0 && (column_counter % 3 == 0))
|
||||
dat += "</td><td valign='top'>"
|
||||
if(free_space >= 5 && (free_space % 5 == 0) && (column_counter % 3 != 0))
|
||||
free_space = 0
|
||||
column_counter = 0
|
||||
dat += "</td><td valign='top'>"
|
||||
|
||||
dat += "</td></tr></table></center></center>"
|
||||
|
||||
var/available_ghosts = 0
|
||||
for(var/spawner in GLOB.mob_spawners)
|
||||
if(!LAZYLEN(spawner))
|
||||
continue
|
||||
var/obj/effect/mob_spawn/S = pick(GLOB.mob_spawners[spawner])
|
||||
if(!istype(S) || !S.can_latejoin())
|
||||
continue
|
||||
available_job_count++
|
||||
available_ghosts++
|
||||
break
|
||||
|
||||
if(!available_job_count)
|
||||
dat += "<div class='notice red'>There are currently no open positions!</div>"
|
||||
|
||||
if(!available_ghosts)
|
||||
dat += "<div class='notice red'>There are currently no open ghost spawners.</div>"
|
||||
else
|
||||
dat += "<div class='clearBoth'>Choose from the following open positions:</div><br>"
|
||||
var/list/categorizedJobs = list(
|
||||
"Command" = list(jobs = list(), titles = GLOB.command_positions, color = "#aac1ee"),
|
||||
"Engineering" = list(jobs = list(), titles = GLOB.engineering_positions, color = "#ffd699"),
|
||||
"Supply" = list(jobs = list(), titles = GLOB.supply_positions, color = "#ead4ae"),
|
||||
"Miscellaneous" = list(jobs = list(), titles = list(), color = "#ffffff", colBreak = TRUE),
|
||||
"Ghost Role" = list(jobs = list(), titles = GLOB.mob_spawners, color = "#ffffff"),
|
||||
"Synthetic" = list(jobs = list(), titles = GLOB.nonhuman_positions, color = "#ccffcc"),
|
||||
"Service" = list(jobs = list(), titles = GLOB.civilian_positions, color = "#cccccc"),
|
||||
"Medical" = list(jobs = list(), titles = GLOB.medical_positions, color = "#99ffe6", colBreak = TRUE),
|
||||
"Science" = list(jobs = list(), titles = GLOB.science_positions, color = "#e6b3e6"),
|
||||
"Security" = list(jobs = list(), titles = GLOB.security_positions, color = "#ff9999"),
|
||||
)
|
||||
var/list/categorizedJobs = list("Ghost Role" = list(jobs = list(), titles = GLOB.mob_spawners, color = "#ffffff"))
|
||||
for(var/spawner in GLOB.mob_spawners)
|
||||
if(!LAZYLEN(spawner))
|
||||
continue
|
||||
@@ -489,47 +519,13 @@
|
||||
continue
|
||||
categorizedJobs["Ghost Role"]["jobs"] += spawner
|
||||
|
||||
for(var/datum/job/job in SSjob.occupations)
|
||||
if(job && IsJobUnavailable(job.title, TRUE) == JOB_AVAILABLE)
|
||||
var/categorized = FALSE
|
||||
for(var/jobcat in categorizedJobs)
|
||||
var/list/jobs = categorizedJobs[jobcat]["jobs"]
|
||||
if(job.title in categorizedJobs[jobcat]["titles"])
|
||||
categorized = TRUE
|
||||
if(jobcat == "Command")
|
||||
|
||||
if(job.title == "Captain") // Put captain at top of command jobs
|
||||
jobs.Insert(1, job)
|
||||
else
|
||||
jobs += job
|
||||
else // Put heads at top of non-command jobs
|
||||
if(job.title in GLOB.command_positions)
|
||||
jobs.Insert(1, job)
|
||||
else
|
||||
jobs += job
|
||||
if(!categorized)
|
||||
categorizedJobs["Miscellaneous"]["jobs"] += job
|
||||
|
||||
|
||||
dat += "<table><tr><td valign='top'>"
|
||||
dat += "<center><table><tr><td valign='top'>"
|
||||
for(var/jobcat in categorizedJobs)
|
||||
if(categorizedJobs[jobcat]["colBreak"])
|
||||
dat += "</td><td valign='top'>"
|
||||
if(!length(categorizedJobs[jobcat]["jobs"]))
|
||||
continue
|
||||
var/color = categorizedJobs[jobcat]["color"]
|
||||
dat += "<fieldset style='border: 2px solid [color]; display: inline'>"
|
||||
dat += "<legend align='center' style='color: [color]'>[jobcat]</legend>"
|
||||
for(var/datum/job/job in categorizedJobs[jobcat]["jobs"])
|
||||
var/position_class = "otherPosition"
|
||||
if(job.title in GLOB.command_positions)
|
||||
position_class = "commandPosition"
|
||||
if(job in SSjob.prioritized_jobs)
|
||||
dat += "<a class='[position_class]' style='display:block;width:170px' href='byond://?src=[REF(src)];SelectedJob=[job.title]'><font color='lime'><b>[job.title] ([job.current_positions])</b></font></a>"
|
||||
else
|
||||
dat += "<a class='[position_class]' style='display:block;width:170px' href='byond://?src=[REF(src)];SelectedJob=[job.title]'>[job.title] ([job.current_positions])</a>"
|
||||
categorizedJobs[jobcat]["jobs"] -= job
|
||||
|
||||
for(var/spawner in categorizedJobs[jobcat]["jobs"])
|
||||
dat += "<a class='otherPosition' style='display:block;width:170px' href='byond://?src=[REF(src)];JoinAsGhostRole=[spawner]'>[spawner]</a>"
|
||||
|
||||
@@ -537,16 +533,11 @@
|
||||
dat += "</td></tr></table></center>"
|
||||
dat += "</div></div>"
|
||||
|
||||
// Removing the old window method but leaving it here for reference
|
||||
//src << browse(dat, "window=latechoices;size=300x640;can_close=1")
|
||||
|
||||
// Added the new browser window method
|
||||
var/datum/browser/popup = new(src, "latechoices", "Choose Profession", 680, 580)
|
||||
var/datum/browser/popup = new(src, "latechoices", "Choose Profession", 720, 600)
|
||||
popup.add_stylesheet("playeroptions", 'html/browser/playeroptions.css')
|
||||
popup.set_content(dat)
|
||||
popup.set_content(jointext(dat, ""))
|
||||
popup.open(FALSE) // FALSE is passed to open so that it doesn't use the onclose() proc
|
||||
|
||||
|
||||
/mob/dead/new_player/proc/create_character(transfer_after)
|
||||
spawning = 1
|
||||
close_spawn_windows()
|
||||
@@ -602,3 +593,31 @@
|
||||
src << browse(null, "window=preferences") //closes job selection
|
||||
src << browse(null, "window=mob_occupation")
|
||||
src << browse(null, "window=latechoices") //closes late job selection
|
||||
|
||||
/* Used to make sure that a player has a valid job preference setup, used to knock players out of eligibility for anything if their prefs don't make sense.
|
||||
A "valid job preference setup" in this situation means at least having one job set to low, or not having "return to lobby" enabled
|
||||
Prevents "antag rolling" by setting antag prefs on, all jobs to never, and "return to lobby if preferences not availible"
|
||||
Doing so would previously allow you to roll for antag, then send you back to lobby if you didn't get an antag role
|
||||
This also does some admin notification and logging as well, as well as some extra logic to make sure things don't go wrong
|
||||
*/
|
||||
|
||||
/mob/dead/new_player/proc/check_preferences()
|
||||
if(!client)
|
||||
return FALSE //Not sure how this would get run without the mob having a client, but let's just be safe.
|
||||
if(client.prefs.joblessrole != RETURNTOLOBBY)
|
||||
return TRUE
|
||||
// If they have antags enabled, they're potentially doing this on purpose instead of by accident. Notify admins if so.
|
||||
var/has_antags = FALSE
|
||||
if(client.prefs.be_special.len > 0)
|
||||
has_antags = TRUE
|
||||
if(client.prefs.job_preferences.len == 0)
|
||||
if(!ineligible_for_roles)
|
||||
to_chat(src, "<span class='danger'>You have no jobs enabled, along with return to lobby if job is unavailable. This makes you ineligible for any round start role, please update your job preferences.</span>")
|
||||
ineligible_for_roles = TRUE
|
||||
ready = PLAYER_NOT_READY
|
||||
if(has_antags)
|
||||
log_admin("[src.ckey] just got booted back to lobby with no jobs, but antags enabled.")
|
||||
message_admins("[src.ckey] just got booted back to lobby with no jobs enabled, but antag rolling enabled. Likely antag rolling abuse.")
|
||||
|
||||
return FALSE //This is the only case someone should actually be completely blocked from antag rolling as well
|
||||
return TRUE
|
||||
|
||||
@@ -24,50 +24,35 @@
|
||||
age = rand(AGE_MIN,AGE_MAX)
|
||||
|
||||
/datum/preferences/proc/update_preview_icon()
|
||||
// Silicons only need a very basic preview since there is no customization for them.
|
||||
// var/wide_icon = FALSE //CITDEL THINGS
|
||||
// if(features["taur"] != "None")
|
||||
// wide_icon = TRUE
|
||||
if(job_engsec_high)
|
||||
switch(job_engsec_high)
|
||||
if(AI_JF)
|
||||
parent.show_character_previews(image('icons/mob/ai.dmi', resolve_ai_icon(preferred_ai_core_display), dir = SOUTH))
|
||||
return
|
||||
if(CYBORG)
|
||||
parent.show_character_previews(image('icons/mob/robots.dmi', icon_state = "robot", dir = SOUTH))
|
||||
return
|
||||
// Determine what job is marked as 'High' priority, and dress them up as such.
|
||||
var/datum/job/previewJob
|
||||
var/highest_pref = 0
|
||||
for(var/job in job_preferences)
|
||||
if(job_preferences["[job]"] > highest_pref)
|
||||
previewJob = SSjob.GetJob(job)
|
||||
highest_pref = job_preferences["[job]"]
|
||||
|
||||
if(previewJob)
|
||||
// Silicons only need a very basic preview since there is no customization for them.
|
||||
if(istype(previewJob,/datum/job/ai))
|
||||
parent.show_character_previews(image('icons/mob/ai.dmi', icon_state = resolve_ai_icon(preferred_ai_core_display), dir = SOUTH))
|
||||
return
|
||||
if(istype(previewJob,/datum/job/cyborg))
|
||||
parent.show_character_previews(image('icons/mob/robots.dmi', icon_state = "robot", dir = SOUTH))
|
||||
return
|
||||
|
||||
// Set up the dummy for its photoshoot
|
||||
var/mob/living/carbon/human/dummy/mannequin = generate_or_wait_for_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES)
|
||||
mannequin.cut_overlays()
|
||||
// Apply the Dummy's preview background first so we properly layer everything else on top of it.
|
||||
mannequin.add_overlay(mutable_appearance('modular_citadel/icons/ui/backgrounds.dmi', bgstate, layer = SPACE_LAYER))
|
||||
copy_to(mannequin)
|
||||
|
||||
// Determine what job is marked as 'High' priority, and dress them up as such.
|
||||
var/datum/job/previewJob
|
||||
var/highRankFlag = job_civilian_high | job_medsci_high | job_engsec_high
|
||||
|
||||
if(job_civilian_low & ASSISTANT)
|
||||
previewJob = SSjob.GetJob("Assistant")
|
||||
else if(highRankFlag)
|
||||
var/highDeptFlag
|
||||
if(job_civilian_high)
|
||||
highDeptFlag = CIVILIAN
|
||||
else if(job_medsci_high)
|
||||
highDeptFlag = MEDSCI
|
||||
else if(job_engsec_high)
|
||||
highDeptFlag = ENGSEC
|
||||
|
||||
for(var/datum/job/job in SSjob.occupations)
|
||||
if(job.flag == highRankFlag && job.department_flag == highDeptFlag)
|
||||
previewJob = job
|
||||
break
|
||||
|
||||
if(previewJob)
|
||||
if(current_tab != 2)
|
||||
mannequin.job = previewJob.title
|
||||
previewJob.equip(mannequin, TRUE)
|
||||
mannequin.job = previewJob.title
|
||||
previewJob.equip(mannequin, TRUE, preference_source = parent)
|
||||
|
||||
COMPILE_OVERLAYS(mannequin)
|
||||
parent.show_character_previews(new /mutable_appearance(mannequin))
|
||||
unset_busy_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES)
|
||||
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
/datum/sprite_accessory/mam_tails/shark/datashark
|
||||
name = "DataShark"
|
||||
icon_state = "datashark"
|
||||
ckeys_allowed = list("rubyflamewing")
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/shark/datashark
|
||||
name = "DataShark"
|
||||
icon_state = "datashark"
|
||||
ckeys_allowed = list("rubyflamewing")
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/shark/datashark
|
||||
name = "DataShark"
|
||||
icon_state = "datashark"
|
||||
ckeys_allowed = list("rubyflamewing")
|
||||
|
||||
//Sabresune
|
||||
/datum/sprite_accessory/mam_ears/sabresune
|
||||
name = "Sabresune"
|
||||
icon_state = "sabresune"
|
||||
ckeys_allowed = list("poojawa")
|
||||
extra = TRUE
|
||||
extra_color_src = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/mam_tails/sabresune
|
||||
name = "Sabresune"
|
||||
icon_state = "sabresune"
|
||||
ckeys_allowed = list("poojawa")
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/sabresune
|
||||
name = "Sabresune"
|
||||
icon_state = "sabresune"
|
||||
ckeys_allowed = list("poojawa")
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/sabresune
|
||||
name = "Sabresune"
|
||||
icon_state = "sabresune"
|
||||
ckeys_allowed = list("poojawa")
|
||||
|
||||
//Lunasune
|
||||
/datum/sprite_accessory/mam_ears/lunasune
|
||||
name = "lunasune"
|
||||
icon_state = "lunasune"
|
||||
ckeys_allowed = list("invader4352")
|
||||
|
||||
/datum/sprite_accessory/mam_tails/lunasune
|
||||
name = "lunasune"
|
||||
icon_state = "lunasune"
|
||||
ckeys_allowed = list("invader4352")
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/lunasune
|
||||
name = "lunasune"
|
||||
icon_state = "lunasune"
|
||||
ckeys_allowed = list("invader4352")
|
||||
@@ -61,6 +61,17 @@
|
||||
var/dimension_y = 32
|
||||
var/center = FALSE //Should we center the sprite?
|
||||
|
||||
//Special / holdover traits for Citadel specific sprites.
|
||||
var/extra = FALSE
|
||||
var/extra_color_src = MUTCOLORS2 //The color source for the extra overlay.
|
||||
var/extra_icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
var/extra2 = FALSE
|
||||
var/extra2_color_src = MUTCOLORS3
|
||||
var/extra2_icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
//for snowflake/donor specific sprites
|
||||
var/list/ckeys_allowed
|
||||
|
||||
/datum/sprite_accessory/underwear
|
||||
icon = 'icons/mob/underwear.dmi'
|
||||
var/has_color = FALSE
|
||||
@@ -0,0 +1,53 @@
|
||||
|
||||
/******************************************
|
||||
*********** Xeno Dorsal Tubes *************
|
||||
*******************************************/
|
||||
/datum/sprite_accessory/xeno_dorsal
|
||||
icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi'
|
||||
|
||||
/datum/sprite_accessory/xeno_dorsal/standard
|
||||
name = "Standard"
|
||||
icon_state = "standard"
|
||||
|
||||
/datum/sprite_accessory/xeno_dorsal/royal
|
||||
name = "Royal"
|
||||
icon_state = "royal"
|
||||
|
||||
/datum/sprite_accessory/xeno_dorsal/down
|
||||
name = "Dorsal Down"
|
||||
icon_state = "down"
|
||||
|
||||
/******************************************
|
||||
************* Xeno Tails ******************
|
||||
*******************************************/
|
||||
/datum/sprite_accessory/xeno_tail
|
||||
icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi'
|
||||
|
||||
/datum/sprite_accessory/xeno_tail/none
|
||||
name = "None"
|
||||
|
||||
/datum/sprite_accessory/xeno_tail/standard
|
||||
name = "Xenomorph Tail"
|
||||
icon_state = "xeno"
|
||||
|
||||
/******************************************
|
||||
************* Xeno Heads ******************
|
||||
*******************************************/
|
||||
/datum/sprite_accessory/xeno_head
|
||||
icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi'
|
||||
|
||||
/datum/sprite_accessory/xeno_head/standard
|
||||
name = "Standard"
|
||||
icon_state = "standard"
|
||||
|
||||
/datum/sprite_accessory/xeno_head/royal
|
||||
name = "royal"
|
||||
icon_state = "royal"
|
||||
|
||||
/datum/sprite_accessory/xeno_head/hollywood
|
||||
name = "hollywood"
|
||||
icon_state = "hollywood"
|
||||
|
||||
/datum/sprite_accessory/xeno_head/warrior
|
||||
name = "warrior"
|
||||
icon_state = "warrior"
|
||||
@@ -1,6 +1,6 @@
|
||||
//////////.//////////////////
|
||||
// MutantParts Definitions //
|
||||
/////////////////////////////
|
||||
/******************************************
|
||||
************* Lizard Markings *************
|
||||
*******************************************/
|
||||
|
||||
/datum/sprite_accessory/body_markings
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
@@ -22,4 +22,271 @@
|
||||
/datum/sprite_accessory/body_markings/lbelly
|
||||
name = "Light Belly"
|
||||
icon_state = "lbelly"
|
||||
gender_specific = 1
|
||||
gender_specific = 1
|
||||
|
||||
/******************************************
|
||||
************ Furry Markings ***************
|
||||
*******************************************/
|
||||
|
||||
// These are all color matrixed and applied per-limb by default. you MUST comply with this if you want to have your markings work --Pooj
|
||||
// use the HumanScissors tool to break your sprite up into the zones easier.
|
||||
// Although Byond supposedly doesn't have an icon limit anymore of 512 states after 512.1478, just be careful about too many additions.
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings
|
||||
extra = FALSE
|
||||
extra2 = FALSE
|
||||
color_src = MATRIXED
|
||||
gender_specific = 0
|
||||
icon = 'modular_citadel/icons/mob/mam_markings.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
ckeys_allowed = list("yousshouldnteverbeseeingthisyoumeme")
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/plain
|
||||
name = "Plain"
|
||||
icon_state = "plain"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/redpanda
|
||||
name = "Redpanda"
|
||||
icon_state = "redpanda"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/bee
|
||||
name = "Bee"
|
||||
icon_state = "bee"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/belly
|
||||
name = "Belly"
|
||||
icon_state = "belly"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/bellyslim
|
||||
name = "Bellyslim"
|
||||
icon_state = "bellyslim"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/corgi
|
||||
name = "Corgi"
|
||||
icon_state = "corgi"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/cow
|
||||
name = "Bovine"
|
||||
icon_state = "bovine"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/corvid
|
||||
name = "Corvid"
|
||||
icon_state = "corvid"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/dalmation
|
||||
name = "Dalmation"
|
||||
icon_state = "dalmation"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/deer
|
||||
name = "Deer"
|
||||
icon_state = "deer"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/dog
|
||||
name = "Dog"
|
||||
icon_state = "dog"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/eevee
|
||||
name = "Eevee"
|
||||
icon_state = "eevee"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "Fennec"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/frog
|
||||
name = "Frog"
|
||||
icon_state = "frog"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/goat
|
||||
name = "Goat"
|
||||
icon_state = "goat"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/handsfeet
|
||||
name = "Handsfeet"
|
||||
icon_state = "handsfeet"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/hawk
|
||||
name = "Hawk"
|
||||
icon_state = "hawk"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/husky
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/hyena
|
||||
name = "Hyena"
|
||||
icon_state = "hyena"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/lab
|
||||
name = "Lab"
|
||||
icon_state = "lab"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/insect
|
||||
name = "Insect"
|
||||
icon_state = "insect"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/otie
|
||||
name = "Otie"
|
||||
icon_state = "otie"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/otter
|
||||
name = "Otter"
|
||||
icon_state = "otter"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/orca
|
||||
name = "Orca"
|
||||
icon_state = "orca"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/panther
|
||||
name = "Panther"
|
||||
icon_state = "panther"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/possum
|
||||
name = "Possum"
|
||||
icon_state = "possum"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/raccoon
|
||||
name = "Raccoon"
|
||||
icon_state = "raccoon"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "scolipede"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/shark
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/skunk
|
||||
name = "Skunk"
|
||||
icon_state = "skunk"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/shepherd
|
||||
name = "Shepherd"
|
||||
icon_state = "shepherd"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/tajaran
|
||||
name = "Tajaran"
|
||||
icon_state = "tajaran"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/tiger
|
||||
name = "Tiger"
|
||||
icon_state = "tiger"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/turian
|
||||
name = "Turian"
|
||||
icon_state = "turian"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/xeno
|
||||
name = "Xeno"
|
||||
icon_state = "xeno"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/******************************************
|
||||
************* Insect Markings *************
|
||||
*******************************************/
|
||||
|
||||
/datum/sprite_accessory/insect_fluff
|
||||
icon = 'icons/mob/wings.dmi'
|
||||
color_src = 0
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/plain
|
||||
name = "Plain"
|
||||
icon_state = "plain"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/reddish
|
||||
name = "Reddish"
|
||||
icon_state = "redish"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/royal
|
||||
name = "Royal"
|
||||
icon_state = "royal"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/gothic
|
||||
name = "Gothic"
|
||||
icon_state = "gothic"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/lovers
|
||||
name = "Lovers"
|
||||
icon_state = "lovers"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/whitefly
|
||||
name = "White Fly"
|
||||
icon_state = "whitefly"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/punished
|
||||
name = "Burnt Off"
|
||||
icon_state = "punished"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/firewatch
|
||||
name = "Firewatch"
|
||||
icon_state = "firewatch"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/poison
|
||||
name = "Poison"
|
||||
icon_state = "poison"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/ragged
|
||||
name = "Ragged"
|
||||
icon_state = "ragged"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/moonfly
|
||||
name = "Moon Fly"
|
||||
icon_state = "moonfly"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/snow
|
||||
name = "Snow"
|
||||
icon_state = "snow"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/colored
|
||||
name = "Colored (Hair)"
|
||||
icon_state = "snow"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/colored1
|
||||
name = "Colored (Primary)"
|
||||
icon_state = "snow"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/colored2
|
||||
name = "Colored (Secondary)"
|
||||
icon_state = "snow"
|
||||
color_src = MUTCOLORS2
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/colored3
|
||||
name = "Colored (Tertiary)"
|
||||
icon_state = "snow"
|
||||
color_src = MUTCOLORS3
|
||||
@@ -5,8 +5,295 @@
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
|
||||
/******************************************
|
||||
*************** Human Ears ****************
|
||||
*******************************************/
|
||||
|
||||
/datum/sprite_accessory/ears/human/axolotl
|
||||
name = "Axolotl"
|
||||
icon_state = "axolotl"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/bear
|
||||
name = "Bear"
|
||||
icon_state = "bear"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/human/bigwolf
|
||||
name = "Big Wolf"
|
||||
icon_state = "bigwolf"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/human/bigwolfinner
|
||||
name = "Big Wolf (ALT)"
|
||||
icon_state = "bigwolfinner"
|
||||
hasinner = 1
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/human/bigwolfdark
|
||||
name = "Dark Big Wolf"
|
||||
icon_state = "bigwolfdark"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/human/bigwolfinnerdark
|
||||
name = "Dark Big Wolf (ALT)"
|
||||
icon_state = "bigwolfinnerdark"
|
||||
hasinner = 1
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/cat
|
||||
name = "Cat"
|
||||
icon_state = "cat"
|
||||
hasinner = 1
|
||||
color_src = HAIR
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/ears/human/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/human/curled
|
||||
name = "Curled Horn"
|
||||
icon_state = "horn1"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/ears/human/eevee
|
||||
name = "Eevee"
|
||||
icon_state = "eevee"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/human/elephant
|
||||
name = "Elephant"
|
||||
icon_state = "elephant"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/human/elf
|
||||
name = "Elf"
|
||||
icon_state = "elf"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = SKINTONE
|
||||
|
||||
/datum/sprite_accessory/ears/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/fish
|
||||
name = "Fish"
|
||||
icon_state = "fish"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/jellyfish
|
||||
name = "Jellyfish"
|
||||
icon_state = "jellyfish"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/ears/lab
|
||||
name = "Dog, Floppy"
|
||||
icon_state = "lab"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/murid
|
||||
name = "Murid"
|
||||
icon_state = "murid"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/human/otie
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/human/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/human/skunk
|
||||
name = "skunk"
|
||||
icon_state = "skunk"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/squirrel
|
||||
name = "Squirrel"
|
||||
icon_state = "squirrel"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
|
||||
/******************************************
|
||||
*************** Furry Ears ****************
|
||||
*******************************************/
|
||||
|
||||
/datum/sprite_accessory/mam_ears
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/mam_ears/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/axolotl
|
||||
name = "Axolotl"
|
||||
icon_state = "axolotl"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/bear
|
||||
name = "Bear"
|
||||
icon_state = "bear"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/bigwolf
|
||||
name = "Big Wolf"
|
||||
icon_state = "bigwolf"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/bigwolfinner
|
||||
name = "Big Wolf (ALT)"
|
||||
icon_state = "bigwolfinner"
|
||||
hasinner = 1
|
||||
|
||||
/datum/sprite_accessory/mam_ears/bigwolfdark
|
||||
name = "Dark Big Wolf"
|
||||
icon_state = "bigwolfdark"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/bigwolfinnerdark
|
||||
name = "Dark Big Wolf (ALT)"
|
||||
icon_state = "bigwolfinnerdark"
|
||||
hasinner = 1
|
||||
|
||||
/datum/sprite_accessory/mam_ears/cat
|
||||
name = "Cat"
|
||||
icon_state = "cat"
|
||||
hasinner = 1
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/mam_ears/catbig
|
||||
name = "Cat, Big"
|
||||
icon_state = "catbig"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/curled
|
||||
name = "Curled Horn"
|
||||
icon_state = "horn1"
|
||||
color_src = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/mam_ears/deer
|
||||
name = "Deer"
|
||||
icon_state = "deer"
|
||||
color_src = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/mam_ears/eevee
|
||||
name = "Eevee"
|
||||
icon_state = "eevee"
|
||||
|
||||
|
||||
/datum/sprite_accessory/mam_ears/elf
|
||||
name = "Elf"
|
||||
icon_state = "elf"
|
||||
color_src = MUTCOLORS3
|
||||
|
||||
|
||||
/datum/sprite_accessory/mam_ears/elephant
|
||||
name = "Elephant"
|
||||
icon_state = "elephant"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/fish
|
||||
name = "Fish"
|
||||
icon_state = "fish"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/husky
|
||||
name = "Husky"
|
||||
icon_state = "wolf"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/kangaroo
|
||||
name = "kangaroo"
|
||||
icon_state = "kangaroo"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/jellyfish
|
||||
name = "Jellyfish"
|
||||
icon_state = "jellyfish"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/mam_ears/lab
|
||||
name = "Dog, Long"
|
||||
icon_state = "lab"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/murid
|
||||
name = "Murid"
|
||||
icon_state = "murid"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/otie
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/squirrel
|
||||
name = "Squirrel"
|
||||
icon_state = "squirrel"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/skunk
|
||||
name = "skunk"
|
||||
icon_state = "skunk"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
|
||||
@@ -86,4 +86,45 @@
|
||||
|
||||
/datum/sprite_accessory/facial_hair/elvis
|
||||
name = "Sideburns (Elvis)"
|
||||
icon_state = "facial_elvis"
|
||||
icon_state = "facial_elvis"
|
||||
|
||||
#define VFACE(_name, new_state) /datum/sprite_accessory/facial_hair/##new_state/icon_state=#new_state;;/datum/sprite_accessory/facial_hair/##new_state/name= #_name + " (Virgo)"
|
||||
VFACE("Watson", facial_watson_s)
|
||||
VFACE("Chaplin", facial_chaplin_s)
|
||||
VFACE("Fullbeard", facial_fullbeard_s)
|
||||
VFACE("Vandyke", facial_vandyke_s)
|
||||
VFACE("Elvis", facial_elvis_s)
|
||||
VFACE("Abe", facial_abe_s)
|
||||
VFACE("Chin", facial_chin_s)
|
||||
VFACE("GT", facial_gt_s)
|
||||
VFACE("Hip", facial_hip_s)
|
||||
VFACE("Hogan", facial_hogan_s)
|
||||
VFACE("Selleck", facial_selleck_s)
|
||||
VFACE("Neckbeard", facial_neckbeard_s)
|
||||
VFACE("Longbeard", facial_longbeard_s)
|
||||
VFACE("Dwarf", facial_dwarf_s)
|
||||
VFACE("Sideburn", facial_sideburn_s)
|
||||
VFACE("Mutton", facial_mutton_s)
|
||||
VFACE("Moustache", facial_moustache_s)
|
||||
VFACE("Pencilstache", facial_pencilstache_s)
|
||||
VFACE("Goatee", facial_goatee_s)
|
||||
VFACE("Smallstache", facial_smallstache_s)
|
||||
VFACE("Volaju", facial_volaju_s)
|
||||
VFACE("3 O\'clock", facial_3oclock_s)
|
||||
VFACE("5 O\'clock", facial_5oclock_s)
|
||||
VFACE("7 O\'clock", facial_7oclock_s)
|
||||
VFACE("5 O\'clock Moustache", facial_5oclockmoustache_s)
|
||||
VFACE("7 O\'clock", facial_7oclockmoustache_s)
|
||||
VFACE("Walrus", facial_walrus_s)
|
||||
VFACE("Muttonmus", facial_muttonmus_s)
|
||||
VFACE("Wise", facial_wise_s)
|
||||
VFACE("Martial Artist", facial_martialartist_s)
|
||||
VFACE("Dorsalfnil", facial_dorsalfnil_s)
|
||||
VFACE("Hornadorns", facial_hornadorns_s)
|
||||
VFACE("Spike", facial_spike_s)
|
||||
VFACE("Chinhorns", facial_chinhorns_s)
|
||||
VFACE("Cropped Fullbeard", facial_croppedfullbeard_s)
|
||||
VFACE("Chinless Beard", facial_chinlessbeard_s)
|
||||
VFACE("Moonshiner", facial_moonshiner_s)
|
||||
VFACE("Tribearder", facial_tribearder_s)
|
||||
#undef VFACE
|
||||
@@ -461,4 +461,163 @@
|
||||
|
||||
/datum/sprite_accessory/hair/longestalt
|
||||
name = "Very Long with Fringe"
|
||||
icon_state = "hair_vlongfringe"
|
||||
icon_state = "hair_vlongfringe"
|
||||
|
||||
/*************** VIRGO PORTED HAIRS ****************************/
|
||||
#define VHAIR(_name, new_state) /datum/sprite_accessory/hair/##new_state/icon_state=#new_state;/datum/sprite_accessory/hair/##new_state/name = #_name + " (Virgo)"
|
||||
//VIRGO PORTED HAIRS
|
||||
VHAIR("Short Hair Rosa", hair_rosa_s)
|
||||
VHAIR("Short Hair 80s", hair_80s_s)
|
||||
VHAIR("Long Bedhead", hair_long_bedhead_s)
|
||||
VHAIR("Dave", hair_dave_s)
|
||||
VHAIR("Country", hair_country_s)
|
||||
VHAIR("Shy", hair_shy_s)
|
||||
VHAIR("Unshaven Mohawk", hair_unshaven_mohawk_s)
|
||||
VHAIR("Manbun", hair_manbun_s)
|
||||
VHAIR("Longer Bedhead", hair_longer_bedhead_s)
|
||||
VHAIR("Ponytail", hair_ponytail_s)
|
||||
VHAIR("Ziegler", hair_ziegler_s)
|
||||
VHAIR("Emo Fringe", hair_emofringe_s)
|
||||
VHAIR("Very Short Over Eye Alt", hair_veryshortovereyealternate_s)
|
||||
VHAIR("Shorthime", hair_shorthime_s)
|
||||
VHAIR("High Tight", hair_hightight_s)
|
||||
VHAIR("Thinning Front", hair_thinningfront_s)
|
||||
VHAIR("Big Afro", hair_bigafro_s)
|
||||
VHAIR("Afro", hair_afro_s)
|
||||
VHAIR("High Braid", hair_hbraid_s)
|
||||
VHAIR("Braid", hair_braid_s)
|
||||
VHAIR("Sargeant", hair_sargeant_s)
|
||||
VHAIR("Gelled", hair_gelled_s)
|
||||
VHAIR("Kagami", hair_kagami_s)
|
||||
VHAIR("ShortTail", hair_stail_s)
|
||||
VHAIR("Gentle", hair_gentle_s)
|
||||
VHAIR("Grande", hair_grande_s)
|
||||
VHAIR("Bobcurl", hair_bobcurl_s)
|
||||
VHAIR("Pompadeur", hair_pompadour_s)
|
||||
VHAIR("Plait", hair_plait_s)
|
||||
VHAIR("Long", hair_long_s)
|
||||
VHAIR("Rattail", hair_rattail_s)
|
||||
VHAIR("Tajspiky", hair_tajspiky_s)
|
||||
VHAIR("Messy", hair_messy_s)
|
||||
VHAIR("Bangs", hair_bangs_s)
|
||||
VHAIR("TBraid", hair_tbraid_s)
|
||||
VHAIR("Toriyama2", hair_toriyama2_s)
|
||||
VHAIR("CIA", hair_cia_s)
|
||||
VHAIR("Mulder", hair_mulder_s)
|
||||
VHAIR("Scully", hair_scully_s)
|
||||
VHAIR("Nitori", hair_nitori_s)
|
||||
VHAIR("Joestar", hair_joestar_s)
|
||||
VHAIR("Ponytail4", hair_ponytail4_s)
|
||||
VHAIR("Ponytail5", hair_ponytail5_s)
|
||||
VHAIR("Beehive2", hair_beehive2_s)
|
||||
VHAIR("Short Braid", hair_shortbraid_s)
|
||||
VHAIR("Reverse Mohawk", hair_reversemohawk_s)
|
||||
VHAIR("SHort Bangs", hair_shortbangs_s)
|
||||
VHAIR("Half Shaved", hair_halfshaved_s)
|
||||
VHAIR("Longer Alt 2", hair_longeralt2_s)
|
||||
VHAIR("Bun", hair_bun_s)
|
||||
VHAIR("Curly", hair_curly_s)
|
||||
VHAIR("Victory", hair_victory_s)
|
||||
VHAIR("Ponytail6", hair_ponytail6_s)
|
||||
VHAIR("Undercut3", hair_undercut3_s)
|
||||
VHAIR("Bobcut Alt", hair_bobcultalt_s)
|
||||
VHAIR("Fingerwave", hair_fingerwave_s)
|
||||
VHAIR("Oxton", hair_oxton_s)
|
||||
VHAIR("Poofy2", hair_poofy2_s)
|
||||
VHAIR("Fringe Tail", hair_fringetail_s)
|
||||
VHAIR("Bun3", hair_bun3_s)
|
||||
VHAIR("Wisp", hair_wisp_s)
|
||||
VHAIR("Undercut2", hair_undercut2_s)
|
||||
VHAIR("TBob", hair_tbob_s)
|
||||
VHAIR("Spiky Ponytail", hair_spikyponytail_s)
|
||||
VHAIR("Rowbun", hair_rowbun_s)
|
||||
VHAIR("Rowdualtail", hair_rowdualtail_s)
|
||||
VHAIR("Rowbraid", hair_rowbraid_s)
|
||||
VHAIR("Shaved Mohawk", hair_shavedmohawk_s)
|
||||
VHAIR("Topknot", hair_topknot_s)
|
||||
VHAIR("Ronin", hair_ronin_s)
|
||||
VHAIR("Bowlcut2", hair_bowlcut2_s)
|
||||
VHAIR("Thinning Rear", hair_thinningrear_s)
|
||||
VHAIR("Thinning", hair_thinning_s)
|
||||
VHAIR("Jade", hair_jade_s)
|
||||
VHAIR("Bedhead", hair_bedhead_s)
|
||||
VHAIR("Dreadlocks", hair_dreads_s)
|
||||
VHAIR("Very Long", hair_vlong_s)
|
||||
VHAIR("Jensen", hair_jensen_s)
|
||||
VHAIR("Halfbang", hair_halfbang_s)
|
||||
VHAIR("Kusangi", hair_kusangi_s)
|
||||
VHAIR("Ponytail", hair_ponytail_s)
|
||||
VHAIR("Ponytail3", hair_ponytail3_s)
|
||||
VHAIR("Halfbang Alt", hair_halfbang_alt_s)
|
||||
VHAIR("Bedhead V2", hair_bedheadv2_s)
|
||||
VHAIR("Long Fringe", hair_longfringe_s)
|
||||
VHAIR("Flair", hair_flair_s)
|
||||
VHAIR("Bedhead V3", hair_bedheadv3_s)
|
||||
VHAIR("Himecut", hair_himecut_s)
|
||||
VHAIR("Curls", hair_curls_s)
|
||||
VHAIR("Very Long Fringe", hair_vlongfringe_s)
|
||||
VHAIR("Longest", hair_longest_s)
|
||||
VHAIR("Father", hair_father_s)
|
||||
VHAIR("Emo Long", hair_emolong_s)
|
||||
VHAIR("Short Hair 3", hair_shorthair3_s)
|
||||
VHAIR("Double Bun", hair_doublebun_s)
|
||||
VHAIR("Sleeze", hair_sleeze_s)
|
||||
VHAIR("Twintail", hair_twintail_s)
|
||||
VHAIR("Emo 2", hair_emo2_s)
|
||||
VHAIR("Low Fade", hair_lowfade_s)
|
||||
VHAIR("Med Fade", hair_medfade_s)
|
||||
VHAIR("High Fade", hair_highfade_s)
|
||||
VHAIR("Bald Fade", hair_baldfade_s)
|
||||
VHAIR("No Fade", hair_nofade_s)
|
||||
VHAIR("Trim Flat", hair_trimflat_s)
|
||||
VHAIR("Shaved", hair_shaved_s)
|
||||
VHAIR("Trimmed", hair_trimmed_s)
|
||||
VHAIR("Tight Bun", hair_tightbun_s)
|
||||
VHAIR("Short Hair 4", hair_d_s)
|
||||
VHAIR("Short Hair 5", hair_e_s)
|
||||
VHAIR("Short Hair 6", hair_f_s)
|
||||
VHAIR("Skinhead", hair_skinhead_s)
|
||||
VHAIR("Afro2", hair_afro2_s)
|
||||
VHAIR("Bobcut", hair_bobcut_s)
|
||||
VHAIR("Emo", hair_emo_s)
|
||||
VHAIR("Long Over Eye", hair_longovereye_s)
|
||||
VHAIR("Feather", hair_feather_s)
|
||||
VHAIR("Hitop", hair_hitop_s)
|
||||
VHAIR("Short Over Eye", hair_shortoverye_s)
|
||||
VHAIR("Straight", hair_straight_s)
|
||||
VHAIR("Buzzcut", hair_buzzcut_s)
|
||||
VHAIR("Combover", hair_combover_s)
|
||||
VHAIR("Crewcut", hair_crewcut_s)
|
||||
VHAIR("Devillock", hair_devilock_s)
|
||||
VHAIR("Clean", hair_clean_s)
|
||||
VHAIR("Shaggy", hair_shaggy_s)
|
||||
VHAIR("Updo", hair_updo_s)
|
||||
VHAIR("Mohawk", hair_mohawk_s)
|
||||
VHAIR("Odango", hair_odango_s)
|
||||
VHAIR("Ombre", hair_ombre_s)
|
||||
VHAIR("Parted", hair_parted_s)
|
||||
VHAIR("Quiff", hair_quiff_s)
|
||||
VHAIR("Volaju", hair_volaju_s)
|
||||
VHAIR("Bun2", hair_bun2_s)
|
||||
VHAIR("Rows1", hair_rows1_s)
|
||||
VHAIR("Rows2", hair_rows2_s)
|
||||
VHAIR("Dandy Pompadour", hair_dandypompadour_s)
|
||||
VHAIR("Poofy", hair_poofy_s)
|
||||
VHAIR("Toriyama", hair_toriyama_s)
|
||||
VHAIR("Drillruru", hair_drillruru_s)
|
||||
VHAIR("Bowlcut", hair_bowlcut_s)
|
||||
VHAIR("Coffee House", hair_coffeehouse_s)
|
||||
VHAIR("Family Man", hair_thefamilyman_s)
|
||||
VHAIR("Shaved Part", hair_shavedpart_s)
|
||||
VHAIR("Modern", hair_modern_s)
|
||||
VHAIR("One Shoulder", hair_oneshoulder_s)
|
||||
VHAIR("Very Short Over Eye", hair_veryshortovereye_s)
|
||||
VHAIR("Unkept", hair_unkept_s)
|
||||
VHAIR("Wife", hair_wife_s)
|
||||
VHAIR("Nia", hair_nia_s)
|
||||
VHAIR("Undercut", hair_undercut_s)
|
||||
VHAIR("Bobcut Alt", hair_bobcutalt_s)
|
||||
VHAIR("Short Hair 4 alt", hair_shorthair4_s)
|
||||
VHAIR("Tressshoulder", hair_tressshoulder_s)
|
||||
//END
|
||||
#undef VHAIR
|
||||
@@ -1,5 +1,6 @@
|
||||
/datum/sprite_accessory/horns
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
color_src = HORNCOLOR
|
||||
|
||||
/datum/sprite_accessory/horns/none
|
||||
name = "None"
|
||||
@@ -23,4 +24,13 @@
|
||||
|
||||
/datum/sprite_accessory/horns/angler
|
||||
name = "Angeler"
|
||||
icon_state = "angler"
|
||||
icon_state = "angler"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/horns/antler
|
||||
name = "Deer Antlers"
|
||||
icon_state = "deer"
|
||||
|
||||
/datum/sprite_accessory/horns/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
@@ -0,0 +1,158 @@
|
||||
|
||||
/******************************************
|
||||
************** IPC SCREENS ****************
|
||||
*******************************************/
|
||||
/datum/sprite_accessory/screen
|
||||
icon = 'modular_citadel/icons/mob/ipc_screens.dmi'
|
||||
color_src = null
|
||||
|
||||
/datum/sprite_accessory/screen/blank
|
||||
name = "Blank"
|
||||
icon_state = "blank"
|
||||
|
||||
/datum/sprite_accessory/screen/pink
|
||||
name = "Pink"
|
||||
icon_state = "pink"
|
||||
|
||||
/datum/sprite_accessory/screen/green
|
||||
name = "Green"
|
||||
icon_state = "green"
|
||||
|
||||
/datum/sprite_accessory/screen/red
|
||||
name = "Red"
|
||||
icon_state = "red"
|
||||
|
||||
/datum/sprite_accessory/screen/blue
|
||||
name = "Blue"
|
||||
icon_state = "blue"
|
||||
|
||||
/datum/sprite_accessory/screen/yellow
|
||||
name = "Yellow"
|
||||
icon_state = "yellow"
|
||||
|
||||
/datum/sprite_accessory/screen/shower
|
||||
name = "Shower"
|
||||
icon_state = "shower"
|
||||
|
||||
/datum/sprite_accessory/screen/nature
|
||||
name = "Nature"
|
||||
icon_state = "nature"
|
||||
|
||||
/datum/sprite_accessory/screen/eight
|
||||
name = "Eight"
|
||||
icon_state = "eight"
|
||||
|
||||
/datum/sprite_accessory/screen/goggles
|
||||
name = "Goggles"
|
||||
icon_state = "goggles"
|
||||
|
||||
/datum/sprite_accessory/screen/heart
|
||||
name = "Heart"
|
||||
icon_state = "heart"
|
||||
|
||||
/datum/sprite_accessory/screen/monoeye
|
||||
name = "Mono eye"
|
||||
icon_state = "monoeye"
|
||||
|
||||
/datum/sprite_accessory/screen/breakout
|
||||
name = "Breakout"
|
||||
icon_state = "breakout"
|
||||
|
||||
/datum/sprite_accessory/screen/purple
|
||||
name = "Purple"
|
||||
icon_state = "purple"
|
||||
|
||||
/datum/sprite_accessory/screen/scroll
|
||||
name = "Scroll"
|
||||
icon_state = "scroll"
|
||||
|
||||
/datum/sprite_accessory/screen/console
|
||||
name = "Console"
|
||||
icon_state = "console"
|
||||
|
||||
/datum/sprite_accessory/screen/rgb
|
||||
name = "RGB"
|
||||
icon_state = "rgb"
|
||||
|
||||
/datum/sprite_accessory/screen/golglider
|
||||
name = "Gol Glider"
|
||||
icon_state = "golglider"
|
||||
|
||||
/datum/sprite_accessory/screen/rainbow
|
||||
name = "Rainbow"
|
||||
icon_state = "rainbow"
|
||||
|
||||
/datum/sprite_accessory/screen/sunburst
|
||||
name = "Sunburst"
|
||||
icon_state = "sunburst"
|
||||
|
||||
/datum/sprite_accessory/screen/static
|
||||
name = "Static"
|
||||
icon_state = "static"
|
||||
|
||||
//Oracle Station sprites
|
||||
|
||||
/datum/sprite_accessory/screen/bsod
|
||||
name = "BSOD"
|
||||
icon_state = "bsod"
|
||||
|
||||
/datum/sprite_accessory/screen/redtext
|
||||
name = "Red Text"
|
||||
icon_state = "retext"
|
||||
|
||||
/datum/sprite_accessory/screen/sinewave
|
||||
name = "Sine wave"
|
||||
icon_state = "sinewave"
|
||||
|
||||
/datum/sprite_accessory/screen/squarewave
|
||||
name = "Square wave"
|
||||
icon_state = "squarwave"
|
||||
|
||||
/datum/sprite_accessory/screen/ecgwave
|
||||
name = "ECG wave"
|
||||
icon_state = "ecgwave"
|
||||
|
||||
/datum/sprite_accessory/screen/eyes
|
||||
name = "Eyes"
|
||||
icon_state = "eyes"
|
||||
|
||||
/datum/sprite_accessory/screen/textdrop
|
||||
name = "Text drop"
|
||||
icon_state = "textdrop"
|
||||
|
||||
/datum/sprite_accessory/screen/stars
|
||||
name = "Stars"
|
||||
icon_state = "stars"
|
||||
|
||||
|
||||
/******************************************
|
||||
************** IPC Antennas ***************
|
||||
*******************************************/
|
||||
|
||||
/datum/sprite_accessory/antenna
|
||||
icon = 'modular_citadel/icons/mob/ipc_antennas.dmi'
|
||||
color_src = MUTCOLORS2
|
||||
|
||||
/datum/sprite_accessory/antenna/none
|
||||
name = "None"
|
||||
icon_state = "None"
|
||||
|
||||
/datum/sprite_accessory/antenna/antennae
|
||||
name = "Angled Antennae"
|
||||
icon_state = "antennae"
|
||||
|
||||
/datum/sprite_accessory/antenna/tvantennae
|
||||
name = "TV Antennae"
|
||||
icon_state = "tvantennae"
|
||||
|
||||
/datum/sprite_accessory/antenna/cyberhead
|
||||
name = "Cyberhead"
|
||||
icon_state = "cyberhead"
|
||||
|
||||
/datum/sprite_accessory/antenna/antlers
|
||||
name = "Antlers"
|
||||
icon_state = "antlers"
|
||||
|
||||
/datum/sprite_accessory/antenna/crowned
|
||||
name = "Crowned"
|
||||
icon_state = "crowned"
|
||||
@@ -1,8 +0,0 @@
|
||||
/datum/sprite_accessory/legs //legs are a special case, they aren't actually sprite_accessories but are updated with them.
|
||||
icon = null //These datums exist for selecting legs on preference, and little else
|
||||
|
||||
/datum/sprite_accessory/legs/none
|
||||
name = "Normal Legs"
|
||||
|
||||
/datum/sprite_accessory/legs/digitigrade_lizard
|
||||
name = "Digitigrade Legs"
|
||||
@@ -0,0 +1,124 @@
|
||||
/datum/sprite_accessory/legs //legs are a special case, they aren't actually sprite_accessories but are updated with them. -- OR SO THEY USED TO BE
|
||||
icon = null //These datums exist for selecting legs on preference, and little else
|
||||
|
||||
/******************************************
|
||||
***************** Leggy *******************
|
||||
*******************************************/
|
||||
|
||||
/datum/sprite_accessory/legs/none
|
||||
name = "Plantigrade"
|
||||
|
||||
/datum/sprite_accessory/legs/digitigrade_lizard
|
||||
name = "Digitigrade"
|
||||
|
||||
/datum/sprite_accessory/legs/digitigrade_bird
|
||||
name = "Avian"
|
||||
|
||||
|
||||
/******************************************
|
||||
************** Taur Bodies ****************
|
||||
*******************************************/
|
||||
|
||||
/datum/sprite_accessory/taur
|
||||
icon = 'modular_citadel/icons/mob/mam_taur.dmi'
|
||||
extra_icon = 'modular_citadel/icons/mob/mam_taur.dmi'
|
||||
extra = TRUE
|
||||
extra2_icon = 'modular_citadel/icons/mob/mam_taur.dmi'
|
||||
extra2 = TRUE
|
||||
center = TRUE
|
||||
dimension_x = 64
|
||||
var/taur_mode = NOT_TAURIC
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/taur/none
|
||||
name = "None"
|
||||
icon_state = "None"
|
||||
|
||||
/datum/sprite_accessory/taur/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
taur_mode = HOOF_TAURIC
|
||||
|
||||
/datum/sprite_accessory/taur/deer
|
||||
name = "Deer"
|
||||
icon_state = "deer"
|
||||
taur_mode = HOOF_TAURIC
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/taur/drake
|
||||
name = "Drake"
|
||||
icon_state = "drake"
|
||||
taur_mode = PAW_TAURIC
|
||||
|
||||
/datum/sprite_accessory/taur/drider
|
||||
name = "Drider"
|
||||
icon_state = "drider"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/taur/eevee
|
||||
name = "Eevee"
|
||||
icon_state = "eevee"
|
||||
taur_mode = PAW_TAURIC
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/taur/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
taur_mode = PAW_TAURIC
|
||||
|
||||
/datum/sprite_accessory/taur/husky
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
taur_mode = PAW_TAURIC
|
||||
|
||||
/datum/sprite_accessory/taur/horse
|
||||
name = "Horse"
|
||||
icon_state = "horse"
|
||||
taur_mode = HOOF_TAURIC
|
||||
|
||||
/datum/sprite_accessory/taur/lab
|
||||
name = "Lab"
|
||||
icon_state = "lab"
|
||||
taur_mode = PAW_TAURIC
|
||||
|
||||
/datum/sprite_accessory/taur/naga
|
||||
name = "Naga"
|
||||
icon_state = "naga"
|
||||
taur_mode = SNEK_TAURIC
|
||||
|
||||
/datum/sprite_accessory/taur/otie
|
||||
name = "Otie"
|
||||
icon_state = "otie"
|
||||
taur_mode = PAW_TAURIC
|
||||
|
||||
/datum/sprite_accessory/taur/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
taur_mode = PAW_TAURIC
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/taur/panther
|
||||
name = "Panther"
|
||||
icon_state = "panther"
|
||||
taur_mode = PAW_TAURIC
|
||||
|
||||
/datum/sprite_accessory/taur/shepherd
|
||||
name = "Shepherd"
|
||||
icon_state = "shepherd"
|
||||
taur_mode = PAW_TAURIC
|
||||
|
||||
/datum/sprite_accessory/taur/tentacle
|
||||
name = "Tentacle"
|
||||
icon_state = "tentacle"
|
||||
taur_mode = SNEK_TAURIC
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/taur/tiger
|
||||
name = "Tiger"
|
||||
icon_state = "tiger"
|
||||
taur_mode = PAW_TAURIC
|
||||
|
||||
/datum/sprite_accessory/taur/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
taur_mode = PAW_TAURIC
|
||||
@@ -1,68 +0,0 @@
|
||||
/datum/sprite_accessory/moth_wings
|
||||
icon = 'icons/mob/wings.dmi'
|
||||
color_src = null
|
||||
|
||||
/datum/sprite_accessory/moth_wings/plain
|
||||
name = "Plain"
|
||||
icon_state = "plain"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/monarch
|
||||
name = "Monarch"
|
||||
icon_state = "monarch"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/luna
|
||||
name = "Luna"
|
||||
icon_state = "luna"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/atlas
|
||||
name = "Atlas"
|
||||
icon_state = "atlas"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/reddish
|
||||
name = "Reddish"
|
||||
icon_state = "redish"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/royal
|
||||
name = "Royal"
|
||||
icon_state = "royal"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/gothic
|
||||
name = "Gothic"
|
||||
icon_state = "gothic"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/lovers
|
||||
name = "Lovers"
|
||||
icon_state = "lovers"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/whitefly
|
||||
name = "White Fly"
|
||||
icon_state = "whitefly"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/punished
|
||||
name = "Burnt Off"
|
||||
icon_state = "punished"
|
||||
locked = TRUE
|
||||
|
||||
/datum/sprite_accessory/moth_wings/firewatch
|
||||
name = "Firewatch"
|
||||
icon_state = "firewatch"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/poison
|
||||
name = "Poison"
|
||||
icon_state = "poison"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/ragged
|
||||
name = "Ragged"
|
||||
icon_state = "ragged"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/moonfly
|
||||
name = "Moon Fly"
|
||||
icon_state = "moonfly"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/snow
|
||||
name = "Snow"
|
||||
icon_state = "snow"
|
||||
@@ -15,4 +15,359 @@
|
||||
|
||||
/datum/sprite_accessory/snouts/roundlight
|
||||
name = "Round + Light"
|
||||
icon_state = "roundlight"
|
||||
icon_state = "roundlight"
|
||||
|
||||
/datum/sprite_accessory/snout/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
color_src = MATRIXED
|
||||
|
||||
//christ this was a mistake, but it's here just in case someone wants to selectively fix -- Pooj
|
||||
/************* Lizard compatable snoots ***********
|
||||
/datum/sprite_accessory/snouts/bird
|
||||
name = "Beak"
|
||||
icon_state = "bird"
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/bigbeak
|
||||
name = "Big Beak"
|
||||
icon_state = "bigbeak"
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/bug
|
||||
name = "Bug"
|
||||
icon_state = "bug"
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
extra2 = TRUE
|
||||
extra2_color_src = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/snouts/elephant
|
||||
name = "Elephant"
|
||||
icon_state = "elephant"
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
color_src = MATRIXED
|
||||
extra = TRUE
|
||||
extra_color_src = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/snouts/lcanid
|
||||
name = "Mammal, Long"
|
||||
icon_state = "lcanid"
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/lcanidalt
|
||||
name = "Mammal, Long ALT"
|
||||
icon_state = "lcanidalt"
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/scanid
|
||||
name = "Mammal, Short"
|
||||
icon_state = "scanid"
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/scanidalt
|
||||
name = "Mammal, Short ALT"
|
||||
icon_state = "scanidalt"
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/wolf
|
||||
name = "Mammal, Thick"
|
||||
icon_state = "wolf"
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/wolfalt
|
||||
name = "Mammal, Thick ALT"
|
||||
icon_state = "wolfalt"
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/redpanda
|
||||
name = "WahCoon"
|
||||
icon_state = "wah"
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/rhino
|
||||
name = "Horn"
|
||||
icon_state = "rhino"
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
color_src = MATRIXED
|
||||
extra = TRUE
|
||||
extra = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/snouts/rodent
|
||||
name = "Rodent"
|
||||
icon_state = "rodent"
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/husky
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/otie
|
||||
name = "Otie"
|
||||
icon_state = "otie"
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/shark
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
|
||||
/datum/sprite_accessory/snouts/toucan
|
||||
name = "Toucan"
|
||||
icon_state = "toucan"
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
color_src = MATRIXED
|
||||
*/
|
||||
|
||||
/******************************************
|
||||
************** Mammal Snouts **************
|
||||
*******************************************/
|
||||
|
||||
/datum/sprite_accessory/mam_snouts
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/bird
|
||||
name = "Beak"
|
||||
icon_state = "bird"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/bigbeak
|
||||
name = "Big Beak"
|
||||
icon_state = "bigbeak"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/bug
|
||||
name = "Bug"
|
||||
icon_state = "bug"
|
||||
color_src = MUTCOLORS
|
||||
extra2 = TRUE
|
||||
extra2_color_src = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/elephant
|
||||
name = "Elephant"
|
||||
icon_state = "elephant"
|
||||
extra = TRUE
|
||||
extra_color_src = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/lcanid
|
||||
name = "Mammal, Long"
|
||||
icon_state = "lcanid"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/lcanidalt
|
||||
name = "Mammal, Long ALT"
|
||||
icon_state = "lcanidalt"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/scanid
|
||||
name = "Mammal, Short"
|
||||
icon_state = "scanid"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/scanidalt
|
||||
name = "Mammal, Short ALT"
|
||||
icon_state = "scanidalt"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/wolf
|
||||
name = "Mammal, Thick"
|
||||
icon_state = "wolf"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/wolfalt
|
||||
name = "Mammal, Thick ALT"
|
||||
icon_state = "wolfalt"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/redpanda
|
||||
name = "WahCoon"
|
||||
icon_state = "wah"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/redpandaalt
|
||||
name = "WahCoon ALT"
|
||||
icon_state = "wahalt"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/rhino
|
||||
name = "Horn"
|
||||
icon_state = "rhino"
|
||||
extra = TRUE
|
||||
extra = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/rodent
|
||||
name = "Rodent"
|
||||
icon_state = "rodent"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/husky
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/otie
|
||||
name = "Otie"
|
||||
icon_state = "otie"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/shark
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/toucan
|
||||
name = "Toucan"
|
||||
icon_state = "toucan"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/sharp
|
||||
name = "Sharp"
|
||||
icon_state = "sharp"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/round
|
||||
name = "Round"
|
||||
icon_state = "round"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/sharplight
|
||||
name = "Sharp + Light"
|
||||
icon_state = "sharplight"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/roundlight
|
||||
name = "Round + Light"
|
||||
icon_state = "roundlight"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
|
||||
/******************************************
|
||||
**************** Snouts *******************
|
||||
*************but higher up*****************/
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/fbird
|
||||
name = "Beak (Top)"
|
||||
icon_state = "fbird"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/fbigbeak
|
||||
name = "Big Beak (Top)"
|
||||
icon_state = "fbigbeak"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/fbug
|
||||
name = "Bug (Top)"
|
||||
icon_state = "fbug"
|
||||
color_src = MUTCOLORS
|
||||
extra2 = TRUE
|
||||
extra2_color_src = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/felephant
|
||||
name = "Elephant (Top)"
|
||||
icon_state = "felephant"
|
||||
extra = TRUE
|
||||
extra_color_src = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/flcanid
|
||||
name = "Mammal, Long (Top)"
|
||||
icon_state = "flcanid"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/flcanidalt
|
||||
name = "Mammal, Long ALT (Top)"
|
||||
icon_state = "flcanidalt"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/fscanid
|
||||
name = "Mammal, Short (Top)"
|
||||
icon_state = "fscanid"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/fscanidalt
|
||||
name = "Mammal, Short ALT (Top)"
|
||||
icon_state = "fscanidalt"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/fwolf
|
||||
name = "Mammal, Thick (Top)"
|
||||
icon_state = "fwolf"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/fwolfalt
|
||||
name = "Mammal, Thick ALT (Top)"
|
||||
icon_state = "fwolfalt"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/fredpanda
|
||||
name = "WahCoon (Top)"
|
||||
icon_state = "fwah"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/frhino
|
||||
name = "Horn (Top)"
|
||||
icon_state = "frhino"
|
||||
extra = TRUE
|
||||
extra = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/frodent
|
||||
name = "Rodent (Top)"
|
||||
icon_state = "frodent"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/fhusky
|
||||
name = "Husky (Top)"
|
||||
icon_state = "fhusky"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/fotie
|
||||
name = "Otie (Top)"
|
||||
icon_state = "fotie"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/fpede
|
||||
name = "Scolipede (Top)"
|
||||
icon_state = "fpede"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/fsergal
|
||||
name = "Sergal (Top)"
|
||||
icon_state = "fsergal"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/fshark
|
||||
name = "Shark (Top)"
|
||||
icon_state = "fshark"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/ftoucan
|
||||
name = "Toucan (Top)"
|
||||
icon_state = "ftoucan"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/fsharp
|
||||
name = "Sharp (Top)"
|
||||
icon_state = "fsharp"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/fround
|
||||
name = "Round (Top)"
|
||||
icon_state = "fround"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/fsharplight
|
||||
name = "Sharp + Light (Top)"
|
||||
icon_state = "fsharplight"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/froundlight
|
||||
name = "Round + Light (Top)"
|
||||
icon_state = "froundlight"
|
||||
color_src = MUTCOLORS
|
||||
@@ -4,6 +4,10 @@
|
||||
/datum/sprite_accessory/tails_animated
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/******************************************
|
||||
************* Lizard Tails ****************
|
||||
*******************************************/
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/smooth
|
||||
name = "Smooth"
|
||||
icon_state = "smooth"
|
||||
@@ -36,6 +40,48 @@
|
||||
name = "Spikes"
|
||||
icon_state = "spikes"
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/none
|
||||
name = "None"
|
||||
icon_state = "None"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/none
|
||||
name = "None"
|
||||
icon_state = "None"
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/axolotl
|
||||
name = "Axolotl"
|
||||
icon_state = "axolotl"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/axolotl
|
||||
name = "Axolotl"
|
||||
icon_state = "axolotl"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/body_markings/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/******************************************
|
||||
************** Human Tails ****************
|
||||
*******************************************/
|
||||
|
||||
/datum/sprite_accessory/tails/human/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
@@ -43,13 +89,626 @@
|
||||
/datum/sprite_accessory/tails_animated/human/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
/*
|
||||
|
||||
/datum/sprite_accessory/tails/human/ailurus
|
||||
name = "Red Panda"
|
||||
icon_state = "wah"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/ailurus
|
||||
name = "Red Panda"
|
||||
icon_state = "wah"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/axolotl
|
||||
name = "Axolotl"
|
||||
icon_state = "axolotl"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/axolotl
|
||||
name = "Axolotl"
|
||||
icon_state = "axolotl"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/bee
|
||||
name = "Bee"
|
||||
icon_state = "bee"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/bee
|
||||
name = "Bee"
|
||||
icon_state = "bee"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/cat
|
||||
name = "Cat"
|
||||
icon_state = "cat"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/cat
|
||||
name = "Cat"
|
||||
icon_state = "cat"
|
||||
color_src = HAIR*/
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/tails/human/catbig
|
||||
name = "Cat, Big"
|
||||
icon_state = "catbig"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/catbig
|
||||
name = "Cat, Big"
|
||||
icon_state = "catbig"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/corvid
|
||||
name = "Corvid"
|
||||
icon_state = "crow"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/corvid
|
||||
name = "Corvid"
|
||||
icon_state = "crow"
|
||||
|
||||
/datum/sprite_accessory/tails/human/eevee
|
||||
name = "Eevee"
|
||||
icon_state = "eevee"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/eevee
|
||||
name = "Eevee"
|
||||
icon_state = "eevee"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/fish
|
||||
name = "Fish"
|
||||
icon_state = "fish"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/fish
|
||||
name = "Fish"
|
||||
icon_state = "fish"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/horse
|
||||
name = "Horse"
|
||||
icon_state = "horse"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/horse
|
||||
name = "Horse"
|
||||
icon_state = "horse"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/tails/human/husky
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/husky
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/insect
|
||||
name = "Insect"
|
||||
icon_state = "insect"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/insect
|
||||
name = "insect"
|
||||
icon_state = "insect"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/kitsune
|
||||
name = "Kitsune"
|
||||
icon_state = "kitsune"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/kitsune
|
||||
name = "Kitsune"
|
||||
icon_state = "kitsune"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/murid
|
||||
name = "Murid"
|
||||
icon_state = "murid"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/murid
|
||||
name = "Murid"
|
||||
icon_state = "murid"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/otie
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/otie
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/orca
|
||||
name = "Orca"
|
||||
icon_state = "orca"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/orca
|
||||
name = "Orca"
|
||||
icon_state = "orca"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/skunk
|
||||
name = "skunk"
|
||||
icon_state = "skunk"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/skunk
|
||||
name = "skunk"
|
||||
icon_state = "skunk"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/shark
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/shark
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/datashark
|
||||
name = "datashark"
|
||||
icon_state = "datashark"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/datashark
|
||||
name = "datashark"
|
||||
icon_state = "datashark"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/straighttail
|
||||
name = "Straight Tail"
|
||||
icon_state = "straighttail"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/straighttail
|
||||
name = "Straight Tail"
|
||||
icon_state = "straighttail"
|
||||
|
||||
/datum/sprite_accessory/tails/human/squirrel
|
||||
name = "Squirrel"
|
||||
icon_state = "squirrel"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/squirrel
|
||||
name = "Squirrel"
|
||||
icon_state = "squirrel"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/tentacle
|
||||
name = "Tentacle"
|
||||
icon_state = "tentacle"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/tentacle
|
||||
name = "Tentacle"
|
||||
icon_state = "tentacle"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/tiger
|
||||
name = "Tiger"
|
||||
icon_state = "tiger"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/tiger
|
||||
name = "Tiger"
|
||||
icon_state = "tiger"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/******************************************
|
||||
************** Furry Tails ****************
|
||||
*******************************************/
|
||||
|
||||
/datum/sprite_accessory/mam_tails
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_tails/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/mam_tails/ailurus
|
||||
name = "Red Panda"
|
||||
icon_state = "wah"
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/ailurus
|
||||
name = "Red Panda"
|
||||
icon_state = "wah"
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_tails/axolotl
|
||||
name = "Axolotl"
|
||||
icon_state = "axolotl"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/axolotl
|
||||
name = "Axolotl"
|
||||
icon_state = "axolotl"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/bee
|
||||
name = "Bee"
|
||||
icon_state = "bee"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/bee
|
||||
name = "Bee"
|
||||
icon_state = "bee"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/cat
|
||||
name = "Cat"
|
||||
icon_state = "cat"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/cat
|
||||
name = "Cat"
|
||||
icon_state = "cat"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/mam_tails/catbig
|
||||
name = "Cat, Big"
|
||||
icon_state = "catbig"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/catbig
|
||||
name = "Cat, Big"
|
||||
icon_state = "catbig"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/corvid
|
||||
name = "Corvid"
|
||||
icon_state = "crow"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/corvid
|
||||
name = "Corvid"
|
||||
icon_state = "crow"
|
||||
|
||||
/datum/sprite_accessory/mam_tail/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/eevee
|
||||
name = "Eevee"
|
||||
icon_state = "eevee"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/eevee
|
||||
name = "Eevee"
|
||||
icon_state = "eevee"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/human/fish
|
||||
name = "Fish"
|
||||
icon_state = "fish"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/human/fish
|
||||
name = "Fish"
|
||||
icon_state = "fish"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/hawk
|
||||
name = "Hawk"
|
||||
icon_state = "hawk"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/hawk
|
||||
name = "Hawk"
|
||||
icon_state = "hawk"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/horse
|
||||
name = "Horse"
|
||||
icon_state = "horse"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/horse
|
||||
name = "Horse"
|
||||
icon_state = "Horse"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/mam_tails/husky
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/husky
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
|
||||
datum/sprite_accessory/mam_tails/insect
|
||||
name = "Insect"
|
||||
icon_state = "insect"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/insect
|
||||
name = "Insect"
|
||||
icon_state = "insect"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/kangaroo
|
||||
name = "kangaroo"
|
||||
icon_state = "kangaroo"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/kangaroo
|
||||
name = "kangaroo"
|
||||
icon_state = "kangaroo"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/kitsune
|
||||
name = "Kitsune"
|
||||
icon_state = "kitsune"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/kitsune
|
||||
name = "Kitsune"
|
||||
icon_state = "kitsune"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/lab
|
||||
name = "Lab"
|
||||
icon_state = "lab"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/lab
|
||||
name = "Lab"
|
||||
icon_state = "lab"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/murid
|
||||
name = "Murid"
|
||||
icon_state = "murid"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/murid
|
||||
name = "Murid"
|
||||
icon_state = "murid"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/otie
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/otie
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/orca
|
||||
name = "Orca"
|
||||
icon_state = "orca"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/orca
|
||||
name = "Orca"
|
||||
icon_state = "orca"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/skunk
|
||||
name = "Skunk"
|
||||
icon_state = "skunk"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/skunk
|
||||
name = "Skunk"
|
||||
icon_state = "skunk"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/shark
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/shark
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/shepherd
|
||||
name = "Shepherd"
|
||||
icon_state = "shepherd"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/shepherd
|
||||
name = "Shepherd"
|
||||
icon_state = "shepherd"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/straighttail
|
||||
name = "Straight Tail"
|
||||
icon_state = "straighttail"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/straighttail
|
||||
name = "Straight Tail"
|
||||
icon_state = "straighttail"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/squirrel
|
||||
name = "Squirrel"
|
||||
icon_state = "squirrel"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/squirrel
|
||||
name = "Squirrel"
|
||||
icon_state = "squirrel"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/tentacle
|
||||
name = "Tentacle"
|
||||
icon_state = "tentacle"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/tentacle
|
||||
name = "Tentacle"
|
||||
icon_state = "tentacle"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/tiger
|
||||
name = "Tiger"
|
||||
icon_state = "tiger"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/tiger
|
||||
name = "Tiger"
|
||||
icon_state = "tiger"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
//Angel Wings
|
||||
|
||||
/datum/sprite_accessory/wings/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
@@ -23,4 +25,120 @@
|
||||
dimension_x = 46
|
||||
center = TRUE
|
||||
dimension_y = 34
|
||||
locked = TRUE
|
||||
locked = TRUE
|
||||
|
||||
//INSECT WINGS
|
||||
|
||||
/datum/sprite_accessory/insect_wings
|
||||
icon = 'icons/mob/wings.dmi'
|
||||
color_src = null
|
||||
|
||||
/datum/sprite_accessory/insect_wings/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/plain
|
||||
name = "Plain"
|
||||
icon_state = "plain"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/monarch
|
||||
name = "Monarch"
|
||||
icon_state = "monarch"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/luna
|
||||
name = "Luna"
|
||||
icon_state = "luna"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/atlas
|
||||
name = "Atlas"
|
||||
icon_state = "atlas"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/reddish
|
||||
name = "Reddish"
|
||||
icon_state = "redish"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/royal
|
||||
name = "Royal"
|
||||
icon_state = "royal"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/gothic
|
||||
name = "Gothic"
|
||||
icon_state = "gothic"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/lovers
|
||||
name = "Lovers"
|
||||
icon_state = "lovers"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/whitefly
|
||||
name = "White Fly"
|
||||
icon_state = "whitefly"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/punished
|
||||
name = "Burnt Off"
|
||||
icon_state = "punished"
|
||||
locked = TRUE
|
||||
|
||||
/datum/sprite_accessory/insect_wings/firewatch
|
||||
name = "Firewatch"
|
||||
icon_state = "firewatch"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/poison
|
||||
name = "Poison"
|
||||
icon_state = "poison"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/ragged
|
||||
name = "Ragged"
|
||||
icon_state = "ragged"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/moonfly
|
||||
name = "Moon Fly"
|
||||
icon_state = "moonfly"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/snow
|
||||
name = "Snow"
|
||||
icon_state = "snow"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/colored
|
||||
name = "Colored (Hair)"
|
||||
icon_state = "snowplain"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/colored1
|
||||
name = "Colored (Primary)"
|
||||
icon_state = "snowplain"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/colored2
|
||||
name = "Colored (Secondary)"
|
||||
icon_state = "snowplain"
|
||||
color_src = MUTCOLORS2
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/colored3
|
||||
name = "Colored (Tertiary)"
|
||||
icon_state = "snowplain"
|
||||
color_src = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/insect_wings/bee
|
||||
name = "Bee"
|
||||
icon_state = "bee"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/bee_color
|
||||
name = "Bee (Hair colored)"
|
||||
icon_state = "bee"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/insect_wings/fairy
|
||||
name = "Fairy"
|
||||
icon_state = "fairy"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/bat
|
||||
name = "Bat"
|
||||
icon_state = "bat"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/feathery
|
||||
name = "Feathery"
|
||||
icon_state = "feathery"
|
||||
|
||||
@@ -1,113 +0,0 @@
|
||||
/mob/living/carbon/alien/larva/emote(act,m_type=1,message = null)
|
||||
|
||||
var/param = null
|
||||
if (findtext(act, "-", 1, null))
|
||||
var/t1 = findtext(act, "-", 1, null)
|
||||
param = copytext(act, t1 + 1, length(act) + 1)
|
||||
act = copytext(act, 1, t1)
|
||||
|
||||
var/muzzled = is_muzzled()
|
||||
|
||||
switch(act) //Alphabetically sorted please.
|
||||
if ("burp","burps")
|
||||
if (!muzzled)
|
||||
message = "<span class='name'>[src]</span> burps."
|
||||
m_type = 2
|
||||
if ("choke","chokes")
|
||||
message = "<span class='name'>[src]</span> chokes."
|
||||
m_type = 2
|
||||
if ("collapse","collapses")
|
||||
Paralyse(2)
|
||||
message = "<span class='name'>[src]</span> collapses!"
|
||||
m_type = 2
|
||||
if ("dance","dances")
|
||||
if (!src.restrained())
|
||||
message = "<span class='name'>[src]</span> dances around happily."
|
||||
m_type = 1
|
||||
if ("deathgasp","deathgasps")
|
||||
message = "<span class='name'>[src]</span> lets out a sickly hiss of air and falls limply to the floor..."
|
||||
m_type = 2
|
||||
if ("drool","drools")
|
||||
message = "<span class='name'>[src]</span> drools."
|
||||
m_type = 1
|
||||
if ("gasp","gasps")
|
||||
message = "<span class='name'>[src]</span> gasps."
|
||||
m_type = 2
|
||||
if ("gnarl","gnarls")
|
||||
if (!muzzled)
|
||||
message = "<span class='name'>[src]</span> gnarls and shows its teeth.."
|
||||
m_type = 2
|
||||
if ("hiss","hisses")
|
||||
message = "<span class='name'>[src]</span> hisses softly."
|
||||
m_type = 1
|
||||
if ("jump","jumps")
|
||||
message = "<span class='name'>[src]</span> jumps!"
|
||||
m_type = 1
|
||||
if ("me")
|
||||
..()
|
||||
return
|
||||
if ("moan","moans")
|
||||
message = "<span class='name'>[src]</span> moans!"
|
||||
m_type = 2
|
||||
if ("nod","nods")
|
||||
message = "<span class='name'>[src]</span> nods its head."
|
||||
m_type = 1
|
||||
if ("roar","roars")
|
||||
if (!muzzled)
|
||||
message = "<span class='name'>[src]</span> softly roars."
|
||||
m_type = 2
|
||||
if ("roll","rolls")
|
||||
if (!src.restrained())
|
||||
message = "<span class='name'>[src]</span> rolls."
|
||||
m_type = 1
|
||||
if ("scratch","scratches")
|
||||
if (!src.restrained())
|
||||
message = "<span class='name'>[src]</span> scratches."
|
||||
m_type = 1
|
||||
if ("screech","screeches") //This orignally was called scretch, changing it. -Sum99
|
||||
if (!muzzled)
|
||||
message = "<span class='name'>[src]</span> screeches."
|
||||
m_type = 2
|
||||
if ("shake","shakes")
|
||||
message = "<span class='name'>[src]</span> shakes its head."
|
||||
m_type = 1
|
||||
if ("shiver","shivers")
|
||||
message = "<span class='name'>[src]</span> shivers."
|
||||
m_type = 2
|
||||
if ("sign","signs")
|
||||
if (!src.restrained())
|
||||
message = text("<span class='name'>[src]</span> signs[].", (text2num(param) ? text(" the number []", text2num(param)) : null))
|
||||
m_type = 1
|
||||
if ("snore","snores")
|
||||
message = "<B>[src]</B> snores."
|
||||
m_type = 2
|
||||
if ("sulk","sulks")
|
||||
message = "<span class='name'>[src]</span> sulks down sadly."
|
||||
m_type = 1
|
||||
if ("sway","sways")
|
||||
message = "<span class='name'>[src]</span> sways around dizzily."
|
||||
m_type = 1
|
||||
if ("tail")
|
||||
message = "<span class='name'>[src]</span> waves its tail."
|
||||
m_type = 1
|
||||
if ("twitch")
|
||||
message = "<span class='name'>[src]</span> twitches violently."
|
||||
m_type = 1
|
||||
if ("whimper","whimpers")
|
||||
if (!muzzled)
|
||||
message = "<span class='name'>[src]</span> whimpers."
|
||||
m_type = 2
|
||||
|
||||
if ("help") //"The exception"
|
||||
src << "Help for larva emotes. You can use these emotes with say \"*emote\":\n\nburp, choke, collapse, dance, deathgasp, drool, gasp, gnarl, hiss, jump, me, moan, nod, roll, roar, scratch, screech, shake, shiver, sign-#, sulk, sway, tail, twitch, whimper"
|
||||
|
||||
else
|
||||
src << "<span class='info'>Unusable emote '[act]'. Say *help for a list.</span>"
|
||||
|
||||
if ((message && src.stat == 0))
|
||||
log_emote("[name]/[key] : [message]")
|
||||
if (m_type & 1)
|
||||
visible_message(message)
|
||||
else
|
||||
audible_message(message)
|
||||
return
|
||||
@@ -271,9 +271,13 @@
|
||||
if(restrained())
|
||||
changeNext_move(CLICK_CD_BREAKOUT)
|
||||
last_special = world.time + CLICK_CD_BREAKOUT
|
||||
var/buckle_cd = 600
|
||||
if(handcuffed)
|
||||
var/obj/item/restraints/O = src.get_item_by_slot(SLOT_HANDCUFFED)
|
||||
buckle_cd = O.breakouttime
|
||||
visible_message("<span class='warning'>[src] attempts to unbuckle [p_them()]self!</span>", \
|
||||
"<span class='notice'>You attempt to unbuckle yourself... (This will take around one minute and you need to stay still.)</span>")
|
||||
if(do_after(src, 600, 0, target = src))
|
||||
"<span class='notice'>You attempt to unbuckle yourself... (This will take around [round(buckle_cd/600,1)] minute\s, and you need to stay still.)</span>")
|
||||
if(do_after(src, buckle_cd, 0, target = src))
|
||||
if(!buckled)
|
||||
return
|
||||
buckled.user_unbuckle_mob(src,src)
|
||||
@@ -801,7 +805,8 @@
|
||||
drop_all_held_items()
|
||||
stop_pulling()
|
||||
throw_alert("handcuffed", /obj/screen/alert/restrained/handcuffed, new_master = src.handcuffed)
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "handcuffed", /datum/mood_event/handcuffed)
|
||||
if(handcuffed.demoralize_criminals)
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "handcuffed", /datum/mood_event/handcuffed)
|
||||
else
|
||||
clear_alert("handcuffed")
|
||||
SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "handcuffed")
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
gender = MALE
|
||||
pressure_resistance = 15
|
||||
possible_a_intents = list(INTENT_HELP, INTENT_HARM)
|
||||
hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,GLAND_HUD,NANITE_HUD,DIAG_NANITE_FULL_HUD)
|
||||
hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,GLAND_HUD,NANITE_HUD,DIAG_NANITE_FULL_HUD,RAD_HUD)
|
||||
has_limbs = 1
|
||||
held_items = list(null, null)
|
||||
var/list/stomach_contents = list()
|
||||
|
||||
@@ -802,6 +802,11 @@
|
||||
else
|
||||
hud_used.healthdoll.icon_state = "healthdoll_DEAD"
|
||||
|
||||
if(hud_used.staminas)
|
||||
hud_used.staminas.icon_state = staminahudamount()
|
||||
if(hud_used.staminabuffer)
|
||||
hud_used.staminabuffer.icon_state = staminabufferhudamount()
|
||||
|
||||
/mob/living/carbon/human/fully_heal(admin_revive = 0)
|
||||
if(admin_revive)
|
||||
regenerate_limbs()
|
||||
@@ -854,52 +859,84 @@
|
||||
.["Copy outfit"] = "?_src_=vars;[HrefToken()];copyoutfit=[REF(src)]"
|
||||
|
||||
/mob/living/carbon/human/MouseDrop_T(mob/living/target, mob/living/user)
|
||||
//If they dragged themselves and we're currently aggressively grabbing them try to piggyback
|
||||
if(user == target && can_piggyback(target) && pulling == target && (HAS_TRAIT(src, TRAIT_PACIFISM) || grab_state >= GRAB_AGGRESSIVE) && stat == CONSCIOUS)
|
||||
buckle_mob(target,TRUE,TRUE)
|
||||
if(pulling == target && grab_state >= GRAB_AGGRESSIVE && stat == CONSCIOUS)
|
||||
//If they dragged themselves and we're currently aggressively grabbing them try to piggyback
|
||||
if(user == target && can_piggyback(target))
|
||||
piggyback(target)
|
||||
return
|
||||
//If you dragged them to you and you're aggressively grabbing try to fireman carry them
|
||||
else if(user != target && can_be_firemanned(target))
|
||||
fireman_carry(target)
|
||||
return
|
||||
. = ..()
|
||||
|
||||
/mob/living/carbon/human/proc/piggyback_instant(mob/living/M)
|
||||
return buckle_mob(M, TRUE, TRUE, FALSE, TRUE)
|
||||
//src is the user that will be carrying, target is the mob to be carried
|
||||
/mob/living/carbon/human/proc/can_piggyback(mob/living/carbon/target)
|
||||
return (istype(target) && target.stat == CONSCIOUS)
|
||||
|
||||
//Can C try to piggyback at all.
|
||||
/mob/living/carbon/human/proc/can_piggyback(mob/living/carbon/C)
|
||||
if(istype(C) && C.stat == CONSCIOUS)
|
||||
return TRUE
|
||||
return FALSE
|
||||
/mob/living/carbon/human/proc/can_be_firemanned(mob/living/carbon/target)
|
||||
return (ishuman(target) && target.lying)
|
||||
|
||||
/mob/living/carbon/human/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE, bypass_piggybacking = FALSE, no_delay = FALSE)
|
||||
/mob/living/carbon/human/proc/fireman_carry(mob/living/carbon/target)
|
||||
if(can_be_firemanned(target))
|
||||
visible_message("<span class='notice'>[src] starts lifting [target] onto their back...</span>",
|
||||
"<span class='notice'>You start lifting [target] onto your back...</span>")
|
||||
if(do_after(src, 30, TRUE, target))
|
||||
//Second check to make sure they're still valid to be carried
|
||||
if(can_be_firemanned(target) && !incapacitated(FALSE, TRUE))
|
||||
target.resting = FALSE
|
||||
buckle_mob(target, TRUE, TRUE, 90, 1, 0)
|
||||
return
|
||||
visible_message("<span class='warning'>[src] fails to fireman carry [target]!")
|
||||
else
|
||||
to_chat(src, "<span class='notice'>You can't fireman carry [target] while they're standing!</span>")
|
||||
|
||||
/mob/living/carbon/human/proc/piggyback(mob/living/carbon/target)
|
||||
if(can_piggyback(target))
|
||||
visible_message("<span class='notice'>[target] starts to climb onto [src]...</span>")
|
||||
if(do_after(target, 15, target = src))
|
||||
if(can_piggyback(target))
|
||||
if(target.incapacitated(FALSE, TRUE) || incapacitated(FALSE, TRUE))
|
||||
target.visible_message("<span class='warning'>[target] can't hang onto [src]!</span>")
|
||||
return
|
||||
buckle_mob(target, TRUE, TRUE, FALSE, 0, 2)
|
||||
else
|
||||
visible_message("<span class='warning'>[target] fails to climb onto [src]!</span>")
|
||||
else
|
||||
to_chat(target, "<span class='warning'>You can't piggyback ride [src] right now!</span>")
|
||||
|
||||
/mob/living/carbon/human/buckle_mob(mob/living/target, force = FALSE, check_loc = TRUE, lying_buckle = FALSE, hands_needed = 0, target_hands_needed = 0)
|
||||
if(!force)//humans are only meant to be ridden through piggybacking and special cases
|
||||
return
|
||||
if(bypass_piggybacking)
|
||||
return ..()
|
||||
if(!is_type_in_typecache(M, can_ride_typecache))
|
||||
M.visible_message("<span class='warning'>[M] really can't seem to mount [src]...</span>")
|
||||
if(!is_type_in_typecache(target, can_ride_typecache))
|
||||
target.visible_message("<span class='warning'>[target] really can't seem to mount [src]...</span>")
|
||||
return
|
||||
buckle_lying = lying_buckle
|
||||
var/datum/component/riding/human/riding_datum = LoadComponent(/datum/component/riding/human)
|
||||
riding_datum.ride_check_rider_incapacitated = TRUE
|
||||
riding_datum.ride_check_rider_restrained = TRUE
|
||||
riding_datum.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 6), TEXT_SOUTH = list(0, 6), TEXT_EAST = list(-6, 4), TEXT_WEST = list( 6, 4)))
|
||||
if(buckled_mobs && ((M in buckled_mobs) || (buckled_mobs.len >= max_buckled_mobs)) || buckled || (M.stat != CONSCIOUS))
|
||||
if(target_hands_needed)
|
||||
riding_datum.ride_check_rider_restrained = TRUE
|
||||
if(buckled_mobs && ((target in buckled_mobs) || (buckled_mobs.len >= max_buckled_mobs)) || buckled)
|
||||
return
|
||||
if(can_piggyback(M))
|
||||
riding_datum.ride_check_ridden_incapacitated = TRUE
|
||||
visible_message("<span class='notice'>[M] starts to climb onto [src]...</span>")
|
||||
if(no_delay || do_after(M, 15, target = src))
|
||||
if(can_piggyback(M))
|
||||
if(M.incapacitated(FALSE, TRUE) || incapacitated(FALSE, TRUE))
|
||||
M.visible_message("<span class='warning'>[M] can't hang onto [src]!</span>")
|
||||
return
|
||||
if(!riding_datum.equip_buckle_inhands(M, 2)) //MAKE SURE THIS IS LAST!!
|
||||
M.visible_message("<span class='warning'>[M] can't climb onto [src]!</span>")
|
||||
return
|
||||
. = ..(M, force, check_loc)
|
||||
stop_pulling()
|
||||
else
|
||||
visible_message("<span class='warning'>[M] fails to climb onto [src]!</span>")
|
||||
else
|
||||
. = ..(M,force,check_loc)
|
||||
stop_pulling()
|
||||
var/equipped_hands_self
|
||||
var/equipped_hands_target
|
||||
if(hands_needed)
|
||||
equipped_hands_self = riding_datum.equip_buckle_inhands(src, hands_needed, target)
|
||||
if(target_hands_needed)
|
||||
equipped_hands_target = riding_datum.equip_buckle_inhands(target, target_hands_needed)
|
||||
|
||||
if(hands_needed || target_hands_needed)
|
||||
if(hands_needed && !equipped_hands_self)
|
||||
src.visible_message("<span class='warning'>[src] can't get a grip on [target] because their hands are full!</span>",
|
||||
"<span class='warning'>You can't get a grip on [target] because your hands are full!</span>")
|
||||
return
|
||||
else if(target_hands_needed && !equipped_hands_target)
|
||||
target.visible_message("<span class='warning'>[target] can't get a grip on [src] because their hands are full!</span>",
|
||||
"<span class='warning'>You can't get a grip on [src] because your hands are full!</span>")
|
||||
return
|
||||
|
||||
stop_pulling()
|
||||
riding_datum.handle_vehicle_layer()
|
||||
. = ..(target, force, check_loc)
|
||||
|
||||
/mob/living/carbon/human/proc/is_shove_knockdown_blocked() //If you want to add more things that block shove knockdown, extend this
|
||||
for(var/obj/item/clothing/C in get_equipped_items()) //doesn't include pockets
|
||||
@@ -1029,8 +1066,8 @@
|
||||
/mob/living/carbon/human/species/lizard/ashwalker
|
||||
race = /datum/species/lizard/ashwalker
|
||||
|
||||
/mob/living/carbon/human/species/moth
|
||||
race = /datum/species/moth
|
||||
/mob/living/carbon/human/species/insect
|
||||
race = /datum/species/insect
|
||||
|
||||
/mob/living/carbon/human/species/mush
|
||||
race = /datum/species/mush
|
||||
|
||||
@@ -348,10 +348,15 @@
|
||||
if(temp)
|
||||
var/update = 0
|
||||
var/dmg = rand(M.force/2, M.force)
|
||||
var/atom/throw_target = get_edge_target_turf(src, M.dir)
|
||||
switch(M.damtype)
|
||||
if("brute")
|
||||
if(M.force > 20)
|
||||
Unconscious(20)
|
||||
if(M.force > 35) // durand and other heavy mechas
|
||||
Knockdown(50)
|
||||
src.throw_at(throw_target, rand(1,5), 7)
|
||||
else if(M.force >= 20 && !IsKnockdown()) // lightweight mechas like gygax
|
||||
Knockdown(30)
|
||||
src.throw_at(throw_target, rand(1,3), 7)
|
||||
update |= temp.receive_damage(dmg, 0)
|
||||
playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
|
||||
if("fire")
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/carbon/human
|
||||
hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD, NANITE_HUD, DIAG_NANITE_FULL_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD)
|
||||
hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD, NANITE_HUD, DIAG_NANITE_FULL_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD,RAD_HUD)
|
||||
hud_type = /datum/hud/human
|
||||
possible_a_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_GRAB, INTENT_HARM)
|
||||
pressure_resistance = 25
|
||||
@@ -17,6 +17,8 @@
|
||||
//Eye colour
|
||||
var/eye_color = "000"
|
||||
|
||||
var/horn_color = "85615a" //specific horn colors, because why not?
|
||||
|
||||
var/skin_tone = "caucasian1" //Skin tone
|
||||
|
||||
var/lip_style = null //no lipstick by default- arguably misleading, as it could be used for general makeup
|
||||
|
||||
@@ -39,6 +39,10 @@
|
||||
//Stuff jammed in your limbs hurts
|
||||
handle_embedded_objects()
|
||||
|
||||
if(stat != DEAD)
|
||||
//process your dick energy
|
||||
handle_arousal()
|
||||
|
||||
//Update our name based on whether our face is obscured/disfigured
|
||||
name = get_visible_name()
|
||||
|
||||
@@ -54,7 +58,7 @@
|
||||
var/obj/item/clothing/CH = head
|
||||
if (CS.clothing_flags & CH.clothing_flags & STOPSPRESSUREDAMAGE)
|
||||
return ONE_ATMOSPHERE
|
||||
if(istype(loc, /obj/belly)) //START OF CIT CHANGES - Makes it so you don't suffocate while inside vore organs. Remind me to modularize this some time - Bhijn
|
||||
if(isbelly(loc)) //START OF CIT CHANGES - Makes it so you don't suffocate while inside vore organs. Remind me to modularize this some time - Bhijn
|
||||
return ONE_ATMOSPHERE
|
||||
if(istype(loc, /obj/item/dogborg/sleeper))
|
||||
return ONE_ATMOSPHERE //END OF CIT CHANGES
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
/mob/living/carbon/human/Login()
|
||||
..()
|
||||
if(src.martial_art == default_martial_art && mind.stored_martial_art) //If the mind has a martial art stored and the body has the default one.
|
||||
src.mind.stored_martial_art.teach(src) //Running teach so that it deals with help verbs.
|
||||
else if(src.martial_art != default_martial_art && src.martial_art != mind.stored_martial_art) //If the body has a martial art which is not the default one and is not stored in the mind.
|
||||
if(src.martial_art_owner != mind)
|
||||
src.martial_art.remove(src)
|
||||
else
|
||||
src.mind.stored_martial_art = src.martial_art
|
||||
@@ -1,6 +1,7 @@
|
||||
// This code handles different species in the game.
|
||||
|
||||
GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
|
||||
/datum/species
|
||||
var/id // if the game needs to manually check your race to do something not included in a proc here, it will use this
|
||||
@@ -15,6 +16,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
var/hair_color // this allows races to have specific hair colors... if null, it uses the H's hair/facial hair colors. if "mutcolor", it uses the H's mutant_color
|
||||
var/hair_alpha = 255 // the alpha used by the hair. 255 is completely solid, 0 is transparent.
|
||||
|
||||
var/horn_color //specific horn colors, because why not?
|
||||
|
||||
var/use_skintones = 0 // does it use skintones or not? (spoiler alert this is only used by humans)
|
||||
var/exotic_blood = "" // If your race wants to bleed something other than bog standard blood, change this to reagent id.
|
||||
var/exotic_bloodtype = "" //If your race uses a non standard bloodtype (A+, O-, AB-, etc)
|
||||
@@ -79,7 +82,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
var/fixed_mut_color3 = ""
|
||||
var/whitelisted = 0 //Is this species restricted to certain players?
|
||||
var/whitelist = list() //List the ckeys that can use this species, if it's whitelisted.: list("John Doe", "poopface666", "SeeALiggerPullTheTrigger") Spaces & capitalization can be included or ignored entirely for each key as it checks for both.
|
||||
|
||||
var/should_draw_citadel = FALSE
|
||||
|
||||
///////////
|
||||
// PROCS //
|
||||
@@ -98,6 +101,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
var/datum/species/S = new I
|
||||
if(S.check_roundstart_eligible())
|
||||
GLOB.roundstart_races += S.id
|
||||
GLOB.roundstart_race_names["[S.name]"] = S.id
|
||||
qdel(S)
|
||||
if(!GLOB.roundstart_races.len)
|
||||
GLOB.roundstart_races += "human"
|
||||
@@ -129,10 +133,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
return
|
||||
|
||||
//Please override this locally if you want to define when what species qualifies for what rank if human authority is enforced.
|
||||
/datum/species/proc/qualifies_for_rank(rank, list/features)
|
||||
if(rank in GLOB.command_positions)
|
||||
return 0
|
||||
return 1
|
||||
/datum/species/proc/qualifies_for_rank(rank, list/features) //SPECIES JOB RESTRICTIONS
|
||||
//if(rank in GLOB.command_positions) Left as an example: The format qualifies for rank takes.
|
||||
// return 0 //It returns false when it runs the proc so they don't get jobs from the global list.
|
||||
return 1 //It returns 1 to say they are a-okay to continue.
|
||||
|
||||
//Will regenerate missing organs
|
||||
/datum/species/proc/regenerate_organs(mob/living/carbon/C,datum/species/old_species,replace_current=TRUE)
|
||||
@@ -260,7 +264,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
C.hud_used.update_locked_slots()
|
||||
|
||||
// this needs to be FIRST because qdel calls update_body which checks if we have DIGITIGRADE legs or not and if not then removes DIGITIGRADE from species_traits
|
||||
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs")
|
||||
if(("legs" in C.dna.species.mutant_bodyparts) && (C.dna.features["legs"] == "Digitigrade" || C.dna.features["legs"] == "Avian"))
|
||||
species_traits += DIGITIGRADE
|
||||
if(DIGITIGRADE in species_traits)
|
||||
C.Digitigrade_Leg_Swap(FALSE)
|
||||
@@ -294,8 +298,6 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
for(var/datum/disease/A in C.diseases)
|
||||
A.cure(FALSE)
|
||||
|
||||
SEND_SIGNAL(C, COMSIG_SPECIES_GAIN, src, old_species)
|
||||
|
||||
//CITADEL EDIT
|
||||
if(NOAROUSAL in species_traits)
|
||||
C.canbearoused = FALSE
|
||||
@@ -306,6 +308,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(NOGENITALS in H.dna.species.species_traits)
|
||||
H.give_genitals(TRUE) //call the clean up proc to delete anything on the mob then return.
|
||||
if("meat_type" in default_features) //I can't believe it's come to the meat
|
||||
H.type_of_meat = GLOB.meat_types[H.dna.features["meat_type"]]
|
||||
|
||||
SEND_SIGNAL(C, COMSIG_SPECIES_GAIN, src, old_species)
|
||||
|
||||
|
||||
// EDIT ENDS
|
||||
|
||||
@@ -317,6 +324,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
for(var/X in inherent_traits)
|
||||
REMOVE_TRAIT(C, X, SPECIES_TRAIT)
|
||||
|
||||
if("meat_type" in default_features)
|
||||
C.type_of_meat = GLOB.meat_types[C.dna.features["meat_type"]]
|
||||
else
|
||||
C.type_of_meat = initial(meat)
|
||||
|
||||
SEND_SIGNAL(C, COMSIG_SPECIES_LOSS, src)
|
||||
|
||||
/datum/species/proc/handle_hair(mob/living/carbon/human/H, forced_colour)
|
||||
@@ -612,6 +624,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
else if ("wings" in mutant_bodyparts)
|
||||
bodyparts_to_add -= "wings_open"
|
||||
|
||||
if("insect_fluff" in mutant_bodyparts)
|
||||
if(!H.dna.features["insect_fluff"] || H.dna.features["insect_fluff"] == "None" || H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
|
||||
bodyparts_to_add -= "insect_fluff"
|
||||
|
||||
//CITADEL EDIT
|
||||
//Race specific bodyparts:
|
||||
//Xenos
|
||||
@@ -717,8 +733,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
S = GLOB.wings_open_list[H.dna.features["wings"]]
|
||||
if("legs")
|
||||
S = GLOB.legs_list[H.dna.features["legs"]]
|
||||
if("moth_wings")
|
||||
S = GLOB.moth_wings_list[H.dna.features["moth_wings"]]
|
||||
if("insect_wings")
|
||||
S = GLOB.insect_wings_list[H.dna.features["insect_wings"]]
|
||||
if("insect_fluff")
|
||||
S = GLOB.insect_fluffs_list[H.dna.features["insect_fluff"]]
|
||||
if("caps")
|
||||
S = GLOB.caps_list[H.dna.features["caps"]]
|
||||
if("ipc_screen")
|
||||
@@ -815,6 +833,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
accessory_overlay.color = "#[H.facial_hair_color]"
|
||||
if(EYECOLOR)
|
||||
accessory_overlay.color = "#[H.eye_color]"
|
||||
if(HORNCOLOR)
|
||||
accessory_overlay.color = "#[H.horn_color]"
|
||||
else
|
||||
accessory_overlay.color = forced_colour
|
||||
else
|
||||
@@ -880,6 +900,9 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
extra_accessory_overlay.color = "#[H.facial_hair_color]"
|
||||
if(EYECOLOR)
|
||||
extra_accessory_overlay.color = "#[H.eye_color]"
|
||||
|
||||
if(HORNCOLOR)
|
||||
extra_accessory_overlay.color = "#[H.horn_color]"
|
||||
standing += extra_accessory_overlay
|
||||
|
||||
if(S.extra2) //apply the extra overlay, if there is one
|
||||
@@ -912,6 +935,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
extra2_accessory_overlay.color = "#[H.dna.features["mcolor"]]"
|
||||
else
|
||||
extra2_accessory_overlay.color = "#[H.hair_color]"
|
||||
if(HORNCOLOR)
|
||||
extra2_accessory_overlay.color = "#[H.horn_color]"
|
||||
standing += extra2_accessory_overlay
|
||||
|
||||
|
||||
@@ -1313,10 +1338,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
var/obj/item/organ/cyberimp/chest/thrusters/T = H.getorganslot(ORGAN_SLOT_THRUSTERS)
|
||||
if(!istype(J) && istype(C))
|
||||
J = C.jetpack
|
||||
if(istype(J) && J.full_speed && J.allow_thrust(0.01, H)) //Prevents stacking
|
||||
. -= 2
|
||||
else if(istype(T) && T.allow_thrust(0.01, H))
|
||||
. -= 2
|
||||
if(istype(J) && J.full_speed && J.allow_thrust(0.005, H)) //Prevents stacking
|
||||
. -= 0.4
|
||||
else if(istype(T) && T.allow_thrust(0.005, H))
|
||||
. -= 0.4
|
||||
|
||||
if(!ignoreslow && gravity)
|
||||
if(H.wear_suit)
|
||||
@@ -1732,6 +1757,130 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.forcesay(GLOB.hit_appends) //forcesay checks stat already.
|
||||
return TRUE
|
||||
|
||||
/datum/species/proc/alt_spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style)
|
||||
if(!istype(M))
|
||||
return TRUE
|
||||
CHECK_DNA_AND_SPECIES(M)
|
||||
CHECK_DNA_AND_SPECIES(H)
|
||||
|
||||
if(!istype(M)) //sanity check for drones.
|
||||
return TRUE
|
||||
if(M.mind)
|
||||
attacker_style = M.mind.martial_art
|
||||
if((M != H) && M.a_intent != INTENT_HELP && H.check_shields(M, 0, M.name, attack_type = UNARMED_ATTACK))
|
||||
log_combat(M, H, "attempted to touch")
|
||||
H.visible_message("<span class='warning'>[M] attempted to touch [H]!</span>")
|
||||
return TRUE
|
||||
switch(M.a_intent)
|
||||
if(INTENT_HELP)
|
||||
if(M == H)
|
||||
althelp(M, H, attacker_style)
|
||||
return TRUE
|
||||
return FALSE
|
||||
if(INTENT_DISARM)
|
||||
altdisarm(M, H, attacker_style)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/species/proc/althelp(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
|
||||
if(user == target && istype(user))
|
||||
if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
|
||||
to_chat(user, "<span class='warning'>You're too exhausted for that.</span>")
|
||||
return
|
||||
if(!user.resting)
|
||||
to_chat(user, "<span class='notice'>You can only force yourself up if you're on the ground.</span>")
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] forces [p_them()]self up to [p_their()] feet!</span>", "<span class='notice'>You force yourself up to your feet!</span>")
|
||||
user.resting = 0
|
||||
user.update_canmove()
|
||||
user.adjustStaminaLossBuffered(user.stambuffer) //Rewards good stamina management by making it easier to instantly get up from resting
|
||||
playsound(user, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
|
||||
/datum/species/proc/altdisarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
|
||||
if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
|
||||
to_chat(user, "<span class='warning'>You're too exhausted.</span>")
|
||||
return FALSE
|
||||
if(target.check_block())
|
||||
target.visible_message("<span class='warning'>[target] blocks [user]'s shoving attempt!</span>")
|
||||
return FALSE
|
||||
if(attacker_style && attacker_style.disarm_act(user,target))
|
||||
return TRUE
|
||||
if(user.resting)
|
||||
return FALSE
|
||||
else
|
||||
if(user == target)
|
||||
return
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_DISARM)
|
||||
user.adjustStaminaLossBuffered(4)
|
||||
playsound(target, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1)
|
||||
|
||||
if(target.w_uniform)
|
||||
target.w_uniform.add_fingerprint(user)
|
||||
SEND_SIGNAL(target, COMSIG_HUMAN_DISARM_HIT, user, user.zone_selected)
|
||||
|
||||
if(!target.resting)
|
||||
target.adjustStaminaLoss(5)
|
||||
|
||||
if(target.is_shove_knockdown_blocked())
|
||||
return
|
||||
|
||||
var/turf/target_oldturf = target.loc
|
||||
var/shove_dir = get_dir(user.loc, target_oldturf)
|
||||
var/turf/target_shove_turf = get_step(target.loc, shove_dir)
|
||||
var/mob/living/carbon/human/target_collateral_human
|
||||
var/shove_blocked = FALSE //Used to check if a shove is blocked so that if it is knockdown logic can be applied
|
||||
|
||||
//Thank you based whoneedsspace
|
||||
target_collateral_human = locate(/mob/living/carbon/human) in target_shove_turf.contents
|
||||
if(target_collateral_human && !target_collateral_human.resting)
|
||||
shove_blocked = TRUE
|
||||
else
|
||||
target_collateral_human = null
|
||||
target.Move(target_shove_turf, shove_dir)
|
||||
if(get_turf(target) == target_oldturf)
|
||||
shove_blocked = TRUE
|
||||
|
||||
if(shove_blocked && !target.buckled)
|
||||
var/directional_blocked = !target.Adjacent(target_shove_turf)
|
||||
var/targetatrest = target.resting
|
||||
if((directional_blocked || !(target_collateral_human || target_shove_turf.shove_act(target, user))) && !targetatrest)
|
||||
target.Knockdown(SHOVE_KNOCKDOWN_SOLID)
|
||||
user.visible_message("<span class='danger'>[user.name] shoves [target.name], knocking them down!</span>",
|
||||
"<span class='danger'>You shove [target.name], knocking them down!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
log_combat(user, target, "shoved", "knocking them down")
|
||||
else if(target_collateral_human && !targetatrest)
|
||||
target.Knockdown(SHOVE_KNOCKDOWN_HUMAN)
|
||||
target_collateral_human.Knockdown(SHOVE_KNOCKDOWN_COLLATERAL)
|
||||
user.visible_message("<span class='danger'>[user.name] shoves [target.name] into [target_collateral_human.name]!</span>",
|
||||
"<span class='danger'>You shove [target.name] into [target_collateral_human.name]!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
log_combat(user, target, "shoved", "into [target_collateral_human.name]")
|
||||
|
||||
else
|
||||
user.visible_message("<span class='danger'>[user.name] shoves [target.name]!</span>",
|
||||
"<span class='danger'>You shove [target.name]!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
var/target_held_item = target.get_active_held_item()
|
||||
var/knocked_item = FALSE
|
||||
if(!is_type_in_typecache(target_held_item, GLOB.shove_disarming_types))
|
||||
target_held_item = null
|
||||
if(!target.has_movespeed_modifier(SHOVE_SLOWDOWN_ID))
|
||||
target.add_movespeed_modifier(SHOVE_SLOWDOWN_ID, multiplicative_slowdown = SHOVE_SLOWDOWN_STRENGTH)
|
||||
if(target_held_item)
|
||||
target.visible_message("<span class='danger'>[target.name]'s grip on \the [target_held_item] loosens!</span>",
|
||||
"<span class='danger'>Your grip on \the [target_held_item] loosens!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
addtimer(CALLBACK(target, /mob/living/carbon/human/proc/clear_shove_slowdown), SHOVE_SLOWDOWN_LENGTH)
|
||||
else if(target_held_item)
|
||||
target.dropItemToGround(target_held_item)
|
||||
knocked_item = TRUE
|
||||
target.visible_message("<span class='danger'>[target.name] drops \the [target_held_item]!!</span>",
|
||||
"<span class='danger'>You drop \the [target_held_item]!!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
var/append_message = ""
|
||||
if(target_held_item)
|
||||
if(knocked_item)
|
||||
append_message = "causing them to drop [target_held_item]"
|
||||
else
|
||||
append_message = "loosening their grip on [target_held_item]"
|
||||
log_combat(user, target, "shoved", append_message)
|
||||
|
||||
/datum/species/proc/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked, mob/living/carbon/human/H)
|
||||
var/hit_percent = (100-(blocked+armor))/100
|
||||
hit_percent = (hit_percent * (100-H.physiology.damage_resistance))/100
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
/datum/species/insect
|
||||
name = "Anthromorphic Insect"
|
||||
id = "insect"
|
||||
say_mod = "flutters"
|
||||
default_color = "00FF00"
|
||||
species_traits = list(LIPS,NOEYES,HAIR,FACEHAIR,MUTCOLORS,HORNCOLOR)
|
||||
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG)
|
||||
mutant_bodyparts = list("mam_ears", "mam_snout", "mam_tail", "taur", "insect_wings", "mam_snouts", "insect_fluff","horns")
|
||||
default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None",
|
||||
"insect_wings" = "None", "insect_fluff" = "None", "mam_snouts" = "None", "taur" = "None","horns" = "None")
|
||||
attack_verb = "slash"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/insect
|
||||
liked_food = VEGETABLES | DAIRY
|
||||
disliked_food = FRUIT | GROSS
|
||||
toxic_food = MEAT | RAW
|
||||
mutanteyes = /obj/item/organ/eyes/insect
|
||||
should_draw_citadel = TRUE
|
||||
|
||||
/datum/species/insect/on_species_gain(mob/living/carbon/C)
|
||||
. = ..()
|
||||
if(ishuman(C))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(!H.dna.features["insect_wings"])
|
||||
H.dna.features["insect_wings"] = "[(H.client && H.client.prefs && LAZYLEN(H.client.prefs.features) && H.client.prefs.features["insect_wings"]) ? H.client.prefs.features["insect_wings"] : "None"]"
|
||||
handle_mutant_bodyparts(H)
|
||||
|
||||
/datum/species/insect/random_name(gender,unique,lastname)
|
||||
if(unique)
|
||||
return random_unique_moth_name()
|
||||
|
||||
var/randname = moth_name()
|
||||
|
||||
if(lastname)
|
||||
randname += " [lastname]"
|
||||
|
||||
return randname
|
||||
|
||||
/datum/species/insect/handle_fire(mob/living/carbon/human/H, no_protection = FALSE)
|
||||
..()
|
||||
if(H.dna.features["insect_wings"] != "Burnt Off" && H.dna.features["insect_wings"] != "None" && H.bodytemperature >= 800 && H.fire_stacks > 0) //do not go into the extremely hot light. you will not survive
|
||||
to_chat(H, "<span class='danger'>Your precious wings burn to a crisp!</span>")
|
||||
if(H.dna.features["insect_wings"] != "None")
|
||||
H.dna.features["insect_wings"] = "Burnt Off"
|
||||
handle_mutant_bodyparts(H)
|
||||
|
||||
/datum/species/insect/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
if(chem.id == "pestkiller")
|
||||
H.adjustToxLoss(3)
|
||||
H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM)
|
||||
|
||||
/datum/species/insect/check_weakness(obj/item/weapon, mob/living/attacker)
|
||||
if(istype(weapon, /obj/item/melee/flyswatter))
|
||||
return 9 //flyswatters deal 10x damage to insects
|
||||
return 0
|
||||
|
||||
/datum/species/insect/space_move(mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
if(H.loc && !isspaceturf(H.loc) && (H.dna.features["insect_wings"] != "Burnt Off" && H.dna.features["insect_wings"] != "None"))
|
||||
var/datum/gas_mixture/current = H.loc.return_air()
|
||||
if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible
|
||||
return TRUE
|
||||
@@ -16,5 +16,5 @@
|
||||
blacklisted = 1
|
||||
use_skintones = 0
|
||||
species_traits = list(NOBLOOD,EYECOLOR,NOGENITALS)
|
||||
inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
|
||||
inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER)
|
||||
sexes = 0
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/species/fly
|
||||
name = "Flyperson"
|
||||
name = "Anthromorphic Fly"
|
||||
id = "fly"
|
||||
say_mod = "buzzes"
|
||||
species_traits = list(NOEYES)
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
/datum/species/mammal
|
||||
name = "Anthromorph"
|
||||
id = "mammal"
|
||||
default_color = "4B4B4B"
|
||||
should_draw_citadel = TRUE
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,HORNCOLOR)
|
||||
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
|
||||
mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "mam_snouts", "taur", "horns", "legs")
|
||||
default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky",
|
||||
"mam_body_markings" = "Husky", "taur" = "None", "horns" = "None", "legs" = "Plantigrade", "meat_type" = "Mammalian")
|
||||
attack_verb = "claw"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/mammal
|
||||
liked_food = MEAT | FRIED
|
||||
disliked_food = TOXIC
|
||||
|
||||
//Curiosity killed the cat's wagging tail.
|
||||
/datum/species/mammal/spec_death(gibbed, mob/living/carbon/human/H)
|
||||
if(H)
|
||||
stop_wagging_tail(H)
|
||||
|
||||
/datum/species/mammal/spec_stun(mob/living/carbon/human/H,amount)
|
||||
if(H)
|
||||
stop_wagging_tail(H)
|
||||
. = ..()
|
||||
|
||||
/datum/species/mammal/can_wag_tail(mob/living/carbon/human/H)
|
||||
return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
/datum/species/mammal/is_wagging_tail(mob/living/carbon/human/H)
|
||||
return ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
/datum/species/mammal/start_wagging_tail(mob/living/carbon/human/H)
|
||||
if("mam_tail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_tail"
|
||||
mutant_bodyparts |= "mam_waggingtail"
|
||||
H.update_body()
|
||||
|
||||
/datum/species/mammal/stop_wagging_tail(mob/living/carbon/human/H)
|
||||
if("mam_waggingtail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_waggingtail"
|
||||
mutant_bodyparts |= "mam_tail"
|
||||
H.update_body()
|
||||
|
||||
|
||||
/datum/species/mammal/qualifies_for_rank(rank, list/features)
|
||||
return TRUE
|
||||
|
||||
|
||||
//Alien//
|
||||
/datum/species/xeno
|
||||
// A cloning mistake, crossing human and xenomorph DNA
|
||||
name = "Xenomorph Hybrid"
|
||||
id = "xeno"
|
||||
say_mod = "hisses"
|
||||
default_color = "00FF00"
|
||||
should_draw_citadel = TRUE
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS)
|
||||
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
|
||||
mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "mam_body_markings", "taur", "legs")
|
||||
default_features = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade")
|
||||
attack_verb = "slash"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/xeno
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/xeno
|
||||
exotic_bloodtype = "L"
|
||||
damage_overlay_type = "xeno"
|
||||
liked_food = MEAT
|
||||
|
||||
/datum/species/xeno/on_species_gain(mob/living/carbon/human/C, datum/species/old_species)
|
||||
if(("legs" in C.dna.species.mutant_bodyparts) && (C.dna.features["legs"] == "Digitigrade" || C.dna.features["legs"] == "Avian"))
|
||||
species_traits += DIGITIGRADE
|
||||
if(DIGITIGRADE in species_traits)
|
||||
C.Digitigrade_Leg_Swap(FALSE)
|
||||
. = ..()
|
||||
|
||||
/datum/species/xeno/on_species_loss(mob/living/carbon/human/C, datum/species/new_species)
|
||||
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Plantigrade")
|
||||
species_traits -= DIGITIGRADE
|
||||
if(DIGITIGRADE in species_traits)
|
||||
C.Digitigrade_Leg_Swap(TRUE)
|
||||
. = ..()
|
||||
|
||||
//Praise the Omnissiah, A challange worthy of my skills - HS
|
||||
|
||||
//EXOTIC//
|
||||
//These races will likely include lots of downsides and upsides. Keep them relatively balanced.//
|
||||
|
||||
//misc
|
||||
/mob/living/carbon/human/dummy
|
||||
no_vore = TRUE
|
||||
|
||||
/mob/living/carbon/human/vore
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
feeding = TRUE
|
||||
@@ -45,7 +45,7 @@
|
||||
return golem_name
|
||||
|
||||
/datum/species/golem/random
|
||||
name = "Random Golem"
|
||||
name = "Golem Mutant"
|
||||
blacklisted = FALSE
|
||||
dangerous_existence = FALSE
|
||||
var/static/list/random_golem_types
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
/datum/species/ipc
|
||||
name = "I.P.C."
|
||||
id = "ipc"
|
||||
say_mod = "beeps"
|
||||
default_color = "00FF00"
|
||||
should_draw_citadel = TRUE
|
||||
blacklisted = 0
|
||||
sexes = 0
|
||||
species_traits = list(MUTCOLORS,NOEYES,NOTRANSSTING)
|
||||
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
|
||||
mutant_bodyparts = list("ipc_screen", "ipc_antenna")
|
||||
default_features = list("ipc_screen" = "Blank", "ipc_antenna" = "None")
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc
|
||||
mutanttongue = /obj/item/organ/tongue/robot/ipc
|
||||
|
||||
exotic_blood = "oil"
|
||||
|
||||
var/datum/action/innate/monitor_change/screen
|
||||
|
||||
/datum/species/ipc/on_species_gain(mob/living/carbon/human/C)
|
||||
if(isipcperson(C) && !screen)
|
||||
screen = new
|
||||
screen.Grant(C)
|
||||
..()
|
||||
|
||||
/datum/species/ipc/on_species_loss(mob/living/carbon/human/C)
|
||||
if(screen)
|
||||
screen.Remove(C)
|
||||
..()
|
||||
|
||||
/datum/action/innate/monitor_change
|
||||
name = "Screen Change"
|
||||
check_flags = AB_CHECK_CONSCIOUS
|
||||
icon_icon = 'icons/mob/actions/actions_silicon.dmi'
|
||||
button_icon_state = "drone_vision"
|
||||
|
||||
/datum/action/innate/monitor_change/Activate()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
var/new_ipc_screen = input(usr, "Choose your character's screen:", "Monitor Display") as null|anything in GLOB.ipc_screens_list
|
||||
if(!new_ipc_screen)
|
||||
return
|
||||
H.dna.features["ipc_screen"] = new_ipc_screen
|
||||
H.update_body()
|
||||
@@ -118,7 +118,7 @@
|
||||
//Slime people are able to split like slimes, retaining a single mind that can swap between bodies at will, even after death.
|
||||
|
||||
/datum/species/jelly/slime
|
||||
name = "Slimeperson"
|
||||
name = "Xenobiological Slime Entity"
|
||||
id = "slime"
|
||||
default_color = "00FFFF"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD)
|
||||
@@ -389,12 +389,268 @@
|
||||
"<span class='notice'>...and move this one instead.</span>")
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////Round Start Slimes///////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/species/jelly/roundstartslime
|
||||
name = "Xenobiological Slime Hybrid"
|
||||
id = "slimeperson"
|
||||
limbs_id = "slime"
|
||||
default_color = "00FFFF"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD)
|
||||
inherent_traits = list(TRAIT_TOXINLOVER)
|
||||
mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "mam_snouts", "taur")
|
||||
default_features = list("mcolor" = "FFF", "mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None", "mam_body_markings" = "Plain", "mam_snouts" = "None", "taur" = "None")
|
||||
say_mod = "says"
|
||||
hair_color = "mutcolor"
|
||||
hair_alpha = 160 //a notch brighter so it blends better.
|
||||
coldmod = 3
|
||||
heatmod = 1
|
||||
burnmod = 1
|
||||
|
||||
/datum/species/jelly/roundstartslime/spec_death(gibbed, mob/living/carbon/human/H)
|
||||
if(H)
|
||||
stop_wagging_tail(H)
|
||||
|
||||
/datum/species/jelly/roundstartslime/spec_stun(mob/living/carbon/human/H,amount)
|
||||
if(H)
|
||||
stop_wagging_tail(H)
|
||||
. = ..()
|
||||
|
||||
/datum/species/jelly/roundstartslime/can_wag_tail(mob/living/carbon/human/H)
|
||||
return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
/datum/species/jelly/roundstartslime/is_wagging_tail(mob/living/carbon/human/H)
|
||||
return ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
/datum/species/jelly/roundstartslime/start_wagging_tail(mob/living/carbon/human/H)
|
||||
if("mam_tail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_tail"
|
||||
mutant_bodyparts |= "mam_waggingtail"
|
||||
H.update_body()
|
||||
|
||||
/datum/species/jelly/roundstartslime/stop_wagging_tail(mob/living/carbon/human/H)
|
||||
if("mam_waggingtail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_waggingtail"
|
||||
mutant_bodyparts |= "mam_tail"
|
||||
H.update_body()
|
||||
|
||||
|
||||
/datum/action/innate/slime_change
|
||||
name = "Alter Form"
|
||||
check_flags = AB_CHECK_CONSCIOUS
|
||||
button_icon_state = "alter_form" //placeholder
|
||||
icon_icon = 'modular_citadel/icons/mob/actions/actions_slime.dmi'
|
||||
background_icon_state = "bg_alien"
|
||||
|
||||
/datum/action/innate/slime_change/Activate()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(!isjellyperson(H))
|
||||
return
|
||||
else
|
||||
H.visible_message("<span class='notice'>[owner] gains a look of \
|
||||
concentration while standing perfectly still.\
|
||||
Their body seems to shift and starts getting more goo-like.</span>",
|
||||
"<span class='notice'>You focus intently on altering your body while \
|
||||
standing perfectly still...</span>")
|
||||
change_form()
|
||||
|
||||
/datum/action/innate/slime_change/proc/change_form()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Hair Style", "Genitals", "Tail", "Snout", "Markings", "Ears", "Taur body", "Penis", "Vagina", "Penis Length", "Breast Size", "Breast Shape", "Cancel")
|
||||
if(select_alteration == "Hair Style")
|
||||
if(H.gender == MALE)
|
||||
var/new_style = input(owner, "Select a facial hair style", "Hair Alterations") as null|anything in GLOB.facial_hair_styles_list
|
||||
if(new_style)
|
||||
H.facial_hair_style = new_style
|
||||
else
|
||||
H.facial_hair_style = "Shaved"
|
||||
//handle normal hair
|
||||
var/new_style = input(owner, "Select a hair style", "Hair Alterations") as null|anything in GLOB.hair_styles_list
|
||||
if(new_style)
|
||||
H.hair_style = new_style
|
||||
H.update_hair()
|
||||
else if (select_alteration == "Genitals")
|
||||
var/list/organs = list()
|
||||
var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") in list("add sexual organ", "remove sexual organ", "cancel")
|
||||
switch(operation)
|
||||
if("add sexual organ")
|
||||
var/new_organ = input("Select sexual organ:", "Organ Manipulation") in list("Penis", "Testicles", "Breasts", "Vagina", "Womb", "Cancel")
|
||||
if(new_organ == "Penis")
|
||||
H.give_penis()
|
||||
else if(new_organ == "Testicles")
|
||||
H.give_balls()
|
||||
else if(new_organ == "Breasts")
|
||||
H.give_breasts()
|
||||
else if(new_organ == "Vagina")
|
||||
H.give_vagina()
|
||||
else if(new_organ == "Womb")
|
||||
H.give_womb()
|
||||
else
|
||||
return
|
||||
if("remove sexual organ")
|
||||
for(var/obj/item/organ/genital/X in H.internal_organs)
|
||||
var/obj/item/organ/I = X
|
||||
organs["[I.name] ([I.type])"] = I
|
||||
var/obj/item/organ = input("Select sexual organ:", "Organ Manipulation", null) in organs
|
||||
organ = organs[organ]
|
||||
if(!organ)
|
||||
return
|
||||
var/obj/item/organ/genital/O
|
||||
if(isorgan(organ))
|
||||
O = organ
|
||||
O.Remove(H)
|
||||
organ.forceMove(get_turf(H))
|
||||
qdel(organ)
|
||||
H.update_genitals()
|
||||
|
||||
else if (select_alteration == "Ears")
|
||||
var/list/snowflake_ears_list = list("Normal" = null)
|
||||
for(var/path in GLOB.mam_ears_list)
|
||||
var/datum/sprite_accessory/mam_ears/instance = GLOB.mam_ears_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
|
||||
snowflake_ears_list[S.name] = path
|
||||
var/new_ears
|
||||
new_ears = input(owner, "Choose your character's ears:", "Ear Alteration") as null|anything in snowflake_ears_list
|
||||
if(new_ears)
|
||||
H.dna.features["mam_ears"] = new_ears
|
||||
H.update_body()
|
||||
|
||||
else if (select_alteration == "Snout")
|
||||
var/list/snowflake_snouts_list = list("Normal" = null)
|
||||
for(var/path in GLOB.mam_snouts_list)
|
||||
var/datum/sprite_accessory/mam_snouts/instance = GLOB.mam_snouts_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
|
||||
snowflake_snouts_list[S.name] = path
|
||||
var/new_snout
|
||||
new_snout = input(owner, "Choose your character's face:", "Face Alteration") as null|anything in snowflake_snouts_list
|
||||
if(new_snout)
|
||||
H.dna.features["mam_snouts"] = new_snout
|
||||
H.update_body()
|
||||
|
||||
else if (select_alteration == "Markings")
|
||||
var/list/snowflake_markings_list = list()
|
||||
for(var/path in GLOB.mam_body_markings_list)
|
||||
var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
|
||||
snowflake_markings_list[S.name] = path
|
||||
var/new_mam_body_markings
|
||||
new_mam_body_markings = input(H, "Choose your character's body markings:", "Marking Alteration") as null|anything in snowflake_markings_list
|
||||
if(new_mam_body_markings)
|
||||
H.dna.features["mam_body_markings"] = new_mam_body_markings
|
||||
if(new_mam_body_markings == "None")
|
||||
H.dna.features["mam_body_markings"] = "Plain"
|
||||
for(var/X in H.bodyparts) //propagates the markings changes
|
||||
var/obj/item/bodypart/BP = X
|
||||
BP.update_limb(FALSE, H)
|
||||
H.update_body()
|
||||
|
||||
else if (select_alteration == "Tail")
|
||||
var/list/snowflake_tails_list = list("Normal" = null)
|
||||
for(var/path in GLOB.mam_tails_list)
|
||||
var/datum/sprite_accessory/mam_tails/instance = GLOB.mam_tails_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
|
||||
snowflake_tails_list[S.name] = path
|
||||
var/new_tail
|
||||
new_tail = input(owner, "Choose your character's Tail(s):", "Tail Alteration") as null|anything in snowflake_tails_list
|
||||
if(new_tail)
|
||||
H.dna.features["mam_tail"] = new_tail
|
||||
if(new_tail != "None")
|
||||
H.dna.features["taur"] = "None"
|
||||
H.update_body()
|
||||
|
||||
else if (select_alteration == "Taur body")
|
||||
var/list/snowflake_taur_list = list("Normal" = null)
|
||||
for(var/path in GLOB.taur_list)
|
||||
var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
|
||||
snowflake_taur_list[S.name] = path
|
||||
var/new_taur
|
||||
new_taur = input(owner, "Choose your character's tauric body:", "Tauric Alteration") as null|anything in snowflake_taur_list
|
||||
if(new_taur)
|
||||
H.dna.features["taur"] = new_taur
|
||||
if(new_taur != "None")
|
||||
H.dna.features["mam_tail"] = "None"
|
||||
H.update_body()
|
||||
|
||||
else if (select_alteration == "Penis")
|
||||
for(var/obj/item/organ/genital/penis/X in H.internal_organs)
|
||||
qdel(X)
|
||||
var/new_shape
|
||||
new_shape = input(owner, "Choose your character's dong", "Genital Alteration") as null|anything in GLOB.cock_shapes_list
|
||||
if(new_shape)
|
||||
H.dna.features["cock_shape"] = new_shape
|
||||
H.update_genitals()
|
||||
H.give_balls()
|
||||
H.give_penis()
|
||||
H.apply_overlay()
|
||||
|
||||
|
||||
else if (select_alteration == "Vagina")
|
||||
for(var/obj/item/organ/genital/vagina/X in H.internal_organs)
|
||||
qdel(X)
|
||||
var/new_shape
|
||||
new_shape = input(owner, "Choose your character's pussy", "Genital Alteration") as null|anything in GLOB.vagina_shapes_list
|
||||
if(new_shape)
|
||||
H.dna.features["vag_shape"] = new_shape
|
||||
H.update_genitals()
|
||||
H.give_womb()
|
||||
H.give_vagina()
|
||||
H.apply_overlay()
|
||||
|
||||
else if (select_alteration == "Penis Length")
|
||||
for(var/obj/item/organ/genital/penis/X in H.internal_organs)
|
||||
qdel(X)
|
||||
var/new_length
|
||||
new_length = input(owner, "Penis length in inches:\n([COCK_SIZE_MIN]-[COCK_SIZE_MAX])", "Genital Alteration") as num|null
|
||||
if(new_length)
|
||||
H.dna.features["cock_length"] = max(min( round(text2num(new_length)), COCK_SIZE_MAX),COCK_SIZE_MIN)
|
||||
H.update_genitals()
|
||||
H.apply_overlay()
|
||||
H.give_balls()
|
||||
H.give_penis()
|
||||
|
||||
else if (select_alteration == "Breast Size")
|
||||
for(var/obj/item/organ/genital/breasts/X in H.internal_organs)
|
||||
qdel(X)
|
||||
var/new_size
|
||||
new_size = input(owner, "Breast Size", "Genital Alteration") as null|anything in GLOB.breasts_size_list
|
||||
if(new_size)
|
||||
H.dna.features["breasts_size"] = new_size
|
||||
H.update_genitals()
|
||||
H.apply_overlay()
|
||||
H.give_breasts()
|
||||
|
||||
else if (select_alteration == "Breast Shape")
|
||||
for(var/obj/item/organ/genital/breasts/X in H.internal_organs)
|
||||
qdel(X)
|
||||
var/new_shape
|
||||
new_shape = input(owner, "Breast Shape", "Genital Alteration") as null|anything in GLOB.breasts_shapes_list
|
||||
if(new_shape)
|
||||
H.dna.features["breasts_shape"] = new_shape
|
||||
H.update_genitals()
|
||||
H.apply_overlay()
|
||||
H.give_breasts()
|
||||
|
||||
else
|
||||
return
|
||||
|
||||
|
||||
///////////////////////////////////LUMINESCENTS//////////////////////////////////////////
|
||||
|
||||
//Luminescents are able to consume and use slime extracts, without them decaying.
|
||||
|
||||
/datum/species/jelly/luminescent
|
||||
name = "Luminescent"
|
||||
name = "Luminescent Slime Entity"
|
||||
id = "lum"
|
||||
say_mod = "says"
|
||||
var/glow_intensity = LUMINESCENT_DEFAULT_GLOW
|
||||
@@ -561,7 +817,7 @@
|
||||
//Stargazers are the telepathic branch of jellypeople, able to project psychic messages and to link minds with willing participants.
|
||||
|
||||
/datum/species/jelly/stargazer
|
||||
name = "Stargazer"
|
||||
name = "Stargazer Slime Entity"
|
||||
id = "stargazer"
|
||||
var/datum/action/innate/project_thought/project_thought
|
||||
var/datum/action/innate/link_minds/link_minds
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
/datum/species/lizard
|
||||
// Reptilian humanoids with scaled skin and tails.
|
||||
name = "Lizardperson"
|
||||
name = "Anthromorphic Lizard"
|
||||
id = "lizard"
|
||||
say_mod = "hisses"
|
||||
default_color = "00FF00"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,LIPS)
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,LIPS,HORNCOLOR)
|
||||
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_REPTILE)
|
||||
mutant_bodyparts = list("tail_lizard", "snout", "spines", "horns", "frills", "body_markings", "legs", "taur")
|
||||
mutanttongue = /obj/item/organ/tongue/lizard
|
||||
mutanttail = /obj/item/organ/tail/lizard
|
||||
coldmod = 1.5
|
||||
heatmod = 0.67
|
||||
default_features = list("mcolor" = "0F0", "mcolor2" = "0F0", "mcolor3" = "0F0", "tail_lizard" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Normal Legs", "taur" = "None")
|
||||
default_features = list("mcolor" = "0F0", "mcolor2" = "0F0", "mcolor3" = "0F0", "tail_lizard" = "Smooth", "snout" = "Round",
|
||||
"horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None",
|
||||
"legs" = "Digitigrade", "taur" = "None")
|
||||
attack_verb = "slash"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
@@ -71,14 +73,14 @@
|
||||
H.update_body()
|
||||
|
||||
/datum/species/lizard/on_species_gain(mob/living/carbon/human/C, datum/species/old_species)
|
||||
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs")
|
||||
if(("legs" in C.dna.species.mutant_bodyparts) && (C.dna.features["legs"] == "Digitigrade" || C.dna.features["legs"] == "Avian"))
|
||||
species_traits += DIGITIGRADE
|
||||
if(DIGITIGRADE in species_traits)
|
||||
C.Digitigrade_Leg_Swap(FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/species/lizard/on_species_loss(mob/living/carbon/human/C, datum/species/new_species)
|
||||
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Normal Legs")
|
||||
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Plantigrade")
|
||||
species_traits -= DIGITIGRADE
|
||||
if(DIGITIGRADE in species_traits)
|
||||
C.Digitigrade_Leg_Swap(TRUE)
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
/datum/species/moth
|
||||
name = "Mothman"
|
||||
id = "moth"
|
||||
say_mod = "flutters"
|
||||
default_color = "00FF00"
|
||||
species_traits = list(LIPS, NOEYES)
|
||||
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG)
|
||||
mutant_bodyparts = list("moth_wings")
|
||||
default_features = list("moth_wings" = "Plain")
|
||||
attack_verb = "slash"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/moth
|
||||
liked_food = VEGETABLES | DAIRY
|
||||
disliked_food = FRUIT | GROSS
|
||||
toxic_food = MEAT | RAW
|
||||
mutanteyes = /obj/item/organ/eyes/moth
|
||||
|
||||
/datum/species/moth/on_species_gain(mob/living/carbon/C)
|
||||
. = ..()
|
||||
if(ishuman(C))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(!H.dna.features["moth_wings"])
|
||||
H.dna.features["moth_wings"] = "[(H.client && H.client.prefs && LAZYLEN(H.client.prefs.features) && H.client.prefs.features["moth_wings"]) ? H.client.prefs.features["moth_wings"] : "Plain"]"
|
||||
handle_mutant_bodyparts(H)
|
||||
|
||||
/datum/species/moth/random_name(gender,unique,lastname)
|
||||
if(unique)
|
||||
return random_unique_moth_name()
|
||||
|
||||
var/randname = moth_name()
|
||||
|
||||
if(lastname)
|
||||
randname += " [lastname]"
|
||||
|
||||
return randname
|
||||
|
||||
/datum/species/moth/handle_fire(mob/living/carbon/human/H, no_protection = FALSE)
|
||||
..()
|
||||
if(H.dna.features["moth_wings"] != "Burnt Off" && H.bodytemperature >= 800 && H.fire_stacks > 0) //do not go into the extremely hot light. you will not survive
|
||||
to_chat(H, "<span class='danger'>Your precious wings burn to a crisp!</span>")
|
||||
H.dna.features["moth_wings"] = "Burnt Off"
|
||||
handle_mutant_bodyparts(H)
|
||||
|
||||
/datum/species/moth/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
if(chem.id == "pestkiller")
|
||||
H.adjustToxLoss(3)
|
||||
H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM)
|
||||
|
||||
/datum/species/moth/check_weakness(obj/item/weapon, mob/living/attacker)
|
||||
if(istype(weapon, /obj/item/melee/flyswatter))
|
||||
return 9 //flyswatters deal 10x damage to moths
|
||||
return 0
|
||||
|
||||
/datum/species/moth/space_move(mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
if(H.loc && !isspaceturf(H.loc) && H.dna.features["moth_wings"] != "Burnt Off")
|
||||
var/datum/gas_mixture/current = H.loc.return_air()
|
||||
if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible
|
||||
return TRUE
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/species/mush //mush mush codecuck
|
||||
name = "Mushroomperson"
|
||||
name = "Anthromorphic Mushroom"
|
||||
id = "mush"
|
||||
mutant_bodyparts = list("caps")
|
||||
default_features = list("caps" = "Round")
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/datum/species/pod
|
||||
// A mutation caused by a human being ressurected in a revival pod. These regain health in light, and begin to wither in darkness.
|
||||
name = "Podperson"
|
||||
name = "Anthromorphic Plant"
|
||||
id = "pod"
|
||||
default_color = "59CE00"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR)
|
||||
@@ -71,6 +71,7 @@
|
||||
H.nutrition = min(H.nutrition+30, NUTRITION_LEVEL_FULL)
|
||||
|
||||
/datum/species/pod/pseudo_weak
|
||||
name = "Anthromorphic Plant"
|
||||
id = "podweak"
|
||||
limbs_id = "pod"
|
||||
species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,MUTCOLORS)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/datum/species/synth
|
||||
name = "Synth" //inherited from the real species, for health scanners and things
|
||||
name = "Synthetic" //inherited from the real species, for health scanners and things
|
||||
id = "synth"
|
||||
say_mod = "beep boops" //inherited from a user's real species
|
||||
sexes = 0
|
||||
species_traits = list(NOTRANSSTING,NOGENITALS,NOAROUSAL) //all of these + whatever we inherit from the real species
|
||||
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
|
||||
dangerous_existence = 1
|
||||
blacklisted = 1
|
||||
@@ -12,7 +12,7 @@
|
||||
damage_overlay_type = "synth"
|
||||
limbs_id = "synth"
|
||||
var/list/initial_species_traits = list(NOTRANSSTING) //for getting these values back for assume_disguise()
|
||||
var/list/initial_inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
var/list/initial_inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
var/disguise_fail_health = 75 //When their health gets to this level their synthflesh partially falls off
|
||||
var/datum/species/fake_species = null //a species to do most of our work for us, unless we're damaged
|
||||
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
/mob/living/carbon/human/whisper_verb(message as text)
|
||||
whisper(message)
|
||||
|
||||
/mob/living/carbon/human/whisper(message, datum/language/language=null)
|
||||
if(!IsVocal())
|
||||
return
|
||||
if(!message)
|
||||
return
|
||||
if(!language)
|
||||
language = get_default_language()
|
||||
|
||||
if(GLOB.say_disabled) //This is here to try to identify lag problems
|
||||
to_chat(usr, "<span class='danger'>Speech is currently admin-disabled.</span>")
|
||||
return
|
||||
|
||||
if(stat == DEAD)
|
||||
return
|
||||
|
||||
|
||||
message = trim(html_encode(message))
|
||||
if(!can_speak(message))
|
||||
return
|
||||
|
||||
message = "[message]"
|
||||
log_whisper("[src.name]/[src.key] : [message]")
|
||||
|
||||
if (src.client)
|
||||
if (src.client.prefs.muted & MUTE_IC)
|
||||
to_chat(src, "<span class='danger'>You cannot whisper (muted).</span>")
|
||||
return
|
||||
|
||||
log_whisper("[src.name]/[src.key] : [message]")
|
||||
|
||||
var/alt_name = get_alt_name()
|
||||
|
||||
var/whispers = "whispers"
|
||||
var/critical = InCritical()
|
||||
|
||||
// We are unconscious but not in critical, so don't allow them to whisper.
|
||||
if(stat == UNCONSCIOUS && !critical)
|
||||
return
|
||||
|
||||
// If whispering your last words, limit the whisper based on how close you are to death.
|
||||
if(critical)
|
||||
var/health_diff = round(-HEALTH_THRESHOLD_DEAD + health)
|
||||
// If we cut our message short, abruptly end it with a-..
|
||||
var/message_len = length(message)
|
||||
message = copytext(message, 1, health_diff) + "[message_len > health_diff ? "-.." : "..."]"
|
||||
message = Ellipsis(message, 10, 1)
|
||||
|
||||
message = treat_message(message)
|
||||
if(!message)
|
||||
return
|
||||
|
||||
var/list/listening_dead = list()
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
if(M.stat == DEAD && M.client && ((M.client.prefs.chat_toggles & CHAT_GHOSTWHISPER) || (get_dist(M, src) <= 7)))
|
||||
listening_dead |= M
|
||||
|
||||
var/list/listening = get_hearers_in_view(1, src)
|
||||
listening |= listening_dead
|
||||
var/list/eavesdropping = get_hearers_in_view(2, src)
|
||||
eavesdropping -= listening
|
||||
var/list/watching = hearers(5, src)
|
||||
watching -= listening
|
||||
watching -= eavesdropping
|
||||
|
||||
var/rendered
|
||||
whispers = critical ? "whispers something in [p_their()] final breath." : "whispers something."
|
||||
rendered = "<span class='game say'><span class='name'>[src.name]</span> [whispers]</span>"
|
||||
for(var/mob/M in watching)
|
||||
M.show_message(rendered, 2)
|
||||
|
||||
var/spans = list(SPAN_ITALICS)
|
||||
whispers = critical ? "whispers in [p_their()] final breath" : "whispers"
|
||||
rendered = "<span class='game say'><span class='name'>[GetVoice()]</span>[alt_name] [whispers], <span class='message'>\"[attach_spans(message, spans)]\"</span></span>"
|
||||
|
||||
for(var/atom/movable/AM in listening)
|
||||
if(istype(AM,/obj/item/radio))
|
||||
continue
|
||||
AM.Hear(rendered, src, language, message, , spans)
|
||||
|
||||
message = stars(message)
|
||||
rendered = "<span class='game say'><span class='name'>[GetVoice()]</span>[alt_name] [whispers], <span class='message'>\"[attach_spans(message, spans)]\"</span></span>"
|
||||
for(var/atom/movable/AM in eavesdropping)
|
||||
if(istype(AM,/obj/item/radio))
|
||||
continue
|
||||
AM.Hear(rendered, src, language, message, , spans)
|
||||
|
||||
if(critical) //Dying words.
|
||||
succumb()
|
||||
@@ -475,7 +475,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
|
||||
/mob/living/carbon/handle_status_effects()
|
||||
..()
|
||||
if(getStaminaLoss() && !combatmode)//CIT CHANGE - prevents stamina regen while combat mode is active
|
||||
adjustStaminaLoss(resting ? (recoveringstam ? -7.5 : -3) : -1.5)//CIT CHANGE - decreases adjuststaminaloss to stop stamina damage from being such a joke
|
||||
adjustStaminaLoss(resting ? (recoveringstam ? -7.5 : -6) : -3)//CIT CHANGE - decreases adjuststaminaloss to stop stamina damage from being such a joke
|
||||
|
||||
if(!recoveringstam && incomingstammult != 1)
|
||||
incomingstammult = max(0.01, incomingstammult)
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
var/mutable_appearance/legcuffs = mutable_appearance('icons/mob/restraints.dmi', legcuffed.item_state, -LEGCUFF_LAYER)
|
||||
legcuffs.color = legcuffed.color
|
||||
|
||||
overlays_standing[HANDCUFF_LAYER] = legcuffs
|
||||
overlays_standing[LEGCUFF_LAYER] = legcuffs
|
||||
apply_overlay(LEGCUFF_LAYER)
|
||||
throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed)
|
||||
|
||||
|
||||
@@ -287,6 +287,8 @@
|
||||
if(HAS_TRAIT(src, TRAIT_STRONG_GRABBER))
|
||||
C.grippedby(src)
|
||||
|
||||
update_pull_movespeed()
|
||||
|
||||
//mob verbs are a lot faster than object verbs
|
||||
//for more info on why this is not atom/pull, see examinate() in mob.dm
|
||||
/mob/living/verb/pulled(atom/movable/AM as mob|obj in oview(1))
|
||||
@@ -300,6 +302,7 @@
|
||||
|
||||
/mob/living/stop_pulling()
|
||||
..()
|
||||
update_pull_movespeed()
|
||||
update_pull_hud_icon()
|
||||
|
||||
/mob/living/verb/stop_pulling1()
|
||||
@@ -520,6 +523,10 @@
|
||||
|
||||
var/old_direction = dir
|
||||
var/turf/T = loc
|
||||
|
||||
if(pulling)
|
||||
update_pull_movespeed()
|
||||
|
||||
. = ..()
|
||||
|
||||
if(pulledby && moving_diagonally != FIRST_DIAG_STEP && get_dist(src, pulledby) > 1)//separated from our puller and not in the middle of a diagonal move.
|
||||
@@ -1023,6 +1030,9 @@
|
||||
stop_pulling() //CIT CHANGE - Ditto...
|
||||
else if(has_legs || ignore_legs)
|
||||
lying = 0
|
||||
if (pulledby)
|
||||
var/mob/living/L = pulledby
|
||||
L.update_pull_movespeed()
|
||||
if(buckled)
|
||||
lying = 90*buckle_lying
|
||||
else if(!lying)
|
||||
|
||||
@@ -153,7 +153,7 @@
|
||||
to_chat(user, "<span class='warning'>[src] can't be grabbed more aggressively!</span>")
|
||||
return FALSE
|
||||
|
||||
if(HAS_TRAIT(user, TRAIT_PACIFISM))
|
||||
if(user.grab_state >= GRAB_AGGRESSIVE && HAS_TRAIT(user, TRAIT_PACIFISM))
|
||||
to_chat(user, "<span class='notice'>You don't want to risk hurting [src]!</span>")
|
||||
return FALSE
|
||||
|
||||
@@ -184,11 +184,17 @@
|
||||
user.grab_state++
|
||||
switch(user.grab_state)
|
||||
if(GRAB_AGGRESSIVE)
|
||||
log_combat(user, src, "grabbed", addition="aggressive grab")
|
||||
visible_message("<span class='danger'>[user] has grabbed [src] aggressively!</span>", \
|
||||
"<span class='userdanger'>[user] has grabbed [src] aggressively!</span>")
|
||||
drop_all_held_items()
|
||||
var/add_log = ""
|
||||
if(HAS_TRAIT(user, TRAIT_PACIFISM))
|
||||
visible_message("<span class='danger'>[user] has firmly gripped [src]!</span>",
|
||||
"<span class='danger'>[user] has firmly gripped you!</span>")
|
||||
add_log = " (pacifist)"
|
||||
else
|
||||
visible_message("<span class='danger'>[user] has grabbed [src] aggressively!</span>", \
|
||||
"<span class='userdanger'>[user] has grabbed you aggressively!</span>")
|
||||
drop_all_held_items()
|
||||
stop_pulling()
|
||||
log_combat(user, src, "grabbed", addition="aggressive grab[add_log]")
|
||||
if(GRAB_NECK)
|
||||
log_combat(user, src, "grabbed", addition="neck grab")
|
||||
visible_message("<span class='danger'>[user] has grabbed [src] by the neck!</span>",\
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
see_invisible = SEE_INVISIBLE_LIVING
|
||||
sight = 0
|
||||
see_in_dark = 2
|
||||
hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,NANITE_HUD,DIAG_NANITE_FULL_HUD)
|
||||
hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,NANITE_HUD,DIAG_NANITE_FULL_HUD,RAD_HUD)
|
||||
pressure_resistance = 10
|
||||
|
||||
var/resize = 1 //Badminnery resize
|
||||
@@ -110,3 +110,5 @@
|
||||
//List of active diseases
|
||||
var/list/diseases = list() // list of all diseases in a mob
|
||||
var/list/disease_resistances = list()
|
||||
|
||||
var/drag_slowdown = TRUE //Whether the mob is slowed down when dragging another prone mob
|
||||
@@ -25,3 +25,11 @@
|
||||
add_movespeed_modifier(MOVESPEED_ID_LIVING_TURF_SPEEDMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = T.slowdown)
|
||||
else
|
||||
remove_movespeed_modifier(MOVESPEED_ID_LIVING_TURF_SPEEDMOD)
|
||||
|
||||
/mob/living/proc/update_pull_movespeed()
|
||||
if(pulling && isliving(pulling))
|
||||
var/mob/living/L = pulling
|
||||
if(drag_slowdown && L.lying && !L.buckled && grab_state < GRAB_AGGRESSIVE)
|
||||
add_movespeed_modifier(MOVESPEED_ID_PRONE_DRAGGING, multiplicative_slowdown = PULL_PRONE_SLOWDOWN)
|
||||
return
|
||||
remove_movespeed_modifier(MOVESPEED_ID_PRONE_DRAGGING)
|
||||
@@ -49,7 +49,7 @@
|
||||
else
|
||||
padloc = "(UNKNOWN)"
|
||||
src.log_talk(message, LOG_SAY, tag="HOLOPAD in [padloc]")
|
||||
send_speech(message, 7, T, "robot", language = language)
|
||||
send_speech(message, 7, T, "robot", message_language = language)
|
||||
to_chat(src, "<i><span class='game say'>Holopad transmitted, <span class='name'>[real_name]</span> <span class='message robot'>\"[message]\"</span></span></i>")
|
||||
else
|
||||
to_chat(src, "No holopad connected.")
|
||||
|
||||
@@ -1216,14 +1216,15 @@
|
||||
return
|
||||
if(incapacitated())
|
||||
return
|
||||
if(M.incapacitated())
|
||||
return
|
||||
if(module)
|
||||
if(!module.allow_riding)
|
||||
M.visible_message("<span class='boldwarning'>Unfortunately, [M] just can't seem to hold onto [src]!</span>")
|
||||
return
|
||||
if(iscarbon(M) && (!riding_datum.equip_buckle_inhands(M, 1)))
|
||||
M.visible_message("<span class='boldwarning'>[M] can't climb onto [src] because [M.p_their()] hands are full!</span>")
|
||||
if(iscarbon(M) && !M.incapacitated() && !riding_datum.equip_buckle_inhands(M, 1))
|
||||
if(M.get_num_arms() <= 0)
|
||||
M.visible_message("<span class='boldwarning'>[M] can't climb onto [src] because [M.p_they()] don't have any usable arms!</span>")
|
||||
else
|
||||
M.visible_message("<span class='boldwarning'>[M] can't climb onto [src] because [M.p_their()] hands are full!</span>")
|
||||
return
|
||||
. = ..(M, force, check_loc)
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
var/reset = 0 //if the summoner has reset the guardian already
|
||||
var/cooldown = 0
|
||||
var/mob/living/carbon/summoner
|
||||
var/range = 10 //how far from the user the spirit can be
|
||||
var/range = 13 //how far from the user the spirit can be
|
||||
var/toggle_button_type = /obj/screen/guardian/ToggleMode/Inactive //what sort of toggle button the hud uses
|
||||
var/datum/guardianname/namedatum = new/datum/guardianname()
|
||||
var/playstyle_string = "<span class='holoparasite bold'>You are a standard Guardian. You shouldn't exist!</span>"
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
//Assassin
|
||||
/mob/living/simple_animal/hostile/guardian/assassin
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
attacktext = "slashes"
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
@@ -12,7 +10,7 @@
|
||||
|
||||
toggle_button_type = /obj/screen/guardian/ToggleMode/Assassin
|
||||
var/toggle = FALSE
|
||||
var/stealthcooldown = 160
|
||||
var/stealthcooldown = 100
|
||||
var/obj/screen/alert/canstealthalert
|
||||
var/obj/screen/alert/instealthalert
|
||||
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
//Charger
|
||||
/mob/living/simple_animal/hostile/guardian/charger
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
ranged = 1 //technically
|
||||
ranged_message = "charges"
|
||||
ranged_cooldown_time = 40
|
||||
speed = -1
|
||||
damage_coeff = list(BRUTE = 0.6, BURN = 0.6, TOX = 0.6, CLONE = 0.6, STAMINA = 0, OXY = 0.6)
|
||||
playstyle_string = "<span class='holoparasite'>As a <b>charger</b> type you do medium damage, have medium damage resistance, move very fast, and can charge at a location, damaging any target hit and forcing them to drop any items they are holding.</span>"
|
||||
ranged_cooldown_time = 20
|
||||
damage_coeff = list(BRUTE = 0, BURN = 0.5, TOX = 0.5, CLONE = 0.5, STAMINA = 0, OXY = 0.5)
|
||||
playstyle_string = "<span class='holoparasite'>As a <b>charger</b> type you do medium damage, take half damage, immunity to brute damage, move very fast, and can charge at a location, damaging any target hit and forcing them to drop any items they are holding.</span>"
|
||||
magic_fluff_string = "<span class='holoparasite'>..And draw the Hunter, an alien master of rapid assault.</span>"
|
||||
tech_fluff_string = "<span class='holoparasite'>Boot sequence complete. Charge modules loaded. Holoparasite swarm online.</span>"
|
||||
carp_fluff_string = "<span class='holoparasite'>CARP CARP CARP! Caught one! It's a charger carp, that likes running at people. But it doesn't have any legs...</span>"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, CLONE = 0.75, STAMINA = 0, OXY = 0.75)
|
||||
playstyle_string = "<span class='holoparasite'>As a <b>dextrous</b> type you can hold items, store an item within yourself, and have medium damage resistance, but do low damage on attacks. Recalling and leashing will force you to drop unstored items!</span>"
|
||||
playstyle_string = "<span class='holoparasite'>As a <b>dextrous</b> type you can hold items, store an item within yourself, and take half damage, but do low damage on attacks. Recalling and leashing will force you to drop unstored items!</span>"
|
||||
magic_fluff_string = "<span class='holoparasite'>..And draw the Drone, a dextrous master of construction and repair.</span>"
|
||||
tech_fluff_string = "<span class='holoparasite'>Boot sequence complete. Dextrous combat modules loaded. Holoparasite swarm online.</span>"
|
||||
carp_fluff_string = "<span class='holoparasite'>CARP CARP CARP! You caught one! It can hold stuff in its fins, sort of.</span>"
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
//Bomb
|
||||
/mob/living/simple_animal/hostile/guardian/bomb
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
damage_coeff = list(BRUTE = 0.6, BURN = 0.6, TOX = 0.6, CLONE = 0.6, STAMINA = 0, OXY = 0.6)
|
||||
range = 13
|
||||
playstyle_string = "<span class='holoparasite'>As an <b>explosive</b> type, you have moderate close combat abilities, may explosively teleport targets on attack, and are capable of converting nearby items and objects into disguised bombs via alt click.</span>"
|
||||
playstyle_string = "<span class='holoparasite'>As an <b>explosive</b> type, you have moderate close combat abilities, take half damage, may explosively teleport targets on attack, and are capable of converting nearby items and objects into disguised bombs via alt click.</span>"
|
||||
magic_fluff_string = "<span class='holoparasite'>..And draw the Scientist, master of explosive death.</span>"
|
||||
tech_fluff_string = "<span class='holoparasite'>Boot sequence complete. Explosive modules active. Holoparasite swarm online.</span>"
|
||||
carp_fluff_string = "<span class='holoparasite'>CARP CARP CARP! Caught one! It's an explosive carp! Boom goes the fishy.</span>"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
//Fire
|
||||
/mob/living/simple_animal/hostile/guardian/fire
|
||||
a_intent = INTENT_HELP
|
||||
melee_damage_lower = 7
|
||||
melee_damage_upper = 7
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
attack_sound = 'sound/items/welder.ogg'
|
||||
attacktext = "ignites"
|
||||
damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7)
|
||||
range = 7
|
||||
playstyle_string = "<span class='holoparasite'>As a <b>chaos</b> type, you have only light damage resistance, but will ignite any enemy you bump into. In addition, your melee attacks will cause human targets to see everyone as you.</span>"
|
||||
melee_damage_type = BURN
|
||||
damage_coeff = list(BRUTE = 0.7, BURN = 0, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7)
|
||||
playstyle_string = "<span class='holoparasite'>As a <b>chaos</b> type, you take 30% damage reduction to all but burn, which you are immune to. You will ignite any enemy you bump into. in addition, your melee attacks will cause human targets to see everyone as you.</span>"
|
||||
magic_fluff_string = "<span class='holoparasite'>..And draw the Wizard, bringer of endless chaos!</span>"
|
||||
tech_fluff_string = "<span class='holoparasite'>Boot sequence complete. Crowd control modules activated. Holoparasite swarm online.</span>"
|
||||
carp_fluff_string = "<span class='holoparasite'>CARP CARP CARP! You caught one! OH GOD, EVERYTHING'S ON FIRE. Except you and the fish.</span>"
|
||||
@@ -38,6 +38,6 @@
|
||||
/mob/living/simple_animal/hostile/guardian/fire/proc/collision_ignite(AM as mob|obj)
|
||||
if(isliving(AM))
|
||||
var/mob/living/M = AM
|
||||
if(!hasmatchingsummoner(M) && M != summoner && M.fire_stacks < 7)
|
||||
M.fire_stacks = 7
|
||||
if(!hasmatchingsummoner(M) && M != summoner && M.fire_stacks < 10)
|
||||
M.fire_stacks = 10
|
||||
M.IgniteMob()
|
||||
|
||||
@@ -4,14 +4,13 @@
|
||||
layer = LYING_MOB_LAYER
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/beam
|
||||
melee_damage_lower = 7
|
||||
melee_damage_upper = 7
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
attacktext = "shocks"
|
||||
melee_damage_type = BURN
|
||||
attack_sound = 'sound/machines/defib_zap.ogg'
|
||||
damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7)
|
||||
range = 7
|
||||
playstyle_string = "<span class='holoparasite'>As a <b>lightning</b> type, you will apply lightning chains to targets on attack and have a lightning chain to your summoner. Lightning chains will shock anyone near them.</span>"
|
||||
playstyle_string = "<span class='holoparasite'>As a <b>lightning</b> type, you have 30% damage reduction, apply lightning chains to targets on attack and have a lightning chain to your summoner. Lightning chains will shock anyone near them.</span>"
|
||||
magic_fluff_string = "<span class='holoparasite'>..And draw the Tesla, a shocking, lethal source of power.</span>"
|
||||
tech_fluff_string = "<span class='holoparasite'>Boot sequence complete. Lightning modules active. Holoparasite swarm online.</span>"
|
||||
carp_fluff_string = "<span class='holoparasite'>CARP CARP CARP! Caught one! It's a lightning carp! Everyone else goes zap zap.</span>"
|
||||
@@ -31,7 +30,7 @@
|
||||
var/datum/beam/C = pick(enemychains)
|
||||
qdel(C)
|
||||
enemychains -= C
|
||||
enemychains += Beam(target, "lightning[rand(1,12)]", time=70, maxdistance=7, beam_type=/obj/effect/ebeam/chain)
|
||||
enemychains += Beam(target, "lightning[rand(1,12)]", time=70, maxdistance=13, beam_type=/obj/effect/ebeam/chain)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/beam/Destroy()
|
||||
removechains()
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
//Protector
|
||||
/mob/living/simple_animal/hostile/guardian/protector
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
range = 15 //worse for it due to how it leashes
|
||||
damage_coeff = list(BRUTE = 0.4, BURN = 0.4, TOX = 0.4, CLONE = 0.4, STAMINA = 0, OXY = 0.4)
|
||||
playstyle_string = "<span class='holoparasite'>As a <b>protector</b> type you cause your summoner to leash to you instead of you leashing to them and have two modes; Combat Mode, where you do and take medium damage, and Protection Mode, where you do and take almost no damage, but move slightly slower.</span>"
|
||||
@@ -33,9 +31,9 @@
|
||||
cooldown = world.time + 10
|
||||
if(toggle)
|
||||
cut_overlays()
|
||||
melee_damage_lower = initial(melee_damage_lower)
|
||||
melee_damage_upper = initial(melee_damage_upper)
|
||||
speed = initial(speed)
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
speed = 0
|
||||
damage_coeff = list(BRUTE = 0.4, BURN = 0.4, TOX = 0.4, CLONE = 0.4, STAMINA = 0, OXY = 0.4)
|
||||
to_chat(src, "<span class='danger'><B>You switch to combat mode.</span></B>")
|
||||
toggle = FALSE
|
||||
@@ -44,8 +42,8 @@
|
||||
if(namedatum)
|
||||
shield_overlay.color = namedatum.colour
|
||||
add_overlay(shield_overlay)
|
||||
melee_damage_lower = 2
|
||||
melee_damage_upper = 2
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 5
|
||||
speed = 1
|
||||
damage_coeff = list(BRUTE = 0.05, BURN = 0.05, TOX = 0.05, CLONE = 0.05, STAMINA = 0, OXY = 0.05) //damage? what's damage?
|
||||
to_chat(src, "<span class='danger'><B>You switch to protection mode.</span></B>")
|
||||
|
||||
@@ -16,8 +16,7 @@
|
||||
ranged_cooldown_time = 1 //fast!
|
||||
projectilesound = 'sound/effects/hit_on_shattered_glass.ogg'
|
||||
ranged = 1
|
||||
range = 13
|
||||
playstyle_string = "<span class='holoparasite'>As a <b>ranged</b> type, you have only light damage resistance, but are capable of spraying shards of crystal at incredibly high speed. You can also deploy surveillance snares to monitor enemy movement. Finally, you can switch to scout mode, in which you can't attack, but can move without limit.</span>"
|
||||
playstyle_string = "<span class='holoparasite'>As a <b>ranged</b> type, you have 10% damage reduction, but are capable of spraying shards of crystal at incredibly high speed. You can also deploy surveillance snares to monitor enemy movement. Finally, you can switch to scout mode, in which you can't attack, but can move without limit.</span>"
|
||||
magic_fluff_string = "<span class='holoparasite'>..And draw the Sentinel, an alien master of ranged combat.</span>"
|
||||
tech_fluff_string = "<span class='holoparasite'>Boot sequence complete. Ranged combat modules active. Holoparasite swarm online.</span>"
|
||||
carp_fluff_string = "<span class='holoparasite'>CARP CARP CARP! Caught one, it's a ranged carp. This fishy can watch people pee in the ocean.</span>"
|
||||
@@ -36,7 +35,7 @@
|
||||
obj_damage = initial(obj_damage)
|
||||
environment_smash = initial(environment_smash)
|
||||
alpha = 255
|
||||
range = initial(range)
|
||||
range = 13
|
||||
to_chat(src, "<span class='danger'><B>You switch to combat mode.</span></B>")
|
||||
toggle = FALSE
|
||||
else
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 20
|
||||
obj_damage = 80
|
||||
next_move_modifier = 0.8 //attacks 20% faster
|
||||
next_move_modifier = 0.5 //attacks 50% faster
|
||||
environment_smash = ENVIRONMENT_SMASH_WALLS
|
||||
playstyle_string = "<span class='holoparasite'>As a <b>standard</b> type you have no special abilities, but have a high damage resistance and a powerful attack capable of smashing through walls.</span>"
|
||||
playstyle_string = "<span class='holoparasite'>As a <b>standard</b> type you have no special abilities, but take half damage and have powerful attack capable of smashing through walls.</span>"
|
||||
magic_fluff_string = "<span class='holoparasite'>..And draw the Assistant, faceless and generic, but never to be underestimated.</span>"
|
||||
tech_fluff_string = "<span class='holoparasite'>Boot sequence complete. Standard combat modules loaded. Holoparasite swarm online.</span>"
|
||||
carp_fluff_string = "<span class='holoparasite'>CARP CARP CARP! You caught one! It's really boring and standard. Better punch some walls to ease the tension.</span>"
|
||||
|
||||
@@ -2,11 +2,8 @@
|
||||
/mob/living/simple_animal/hostile/guardian/healer
|
||||
a_intent = INTENT_HARM
|
||||
friendly = "heals"
|
||||
speed = 0
|
||||
damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7)
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
playstyle_string = "<span class='holoparasite'>As a <b>support</b> type, you may toggle your basic attacks to a healing mode. In addition, Alt-Clicking on an adjacent object or mob will warp them to your bluespace beacon after a short delay.</span>"
|
||||
playstyle_string = "<span class='holoparasite'>As a <b>support</b> type, you have 30% damage reduction and may toggle your basic attacks to a healing mode. In addition, Alt-Clicking on an adjacent object or mob will warp them to your bluespace beacon after a short delay.</span>"
|
||||
magic_fluff_string = "<span class='holoparasite'>..And draw the CMO, a potent force of life... and death.</span>"
|
||||
carp_fluff_string = "<span class='holoparasite'>CARP CARP CARP! You caught a support carp. It's a kleptocarp!</span>"
|
||||
tech_fluff_string = "<span class='holoparasite'>Boot sequence complete. Support modules active. Holoparasite swarm online.</span>"
|
||||
|
||||
@@ -540,7 +540,12 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0)
|
||||
return
|
||||
if(isAI(M))
|
||||
return
|
||||
show_inv(usr)
|
||||
|
||||
/mob/MouseDrop_T(atom/dropping, atom/user)
|
||||
. = ..()
|
||||
if(ismob(dropping) && dropping != user)
|
||||
var/mob/M = dropping
|
||||
M.show_inv(user)
|
||||
|
||||
/mob/proc/is_muzzled()
|
||||
return 0
|
||||
|
||||
Reference in New Issue
Block a user