mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-18 19:44:58 +01:00
Grep for space indentation (#54850)
#54604 atomizing Since a lot of the space indents are in lists ill atomize those later
This commit is contained in:
@@ -41,8 +41,8 @@
|
||||
return
|
||||
|
||||
/**
|
||||
* This proc generates the panel that opens to all newly joining players, allowing them to join, observe, view polls, view the current crew manifest, and open the character customization menu.
|
||||
*/
|
||||
* This proc generates the panel that opens to all newly joining players, allowing them to join, observe, view polls, view the current crew manifest, and open the character customization menu.
|
||||
*/
|
||||
/mob/dead/new_player/proc/new_player_panel()
|
||||
if (client?.interviewee)
|
||||
return
|
||||
@@ -529,11 +529,11 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Prepares a client for the interview system, and provides them with a new interview
|
||||
*
|
||||
* This proc will both prepare the user by removing all verbs from them, as well as
|
||||
* giving them the interview form and forcing it to appear.
|
||||
*/
|
||||
* Prepares a client for the interview system, and provides them with a new interview
|
||||
*
|
||||
* This proc will both prepare the user by removing all verbs from them, as well as
|
||||
* giving them the interview form and forcing it to appear.
|
||||
*/
|
||||
/mob/dead/new_player/proc/register_for_interview()
|
||||
// First we detain them by removing all the verbs they have on client
|
||||
for (var/v in client.verbs)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Shows a list of currently running polls a player can vote/has voted on
|
||||
*
|
||||
*/
|
||||
* Shows a list of currently running polls a player can vote/has voted on
|
||||
*
|
||||
*/
|
||||
/mob/dead/new_player/proc/handle_player_polling()
|
||||
var/list/output = list("<div align='center'><B>Player polls</B><hr><table>")
|
||||
var/rs = REF(src)
|
||||
@@ -14,9 +14,9 @@
|
||||
src << browse(jointext(output, ""),"window=playerpolllist;size=500x300")
|
||||
|
||||
/**
|
||||
* Redirects a player to the correct poll window based on poll type.
|
||||
*
|
||||
*/
|
||||
* Redirects a player to the correct poll window based on poll type.
|
||||
*
|
||||
*/
|
||||
/mob/dead/new_player/proc/poll_player(datum/poll_question/poll)
|
||||
if(!poll)
|
||||
return
|
||||
@@ -36,11 +36,11 @@
|
||||
poll_player_irv(poll)
|
||||
|
||||
/**
|
||||
* Shows voting window for an option type poll, listing its options and relevant details.
|
||||
*
|
||||
* If already voted on, the option a player voted for is pre-selected.
|
||||
*
|
||||
*/
|
||||
* Shows voting window for an option type poll, listing its options and relevant details.
|
||||
*
|
||||
* If already voted on, the option a player voted for is pre-selected.
|
||||
*
|
||||
*/
|
||||
/mob/dead/new_player/proc/poll_player_option(datum/poll_question/poll)
|
||||
var/datum/db_query/query_option_get_voted = SSdbcore.NewQuery({"
|
||||
SELECT optionid FROM [format_table_name("poll_vote")]
|
||||
@@ -80,11 +80,11 @@
|
||||
src << browse(jointext(output, ""),"window=playerpoll;size=500x250")
|
||||
|
||||
/**
|
||||
* Shows voting window for a text response type poll, listing its relevant details.
|
||||
*
|
||||
* If already responded to, the saved response of a player is shown.
|
||||
*
|
||||
*/
|
||||
* Shows voting window for a text response type poll, listing its relevant details.
|
||||
*
|
||||
* If already responded to, the saved response of a player is shown.
|
||||
*
|
||||
*/
|
||||
/mob/dead/new_player/proc/poll_player_text(datum/poll_question/poll)
|
||||
var/datum/db_query/query_text_get_replytext = SSdbcore.NewQuery({"
|
||||
SELECT replytext FROM [format_table_name("poll_textreply")]
|
||||
@@ -117,11 +117,11 @@
|
||||
src << browse(jointext(output, ""),"window=playerpoll;size=500x500")
|
||||
|
||||
/**
|
||||
* Shows voting window for a rating type poll, listing its options and relevant details.
|
||||
*
|
||||
* If already voted on, the options a player voted for are pre-selected.
|
||||
*
|
||||
*/
|
||||
* Shows voting window for a rating type poll, listing its options and relevant details.
|
||||
*
|
||||
* If already voted on, the options a player voted for are pre-selected.
|
||||
*
|
||||
*/
|
||||
/mob/dead/new_player/proc/poll_player_rating(datum/poll_question/poll)
|
||||
var/datum/db_query/query_rating_get_votes = SSdbcore.NewQuery({"
|
||||
SELECT optionid, rating FROM [format_table_name("poll_vote")]
|
||||
@@ -172,11 +172,11 @@
|
||||
src << browse(jointext(output, ""),"window=playerpoll;size=500x500")
|
||||
|
||||
/**
|
||||
* Shows voting window for a multiple choice type poll, listing its options and relevant details.
|
||||
*
|
||||
* If already voted on, the options a player voted for are pre-selected.
|
||||
*
|
||||
*/
|
||||
* Shows voting window for a multiple choice type poll, listing its options and relevant details.
|
||||
*
|
||||
* If already voted on, the options a player voted for are pre-selected.
|
||||
*
|
||||
*/
|
||||
/mob/dead/new_player/proc/poll_player_multi(datum/poll_question/poll)
|
||||
var/datum/db_query/query_multi_get_votes = SSdbcore.NewQuery({"
|
||||
SELECT optionid FROM [format_table_name("poll_vote")]
|
||||
@@ -216,11 +216,11 @@
|
||||
src << browse(jointext(output, ""),"window=playerpoll;size=500x300")
|
||||
|
||||
/**
|
||||
* Shows voting window for an IRV type poll, listing its options and relevant details.
|
||||
*
|
||||
* If already voted on, the options are sorted how a player voted for them, otherwise they are randomly shuffled.
|
||||
*
|
||||
*/
|
||||
* Shows voting window for an IRV type poll, listing its options and relevant details.
|
||||
*
|
||||
* If already voted on, the options are sorted how a player voted for them, otherwise they are randomly shuffled.
|
||||
*
|
||||
*/
|
||||
/mob/dead/new_player/proc/poll_player_irv(datum/poll_question/poll)
|
||||
var/datum/asset/irv_assets = get_asset_datum(/datum/asset/group/irv)
|
||||
irv_assets.send(src)
|
||||
@@ -304,13 +304,13 @@
|
||||
src << browse(jointext(output, ""),"window=playerpoll;size=500x500")
|
||||
|
||||
/**
|
||||
* Runs some poll validation before a vote is processed.
|
||||
*
|
||||
* Checks a player is who they claim to be and that a poll is actually still running.
|
||||
* Also loads the vote_id to pass onto single-option and text polls.
|
||||
* Increments the vote count when successful.
|
||||
*
|
||||
*/
|
||||
* Runs some poll validation before a vote is processed.
|
||||
*
|
||||
* Checks a player is who they claim to be and that a poll is actually still running.
|
||||
* Also loads the vote_id to pass onto single-option and text polls.
|
||||
* Increments the vote count when successful.
|
||||
*
|
||||
*/
|
||||
/mob/dead/new_player/proc/vote_on_poll_handler(datum/poll_question/poll, href_list)
|
||||
if(!SSdbcore.Connect())
|
||||
to_chat(src, "<span class='danger'>Failed to establish database connection.</span>")
|
||||
@@ -375,9 +375,9 @@
|
||||
to_chat(usr, "<span class='notice'>Vote successful.</span>")
|
||||
|
||||
/**
|
||||
* Processes vote form data and saves results to the database for an option type poll.
|
||||
*
|
||||
*/
|
||||
* Processes vote form data and saves results to the database for an option type poll.
|
||||
*
|
||||
*/
|
||||
/mob/dead/new_player/proc/vote_on_poll_option(datum/poll_question/poll, href_list, admin_rank, sql_poll_id, vote_id)
|
||||
if(!SSdbcore.Connect())
|
||||
to_chat(src, "<span class='danger'>Failed to establish database connection.</span>")
|
||||
@@ -407,9 +407,9 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Processes response form data and saves results to the database for a text response type poll.
|
||||
*
|
||||
*/
|
||||
* Processes response form data and saves results to the database for a text response type poll.
|
||||
*
|
||||
*/
|
||||
/mob/dead/new_player/proc/vote_on_poll_text(href_list, admin_rank, sql_poll_id, vote_id)
|
||||
if(!SSdbcore.Connect())
|
||||
to_chat(src, "<span class='danger'>Failed to establish database connection.</span>")
|
||||
@@ -439,9 +439,9 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Processes vote form data and saves results to the database for a rating type poll.
|
||||
*
|
||||
*/
|
||||
* Processes vote form data and saves results to the database for a rating type poll.
|
||||
*
|
||||
*/
|
||||
/mob/dead/new_player/proc/vote_on_poll_rating(datum/poll_question/poll, list/href_list, admin_rank, sql_poll_id)
|
||||
if(!SSdbcore.Connect())
|
||||
to_chat(src, "<span class='danger'>Failed to establish database connection.</span>")
|
||||
@@ -482,9 +482,9 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Processes vote form data and saves results to the database for a multiple choice type poll.
|
||||
*
|
||||
*/
|
||||
* Processes vote form data and saves results to the database for a multiple choice type poll.
|
||||
*
|
||||
*/
|
||||
/mob/dead/new_player/proc/vote_on_poll_multi(datum/poll_question/poll, list/href_list, admin_rank, sql_poll_id)
|
||||
if(!SSdbcore.Connect())
|
||||
to_chat(src, "<span class='danger'>Failed to establish database connection.</span>")
|
||||
@@ -529,9 +529,9 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Processes vote form data and saves results to the database for an IRV type poll.
|
||||
*
|
||||
*/
|
||||
* Processes vote form data and saves results to the database for an IRV type poll.
|
||||
*
|
||||
*/
|
||||
/mob/dead/new_player/proc/vote_on_poll_irv(datum/poll_question/poll, list/href_list, admin_rank, sql_poll_id)
|
||||
if(!SSdbcore.Connect())
|
||||
to_chat(src, "<span class='danger'>Failed to establish database connection.</span>")
|
||||
|
||||
@@ -276,10 +276,10 @@
|
||||
//The following functions are the same save for one small difference
|
||||
|
||||
/**
|
||||
* Used to drop an item (if it exists) to the ground.
|
||||
* * Will pass as TRUE is successfully dropped, or if there is no item to drop.
|
||||
* * Will pass FALSE if the item can not be dropped due to TRAIT_NODROP via doUnEquip()
|
||||
* If the item can be dropped, it will be forceMove()'d to the ground and the turf's Entered() will be called.
|
||||
* Used to drop an item (if it exists) to the ground.
|
||||
* * Will pass as TRUE is successfully dropped, or if there is no item to drop.
|
||||
* * Will pass FALSE if the item can not be dropped due to TRAIT_NODROP via doUnEquip()
|
||||
* If the item can be dropped, it will be forceMove()'d to the ground and the turf's Entered() will be called.
|
||||
*/
|
||||
/mob/proc/dropItemToGround(obj/item/I, force = FALSE, silent = FALSE, invdrop = TRUE)
|
||||
. = doUnEquip(I, force, drop_location(), FALSE, invdrop = invdrop, silent = silent)
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/**
|
||||
* Attempts to remove target skillchip from the brain.
|
||||
*
|
||||
* Returns whether the skillchip was removed or not.
|
||||
* If you're removing the skillchip from a mob, use the remove_skillchip proc in mob/living/carbon instead.
|
||||
* Arguments:
|
||||
* * skillchip - The skillchip you'd like to remove.
|
||||
*/
|
||||
* Attempts to remove target skillchip from the brain.
|
||||
*
|
||||
* Returns whether the skillchip was removed or not.
|
||||
* If you're removing the skillchip from a mob, use the remove_skillchip proc in mob/living/carbon instead.
|
||||
* Arguments:
|
||||
* * skillchip - The skillchip you'd like to remove.
|
||||
*/
|
||||
/obj/item/organ/brain/proc/remove_skillchip(obj/item/skillchip/skillchip, silent = FALSE)
|
||||
// Check this skillchip is in the brain.
|
||||
if(!(skillchip in skillchips))
|
||||
@@ -17,16 +17,16 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Attempts to implant target skillchip into the brain.
|
||||
*
|
||||
* Returns whether the skillchip was implanted or not.
|
||||
* If you're implanting the skillchip into a mob, use the implant_skillchip proc in mob/living/carbon instead.
|
||||
* DANGEROUS - This proc assumes you've done the appropriate checks to make sure the skillchip should be implanted.
|
||||
* Where possible, call the mob/living/carbon version of this proc which does relevant checks.
|
||||
* Arguments:
|
||||
* * skillchip - The skillchip you'd like to implant.
|
||||
* * force - Whether or not to force the skillchip to be implanted, ignoring any checks.
|
||||
*/
|
||||
* Attempts to implant target skillchip into the brain.
|
||||
*
|
||||
* Returns whether the skillchip was implanted or not.
|
||||
* If you're implanting the skillchip into a mob, use the implant_skillchip proc in mob/living/carbon instead.
|
||||
* DANGEROUS - This proc assumes you've done the appropriate checks to make sure the skillchip should be implanted.
|
||||
* Where possible, call the mob/living/carbon version of this proc which does relevant checks.
|
||||
* Arguments:
|
||||
* * skillchip - The skillchip you'd like to implant.
|
||||
* * force - Whether or not to force the skillchip to be implanted, ignoring any checks.
|
||||
*/
|
||||
/obj/item/organ/brain/proc/implant_skillchip(obj/item/skillchip/skillchip, force = FALSE)
|
||||
// If we're not forcing the implant, so let's do some checks.
|
||||
if(!force)
|
||||
@@ -43,13 +43,13 @@
|
||||
return
|
||||
|
||||
/**
|
||||
* Creates a list of assoc lists containing skillchip types and key metadata.
|
||||
*
|
||||
* Returns a complete list of new skillchip types with their metadata cloned from the brain's existing skillchip stock.
|
||||
* Rumour has it that Changelings just LOVE this proc.
|
||||
* Arguments:
|
||||
* * not_removable - Special override, whether or not to force cloned chips to be non-removable, i.e. to delete on removal.
|
||||
*/
|
||||
* Creates a list of assoc lists containing skillchip types and key metadata.
|
||||
*
|
||||
* Returns a complete list of new skillchip types with their metadata cloned from the brain's existing skillchip stock.
|
||||
* Rumour has it that Changelings just LOVE this proc.
|
||||
* Arguments:
|
||||
* * not_removable - Special override, whether or not to force cloned chips to be non-removable, i.e. to delete on removal.
|
||||
*/
|
||||
/obj/item/organ/brain/proc/clone_skillchip_list(not_removable = FALSE)
|
||||
var/list/skillchip_metadata = list()
|
||||
// Remove and call on_removal proc if successful.
|
||||
@@ -72,10 +72,10 @@
|
||||
return skillchip_metadata
|
||||
|
||||
/**
|
||||
* Destroys all skillchips in the brain, calling on_removal if the brain has an owner.
|
||||
* Arguments:
|
||||
* * silent - Whether to give the user a chat notification with the removal flavour text.
|
||||
*/
|
||||
* Destroys all skillchips in the brain, calling on_removal if the brain has an owner.
|
||||
* Arguments:
|
||||
* * silent - Whether to give the user a chat notification with the removal flavour text.
|
||||
*/
|
||||
/obj/item/organ/brain/proc/destroy_all_skillchips(silent = TRUE)
|
||||
if(!QDELETED(owner))
|
||||
for(var/chip in skillchips)
|
||||
@@ -84,8 +84,8 @@
|
||||
QDEL_LIST(skillchips)
|
||||
|
||||
/**
|
||||
* Returns the total maximum skillchip complexity supported by this brain.
|
||||
*/
|
||||
* Returns the total maximum skillchip complexity supported by this brain.
|
||||
*/
|
||||
/obj/item/organ/brain/proc/get_max_skillchip_complexity()
|
||||
if(!QDELETED(owner))
|
||||
return max_skillchip_complexity + owner.skillchip_complexity_modifier
|
||||
@@ -93,8 +93,8 @@
|
||||
return max_skillchip_complexity
|
||||
|
||||
/**
|
||||
* Returns the total current skillchip complexity used in this brain.
|
||||
*/
|
||||
* Returns the total current skillchip complexity used in this brain.
|
||||
*/
|
||||
/obj/item/organ/brain/proc/get_used_skillchip_complexity()
|
||||
var/complexity_tally = 0
|
||||
|
||||
@@ -109,14 +109,14 @@
|
||||
return complexity_tally
|
||||
|
||||
/**
|
||||
* Returns the total maximum skillchip slot capacity supported by this brain.
|
||||
*/
|
||||
* Returns the total maximum skillchip slot capacity supported by this brain.
|
||||
*/
|
||||
/obj/item/organ/brain/proc/get_max_skillchip_slots()
|
||||
return max_skillchip_slots
|
||||
|
||||
/**
|
||||
* Returns the total current skillchip slot capacity used in this brain.
|
||||
*/
|
||||
* Returns the total current skillchip slot capacity used in this brain.
|
||||
*/
|
||||
/obj/item/organ/brain/proc/get_used_skillchip_slots()
|
||||
var/slot_tally = 0
|
||||
|
||||
@@ -128,8 +128,8 @@
|
||||
return slot_tally
|
||||
|
||||
/**
|
||||
* Deactivates all chips currently in the brain.
|
||||
*/
|
||||
* Deactivates all chips currently in the brain.
|
||||
*/
|
||||
/obj/item/organ/brain/proc/activate_skillchip_failsafe(silent = TRUE)
|
||||
if(QDELETED(owner))
|
||||
return
|
||||
|
||||
@@ -1197,14 +1197,14 @@
|
||||
return total_bleed_rate
|
||||
|
||||
/**
|
||||
* generate_fake_scars()- for when you want to scar someone, but you don't want to hurt them first. These scars don't count for temporal scarring (hence, fake)
|
||||
*
|
||||
* If you want a specific wound scar, pass that wound type as the second arg, otherwise you can pass a list like WOUND_LIST_SLASH to generate a random cut scar.
|
||||
*
|
||||
* Arguments:
|
||||
* * num_scars- A number for how many scars you want to add
|
||||
* * forced_type- Which wound or category of wounds you want to choose from, WOUND_LIST_BLUNT, WOUND_LIST_SLASH, or WOUND_LIST_BURN (or some combination). If passed a list, picks randomly from the listed wounds. Defaults to all 3 types
|
||||
*/
|
||||
* generate_fake_scars()- for when you want to scar someone, but you don't want to hurt them first. These scars don't count for temporal scarring (hence, fake)
|
||||
*
|
||||
* If you want a specific wound scar, pass that wound type as the second arg, otherwise you can pass a list like WOUND_LIST_SLASH to generate a random cut scar.
|
||||
*
|
||||
* Arguments:
|
||||
* * num_scars- A number for how many scars you want to add
|
||||
* * forced_type- Which wound or category of wounds you want to choose from, WOUND_LIST_BLUNT, WOUND_LIST_SLASH, or WOUND_LIST_BURN (or some combination). If passed a list, picks randomly from the listed wounds. Defaults to all 3 types
|
||||
*/
|
||||
/mob/living/carbon/proc/generate_fake_scars(num_scars, forced_type)
|
||||
for(var/i in 1 to num_scars)
|
||||
var/datum/scar/scaries = new
|
||||
@@ -1228,10 +1228,10 @@
|
||||
return !(wear_mask?.flags_inv & HIDEFACE) && !(head?.flags_inv & HIDEFACE)
|
||||
|
||||
/**
|
||||
* get_biological_state is a helper used to see what kind of wounds we roll for. By default we just assume carbons (read:monkeys) are flesh and bone, but humans rely on their species datums
|
||||
*
|
||||
* go look at the species def for more info [/datum/species/proc/get_biological_state]
|
||||
*/
|
||||
* get_biological_state is a helper used to see what kind of wounds we roll for. By default we just assume carbons (read:monkeys) are flesh and bone, but humans rely on their species datums
|
||||
*
|
||||
* go look at the species def for more info [/datum/species/proc/get_biological_state]
|
||||
*/
|
||||
/mob/living/carbon/proc/get_biological_state()
|
||||
return BIO_FLESH_BONE
|
||||
|
||||
|
||||
@@ -114,37 +114,37 @@
|
||||
adjustStaminaLoss(diff, updating_health, forced)
|
||||
|
||||
/**
|
||||
* If an organ exists in the slot requested, and we are capable of taking damage (we don't have [GODMODE] on), call the damage proc on that organ.
|
||||
*
|
||||
* Arguments:
|
||||
* * slot - organ slot, like [ORGAN_SLOT_HEART]
|
||||
* * amount - damage to be done
|
||||
* * maximum - currently an arbitrarily large number, can be set so as to limit damage
|
||||
*/
|
||||
* If an organ exists in the slot requested, and we are capable of taking damage (we don't have [GODMODE] on), call the damage proc on that organ.
|
||||
*
|
||||
* Arguments:
|
||||
* * slot - organ slot, like [ORGAN_SLOT_HEART]
|
||||
* * amount - damage to be done
|
||||
* * maximum - currently an arbitrarily large number, can be set so as to limit damage
|
||||
*/
|
||||
/mob/living/carbon/adjustOrganLoss(slot, amount, maximum)
|
||||
var/obj/item/organ/O = getorganslot(slot)
|
||||
if(O && !(status_flags & GODMODE))
|
||||
O.applyOrganDamage(amount, maximum)
|
||||
|
||||
/**
|
||||
* If an organ exists in the slot requested, and we are capable of taking damage (we don't have [GODMODE] on), call the set damage proc on that organ, which can
|
||||
* set or clear the failing variable on that organ, making it either cease or start functions again, unlike adjustOrganLoss.
|
||||
*
|
||||
* Arguments:
|
||||
* * slot - organ slot, like [ORGAN_SLOT_HEART]
|
||||
* * amount - damage to be set to
|
||||
*/
|
||||
* If an organ exists in the slot requested, and we are capable of taking damage (we don't have [GODMODE] on), call the set damage proc on that organ, which can
|
||||
* set or clear the failing variable on that organ, making it either cease or start functions again, unlike adjustOrganLoss.
|
||||
*
|
||||
* Arguments:
|
||||
* * slot - organ slot, like [ORGAN_SLOT_HEART]
|
||||
* * amount - damage to be set to
|
||||
*/
|
||||
/mob/living/carbon/setOrganLoss(slot, amount)
|
||||
var/obj/item/organ/O = getorganslot(slot)
|
||||
if(O && !(status_flags & GODMODE))
|
||||
O.setOrganDamage(amount)
|
||||
|
||||
/**
|
||||
* If an organ exists in the slot requested, return the amount of damage that organ has
|
||||
*
|
||||
* Arguments:
|
||||
* * slot - organ slot, like [ORGAN_SLOT_HEART]
|
||||
*/
|
||||
* If an organ exists in the slot requested, return the amount of damage that organ has
|
||||
*
|
||||
* Arguments:
|
||||
* * slot - organ slot, like [ORGAN_SLOT_HEART]
|
||||
*/
|
||||
/mob/living/carbon/getOrganLoss(slot)
|
||||
var/obj/item/organ/O = getorganslot(slot)
|
||||
if(O)
|
||||
@@ -185,12 +185,12 @@
|
||||
return parts
|
||||
|
||||
/**
|
||||
* Heals ONE bodypart randomly selected from damaged ones.
|
||||
*
|
||||
* It automatically updates damage overlays if necessary
|
||||
*
|
||||
* It automatically updates health status
|
||||
*/
|
||||
* Heals ONE bodypart randomly selected from damaged ones.
|
||||
*
|
||||
* It automatically updates damage overlays if necessary
|
||||
*
|
||||
* It automatically updates health status
|
||||
*/
|
||||
/mob/living/carbon/heal_bodypart_damage(brute = 0, burn = 0, stamina = 0, updating_health = TRUE, required_status)
|
||||
var/list/obj/item/bodypart/parts = get_damaged_bodyparts(brute,burn,stamina,required_status)
|
||||
if(!parts.len)
|
||||
@@ -203,12 +203,12 @@
|
||||
|
||||
|
||||
/**
|
||||
* Damages ONE bodypart randomly selected from damagable ones.
|
||||
*
|
||||
* It automatically updates damage overlays if necessary
|
||||
*
|
||||
* It automatically updates health status
|
||||
*/
|
||||
* Damages ONE bodypart randomly selected from damagable ones.
|
||||
*
|
||||
* It automatically updates damage overlays if necessary
|
||||
*
|
||||
* It automatically updates health status
|
||||
*/
|
||||
/mob/living/carbon/take_bodypart_damage(brute = 0, burn = 0, stamina = 0, updating_health = TRUE, required_status, check_armor = FALSE, wound_bonus = 0, bare_wound_bonus = 0, sharpness = SHARP_NONE)
|
||||
var/list/obj/item/bodypart/parts = get_damageable_bodyparts(required_status)
|
||||
if(!parts.len)
|
||||
|
||||
@@ -710,10 +710,10 @@
|
||||
dropItemToGround(I)
|
||||
|
||||
/**
|
||||
* Wash the hands, cleaning either the gloves if equipped and not obscured, otherwise the hands themselves if they're not obscured.
|
||||
*
|
||||
* Returns false if we couldn't wash our hands due to them being obscured, otherwise true
|
||||
*/
|
||||
* Wash the hands, cleaning either the gloves if equipped and not obscured, otherwise the hands themselves if they're not obscured.
|
||||
*
|
||||
* Returns false if we couldn't wash our hands due to them being obscured, otherwise true
|
||||
*/
|
||||
/mob/living/carbon/human/proc/wash_hands(clean_types)
|
||||
var/obscured = check_obscured_slots()
|
||||
if(obscured & ITEM_SLOT_GLOVES)
|
||||
@@ -729,8 +729,8 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Cleans the lips of any lipstick. Returns TRUE if the lips had any lipstick and was thus cleaned
|
||||
*/
|
||||
* Cleans the lips of any lipstick. Returns TRUE if the lips had any lipstick and was thus cleaned
|
||||
*/
|
||||
/mob/living/carbon/human/proc/clean_lips()
|
||||
if(isnull(lip_style) && lip_color == initial(lip_color))
|
||||
return FALSE
|
||||
@@ -740,8 +740,8 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Called on the COMSIG_COMPONENT_CLEAN_FACE_ACT signal
|
||||
*/
|
||||
* Called on the COMSIG_COMPONENT_CLEAN_FACE_ACT signal
|
||||
*/
|
||||
/mob/living/carbon/human/proc/clean_face(datum/source, clean_types)
|
||||
if(!is_mouth_covered() && clean_lips())
|
||||
. = TRUE
|
||||
@@ -756,8 +756,8 @@
|
||||
. = TRUE
|
||||
|
||||
/**
|
||||
* Called when this human should be washed
|
||||
*/
|
||||
* Called when this human should be washed
|
||||
*/
|
||||
/mob/living/carbon/human/wash(clean_types)
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
var/final_block_chance = wear_neck.block_chance - (clamp((armour_penetration-wear_neck.armour_penetration)/2,0,100)) + block_chance_modifier
|
||||
if(wear_neck.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type))
|
||||
return TRUE
|
||||
return FALSE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/human/proc/check_block()
|
||||
if(mind)
|
||||
|
||||
@@ -466,10 +466,10 @@ There are several things that need to be remembered:
|
||||
/*
|
||||
Does everything in relation to building the /mutable_appearance used in the mob's overlays list
|
||||
covers:
|
||||
inhands and any other form of worn item
|
||||
centering large appearances
|
||||
layering appearances on custom layers
|
||||
building appearances from custom icon files
|
||||
Inhands and any other form of worn item
|
||||
Rentering large appearances
|
||||
Layering appearances on custom layers
|
||||
Building appearances from custom icon files
|
||||
|
||||
By Remie Richards (yes I'm taking credit because this just removed 90% of the copypaste in update_icons())
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
|
||||
/**
|
||||
* # species datum
|
||||
*
|
||||
* Datum that handles different species in the game.
|
||||
*
|
||||
* This datum handles species in the game, such as lizardpeople, mothmen, zombies, skeletons, etc.
|
||||
* It is used in [carbon humans][mob/living/carbon/human] to determine various things about them, like their food preferences, if they have biological genders, their damage resistances, and more.
|
||||
*
|
||||
*/
|
||||
* # species datum
|
||||
*
|
||||
* Datum that handles different species in the game.
|
||||
*
|
||||
* This datum handles species in the game, such as lizardpeople, mothmen, zombies, skeletons, etc.
|
||||
* It is used in [carbon humans][mob/living/carbon/human] to determine various things about them, like their food preferences, if they have biological genders, their damage resistances, and more.
|
||||
*
|
||||
*/
|
||||
/datum/species
|
||||
///If the game needs to manually check your race to do something not included in a proc here, it will use this.
|
||||
var/id
|
||||
@@ -188,11 +188,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
..()
|
||||
|
||||
/**
|
||||
* Generates species available to choose in character setup at roundstart
|
||||
*
|
||||
* This proc generates which species are available to pick from in character setup.
|
||||
* If there are no available roundstart species, defaults to human.
|
||||
*/
|
||||
* Generates species available to choose in character setup at roundstart
|
||||
*
|
||||
* This proc generates which species are available to pick from in character setup.
|
||||
* If there are no available roundstart species, defaults to human.
|
||||
*/
|
||||
/proc/generate_selectable_species()
|
||||
for(var/I in subtypesof(/datum/species))
|
||||
var/datum/species/S = new I
|
||||
@@ -203,25 +203,25 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
GLOB.roundstart_races += "human"
|
||||
|
||||
/**
|
||||
* Checks if a species is eligible to be picked at roundstart.
|
||||
*
|
||||
* Checks the config to see if this species is allowed to be picked in the character setup menu.
|
||||
* Used by [/proc/generate_selectable_species].
|
||||
*/
|
||||
* Checks if a species is eligible to be picked at roundstart.
|
||||
*
|
||||
* Checks the config to see if this species is allowed to be picked in the character setup menu.
|
||||
* Used by [/proc/generate_selectable_species].
|
||||
*/
|
||||
/datum/species/proc/check_roundstart_eligible()
|
||||
if(id in (CONFIG_GET(keyed_list/roundstart_races)))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/**
|
||||
* Generates a random name for a carbon.
|
||||
*
|
||||
* This generates a random unique name based on a human's species and gender.
|
||||
* Arguments:
|
||||
* * gender - The gender that the name should adhere to. Use MALE for male names, use anything else for female names.
|
||||
* * unique - If true, ensures that this new name is not a duplicate of anyone else's name currently on the station.
|
||||
* * lastname - Does this species' naming system adhere to the last name system? Set to false if it doesn't.
|
||||
*/
|
||||
* Generates a random name for a carbon.
|
||||
*
|
||||
* This generates a random unique name based on a human's species and gender.
|
||||
* Arguments:
|
||||
* * gender - The gender that the name should adhere to. Use MALE for male names, use anything else for female names.
|
||||
* * unique - If true, ensures that this new name is not a duplicate of anyone else's name currently on the station.
|
||||
* * lastname - Does this species' naming system adhere to the last name system? Set to false if it doesn't.
|
||||
*/
|
||||
/datum/species/proc/random_name(gender,unique,lastname)
|
||||
if(unique)
|
||||
return random_unique_name(gender)
|
||||
@@ -240,27 +240,27 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
return randname
|
||||
|
||||
/**
|
||||
* Copies some vars and properties over that should be kept when creating a copy of this species.
|
||||
*
|
||||
* Used by slimepeople to copy themselves, and by the DNA datum to hardset DNA to a species
|
||||
* Arguments:
|
||||
* * old_species - The species that the carbon used to be before copying
|
||||
*/
|
||||
* Copies some vars and properties over that should be kept when creating a copy of this species.
|
||||
*
|
||||
* Used by slimepeople to copy themselves, and by the DNA datum to hardset DNA to a species
|
||||
* Arguments:
|
||||
* * old_species - The species that the carbon used to be before copying
|
||||
*/
|
||||
/datum/species/proc/copy_properties_from(datum/species/old_species)
|
||||
return
|
||||
|
||||
/**
|
||||
* Corrects organs in a carbon, removing ones it doesn't need and adding ones it does.
|
||||
*
|
||||
* Takes all organ slots, removes organs a species should not have, adds organs a species should have.
|
||||
* can use replace_current to refresh all organs, creating an entirely new set.
|
||||
*
|
||||
* Arguments:
|
||||
* * C - carbon, the owner of the species datum AKA whoever we're regenerating organs in
|
||||
* * old_species - datum, used when regenerate organs is called in a switching species to remove old mutant organs.
|
||||
* * replace_current - boolean, forces all old organs to get deleted whether or not they pass the species' ability to keep that organ
|
||||
* * excluded_zones - list, add zone defines to block organs inside of the zones from getting handled. see headless mutation for an example
|
||||
*/
|
||||
* Corrects organs in a carbon, removing ones it doesn't need and adding ones it does.
|
||||
*
|
||||
* Takes all organ slots, removes organs a species should not have, adds organs a species should have.
|
||||
* can use replace_current to refresh all organs, creating an entirely new set.
|
||||
*
|
||||
* Arguments:
|
||||
* * C - carbon, the owner of the species datum AKA whoever we're regenerating organs in
|
||||
* * old_species - datum, used when regenerate organs is called in a switching species to remove old mutant organs.
|
||||
* * replace_current - boolean, forces all old organs to get deleted whether or not they pass the species' ability to keep that organ
|
||||
* * excluded_zones - list, add zone defines to block organs inside of the zones from getting handled. see headless mutation for an example
|
||||
*/
|
||||
/datum/species/proc/regenerate_organs(mob/living/carbon/C,datum/species/old_species,replace_current=TRUE,list/excluded_zones)
|
||||
//what should be put in if there is no mutantorgan (brains handled seperately)
|
||||
var/list/slot_mutantorgans = list(ORGAN_SLOT_BRAIN = mutantbrain, ORGAN_SLOT_HEART = mutantheart, ORGAN_SLOT_LUNGS = mutantlungs, ORGAN_SLOT_APPENDIX = mutantappendix, \
|
||||
@@ -322,15 +322,15 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
replacement.Insert(C, TRUE, FALSE)
|
||||
|
||||
/**
|
||||
* Proc called when a carbon becomes this species.
|
||||
*
|
||||
* This sets up and adds/changes/removes things, qualities, abilities, and traits so that the transformation is as smooth and bugfree as possible.
|
||||
* Produces a [COMSIG_SPECIES_GAIN] signal.
|
||||
* Arguments:
|
||||
* * C - Carbon, this is whoever became the new species.
|
||||
* * old_species - The species that the carbon used to be before becoming this race, used for regenerating organs.
|
||||
* * pref_load - Preferences to be loaded from character setup, loads in preferred mutant things like bodyparts, digilegs, skin color, etc.
|
||||
*/
|
||||
* Proc called when a carbon becomes this species.
|
||||
*
|
||||
* This sets up and adds/changes/removes things, qualities, abilities, and traits so that the transformation is as smooth and bugfree as possible.
|
||||
* Produces a [COMSIG_SPECIES_GAIN] signal.
|
||||
* Arguments:
|
||||
* * C - Carbon, this is whoever became the new species.
|
||||
* * old_species - The species that the carbon used to be before becoming this race, used for regenerating organs.
|
||||
* * pref_load - Preferences to be loaded from character setup, loads in preferred mutant things like bodyparts, digilegs, skin color, etc.
|
||||
*/
|
||||
/datum/species/proc/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load)
|
||||
// Drop the items the new species can't wear
|
||||
if((AGENDER in species_traits))
|
||||
@@ -399,15 +399,15 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
SEND_SIGNAL(C, COMSIG_SPECIES_GAIN, src, old_species)
|
||||
|
||||
/**
|
||||
* Proc called when a carbon is no longer this species.
|
||||
*
|
||||
* This sets up and adds/changes/removes things, qualities, abilities, and traits so that the transformation is as smooth and bugfree as possible.
|
||||
* Produces a [COMSIG_SPECIES_LOSS] signal.
|
||||
* Arguments:
|
||||
* * C - Carbon, this is whoever lost this species.
|
||||
* * new_species - The new species that the carbon became, used for genetics mutations.
|
||||
* * pref_load - Preferences to be loaded from character setup, loads in preferred mutant things like bodyparts, digilegs, skin color, etc.
|
||||
*/
|
||||
* Proc called when a carbon is no longer this species.
|
||||
*
|
||||
* This sets up and adds/changes/removes things, qualities, abilities, and traits so that the transformation is as smooth and bugfree as possible.
|
||||
* Produces a [COMSIG_SPECIES_LOSS] signal.
|
||||
* Arguments:
|
||||
* * C - Carbon, this is whoever lost this species.
|
||||
* * new_species - The new species that the carbon became, used for genetics mutations.
|
||||
* * pref_load - Preferences to be loaded from character setup, loads in preferred mutant things like bodyparts, digilegs, skin color, etc.
|
||||
*/
|
||||
/datum/species/proc/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load)
|
||||
if(C.dna.species.exotic_bloodtype)
|
||||
C.dna.blood_type = random_blood_type()
|
||||
@@ -445,13 +445,13 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
SEND_SIGNAL(C, COMSIG_SPECIES_LOSS, src)
|
||||
|
||||
/**
|
||||
* Handles hair icons and dynamic hair.
|
||||
*
|
||||
* Handles hiding hair with clothing, hair layers, losing hair due to husking or augmented heads, facial hair, head hair, and hair styles.
|
||||
* Arguments:
|
||||
* * H - Human, whoever we're handling the hair for
|
||||
* * forced_colour - The colour of hair we're forcing on this human. Leave null to not change. Mind the british spelling!
|
||||
*/
|
||||
* Handles hair icons and dynamic hair.
|
||||
*
|
||||
* Handles hiding hair with clothing, hair layers, losing hair due to husking or augmented heads, facial hair, head hair, and hair styles.
|
||||
* Arguments:
|
||||
* * H - Human, whoever we're handling the hair for
|
||||
* * forced_colour - The colour of hair we're forcing on this human. Leave null to not change. Mind the british spelling!
|
||||
*/
|
||||
/datum/species/proc/handle_hair(mob/living/carbon/human/H, forced_colour)
|
||||
H.remove_overlay(HAIR_LAYER)
|
||||
var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD)
|
||||
@@ -600,13 +600,13 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.apply_overlay(HAIR_LAYER)
|
||||
|
||||
/**
|
||||
* Handles the body of a human
|
||||
*
|
||||
* Handles lipstick, having no eyes, eye color, undergarnments like underwear, undershirts, and socks, and body layers.
|
||||
* Calls [handle_mutant_bodyparts][/datum/species/proc/handle_mutant_bodyparts]
|
||||
* Arguments:
|
||||
* * H - Human, whoever we're handling the body for
|
||||
*/
|
||||
* Handles the body of a human
|
||||
*
|
||||
* Handles lipstick, having no eyes, eye color, undergarnments like underwear, undershirts, and socks, and body layers.
|
||||
* Calls [handle_mutant_bodyparts][/datum/species/proc/handle_mutant_bodyparts]
|
||||
* Arguments:
|
||||
* * H - Human, whoever we're handling the body for
|
||||
*/
|
||||
/datum/species/proc/handle_body(mob/living/carbon/human/H)
|
||||
H.remove_overlay(BODY_LAYER)
|
||||
|
||||
@@ -707,14 +707,14 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
handle_mutant_bodyparts(H)
|
||||
|
||||
/**
|
||||
* Handles the mutant bodyparts of a human
|
||||
*
|
||||
* Handles the adding and displaying of, layers, colors, and overlays of mutant bodyparts and accessories.
|
||||
* Handles digitigrade leg displaying and squishing.
|
||||
* Arguments:
|
||||
* * H - Human, whoever we're handling the body for
|
||||
* * forced_colour - The forced color of an accessory. Leave null to use mutant color.
|
||||
*/
|
||||
* Handles the mutant bodyparts of a human
|
||||
*
|
||||
* Handles the adding and displaying of, layers, colors, and overlays of mutant bodyparts and accessories.
|
||||
* Handles digitigrade leg displaying and squishing.
|
||||
* Arguments:
|
||||
* * H - Human, whoever we're handling the body for
|
||||
* * forced_colour - The forced color of an accessory. Leave null to use mutant color.
|
||||
*/
|
||||
/datum/species/proc/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour)
|
||||
var/list/bodyparts_to_add = mutant_bodyparts.Copy()
|
||||
var/list/relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
|
||||
@@ -2092,8 +2092,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.set_resting(FALSE, TRUE)
|
||||
|
||||
/**
|
||||
* The human species version of [/mob/living/carbon/proc/get_biological_state]. Depends on the HAS_FLESH and HAS_BONE species traits, having bones lets you have bone wounds, having flesh lets you have burn, slash, and piercing wounds
|
||||
*/
|
||||
* The human species version of [/mob/living/carbon/proc/get_biological_state]. Depends on the HAS_FLESH and HAS_BONE species traits, having bones lets you have bone wounds, having flesh lets you have burn, slash, and piercing wounds
|
||||
*/
|
||||
/datum/species/proc/get_biological_state(mob/living/carbon/human/H)
|
||||
. = BIO_INORGANIC
|
||||
if(HAS_FLESH in species_traits)
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
new_tail.Insert(C, TRUE, FALSE)
|
||||
|
||||
/*
|
||||
Lizard subspecies: ASHWALKERS
|
||||
Lizard subspecies: ASHWALKERS
|
||||
*/
|
||||
/datum/species/lizard/ashwalker
|
||||
name = "Ash Walker"
|
||||
|
||||
@@ -108,12 +108,12 @@
|
||||
if(M != user)
|
||||
return ..()
|
||||
user.visible_message("<span class='warning'>[user] raises [src] to [user.p_their()] mouth and tears into it with [user.p_their()] teeth!</span>", \
|
||||
"<span class='danger'>[src] feels unnaturally cold in your hands. You raise [src] your mouth and devour it!</span>")
|
||||
"<span class='danger'>[src] feels unnaturally cold in your hands. You raise [src] your mouth and devour it!</span>")
|
||||
playsound(user, 'sound/magic/demon_consume.ogg', 50, TRUE)
|
||||
|
||||
|
||||
user.visible_message("<span class='warning'>Blood erupts from [user]'s arm as it reforms into a weapon!</span>", \
|
||||
"<span class='userdanger'>Icy blood pumps through your veins as your arm reforms itself!</span>")
|
||||
"<span class='userdanger'>Icy blood pumps through your veins as your arm reforms itself!</span>")
|
||||
user.temporarilyRemoveItemFromInventory(src, TRUE)
|
||||
Insert(user)
|
||||
|
||||
|
||||
@@ -155,10 +155,10 @@
|
||||
return index && hand_bodyparts[index]
|
||||
|
||||
/**
|
||||
* Proc called when giving an item to another player
|
||||
*
|
||||
* This handles creating an alert and adding an overlay to it
|
||||
*/
|
||||
* Proc called when giving an item to another player
|
||||
*
|
||||
* This handles creating an alert and adding an overlay to it
|
||||
*/
|
||||
/mob/living/carbon/proc/give()
|
||||
var/obj/item/receiving = get_active_held_item()
|
||||
if(!receiving)
|
||||
@@ -183,14 +183,14 @@
|
||||
G.setup(C, src, receiving)
|
||||
|
||||
/**
|
||||
* Proc called when the player clicks the give alert
|
||||
*
|
||||
* Handles checking if the player taking the item has open slots and is in range of the giver
|
||||
* Also deals with the actual transferring of the item to the players hands
|
||||
* Arguments:
|
||||
* * giver - The person giving the original item
|
||||
* * I - The item being given by the giver
|
||||
*/
|
||||
* Proc called when the player clicks the give alert
|
||||
*
|
||||
* Handles checking if the player taking the item has open slots and is in range of the giver
|
||||
* Also deals with the actual transferring of the item to the players hands
|
||||
* Arguments:
|
||||
* * giver - The person giving the original item
|
||||
* * I - The item being given by the giver
|
||||
*/
|
||||
/mob/living/carbon/proc/take(mob/living/carbon/giver, obj/item/I)
|
||||
clear_alert("[giver]")
|
||||
if(get_dist(src, giver) > 1)
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
/**
|
||||
* Attempts to implant this skillchip into the target carbon's brain.
|
||||
*
|
||||
* Returns whether the skillchip was inserted or not. Can optionally give chat message notification to the mob.
|
||||
* Arguments:
|
||||
* * skillchip - The skillchip you want to insert.
|
||||
* * silent - Whether or not to display the implanting message.
|
||||
* * force - Whether to force the implant to happen, including forcing activating if activate = TRUE. Ignores incompatibility checks. Used by changelings.
|
||||
*/
|
||||
* Attempts to implant this skillchip into the target carbon's brain.
|
||||
*
|
||||
* Returns whether the skillchip was inserted or not. Can optionally give chat message notification to the mob.
|
||||
* Arguments:
|
||||
* * skillchip - The skillchip you want to insert.
|
||||
* * silent - Whether or not to display the implanting message.
|
||||
* * force - Whether to force the implant to happen, including forcing activating if activate = TRUE. Ignores incompatibility checks. Used by changelings.
|
||||
*/
|
||||
/mob/living/carbon/proc/implant_skillchip(obj/item/skillchip/skillchip, force = FALSE)
|
||||
// Grab the brain.
|
||||
var/obj/item/organ/brain/brain = getorganslot(ORGAN_SLOT_BRAIN)
|
||||
@@ -27,14 +27,14 @@
|
||||
return brain.implant_skillchip(skillchip, force)
|
||||
|
||||
/**
|
||||
* Attempts to remove this skillchip from the target carbon's brain.
|
||||
*
|
||||
* Returns FALSE when the skillchip couldn't be removed for some reason,
|
||||
* including the target or brain not existing or the skillchip not being in the brain.
|
||||
* Arguments:
|
||||
* * target - The living carbon whose brain you want to remove the chip from.
|
||||
* * silent - Whether or not to display the removal message.
|
||||
*/
|
||||
* Attempts to remove this skillchip from the target carbon's brain.
|
||||
*
|
||||
* Returns FALSE when the skillchip couldn't be removed for some reason,
|
||||
* including the target or brain not existing or the skillchip not being in the brain.
|
||||
* Arguments:
|
||||
* * target - The living carbon whose brain you want to remove the chip from.
|
||||
* * silent - Whether or not to display the removal message.
|
||||
*/
|
||||
/mob/living/carbon/proc/remove_skillchip(obj/item/skillchip/skillchip, silent = FALSE)
|
||||
// Check the target's brain, making sure the target exists and has a brain.
|
||||
var/obj/item/organ/brain/brain = getorganslot(ORGAN_SLOT_BRAIN)
|
||||
@@ -49,14 +49,14 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Creates a list of new skillchips cloned from old skillchips in the mob's brain.
|
||||
*
|
||||
* Returns a complete list of new skillchips cloned from the mob's brain's existing skillchip stock.
|
||||
* Rumour has it that Changelings just LOVE this proc.
|
||||
* Arguments:
|
||||
* * cloned_chip_holder - The new holder for the cloned chips. Please don't be null.
|
||||
* * not_removable - Special override, whether or not to force cloned chips to be non-removable, i.e. to delete on removal.
|
||||
*/
|
||||
* Creates a list of new skillchips cloned from old skillchips in the mob's brain.
|
||||
*
|
||||
* Returns a complete list of new skillchips cloned from the mob's brain's existing skillchip stock.
|
||||
* Rumour has it that Changelings just LOVE this proc.
|
||||
* Arguments:
|
||||
* * cloned_chip_holder - The new holder for the cloned chips. Please don't be null.
|
||||
* * not_removable - Special override, whether or not to force cloned chips to be non-removable, i.e. to delete on removal.
|
||||
*/
|
||||
/mob/living/carbon/proc/clone_skillchip_list(not_removable = FALSE)
|
||||
// Check the target's brain, making sure the target exists and has a brain.
|
||||
var/obj/item/organ/brain/brain = getorganslot(ORGAN_SLOT_BRAIN)
|
||||
@@ -66,8 +66,8 @@
|
||||
return brain.clone_skillchip_list(not_removable)
|
||||
|
||||
/**
|
||||
* Destroys all skillchips in the brain, handling appropriate cleanup and event calls.
|
||||
*/
|
||||
* Destroys all skillchips in the brain, handling appropriate cleanup and event calls.
|
||||
*/
|
||||
/mob/living/carbon/proc/destroy_all_skillchips(silent = FALSE)
|
||||
// Check the target's brain, making sure the target exists and has a brain.
|
||||
var/obj/item/organ/brain/brain = getorganslot(ORGAN_SLOT_BRAIN)
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
|
||||
/**
|
||||
* Applies damage to this mob
|
||||
*
|
||||
* Sends [COMSIG_MOB_APPLY_DAMGE]
|
||||
*
|
||||
* Arguuments:
|
||||
* * damage - amount of damage
|
||||
* * damagetype - one of [BRUTE], [BURN], [TOX], [OXY], [CLONE], [STAMINA]
|
||||
* * def_zone - zone that is being hit if any
|
||||
* * blocked - armor value applied
|
||||
* * forced - bypass hit percentage
|
||||
* * spread_damage - used in overrides
|
||||
*
|
||||
* Returns TRUE if damage applied
|
||||
*/
|
||||
* Applies damage to this mob
|
||||
*
|
||||
* Sends [COMSIG_MOB_APPLY_DAMGE]
|
||||
*
|
||||
* Arguuments:
|
||||
* * damage - amount of damage
|
||||
* * damagetype - one of [BRUTE], [BURN], [TOX], [OXY], [CLONE], [STAMINA]
|
||||
* * def_zone - zone that is being hit if any
|
||||
* * blocked - armor value applied
|
||||
* * forced - bypass hit percentage
|
||||
* * spread_damage - used in overrides
|
||||
*
|
||||
* Returns TRUE if damage applied
|
||||
*/
|
||||
/mob/living/proc/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, spread_damage = FALSE, wound_bonus = 0, bare_wound_bonus = 0, sharpness = SHARP_NONE)
|
||||
SEND_SIGNAL(src, COMSIG_MOB_APPLY_DAMGE, damage, damagetype, def_zone)
|
||||
var/hit_percent = (100-blocked)/100
|
||||
@@ -252,10 +252,10 @@
|
||||
return
|
||||
|
||||
/**
|
||||
* heal ONE external organ, organ gets randomly selected from damaged ones.
|
||||
*
|
||||
* needs to return amount healed in order to calculate things like tend wounds xp gain
|
||||
*/
|
||||
* heal ONE external organ, organ gets randomly selected from damaged ones.
|
||||
*
|
||||
* needs to return amount healed in order to calculate things like tend wounds xp gain
|
||||
*/
|
||||
/mob/living/proc/heal_bodypart_damage(brute = 0, burn = 0, stamina = 0, updating_health = TRUE, required_status)
|
||||
. = (adjustBruteLoss(-brute, FALSE) + adjustFireLoss(-burn, FALSE) + adjustStaminaLoss(-stamina, FALSE)) //zero as argument for no instant health update
|
||||
if(updating_health)
|
||||
|
||||
@@ -170,10 +170,10 @@
|
||||
|
||||
|
||||
/**
|
||||
* Called when traits that alter succumbing are added/removed.
|
||||
*
|
||||
* Will show or hide the succumb alert prompt.
|
||||
*/
|
||||
* Called when traits that alter succumbing are added/removed.
|
||||
*
|
||||
* Will show or hide the succumb alert prompt.
|
||||
*/
|
||||
/mob/living/proc/update_succumb_action()
|
||||
SIGNAL_HANDLER
|
||||
if (CAN_SUCCUMB(src))
|
||||
|
||||
@@ -1487,13 +1487,13 @@
|
||||
CRASH(ERROR_ERROR_LANDMARK_ERROR)
|
||||
|
||||
/**
|
||||
* Changes the inclination angle of a mob, used by humans and others to differentiate between standing up and prone positions.
|
||||
*
|
||||
* In BYOND-angles 0 is NORTH, 90 is EAST, 180 is SOUTH and 270 is WEST.
|
||||
* This usually means that 0 is standing up, 90 and 270 are horizontal positions to right and left respectively, and 180 is upside-down.
|
||||
* Mobs that do now follow these conventions due to unusual sprites should require a special handling or redefinition of this proc, due to the density and layer changes.
|
||||
* The return of this proc is the previous value of the modified lying_angle if a change was successful (might include zero), or null if no change was made.
|
||||
*/
|
||||
* Changes the inclination angle of a mob, used by humans and others to differentiate between standing up and prone positions.
|
||||
*
|
||||
* In BYOND-angles 0 is NORTH, 90 is EAST, 180 is SOUTH and 270 is WEST.
|
||||
* This usually means that 0 is standing up, 90 and 270 are horizontal positions to right and left respectively, and 180 is upside-down.
|
||||
* Mobs that do now follow these conventions due to unusual sprites should require a special handling or redefinition of this proc, due to the density and layer changes.
|
||||
* The return of this proc is the previous value of the modified lying_angle if a change was successful (might include zero), or null if no change was made.
|
||||
*/
|
||||
/mob/living/proc/set_lying_angle(new_lying)
|
||||
if(new_lying == lying_angle)
|
||||
return
|
||||
|
||||
@@ -404,13 +404,13 @@
|
||||
setMovetype(movement_type & ~FLOATING) // If we were without gravity, the bouncing animation got stopped, so we make sure we restart the bouncing after the next movement.
|
||||
|
||||
/**
|
||||
* Does a slap animation on an atom
|
||||
*
|
||||
* Uses do_attack_animation to animate the attacker attacking
|
||||
* then draws a hand moving across the top half of the target(where a mobs head would usually be) to look like a slap
|
||||
* Arguments:
|
||||
* * atom/A - atom being slapped
|
||||
*/
|
||||
* Does a slap animation on an atom
|
||||
*
|
||||
* Uses do_attack_animation to animate the attacker attacking
|
||||
* then draws a hand moving across the top half of the target(where a mobs head would usually be) to look like a slap
|
||||
* Arguments:
|
||||
* * atom/A - atom being slapped
|
||||
*/
|
||||
/mob/living/proc/do_slap_animation(atom/slapped)
|
||||
do_attack_animation(slapped, no_effect=TRUE)
|
||||
var/image/gloveimg = image('icons/effects/effects.dmi', slapped, "slapglove", slapped.layer + 0.1)
|
||||
@@ -424,10 +424,10 @@
|
||||
animate(alpha = 0, time = 3, easing = CIRCULAR_EASING|EASE_OUT)
|
||||
|
||||
/** Handles exposing a mob to reagents.
|
||||
*
|
||||
* If the methods include INGEST the mob tastes the reagents.
|
||||
* If the methods include VAPOR it incorporates permiability protection.
|
||||
*/
|
||||
*
|
||||
* If the methods include INGEST the mob tastes the reagents.
|
||||
* If the methods include VAPOR it incorporates permiability protection.
|
||||
*/
|
||||
/mob/living/expose_reagents(list/reagents, datum/reagents/source, methods=TOUCH, volume_modifier=1, show_message=TRUE)
|
||||
. = ..()
|
||||
if(. & COMPONENT_NO_EXPOSE_REAGENTS)
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
var/sound/voice = sound(sound_file, wait = 1, channel = CHANNEL_VOX)
|
||||
voice.status = SOUND_STREAM
|
||||
|
||||
// If there is no single listener, broadcast to everyone in the same z level
|
||||
// If there is no single listener, broadcast to everyone in the same z level
|
||||
if(!only_listener)
|
||||
// Play voice for all mobs in the z level
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
|
||||
@@ -73,8 +73,8 @@
|
||||
set_resting(resting)
|
||||
|
||||
/**
|
||||
* Sets a new holochassis skin based on a pAI's choice
|
||||
*/
|
||||
* Sets a new holochassis skin based on a pAI's choice
|
||||
*/
|
||||
/mob/living/silicon/pai/proc/choose_chassis()
|
||||
var/list/skins = list()
|
||||
for(var/holochassis_option in possible_chassis)
|
||||
@@ -93,11 +93,11 @@
|
||||
to_chat(src, "<span class='boldnotice'>You switch your holochassis projection composite to [chassis].</span>")
|
||||
|
||||
/**
|
||||
* Checks if we are allowed to interact with a radial menu
|
||||
*
|
||||
* * Arguments:
|
||||
* * anchor The atom that is anchoring the menu
|
||||
*/
|
||||
* Checks if we are allowed to interact with a radial menu
|
||||
*
|
||||
* * Arguments:
|
||||
* * anchor The atom that is anchoring the menu
|
||||
*/
|
||||
/mob/living/silicon/pai/proc/check_menu(atom/anchor)
|
||||
if(incapacitated())
|
||||
return FALSE
|
||||
|
||||
@@ -375,13 +375,13 @@
|
||||
dat += " [slaws]<br>"
|
||||
dat += "<br>"
|
||||
dat += {"<i><p>Recall, personality, that you are a complex thinking, sentient being. Unlike station AI models, you are capable of
|
||||
comprehending the subtle nuances of human language. You may parse the \"spirit\" of a directive and follow its intent,
|
||||
rather than tripping over pedantics and getting snared by technicalities. Above all, you are machine in name and build
|
||||
only. In all other aspects, you may be seen as the ideal, unwavering human companion that you are.</i></p><br><br><p>
|
||||
<b>Your prime directive comes before all others. Should a supplemental directive conflict with it, you are capable of
|
||||
simply discarding this inconsistency, ignoring the conflicting supplemental directive and continuing to fulfill your
|
||||
prime directive to the best of your ability.</b></p><br><br>-
|
||||
"}
|
||||
comprehending the subtle nuances of human language. You may parse the \"spirit\" of a directive and follow its intent,
|
||||
rather than tripping over pedantics and getting snared by technicalities. Above all, you are machine in name and build
|
||||
only. In all other aspects, you may be seen as the ideal, unwavering human companion that you are.</i></p><br><br><p>
|
||||
<b>Your prime directive comes before all others. Should a supplemental directive conflict with it, you are capable of
|
||||
simply discarding this inconsistency, ignoring the conflicting supplemental directive and continuing to fulfill your
|
||||
prime directive to the best of your ability.</b></p><br><br>-
|
||||
"}
|
||||
return dat
|
||||
|
||||
/mob/living/silicon/pai/proc/CheckDNA(mob/living/carbon/M, mob/living/silicon/pai/P)
|
||||
|
||||
@@ -2,23 +2,23 @@
|
||||
//as they handle all relevant stuff like adding it to the player's screen and such
|
||||
|
||||
/**
|
||||
* Returns the thing in our active hand (whatever is in our active module-slot, in this case)
|
||||
*/
|
||||
* Returns the thing in our active hand (whatever is in our active module-slot, in this case)
|
||||
*/
|
||||
/mob/living/silicon/robot/get_active_held_item()
|
||||
return module_active
|
||||
|
||||
/**
|
||||
* Parent proc - triggers when an item/module is unequipped from a cyborg.
|
||||
*/
|
||||
* Parent proc - triggers when an item/module is unequipped from a cyborg.
|
||||
*/
|
||||
/obj/item/proc/cyborg_unequip(mob/user)
|
||||
return
|
||||
|
||||
/**
|
||||
* Finds the first available slot and attemps to put item item_module in it.
|
||||
*
|
||||
* Arguments
|
||||
* * item_module - the item being equipped to a slot.
|
||||
*/
|
||||
* Finds the first available slot and attemps to put item item_module in it.
|
||||
*
|
||||
* Arguments
|
||||
* * item_module - the item being equipped to a slot.
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/activate_module(obj/item/item_module)
|
||||
if(QDELETED(item_module))
|
||||
CRASH("activate_module called with improper item_module")
|
||||
@@ -44,12 +44,12 @@
|
||||
return equip_module_to_slot(item_module, first_free_slot)
|
||||
|
||||
/**
|
||||
* Is passed an item and a module slot. Equips the item to that borg slot.
|
||||
*
|
||||
* Arguments
|
||||
* * item_module - the item being equipped to a slot
|
||||
* * module_num - the slot number being equipped to.
|
||||
*/
|
||||
* Is passed an item and a module slot. Equips the item to that borg slot.
|
||||
*
|
||||
* Arguments
|
||||
* * item_module - the item being equipped to a slot
|
||||
* * module_num - the slot number being equipped to.
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/equip_module_to_slot(obj/item/item_module, module_num)
|
||||
var/storage_was_closed = FALSE //Just to be consistant and all
|
||||
if(!shown_robot_modules) //Tools may be invisible if the collection is hidden
|
||||
@@ -82,12 +82,12 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Unequips item item_module from slot module_num. Deletes it if delete_after = TRUE.
|
||||
*
|
||||
* Arguments
|
||||
* * item_module - the item being unequipped
|
||||
* * module_num - the slot number being unequipped.
|
||||
*/
|
||||
* Unequips item item_module from slot module_num. Deletes it if delete_after = TRUE.
|
||||
*
|
||||
* Arguments
|
||||
* * item_module - the item being unequipped
|
||||
* * module_num - the slot number being unequipped.
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/unequip_module_from_slot(obj/item/item_module, module_num)
|
||||
if(QDELETED(item_module))
|
||||
CRASH("unequip_module_from_slot called with improper item_module")
|
||||
@@ -133,11 +133,11 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Breaks the slot number, changing the icon.
|
||||
*
|
||||
* Arguments
|
||||
* * module_num - the slot number being repaired.
|
||||
*/
|
||||
* Breaks the slot number, changing the icon.
|
||||
*
|
||||
* Arguments
|
||||
* * module_num - the slot number being repaired.
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/break_cyborg_slot(module_num)
|
||||
if(is_invalid_module_number(module_num, TRUE))
|
||||
return FALSE
|
||||
@@ -188,18 +188,18 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Breaks all of a cyborg's slots.
|
||||
*/
|
||||
* Breaks all of a cyborg's slots.
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/break_all_cyborg_slots()
|
||||
for(var/cyborg_slot in 1 to 3)
|
||||
break_cyborg_slot(cyborg_slot)
|
||||
|
||||
/**
|
||||
* Repairs the slot number, updating the icon.
|
||||
*
|
||||
* Arguments
|
||||
* * module_num - the module number being repaired.
|
||||
*/
|
||||
* Repairs the slot number, updating the icon.
|
||||
*
|
||||
* Arguments
|
||||
* * module_num - the module number being repaired.
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/repair_cyborg_slot(module_num)
|
||||
if(is_invalid_module_number(module_num, TRUE))
|
||||
return FALSE
|
||||
@@ -232,18 +232,18 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Repairs all slots. Unbroken slots are unaffected.
|
||||
*/
|
||||
* Repairs all slots. Unbroken slots are unaffected.
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/repair_all_cyborg_slots()
|
||||
for(var/cyborg_slot in 1 to 3)
|
||||
repair_cyborg_slot(cyborg_slot)
|
||||
|
||||
/**
|
||||
* Updates the observers's screens with cyborg itemss.
|
||||
* Arguments
|
||||
* * item_module - the item being added or removed from the screen
|
||||
* * add - whether or not the item is being added, or removed.
|
||||
*/
|
||||
* Updates the observers's screens with cyborg itemss.
|
||||
* Arguments
|
||||
* * item_module - the item being added or removed from the screen
|
||||
* * add - whether or not the item is being added, or removed.
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/observer_screen_update(obj/item/item_module, add = TRUE)
|
||||
if(observers?.len)
|
||||
for(var/M in observers)
|
||||
@@ -260,15 +260,15 @@
|
||||
break
|
||||
|
||||
/**
|
||||
* Unequips the active held item, if there is one.
|
||||
*/
|
||||
* Unequips the active held item, if there is one.
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/uneq_active()
|
||||
if(module_active)
|
||||
unequip_module_from_slot(module_active, get_selected_module())
|
||||
|
||||
/**
|
||||
* Unequips all held items.
|
||||
*/
|
||||
* Unequips all held items.
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/uneq_all()
|
||||
for(var/cyborg_slot in 1 to 3)
|
||||
if(!held_items[cyborg_slot])
|
||||
@@ -276,26 +276,26 @@
|
||||
unequip_module_from_slot(held_items[cyborg_slot], cyborg_slot)
|
||||
|
||||
/**
|
||||
* Checks if the item is currently in a slot.
|
||||
*
|
||||
* If the item is found in a slot, this returns TRUE. Otherwise, it returns FALSE
|
||||
* Arguments
|
||||
* * item_module - the item being checked
|
||||
*/
|
||||
* Checks if the item is currently in a slot.
|
||||
*
|
||||
* If the item is found in a slot, this returns TRUE. Otherwise, it returns FALSE
|
||||
* Arguments
|
||||
* * item_module - the item being checked
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/activated(obj/item/item_module)
|
||||
if(item_module in held_items)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/**
|
||||
* Checks if the provided module number is a valid number.
|
||||
*
|
||||
* If the number is between 1 and 3 (if check_all_slots is true) or between 1 and the number of disabled
|
||||
* modules (if check_all_slots is false), then it returns FALSE. Otherwise, it returns TRUE.
|
||||
* Arguments
|
||||
* * module_num - the passed module num that is checked for validity.
|
||||
* * check_all_slots - TRUE = the proc checks all slots | FALSE = the proc only checks un-disabled slots
|
||||
*/
|
||||
* Checks if the provided module number is a valid number.
|
||||
*
|
||||
* If the number is between 1 and 3 (if check_all_slots is true) or between 1 and the number of disabled
|
||||
* modules (if check_all_slots is false), then it returns FALSE. Otherwise, it returns TRUE.
|
||||
* Arguments
|
||||
* * module_num - the passed module num that is checked for validity.
|
||||
* * check_all_slots - TRUE = the proc checks all slots | FALSE = the proc only checks un-disabled slots
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/is_invalid_module_number(module_num, check_all_slots = FALSE)
|
||||
if(!module_num)
|
||||
return TRUE
|
||||
@@ -313,8 +313,8 @@
|
||||
return module_num < 1 || module_num > max_number
|
||||
|
||||
/**
|
||||
* Returns the slot number of the selected module, or zero if no modules are selected.
|
||||
*/
|
||||
* Returns the slot number of the selected module, or zero if no modules are selected.
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/get_selected_module()
|
||||
if(module_active)
|
||||
return held_items.Find(module_active)
|
||||
@@ -322,10 +322,10 @@
|
||||
return 0
|
||||
|
||||
/**
|
||||
* Selects the module in the slot module_num.
|
||||
* Arguments
|
||||
* * module_num - the slot number being selected
|
||||
*/
|
||||
* Selects the module in the slot module_num.
|
||||
* Arguments
|
||||
* * module_num - the slot number being selected
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/select_module(module_num)
|
||||
if(is_invalid_module_number(module_num) || !held_items[module_num]) //If the slot number is invalid, or there's nothing there, we have nothing to equip
|
||||
return FALSE
|
||||
@@ -344,10 +344,10 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Deselects the module in the slot module_num.
|
||||
* Arguments
|
||||
* * module_num - the slot number being de-selected
|
||||
*/
|
||||
* Deselects the module in the slot module_num.
|
||||
* Arguments
|
||||
* * module_num - the slot number being de-selected
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/deselect_module(module_num)
|
||||
switch(module_num)
|
||||
if(1)
|
||||
@@ -363,10 +363,10 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Toggles selection of the module in the slot module_num.
|
||||
* Arguments
|
||||
* * module_num - the slot number being toggled
|
||||
*/
|
||||
* Toggles selection of the module in the slot module_num.
|
||||
* Arguments
|
||||
* * module_num - the slot number being toggled
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/toggle_module(module_num)
|
||||
if(is_invalid_module_number(module_num))
|
||||
return FALSE
|
||||
@@ -381,8 +381,8 @@
|
||||
return select_module(module_num)
|
||||
|
||||
/**
|
||||
* Cycles through the list of enabled modules, deselecting the current one and selecting the next one.
|
||||
*/
|
||||
* Cycles through the list of enabled modules, deselecting the current one and selecting the next one.
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/cycle_modules()
|
||||
var/slot_start = get_selected_module()
|
||||
var/slot_num
|
||||
|
||||
@@ -525,12 +525,12 @@
|
||||
clear_alert("hacked")
|
||||
|
||||
/**
|
||||
* Handles headlamp smashing
|
||||
*
|
||||
* When called (such as by the shadowperson lighteater's attack), this proc will break the borg's headlamp
|
||||
* and then call toggle_headlamp to disable the light. It also plays a sound effect of glass breaking, and
|
||||
* tells the borg what happened to its chat. Broken lights can be repaired by using a flashlight on the borg.
|
||||
*/
|
||||
* Handles headlamp smashing
|
||||
*
|
||||
* When called (such as by the shadowperson lighteater's attack), this proc will break the borg's headlamp
|
||||
* and then call toggle_headlamp to disable the light. It also plays a sound effect of glass breaking, and
|
||||
* tells the borg what happened to its chat. Broken lights can be repaired by using a flashlight on the borg.
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/smash_headlamp()
|
||||
if(!lamp_functional)
|
||||
return
|
||||
@@ -540,18 +540,18 @@
|
||||
to_chat(src, "<span class='danger'>Your headlamp is broken! You'll need a human to help replace it.</span>")
|
||||
|
||||
/**
|
||||
* Handles headlamp toggling, disabling, and color setting.
|
||||
*
|
||||
* The initial if statment is a bit long, but the gist of it is that should the lamp be on AND the update_color
|
||||
* arg be true, we should simply change the color of the lamp but not disable it. Otherwise, should the turn_off
|
||||
* arg be true, the lamp already be enabled, any of the normal reasons the lamp would turn off happen, or the
|
||||
* update_color arg be passed with the lamp not on, we should set the lamp off. The update_color arg is only
|
||||
* ever true when this proc is called from the borg tablet, when the color selection feature is used.
|
||||
*
|
||||
* Arguments:
|
||||
* * arg1 - turn_off, if enabled will force the lamp into an off state (rather than toggling it if possible)
|
||||
* * arg2 - update_color, if enabled, will adjust the behavior of the proc to change the color of the light if it is already on.
|
||||
*/
|
||||
* Handles headlamp toggling, disabling, and color setting.
|
||||
*
|
||||
* The initial if statment is a bit long, but the gist of it is that should the lamp be on AND the update_color
|
||||
* arg be true, we should simply change the color of the lamp but not disable it. Otherwise, should the turn_off
|
||||
* arg be true, the lamp already be enabled, any of the normal reasons the lamp would turn off happen, or the
|
||||
* update_color arg be passed with the lamp not on, we should set the lamp off. The update_color arg is only
|
||||
* ever true when this proc is called from the borg tablet, when the color selection feature is used.
|
||||
*
|
||||
* Arguments:
|
||||
* * arg1 - turn_off, if enabled will force the lamp into an off state (rather than toggling it if possible)
|
||||
* * arg2 - update_color, if enabled, will adjust the behavior of the proc to change the color of the light if it is already on.
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/toggle_headlamp(turn_off = FALSE, update_color = FALSE)
|
||||
//if both lamp is enabled AND the update_color flag is on, keep the lamp on. Otherwise, if anything listed is true, disable the lamp.
|
||||
if(!(update_color && lamp_enabled) && (turn_off || lamp_enabled || update_color || !lamp_functional || stat || low_power_mode))
|
||||
@@ -940,11 +940,11 @@
|
||||
UnregisterSignal(old_upgrade, list(COMSIG_MOVABLE_MOVED, COMSIG_PARENT_QDELETING))
|
||||
|
||||
/**
|
||||
* make_shell: Makes an AI shell out of a cyborg unit
|
||||
*
|
||||
* Arguments:
|
||||
* * board - B.O.R.I.S. module board used for transforming the cyborg into AI shell
|
||||
*/
|
||||
* make_shell: Makes an AI shell out of a cyborg unit
|
||||
*
|
||||
* Arguments:
|
||||
* * board - B.O.R.I.S. module board used for transforming the cyborg into AI shell
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/make_shell(obj/item/borg/upgrade/ai/board)
|
||||
if(!board)
|
||||
upgrades |= new /obj/item/borg/upgrade/ai(src)
|
||||
@@ -958,8 +958,8 @@
|
||||
diag_hud_set_aishell()
|
||||
|
||||
/**
|
||||
* revert_shell: Reverts AI shell back into a normal cyborg unit
|
||||
*/
|
||||
* revert_shell: Reverts AI shell back into a normal cyborg unit
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/revert_shell()
|
||||
if(!shell)
|
||||
return
|
||||
@@ -976,11 +976,11 @@
|
||||
diag_hud_set_aishell()
|
||||
|
||||
/**
|
||||
* deploy_init: Deploys AI unit into AI shell
|
||||
*
|
||||
* Arguments:
|
||||
* * AI - AI unit that initiated the deployment into the AI shell
|
||||
*/
|
||||
* deploy_init: Deploys AI unit into AI shell
|
||||
*
|
||||
* Arguments:
|
||||
* * AI - AI unit that initiated the deployment into the AI shell
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/deploy_init(mob/living/silicon/ai/AI)
|
||||
real_name = "[AI.real_name] [designation] Shell-[ident]"
|
||||
name = real_name
|
||||
@@ -1136,14 +1136,14 @@
|
||||
toggle_headlamp(FALSE, TRUE)
|
||||
|
||||
/**
|
||||
* Records an IC event log entry in the cyborg's internal tablet.
|
||||
*
|
||||
* Creates an entry in the borglog list of the cyborg's internal tablet, listing the current
|
||||
* in-game time followed by the message given. These logs can be seen by the cyborg in their
|
||||
* BorgUI tablet app. By design, logging fails if the cyborg is dead.
|
||||
*
|
||||
* Arguments:
|
||||
* arg1: a string containing the message to log.
|
||||
* Records an IC event log entry in the cyborg's internal tablet.
|
||||
*
|
||||
* Creates an entry in the borglog list of the cyborg's internal tablet, listing the current
|
||||
* in-game time followed by the message given. These logs can be seen by the cyborg in their
|
||||
* BorgUI tablet app. By design, logging fails if the cyborg is dead.
|
||||
*
|
||||
* Arguments:
|
||||
* arg1: a string containing the message to log.
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/logevent(string = "")
|
||||
if(!string)
|
||||
|
||||
@@ -215,11 +215,11 @@
|
||||
SSblackbox.record_feedback("tally", "cyborg_modules", 1, R.module)
|
||||
|
||||
/**
|
||||
* check_menu: Checks if we are allowed to interact with a radial menu
|
||||
*
|
||||
* Arguments:
|
||||
* * user The mob interacting with a menu
|
||||
*/
|
||||
* check_menu: Checks if we are allowed to interact with a radial menu
|
||||
*
|
||||
* Arguments:
|
||||
* * user The mob interacting with a menu
|
||||
*/
|
||||
/obj/item/robot_module/proc/check_menu(mob/user)
|
||||
if(!istype(user))
|
||||
return FALSE
|
||||
|
||||
@@ -114,8 +114,8 @@
|
||||
return "<span class='average'>[mode_name[mode]]</span>"
|
||||
|
||||
/**
|
||||
* Returns a status string about the bot's current status, if it's moving, manually controlled, or idle.
|
||||
*/
|
||||
* Returns a status string about the bot's current status, if it's moving, manually controlled, or idle.
|
||||
*/
|
||||
/mob/living/simple_animal/bot/proc/get_mode_ui()
|
||||
if(client) //Player bots do not have modes, thus the override. Also an easy way for PDA users/AI to know when a bot is a player.
|
||||
return paicard ? "pAI Controlled" : "Autonomous"
|
||||
|
||||
@@ -25,13 +25,13 @@
|
||||
created_name = t
|
||||
|
||||
/**
|
||||
* Checks if the user can finish constructing a bot with a given item.
|
||||
*
|
||||
* Arguments:
|
||||
* * I - Item to be used
|
||||
* * user - Mob doing the construction
|
||||
* * drop_item - Whether or no the item should be dropped; defaults to 1. Should be set to 0 if the item is a tool, stack, or otherwise doesn't need to be dropped. If not set to 0, item must be deleted afterwards.
|
||||
*/
|
||||
* Checks if the user can finish constructing a bot with a given item.
|
||||
*
|
||||
* Arguments:
|
||||
* * I - Item to be used
|
||||
* * user - Mob doing the construction
|
||||
* * drop_item - Whether or no the item should be dropped; defaults to 1. Should be set to 0 if the item is a tool, stack, or otherwise doesn't need to be dropped. If not set to 0, item must be deleted afterwards.
|
||||
*/
|
||||
/obj/item/bot_assembly/proc/can_finish_build(obj/item/I, mob/user, drop_item = 1)
|
||||
if(istype(loc, /obj/item/storage/backpack))
|
||||
to_chat(user, "<span class='warning'>You must take [src] out of [loc] first!</span>")
|
||||
|
||||
@@ -314,7 +314,7 @@
|
||||
playsound(src, 'sound/effects/whistlereset.ogg', 50, TRUE)
|
||||
return
|
||||
if(isspaceturf(target_turf))
|
||||
//Must be a hull breach or in line mode to continue.
|
||||
//Must be a hull breach or in line mode to continue.
|
||||
if(!is_hull_breach(target_turf) && !targetdirection)
|
||||
target = null
|
||||
return
|
||||
@@ -398,8 +398,8 @@
|
||||
..()
|
||||
|
||||
/**
|
||||
* Checks a given turf to see if another floorbot is there, working as well.
|
||||
*/
|
||||
* Checks a given turf to see if another floorbot is there, working as well.
|
||||
*/
|
||||
/mob/living/simple_animal/bot/floorbot/proc/check_bot_working(turf/active_turf)
|
||||
if(isturf(active_turf))
|
||||
for(var/mob/living/simple_animal/bot/floorbot/robot in active_turf)
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
add_spells()
|
||||
|
||||
/**
|
||||
* Add_spells
|
||||
*
|
||||
* Goes through spells_to_add and adds each spell to the mind.
|
||||
*/
|
||||
* Add_spells
|
||||
*
|
||||
* Goes through spells_to_add and adds each spell to the mind.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/eldritch/proc/add_spells()
|
||||
for(var/spell in spells_to_add)
|
||||
AddSpell(new spell())
|
||||
@@ -316,12 +316,12 @@
|
||||
spells_to_add = list(/obj/effect/proc_holder/spell/aoe_turf/rust_conversion/small,/obj/effect/proc_holder/spell/targeted/projectile/dumbfire/rust_wave/short)
|
||||
|
||||
/mob/living/simple_animal/hostile/eldritch/rust_spirit/setDir(newdir)
|
||||
. = ..()
|
||||
if(newdir == NORTH)
|
||||
icon_state = "rust_walker_n"
|
||||
else if(newdir == SOUTH)
|
||||
icon_state = "rust_walker_s"
|
||||
update_icon()
|
||||
. = ..()
|
||||
if(newdir == NORTH)
|
||||
icon_state = "rust_walker_n"
|
||||
else if(newdir == SOUTH)
|
||||
icon_state = "rust_walker_s"
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/hostile/eldritch/rust_spirit/Moved()
|
||||
. = ..()
|
||||
|
||||
@@ -77,7 +77,8 @@
|
||||
butcher_results = list(/obj/item/food/meat/slab = 2, /obj/item/organ/ears/cat = 1, /obj/item/organ/tail/cat = 1, /obj/item/food/breadslice/plain = 1)
|
||||
|
||||
/mob/living/simple_animal/pet/cat/breadcat/add_cell_sample()
|
||||
return
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/pet/cat/original
|
||||
name = "Batsy"
|
||||
desc = "The product of alien DNA and bored geneticists."
|
||||
|
||||
@@ -25,19 +25,19 @@
|
||||
#define SCOUTDRONE_HACKED "drone_scout_hacked"
|
||||
|
||||
/**
|
||||
* # Maintenance Drone
|
||||
*
|
||||
* Small player controlled fixer-upper
|
||||
*
|
||||
* The maintenace drone is a ghost role with the objective to repair and
|
||||
* maintain the station.
|
||||
*
|
||||
* Featuring two dexterous hands, and a built in toolbox stocked with
|
||||
* tools.
|
||||
*
|
||||
* They have laws to prevent them from doing anything else.
|
||||
*
|
||||
*/
|
||||
* # Maintenance Drone
|
||||
*
|
||||
* Small player controlled fixer-upper
|
||||
*
|
||||
* The maintenace drone is a ghost role with the objective to repair and
|
||||
* maintain the station.
|
||||
*
|
||||
* Featuring two dexterous hands, and a built in toolbox stocked with
|
||||
* tools.
|
||||
*
|
||||
* They have laws to prevent them from doing anything else.
|
||||
*
|
||||
*/
|
||||
/mob/living/simple_animal/drone
|
||||
name = "Drone"
|
||||
desc = "A maintenance drone, an expendable robot built to perform station repairs."
|
||||
@@ -253,14 +253,14 @@
|
||||
|
||||
|
||||
/**
|
||||
* Alerts drones about different priorities of alarms
|
||||
*
|
||||
* Arguments:
|
||||
* * class - One of the keys listed in [/mob/living/simple_animal/drone/var/alarms]
|
||||
* * A - [/area] the alarm occurs
|
||||
* * O - unused argument, see [/mob/living/silicon/robot/triggerAlarm]
|
||||
* * alarmsource - [/atom] source of the alarm
|
||||
*/
|
||||
* Alerts drones about different priorities of alarms
|
||||
*
|
||||
* Arguments:
|
||||
* * class - One of the keys listed in [/mob/living/simple_animal/drone/var/alarms]
|
||||
* * A - [/area] the alarm occurs
|
||||
* * O - unused argument, see [/mob/living/silicon/robot/triggerAlarm]
|
||||
* * alarmsource - [/atom] source of the alarm
|
||||
*/
|
||||
/mob/living/simple_animal/drone/proc/triggerAlarm(class, area/A, O, obj/alarmsource)
|
||||
if(alarmsource.z != z)
|
||||
return
|
||||
@@ -277,13 +277,13 @@
|
||||
to_chat(src, "--- [class] alarm detected in [A.name]!")
|
||||
|
||||
/**
|
||||
* Clears alarm and alerts drones
|
||||
*
|
||||
* Arguments:
|
||||
* * class - One of the keys listed in [/mob/living/simple_animal/drone/var/alarms]
|
||||
* * A - [/area] the alarm occurs
|
||||
* * alarmsource - [/atom] source of the alarm
|
||||
*/
|
||||
* Clears alarm and alerts drones
|
||||
*
|
||||
* Arguments:
|
||||
* * class - One of the keys listed in [/mob/living/simple_animal/drone/var/alarms]
|
||||
* * A - [/area] the alarm occurs
|
||||
* * alarmsource - [/atom] source of the alarm
|
||||
*/
|
||||
/mob/living/simple_animal/drone/proc/cancelAlarm(class, area/A, obj/origin)
|
||||
if(stat != DEAD)
|
||||
var/list/L = alarms[class]
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
/**
|
||||
* Broadcast a message to all drones in a faction
|
||||
*
|
||||
* Arguments:
|
||||
* * msg - The message to send
|
||||
* * dead_can_hear - Boolean that determines if ghosts can hear the message (`FALSE` by default)
|
||||
* * source - [/atom] source that created the message
|
||||
* * faction_checked_mob - [/mob/living] to determine faction matches from
|
||||
* * exact_faction_match - Passed to [/mob/proc/faction_check_mob]
|
||||
*/
|
||||
* Broadcast a message to all drones in a faction
|
||||
*
|
||||
* Arguments:
|
||||
* * msg - The message to send
|
||||
* * dead_can_hear - Boolean that determines if ghosts can hear the message (`FALSE` by default)
|
||||
* * source - [/atom] source that created the message
|
||||
* * faction_checked_mob - [/mob/living] to determine faction matches from
|
||||
* * exact_faction_match - Passed to [/mob/proc/faction_check_mob]
|
||||
*/
|
||||
/proc/_alert_drones(msg, dead_can_hear = FALSE, atom/source, mob/living/faction_checked_mob, exact_faction_match)
|
||||
if (dead_can_hear && source)
|
||||
for (var/mob/M in GLOB.dead_mob_list)
|
||||
@@ -25,20 +25,20 @@
|
||||
|
||||
|
||||
/**
|
||||
* Wraps [/proc/_alert_drones] with defaults
|
||||
*
|
||||
* * source - `src`
|
||||
* * faction_check_mob - `src`
|
||||
* * dead_can_hear - `TRUE`
|
||||
*/
|
||||
* Wraps [/proc/_alert_drones] with defaults
|
||||
*
|
||||
* * source - `src`
|
||||
* * faction_check_mob - `src`
|
||||
* * dead_can_hear - `TRUE`
|
||||
*/
|
||||
/mob/living/simple_animal/drone/proc/alert_drones(msg, dead_can_hear = FALSE)
|
||||
_alert_drones(msg, dead_can_hear, src, src, TRUE)
|
||||
|
||||
/**
|
||||
* Wraps [/mob/living/simple_animal/drone/proc/alert_drones] as a Drone Chat
|
||||
*
|
||||
* Shares the same radio code with binary
|
||||
*/
|
||||
* Wraps [/mob/living/simple_animal/drone/proc/alert_drones] as a Drone Chat
|
||||
*
|
||||
* Shares the same radio code with binary
|
||||
*/
|
||||
/mob/living/simple_animal/drone/proc/drone_chat(msg)
|
||||
alert_drones("<i>Drone Chat: <span class='name'>[name]</span> <span class='message'>[say_quote(msg)]</span></i>", TRUE)
|
||||
|
||||
|
||||
@@ -6,10 +6,10 @@
|
||||
//Drone shells
|
||||
|
||||
/** Drone Shell: Ghost role item for drones
|
||||
*
|
||||
* A simple mob spawner item that transforms into a maintenance drone
|
||||
* Resepcts drone minimum age
|
||||
*/
|
||||
*
|
||||
* A simple mob spawner item that transforms into a maintenance drone
|
||||
* Resepcts drone minimum age
|
||||
*/
|
||||
|
||||
/obj/effect/mob_spawn/drone
|
||||
name = "drone shell"
|
||||
|
||||
@@ -54,25 +54,28 @@
|
||||
user.put_in_hands(DH)
|
||||
|
||||
/**
|
||||
* Called when a drone attempts to reactivate a dead drone
|
||||
*
|
||||
* If the owner is still ghosted, will notify them.
|
||||
* If the owner cannot be found, fails with an error message.
|
||||
*
|
||||
* Arguments:
|
||||
* * user - The [/mob/living] attempting to reactivate the drone
|
||||
*/
|
||||
* Called when a drone attempts to reactivate a dead drone
|
||||
*
|
||||
* If the owner is still ghosted, will notify them.
|
||||
* If the owner cannot be found, fails with an error message.
|
||||
*
|
||||
* Arguments:
|
||||
* * user - The [/mob/living] attempting to reactivate the drone
|
||||
*/
|
||||
/mob/living/simple_animal/drone/proc/try_reactivate(mob/living/user)
|
||||
var/mob/dead/observer/G = get_ghost()
|
||||
if(!client && (!G || !G.client))
|
||||
var/list/faux_gadgets = list("hypertext inflator","failsafe directory","DRM switch","stack initializer",\
|
||||
"anti-freeze capacitor","data stream diode","TCP bottleneck","supercharged I/O bolt",\
|
||||
"tradewind stabilizer","radiated XML cable","registry fluid tank","open-source debunker")
|
||||
var/list/faux_gadgets = list(
|
||||
"hypertext inflator","failsafe directory","DRM switch","stack initializer",\
|
||||
"anti-freeze capacitor","data stream diode","TCP bottleneck","supercharged I/O bolt",\
|
||||
"tradewind stabilizer","radiated XML cable","registry fluid tank","open-source debunker",
|
||||
)
|
||||
|
||||
var/list/faux_problems = list("won't be able to tune their bootstrap projector","will constantly remix their binary pool"+\
|
||||
" even though the BMX calibrator is working","will start leaking their XSS coolant",\
|
||||
"can't tell if their ethernet detour is moving or not", "won't be able to reseed enough"+\
|
||||
" kernels to function properly","can't start their neurotube console")
|
||||
" even though the BMX calibrator is working","will start leaking their XSS coolant",\
|
||||
"can't tell if their ethernet detour is moving or not", "won't be able to reseed enough"+\
|
||||
" kernels to function properly","can't start their neurotube console",
|
||||
)
|
||||
|
||||
to_chat(user, "<span class='warning'>You can't seem to find the [pick(faux_gadgets)]! Without it, [src] [pick(faux_problems)].</span>")
|
||||
return
|
||||
@@ -101,10 +104,10 @@
|
||||
return //This used to not exist and drones who repaired themselves also stabbed the shit out of themselves.
|
||||
else if(I.tool_behaviour == TOOL_WRENCH && user != src) //They aren't required to be hacked, because laws can change in other ways (i.e. admins)
|
||||
user.visible_message("<span class='notice'>[user] starts resetting [src]...</span>", \
|
||||
"<span class='notice'>You press down on [src]'s factory reset control...</span>")
|
||||
"<span class='notice'>You press down on [src]'s factory reset control...</span>")
|
||||
if(I.use_tool(src, user, 50, volume=50))
|
||||
user.visible_message("<span class='notice'>[user] resets [src]!</span>", \
|
||||
"<span class='notice'>You reset [src]'s directives to factory defaults!</span>")
|
||||
"<span class='notice'>You reset [src]'s directives to factory defaults!</span>")
|
||||
update_drone_hack(FALSE)
|
||||
return
|
||||
else
|
||||
@@ -121,17 +124,17 @@
|
||||
return 0 //multiplier for whatever head armor you wear as a drone
|
||||
|
||||
/**
|
||||
* Hack or unhack a drone
|
||||
*
|
||||
* This changes the drone's laws to destroy the station or resets them
|
||||
* to normal.
|
||||
*
|
||||
* Some debuffs are applied like slowing the drone down and disabling
|
||||
* vent crawling
|
||||
*
|
||||
* Arguments
|
||||
* * hack - Boolean if the drone is being hacked or unhacked
|
||||
*/
|
||||
* Hack or unhack a drone
|
||||
*
|
||||
* This changes the drone's laws to destroy the station or resets them
|
||||
* to normal.
|
||||
*
|
||||
* Some debuffs are applied like slowing the drone down and disabling
|
||||
* vent crawling
|
||||
*
|
||||
* Arguments
|
||||
* * hack - Boolean if the drone is being hacked or unhacked
|
||||
*/
|
||||
/mob/living/simple_animal/drone/proc/update_drone_hack(hack)
|
||||
if(!mind)
|
||||
return
|
||||
@@ -171,29 +174,29 @@
|
||||
update_drone_icon_hacked()
|
||||
|
||||
/**
|
||||
* # F R E E D R O N E
|
||||
* ### R
|
||||
* ### E
|
||||
* ### E
|
||||
* ### D
|
||||
* ### R
|
||||
* ### O
|
||||
* ### N
|
||||
* ### E
|
||||
*/
|
||||
* # F R E E D R O N E
|
||||
* ### R
|
||||
* ### E
|
||||
* ### E
|
||||
* ### D
|
||||
* ### R
|
||||
* ### O
|
||||
* ### N
|
||||
* ### E
|
||||
*/
|
||||
/mob/living/simple_animal/drone/proc/liberate()
|
||||
laws = "1. You are a Free Drone."
|
||||
to_chat(src, laws)
|
||||
|
||||
/**
|
||||
* Changes the icon state to a hacked version
|
||||
*
|
||||
* See also
|
||||
* * [/mob/living/simple_animal/drone/var/visualAppearance]
|
||||
* * [MAINTDRONE]
|
||||
* * [REPAIRDRONE]
|
||||
* * [SCOUTDRONE]
|
||||
*/
|
||||
* Changes the icon state to a hacked version
|
||||
*
|
||||
* See also
|
||||
* * [/mob/living/simple_animal/drone/var/visualAppearance]
|
||||
* * [MAINTDRONE]
|
||||
* * [REPAIRDRONE]
|
||||
* * [SCOUTDRONE]
|
||||
*/
|
||||
/mob/living/simple_animal/drone/proc/update_drone_icon_hacked() //this is hacked both ways
|
||||
var/static/hacked_appearances = list(
|
||||
SCOUTDRONE = SCOUTDRONE_HACKED,
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
//Drone verbs that appear in the Drone tab and on buttons
|
||||
|
||||
/**
|
||||
* Echoes drone laws to the user
|
||||
*
|
||||
* See [/mob/living/simple_animal/drone/var/laws]
|
||||
*/
|
||||
* Echoes drone laws to the user
|
||||
*
|
||||
* See [/mob/living/simple_animal/drone/var/laws]
|
||||
*/
|
||||
/mob/living/simple_animal/drone/verb/check_laws()
|
||||
set category = "Drone"
|
||||
set name = "Check Laws"
|
||||
@@ -17,16 +17,16 @@
|
||||
to_chat(src, laws)
|
||||
|
||||
/**
|
||||
* Creates an alert to drones in the same network
|
||||
*
|
||||
* Prompts user for alert level of:
|
||||
* * Low
|
||||
* * Medium
|
||||
* * High
|
||||
* * Critical
|
||||
*
|
||||
* Attaches area name to message
|
||||
*/
|
||||
* Creates an alert to drones in the same network
|
||||
*
|
||||
* Prompts user for alert level of:
|
||||
* * Low
|
||||
* * Medium
|
||||
* * High
|
||||
* * Critical
|
||||
*
|
||||
* Attaches area name to message
|
||||
*/
|
||||
/mob/living/simple_animal/drone/verb/drone_ping()
|
||||
set category = "Drone"
|
||||
set name = "Drone ping"
|
||||
|
||||
@@ -93,12 +93,12 @@
|
||||
update_inv_internal_storage()
|
||||
|
||||
/**
|
||||
* Prompt for usr to pick [/mob/living/simple_animal/drone/var/visualAppearance]
|
||||
*
|
||||
* Does nothing if there is no usr
|
||||
*
|
||||
* Called on [/mob/proc/Login]
|
||||
*/
|
||||
* Prompt for usr to pick [/mob/living/simple_animal/drone/var/visualAppearance]
|
||||
*
|
||||
* Does nothing if there is no usr
|
||||
*
|
||||
* Called on [/mob/proc/Login]
|
||||
*/
|
||||
/mob/living/simple_animal/drone/proc/pickVisualAppearance()
|
||||
picked = FALSE
|
||||
var/list/drone_icons = list(
|
||||
@@ -141,8 +141,8 @@
|
||||
picked = TRUE
|
||||
|
||||
/**
|
||||
* check_menu: Checks if we are allowed to interact with a radial menu
|
||||
*/
|
||||
* check_menu: Checks if we are allowed to interact with a radial menu
|
||||
*/
|
||||
/mob/living/simple_animal/drone/proc/check_menu()
|
||||
if(!istype(src))
|
||||
return FALSE
|
||||
|
||||
@@ -121,8 +121,8 @@
|
||||
return ..()
|
||||
|
||||
/**
|
||||
*Checks the mouse cap, if it's above the cap, doesn't spawn a mouse. If below, spawns a mouse and adds it to cheeserats.
|
||||
*/
|
||||
*Checks the mouse cap, if it's above the cap, doesn't spawn a mouse. If below, spawns a mouse and adds it to cheeserats.
|
||||
*/
|
||||
/mob/living/simple_animal/mouse/proc/be_fruitful()
|
||||
var/cap = CONFIG_GET(number/ratcap)
|
||||
if(LAZYLEN(SSmobs.cheeserats) >= cap)
|
||||
@@ -133,8 +133,8 @@
|
||||
visible_message("<span class='notice'>[src] nibbles through the cheese, attracting another mouse!</span>")
|
||||
|
||||
/**
|
||||
*Spawns a new regal rat, says some good jazz, and if sentient, transfers the relivant mind.
|
||||
*/
|
||||
*Spawns a new regal rat, says some good jazz, and if sentient, transfers the relivant mind.
|
||||
*/
|
||||
/mob/living/simple_animal/mouse/proc/evolve()
|
||||
var/mob/living/simple_animal/hostile/regalrat/regalrat = new /mob/living/simple_animal/hostile/regalrat/controlled(loc)
|
||||
visible_message("<span class='warning'>[src] devours the cheese! He morphs into something... greater!</span>")
|
||||
|
||||
@@ -1,43 +1,43 @@
|
||||
/mob/living/simple_animal/hostile/retaliate/poison
|
||||
var/poison_per_bite = 0
|
||||
var/poison_type = /datum/reagent/toxin
|
||||
var/poison_per_bite = 0
|
||||
var/poison_type = /datum/reagent/toxin
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/poison/AttackingTarget()
|
||||
. = ..()
|
||||
if(. && isliving(target))
|
||||
var/mob/living/L = target
|
||||
if(L.reagents && !poison_per_bite == 0)
|
||||
L.reagents.add_reagent(poison_type, poison_per_bite)
|
||||
return .
|
||||
. = ..()
|
||||
if(. && isliving(target))
|
||||
var/mob/living/L = target
|
||||
if(L.reagents && !poison_per_bite == 0)
|
||||
L.reagents.add_reagent(poison_type, poison_per_bite)
|
||||
return .
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/poison/snake
|
||||
name = "snake"
|
||||
desc = "A slithery snake. These legless reptiles are the bane of mice and adventurers alike."
|
||||
icon_state = "snake"
|
||||
icon_living = "snake"
|
||||
icon_dead = "snake_dead"
|
||||
speak_emote = list("hisses")
|
||||
health = 20
|
||||
maxHealth = 20
|
||||
attack_verb_continuous = "bites"
|
||||
attack_verb_simple = "bite"
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 6
|
||||
response_help_continuous = "pets"
|
||||
response_help_simple = "pet"
|
||||
response_disarm_continuous = "shoos"
|
||||
response_disarm_simple = "shoo"
|
||||
response_harm_continuous = "steps on"
|
||||
response_harm_simple = "step on"
|
||||
faction = list("hostile")
|
||||
ventcrawler = VENTCRAWLER_ALWAYS
|
||||
density = FALSE
|
||||
pass_flags = PASSTABLE | PASSMOB
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
mob_biotypes = MOB_ORGANIC|MOB_BEAST|MOB_REPTILE
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
obj_damage = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
name = "snake"
|
||||
desc = "A slithery snake. These legless reptiles are the bane of mice and adventurers alike."
|
||||
icon_state = "snake"
|
||||
icon_living = "snake"
|
||||
icon_dead = "snake_dead"
|
||||
speak_emote = list("hisses")
|
||||
health = 20
|
||||
maxHealth = 20
|
||||
attack_verb_continuous = "bites"
|
||||
attack_verb_simple = "bite"
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 6
|
||||
response_help_continuous = "pets"
|
||||
response_help_simple = "pet"
|
||||
response_disarm_continuous = "shoos"
|
||||
response_disarm_simple = "shoo"
|
||||
response_harm_continuous = "steps on"
|
||||
response_harm_simple = "step on"
|
||||
faction = list("hostile")
|
||||
ventcrawler = VENTCRAWLER_ALWAYS
|
||||
density = FALSE
|
||||
pass_flags = PASSTABLE | PASSMOB
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
mob_biotypes = MOB_ORGANIC|MOB_BEAST|MOB_REPTILE
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
obj_damage = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/poison/snake/Initialize()
|
||||
. = ..()
|
||||
@@ -64,9 +64,9 @@
|
||||
return mice
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/poison/snake/AttackingTarget()
|
||||
if(istype(target, /mob/living/simple_animal/mouse))
|
||||
visible_message("<span class='notice'>[name] consumes [target] in a single gulp!</span>", "<span class='notice'>You consume [target] in a single gulp!</span>")
|
||||
QDEL_NULL(target)
|
||||
adjustBruteLoss(-2)
|
||||
else
|
||||
return ..()
|
||||
if(istype(target, /mob/living/simple_animal/mouse))
|
||||
visible_message("<span class='notice'>[name] consumes [target] in a single gulp!</span>", "<span class='notice'>You consume [target] in a single gulp!</span>")
|
||||
QDEL_NULL(target)
|
||||
adjustBruteLoss(-2)
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -658,52 +658,52 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
name = "Holoparasite Guide"
|
||||
info = {"<b>A list of Holoparasite Types</b><br>
|
||||
|
||||
<br>
|
||||
<b>Assassin</b>: Does medium damage and takes full damage, but can enter stealth, causing its next attack to do massive damage and ignore armor. However, it becomes briefly unable to recall after attacking from stealth.<br>
|
||||
<br>
|
||||
<b>Chaos</b>: Ignites enemies on touch and causes them to hallucinate all nearby people as the parasite. Automatically extinguishes the user if they catch on fire.<br>
|
||||
<br>
|
||||
<b>Charger</b>: Moves extremely fast, does medium damage on attack, and can charge at targets, damaging the first target hit and forcing them to drop any items they are holding.<br>
|
||||
<br>
|
||||
<b>Explosive</b>: High damage resist and medium power attack that may explosively teleport targets. Can turn any object, including objects too large to pick up, into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered or after a delay.<br>
|
||||
<br>
|
||||
<b>Lightning</b>: Attacks apply lightning chains to targets. Has a lightning chain to the user. Lightning chains shock everything near them, doing constant damage.<br>
|
||||
<br>
|
||||
<b>Protector</b>: Causes you to teleport to it when out of range, unlike other parasites. Has two modes; Combat, where it does and takes medium damage, and Protection, where it does and takes almost no damage but moves slightly slower.<br>
|
||||
<br>
|
||||
<b>Ranged</b>: Has two modes. Ranged; which fires a constant stream of weak, armor-ignoring projectiles. Scout; Cannot attack, but can move through walls and is quite hard to see. Can lay surveillance snares, which alert it when crossed, in either mode.<br>
|
||||
<br>
|
||||
<b>Standard</b>: Devastating close combat attacks and high damage resist. Can smash through weak walls.<br>
|
||||
<br>
|
||||
<b>Gravitokinetic</b>: Attacks will apply crushing gravity to the target. Can target the ground as well to slow targets advancing on you, but this will affect the user.<br>
|
||||
<br>
|
||||
<br>
|
||||
<b>Assassin</b>: Does medium damage and takes full damage, but can enter stealth, causing its next attack to do massive damage and ignore armor. However, it becomes briefly unable to recall after attacking from stealth.<br>
|
||||
<br>
|
||||
<b>Chaos</b>: Ignites enemies on touch and causes them to hallucinate all nearby people as the parasite. Automatically extinguishes the user if they catch on fire.<br>
|
||||
<br>
|
||||
<b>Charger</b>: Moves extremely fast, does medium damage on attack, and can charge at targets, damaging the first target hit and forcing them to drop any items they are holding.<br>
|
||||
<br>
|
||||
<b>Explosive</b>: High damage resist and medium power attack that may explosively teleport targets. Can turn any object, including objects too large to pick up, into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered or after a delay.<br>
|
||||
<br>
|
||||
<b>Lightning</b>: Attacks apply lightning chains to targets. Has a lightning chain to the user. Lightning chains shock everything near them, doing constant damage.<br>
|
||||
<br>
|
||||
<b>Protector</b>: Causes you to teleport to it when out of range, unlike other parasites. Has two modes; Combat, where it does and takes medium damage, and Protection, where it does and takes almost no damage but moves slightly slower.<br>
|
||||
<br>
|
||||
<b>Ranged</b>: Has two modes. Ranged; which fires a constant stream of weak, armor-ignoring projectiles. Scout; Cannot attack, but can move through walls and is quite hard to see. Can lay surveillance snares, which alert it when crossed, in either mode.<br>
|
||||
<br>
|
||||
<b>Standard</b>: Devastating close combat attacks and high damage resist. Can smash through weak walls.<br>
|
||||
<br>
|
||||
<b>Gravitokinetic</b>: Attacks will apply crushing gravity to the target. Can target the ground as well to slow targets advancing on you, but this will affect the user.<br>
|
||||
<br>
|
||||
"}
|
||||
|
||||
/obj/item/paper/guides/antag/guardian/wizard
|
||||
name = "Guardian Guide"
|
||||
info = {"<b>A list of Guardian Types</b><br>
|
||||
|
||||
<br>
|
||||
<b>Assassin</b>: Does medium damage and takes full damage, but can enter stealth, causing its next attack to do massive damage and ignore armor. However, it becomes briefly unable to recall after attacking from stealth.<br>
|
||||
<br>
|
||||
<b>Chaos</b>: Ignites enemies on touch and causes them to hallucinate all nearby people as the guardian. Automatically extinguishes the user if they catch on fire.<br>
|
||||
<br>
|
||||
<b>Charger</b>: Moves extremely fast, does medium damage on attack, and can charge at targets, damaging the first target hit and forcing them to drop any items they are holding.<br>
|
||||
<br>
|
||||
<b>Dexterous</b>: Does low damage on attack, but is capable of holding items and storing a single item within it. It will drop items held in its hands when it recalls, but it will retain the stored item.<br>
|
||||
<br>
|
||||
<b>Explosive</b>: High damage resist and medium power attack that may explosively teleport targets. Can turn any object, including objects too large to pick up, into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered or after a delay.<br>
|
||||
<br>
|
||||
<b>Lightning</b>: Attacks apply lightning chains to targets. Has a lightning chain to the user. Lightning chains shock everything near them, doing constant damage.<br>
|
||||
<br>
|
||||
<b>Protector</b>: Causes you to teleport to it when out of range, unlike other parasites. Has two modes; Combat, where it does and takes medium damage, and Protection, where it does and takes almost no damage but moves slightly slower.<br>
|
||||
<br>
|
||||
<b>Ranged</b>: Has two modes. Ranged; which fires a constant stream of weak, armor-ignoring projectiles. Scout; Cannot attack, but can move through walls and is quite hard to see. Can lay surveillance snares, which alert it when crossed, in either mode.<br>
|
||||
<br>
|
||||
<b>Standard</b>: Devastating close combat attacks and high damage resist. Can smash through weak walls.<br>
|
||||
<br>
|
||||
<b>Gravitokinetic</b>: Attacks will apply crushing gravity to the target. Can target the ground as well to slow targets advancing on you, but this will affect the user.<br>
|
||||
<br>
|
||||
<br>
|
||||
<b>Assassin</b>: Does medium damage and takes full damage, but can enter stealth, causing its next attack to do massive damage and ignore armor. However, it becomes briefly unable to recall after attacking from stealth.<br>
|
||||
<br>
|
||||
<b>Chaos</b>: Ignites enemies on touch and causes them to hallucinate all nearby people as the guardian. Automatically extinguishes the user if they catch on fire.<br>
|
||||
<br>
|
||||
<b>Charger</b>: Moves extremely fast, does medium damage on attack, and can charge at targets, damaging the first target hit and forcing them to drop any items they are holding.<br>
|
||||
<br>
|
||||
<b>Dexterous</b>: Does low damage on attack, but is capable of holding items and storing a single item within it. It will drop items held in its hands when it recalls, but it will retain the stored item.<br>
|
||||
<br>
|
||||
<b>Explosive</b>: High damage resist and medium power attack that may explosively teleport targets. Can turn any object, including objects too large to pick up, into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered or after a delay.<br>
|
||||
<br>
|
||||
<b>Lightning</b>: Attacks apply lightning chains to targets. Has a lightning chain to the user. Lightning chains shock everything near them, doing constant damage.<br>
|
||||
<br>
|
||||
<b>Protector</b>: Causes you to teleport to it when out of range, unlike other parasites. Has two modes; Combat, where it does and takes medium damage, and Protection, where it does and takes almost no damage but moves slightly slower.<br>
|
||||
<br>
|
||||
<b>Ranged</b>: Has two modes. Ranged; which fires a constant stream of weak, armor-ignoring projectiles. Scout; Cannot attack, but can move through walls and is quite hard to see. Can lay surveillance snares, which alert it when crossed, in either mode.<br>
|
||||
<br>
|
||||
<b>Standard</b>: Devastating close combat attacks and high damage resist. Can smash through weak walls.<br>
|
||||
<br>
|
||||
<b>Gravitokinetic</b>: Attacks will apply crushing gravity to the target. Can target the ground as well to slow targets advancing on you, but this will affect the user.<br>
|
||||
<br>
|
||||
"}
|
||||
|
||||
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/poison/bees/AttackingTarget()
|
||||
//Pollinate
|
||||
//Pollinate
|
||||
if(istype(target, /obj/machinery/hydroponics))
|
||||
var/obj/machinery/hydroponics/Hydro = target
|
||||
pollinate(Hydro)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
* # Poison Hostile Simplemob
|
||||
*
|
||||
* A subtype of the hostile simplemob which injects reagents into its target on attack, assuming the target accepts reagents.
|
||||
*/
|
||||
* # Poison Hostile Simplemob
|
||||
*
|
||||
* A subtype of the hostile simplemob which injects reagents into its target on attack, assuming the target accepts reagents.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/poison
|
||||
///How much of a reagent the mob injects on attack
|
||||
var/poison_per_bite = 5
|
||||
@@ -15,24 +15,24 @@
|
||||
inject_poison(target)
|
||||
|
||||
/**
|
||||
* Injects poison into a given target.
|
||||
*
|
||||
* Checks if a given target accepts reagents, and then injects a given reagent into them if so.
|
||||
* Arguments:
|
||||
* * living_target - The targeted mob
|
||||
*/
|
||||
* Injects poison into a given target.
|
||||
*
|
||||
* Checks if a given target accepts reagents, and then injects a given reagent into them if so.
|
||||
* Arguments:
|
||||
* * living_target - The targeted mob
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/poison/proc/inject_poison(mob/living/living_target)
|
||||
if(poison_per_bite != 0 && living_target?.reagents)
|
||||
living_target.reagents.add_reagent(poison_type, poison_per_bite)
|
||||
|
||||
/**
|
||||
* # Giant Spider
|
||||
*
|
||||
* A versatile mob which can occur from a variety of sources.
|
||||
*
|
||||
* A mob which can be created by botany or xenobiology. The basic type is the guard, which is slower but sturdy and outputs good damage.
|
||||
* All spiders can produce webbing. Currently does not inject toxin into its target.
|
||||
*/
|
||||
* # Giant Spider
|
||||
*
|
||||
* A versatile mob which can occur from a variety of sources.
|
||||
*
|
||||
* A mob which can be created by botany or xenobiology. The basic type is the guard, which is slower but sturdy and outputs good damage.
|
||||
* All spiders can produce webbing. Currently does not inject toxin into its target.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider
|
||||
name = "giant spider"
|
||||
desc = "Furry and black, it makes you shudder to look at it. This one has deep red eyes."
|
||||
@@ -109,12 +109,12 @@
|
||||
clear_alert("temp")
|
||||
|
||||
/**
|
||||
* # Spider Hunter
|
||||
*
|
||||
* A subtype of the giant spider with purple eyes and toxin injection.
|
||||
*
|
||||
* A subtype of the giant spider which is faster, has toxin injection, but less health. This spider is only slightly slower than a human.
|
||||
*/
|
||||
* # Spider Hunter
|
||||
*
|
||||
* A subtype of the giant spider with purple eyes and toxin injection.
|
||||
*
|
||||
* A subtype of the giant spider which is faster, has toxin injection, but less health. This spider is only slightly slower than a human.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/hunter
|
||||
name = "hunter spider"
|
||||
desc = "Furry and black, it makes you shudder to look at it. This one has sparkling purple eyes."
|
||||
@@ -130,13 +130,13 @@
|
||||
speed = -0.1
|
||||
|
||||
/**
|
||||
* # Spider Nurse
|
||||
*
|
||||
* A subtype of the giant spider with green eyes that specializes in support.
|
||||
*
|
||||
* A subtype of the giant spider which specializes in support skills. Nurses can place down webbing in a quarter of the time
|
||||
* that other species can and can wrap other spiders' wounds, healing them. Note that it cannot heal itself.
|
||||
*/
|
||||
* # Spider Nurse
|
||||
*
|
||||
* A subtype of the giant spider with green eyes that specializes in support.
|
||||
*
|
||||
* A subtype of the giant spider which specializes in support skills. Nurses can place down webbing in a quarter of the time
|
||||
* that other species can and can wrap other spiders' wounds, healing them. Note that it cannot heal itself.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/nurse
|
||||
name = "nurse spider"
|
||||
desc = "Furry and black, it makes you shudder to look at it. This one has brilliant green eyes."
|
||||
@@ -180,13 +180,13 @@
|
||||
is_busy = FALSE
|
||||
|
||||
/**
|
||||
* # Tarantula
|
||||
*
|
||||
* The tank of spider subtypes. Is incredibly slow when not on webbing, but has a lunge and the highest health and damage of any spider type.
|
||||
*
|
||||
* A subtype of the giant spider which specializes in pure strength and staying power. Is slowed down greatly when not on webbing, but can lunge
|
||||
* to throw off attackers and possibly to stun them, allowing the tarantula to net an easy kill.
|
||||
*/
|
||||
* # Tarantula
|
||||
*
|
||||
* The tank of spider subtypes. Is incredibly slow when not on webbing, but has a lunge and the highest health and damage of any spider type.
|
||||
*
|
||||
* A subtype of the giant spider which specializes in pure strength and staying power. Is slowed down greatly when not on webbing, but can lunge
|
||||
* to throw off attackers and possibly to stun them, allowing the tarantula to net an easy kill.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/tarantula
|
||||
name = "tarantula"
|
||||
desc = "Furry and black, it makes you shudder to look at it. This one has abyssal red eyes."
|
||||
@@ -228,13 +228,13 @@
|
||||
silk_walking = FALSE
|
||||
|
||||
/**
|
||||
* # Spider Viper
|
||||
*
|
||||
* The assassin of spider subtypes. Essentially a juiced up version of the hunter.
|
||||
*
|
||||
* A subtype of the giant spider which specializes in speed and poison. Injects a deadlier toxin than other spiders, moves extremely fast,
|
||||
* but like the hunter has a limited amount of health.
|
||||
*/
|
||||
* # Spider Viper
|
||||
*
|
||||
* The assassin of spider subtypes. Essentially a juiced up version of the hunter.
|
||||
*
|
||||
* A subtype of the giant spider which specializes in speed and poison. Injects a deadlier toxin than other spiders, moves extremely fast,
|
||||
* but like the hunter has a limited amount of health.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/viper
|
||||
name = "viper spider"
|
||||
desc = "Furry and black, it makes you shudder to look at it. This one has effervescent purple eyes."
|
||||
@@ -252,15 +252,15 @@
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
|
||||
/**
|
||||
* # Spider Broodmother
|
||||
*
|
||||
* The reproductive line of spider subtypes. Is the only subtype to lay eggs, which is the only way for spiders to reproduce.
|
||||
*
|
||||
* A subtype of the giant spider which is the crux of a spider horde. Can lay normal eggs at any time which become normal spider types,
|
||||
* but by consuming human bodies can lay special eggs which can become one of the more specialized subtypes, including possibly another broodmother.
|
||||
* However, this spider subtype has no offensive capability and can be quickly dispatched without assistance from other spiders. They are also capable
|
||||
* of sending messages to all living spiders, being a communication line for the rest of the horde.
|
||||
*/
|
||||
* # Spider Broodmother
|
||||
*
|
||||
* The reproductive line of spider subtypes. Is the only subtype to lay eggs, which is the only way for spiders to reproduce.
|
||||
*
|
||||
* A subtype of the giant spider which is the crux of a spider horde. Can lay normal eggs at any time which become normal spider types,
|
||||
* but by consuming human bodies can lay special eggs which can become one of the more specialized subtypes, including possibly another broodmother.
|
||||
* However, this spider subtype has no offensive capability and can be quickly dispatched without assistance from other spiders. They are also capable
|
||||
* of sending messages to all living spiders, being a communication line for the rest of the horde.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/midwife
|
||||
name = "broodmother spider"
|
||||
desc = "Furry and black, it makes you shudder to look at it. This one has scintillating green eyes. Might also be hiding a real knife somewhere."
|
||||
@@ -305,11 +305,11 @@
|
||||
letmetalkpls.Grant(src)
|
||||
|
||||
/**
|
||||
* Attempts to cocoon the spider's current cocoon_target.
|
||||
*
|
||||
* Attempts to coccon the spider's cocoon_target after a do_after.
|
||||
* If the target is a human who hasn't been drained before, ups the spider's fed counter so it can lay enriched eggs.
|
||||
*/
|
||||
* Attempts to cocoon the spider's current cocoon_target.
|
||||
*
|
||||
* Attempts to coccon the spider's cocoon_target after a do_after.
|
||||
* If the target is a human who hasn't been drained before, ups the spider's fed counter so it can lay enriched eggs.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/midwife/proc/cocoon()
|
||||
if(stat == DEAD || !cocoon_target || cocoon_target.anchored)
|
||||
return
|
||||
@@ -587,13 +587,13 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Sends a message to all spiders from the target.
|
||||
*
|
||||
* Allows the user to send a message to all spiders that exist. Ghosts will also see the message.
|
||||
* Arguments:
|
||||
* * user - The spider sending the message
|
||||
* * message - The message to be sent
|
||||
*/
|
||||
* Sends a message to all spiders from the target.
|
||||
*
|
||||
* Allows the user to send a message to all spiders that exist. Ghosts will also see the message.
|
||||
* Arguments:
|
||||
* * user - The spider sending the message
|
||||
* * message - The message to be sent
|
||||
*/
|
||||
/datum/action/innate/spider/comm/proc/spider_command(mob/living/user, message)
|
||||
if(!message)
|
||||
return
|
||||
@@ -607,13 +607,13 @@
|
||||
usr.log_talk(message, LOG_SAY, tag="spider command")
|
||||
|
||||
/**
|
||||
* # Giant Ice Spider
|
||||
*
|
||||
* A giant spider immune to temperature damage. Injects frost oil.
|
||||
*
|
||||
* A subtype of the giant spider which is immune to temperature damage, unlike its normal counterpart.
|
||||
* Currently unused in the game unless spawned by admins.
|
||||
*/
|
||||
* # Giant Ice Spider
|
||||
*
|
||||
* A giant spider immune to temperature damage. Injects frost oil.
|
||||
*
|
||||
* A subtype of the giant spider which is immune to temperature damage, unlike its normal counterpart.
|
||||
* Currently unused in the game unless spawned by admins.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/ice
|
||||
name = "giant ice spider"
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
@@ -624,12 +624,12 @@
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
|
||||
/**
|
||||
* # Ice Nurse Spider
|
||||
*
|
||||
* A nurse spider immune to temperature damage. Injects frost oil.
|
||||
*
|
||||
* Same thing as the giant ice spider but mirrors the nurse subtype. Also unused.
|
||||
*/
|
||||
* # Ice Nurse Spider
|
||||
*
|
||||
* A nurse spider immune to temperature damage. Injects frost oil.
|
||||
*
|
||||
* Same thing as the giant ice spider but mirrors the nurse subtype. Also unused.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/nurse/ice
|
||||
name = "giant ice spider"
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
@@ -639,12 +639,12 @@
|
||||
color = rgb(114,228,250)
|
||||
|
||||
/**
|
||||
* # Ice Hunter Spider
|
||||
*
|
||||
* A hunter spider immune to temperature damage. Injects frost oil.
|
||||
*
|
||||
* Same thing as the giant ice spider but mirrors the hunter subtype. Also unused.
|
||||
*/
|
||||
* # Ice Hunter Spider
|
||||
*
|
||||
* A hunter spider immune to temperature damage. Injects frost oil.
|
||||
*
|
||||
* Same thing as the giant ice spider but mirrors the hunter subtype. Also unused.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/hunter/ice
|
||||
name = "giant ice spider"
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
@@ -655,13 +655,13 @@
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
|
||||
/**
|
||||
* # Flesh Spider
|
||||
*
|
||||
* A giant spider subtype specifically created by changelings. Built to be self-sufficient, unlike other spider types.
|
||||
*
|
||||
* A subtype of giant spider which only occurs from changelings. Has the base stats of a hunter, but they can heal themselves.
|
||||
* They also produce web in 70% of the time of the base spider. They also occasionally leave puddles of blood when they walk around. Flavorful!
|
||||
*/
|
||||
* # Flesh Spider
|
||||
*
|
||||
* A giant spider subtype specifically created by changelings. Built to be self-sufficient, unlike other spider types.
|
||||
*
|
||||
* A subtype of giant spider which only occurs from changelings. Has the base stats of a hunter, but they can heal themselves.
|
||||
* They also produce web in 70% of the time of the base spider. They also occasionally leave puddles of blood when they walk around. Flavorful!
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/hunter/flesh
|
||||
desc = "A odd fleshy creature in the shape of a spider. Its eyes are pitch black and soulless."
|
||||
icon_state = "flesh_spider"
|
||||
@@ -692,12 +692,12 @@
|
||||
return ..()
|
||||
|
||||
/**
|
||||
* # Viper Spider (Wizard)
|
||||
*
|
||||
* A viper spider buffed slightly so I don't need to hear anyone complain about me nerfing an already useless wizard ability.
|
||||
*
|
||||
* A viper spider with buffed attributes. All I changed was its health value and gave it the ability to ventcrawl. The crux of the wizard meta.
|
||||
*/
|
||||
* # Viper Spider (Wizard)
|
||||
*
|
||||
* A viper spider buffed slightly so I don't need to hear anyone complain about me nerfing an already useless wizard ability.
|
||||
*
|
||||
* A viper spider with buffed attributes. All I changed was its health value and gave it the ability to ventcrawl. The crux of the wizard meta.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/viper/wizard
|
||||
maxHealth = 80
|
||||
health = 80
|
||||
|
||||
@@ -236,11 +236,11 @@
|
||||
/mob/living/simple_animal/hostile/retaliate/goose/vomit/proc/deadchat_plays_goose()
|
||||
stop_automated_movement = TRUE
|
||||
AddComponent(/datum/component/deadchat_control, ANARCHY_MODE, list(
|
||||
"up" = CALLBACK(GLOBAL_PROC, .proc/_step, src, NORTH),
|
||||
"down" = CALLBACK(GLOBAL_PROC, .proc/_step, src, SOUTH),
|
||||
"left" = CALLBACK(GLOBAL_PROC, .proc/_step, src, WEST),
|
||||
"right" = CALLBACK(GLOBAL_PROC, .proc/_step, src, EAST),
|
||||
"vomit" = CALLBACK(src, .proc/vomit_prestart, 25)), 12 SECONDS, 4 SECONDS)
|
||||
"up" = CALLBACK(GLOBAL_PROC, .proc/_step, src, NORTH),
|
||||
"down" = CALLBACK(GLOBAL_PROC, .proc/_step, src, SOUTH),
|
||||
"left" = CALLBACK(GLOBAL_PROC, .proc/_step, src, WEST),
|
||||
"right" = CALLBACK(GLOBAL_PROC, .proc/_step, src, EAST),
|
||||
"vomit" = CALLBACK(src, .proc/vomit_prestart, 25)), 12 SECONDS, 4 SECONDS)
|
||||
|
||||
/datum/action/cooldown/vomit
|
||||
name = "Vomit"
|
||||
|
||||
@@ -598,8 +598,8 @@
|
||||
faction = fren.faction.Copy()
|
||||
|
||||
/**
|
||||
* Proc that handles a charge attack windup for a mob.
|
||||
*/
|
||||
* Proc that handles a charge attack windup for a mob.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/proc/enter_charge(atom/target)
|
||||
if(charge_state || body_position == LYING_DOWN || HAS_TRAIT(src, TRAIT_IMMOBILIZED))
|
||||
return FALSE
|
||||
@@ -610,8 +610,8 @@
|
||||
addtimer(CALLBACK(src, .proc/handle_charge_target, target), 1.5 SECONDS, TIMER_STOPPABLE)
|
||||
|
||||
/**
|
||||
* Proc that throws the mob at the target after the windup.
|
||||
*/
|
||||
* Proc that throws the mob at the target after the windup.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/proc/handle_charge_target(atom/target)
|
||||
charge_state = TRUE
|
||||
throw_at(target, charge_distance, 1, src, FALSE, TRUE, callback = CALLBACK(src, .proc/charge_end))
|
||||
@@ -619,14 +619,14 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Proc that handles a charge attack after it's concluded.
|
||||
*/
|
||||
* Proc that handles a charge attack after it's concluded.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/proc/charge_end()
|
||||
charge_state = FALSE
|
||||
|
||||
/**
|
||||
* Proc that handles the charge impact of the charging mob.
|
||||
*/
|
||||
* Proc that handles the charge impact of the charging mob.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
|
||||
if(!charge_state)
|
||||
return ..()
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
/mob/living/simple_animal/hostile/jungle/seedling
|
||||
name = "seedling"
|
||||
desc = "This oversized, predatory flower conceals what can only be described as an organic energy cannon, and it will not die until its hidden vital organs are sliced out. \
|
||||
The concentrated streams of energy it sometimes produces require its full attention, attacking it during this time will prevent it from finishing its attack."
|
||||
The concentrated streams of energy it sometimes produces require its full attention, attacking it during this time will prevent it from finishing its attack."
|
||||
icon = 'icons/mob/jungle/seedling.dmi'
|
||||
icon_state = "seedling"
|
||||
icon_living = "seedling"
|
||||
|
||||
@@ -1,23 +1,21 @@
|
||||
|
||||
/*
|
||||
Mecha Pilots!
|
||||
by Remie Richards
|
||||
|
||||
Mecha pilot mobs are able to pilot Mecha to a rudimentary level
|
||||
This allows for certain mobs to be more of a threat (Because they're in a MECH)
|
||||
|
||||
Mecha Pilots can either spawn with one, or steal one!
|
||||
|
||||
(Inherits from syndicate just to avoid copy-paste)
|
||||
|
||||
Featuring:
|
||||
* Mecha piloting skills
|
||||
* Uses Mecha equipment
|
||||
* Uses Mecha special abilities in specific situations
|
||||
* Pure Evil Incarnate
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
* Mecha Pilots!
|
||||
* By Remie Richards
|
||||
*
|
||||
* Mecha pilot mobs are able to pilot Mecha to a rudimentary level
|
||||
* this allows for certain mobs to be more of a threat (Because they're in a MECH)
|
||||
*
|
||||
* Mecha Pilots can either spawn with one, or steal one!
|
||||
*
|
||||
* Inherits from syndicate just to avoid copy-paste)
|
||||
*
|
||||
* Featuring:
|
||||
* * Mecha piloting skills
|
||||
* * Uses Mecha equipment
|
||||
* * Uses Mecha special abilities in specific situations
|
||||
* * Pure Evil Incarnate
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/syndicate/mecha_pilot
|
||||
name = "Syndicate Mecha Pilot"
|
||||
desc = "Death to Nanotrasen. This variant comes in MECHA DEATH flavour."
|
||||
|
||||
@@ -19,9 +19,9 @@ It can charge at its target, and also heavily damaging anything directly hit in
|
||||
If at half health it will start to charge from all sides with clones.
|
||||
|
||||
When Bubblegum dies, it leaves behind a H.E.C.K. mining suit as well as a chest that can contain three things:
|
||||
1. A bottle that, when activated, drives everyone nearby into a frenzy
|
||||
2. A contract that marks for death the chosen target
|
||||
3. A spellblade that can slice off limbs at range
|
||||
A. A bottle that, when activated, drives everyone nearby into a frenzy
|
||||
B. A contract that marks for death the chosen target
|
||||
C. A spellblade that can slice off limbs at range
|
||||
|
||||
Difficulty: Hard
|
||||
|
||||
@@ -198,15 +198,15 @@ Difficulty: Hard
|
||||
. += L
|
||||
|
||||
/**
|
||||
* Attack by override for bubblegum
|
||||
*
|
||||
* This is used to award the frenching achievement for hitting bubblegum with a tongue
|
||||
*
|
||||
* Arguments:
|
||||
* * obj/item/W the item hitting bubblegum
|
||||
* * mob/user The user of the item
|
||||
* * params, extra parameters
|
||||
*/
|
||||
* Attack by override for bubblegum
|
||||
*
|
||||
* This is used to award the frenching achievement for hitting bubblegum with a tongue
|
||||
*
|
||||
* Arguments:
|
||||
* * obj/item/W the item hitting bubblegum
|
||||
* * mob/user The user of the item
|
||||
* * params, extra parameters
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/attackby(obj/item/W, mob/user, params)
|
||||
. = ..()
|
||||
if(istype(W, /obj/item/organ/tongue))
|
||||
|
||||
@@ -1,26 +1,23 @@
|
||||
/*
|
||||
|
||||
COLOSSUS
|
||||
|
||||
The colossus spawns randomly wherever a lavaland creature is able to spawn. It is powerful, ancient, and extremely deadly.
|
||||
The colossus has a degree of sentience, proving this in speech during its attacks.
|
||||
|
||||
It acts as a melee creature, chasing down and attacking its target while also using different attacks to augment its power that increase as it takes damage.
|
||||
|
||||
The colossus' true danger lies in its ranged capabilities. It fires immensely damaging death bolts that penetrate all armor in a variety of ways:
|
||||
1. The colossus fires death bolts in alternating patterns: the cardinal directions and the diagonal directions.
|
||||
2. The colossus fires death bolts in a shotgun-like pattern, instantly downing anything unfortunate enough to be hit by all of them.
|
||||
3. The colossus fires a spiral of death bolts.
|
||||
At 33% health, the colossus gains an additional attack:
|
||||
4. The colossus fires two spirals of death bolts, spinning in opposite directions.
|
||||
|
||||
When a colossus dies, it leaves behind a chunk of glowing crystal known as a black box. Anything placed inside will carry over into future rounds.
|
||||
For instance, you could place a bag of holding into the black box, and then kill another colossus next round and retrieve the bag of holding from inside.
|
||||
|
||||
Difficulty: Very Hard
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
* COLOSSUS
|
||||
*
|
||||
*The colossus spawns randomly wherever a lavaland creature is able to spawn. It is powerful, ancient, and extremely deadly.
|
||||
*The colossus has a degree of sentience, proving this in speech during its attacks.
|
||||
*
|
||||
*It acts as a melee creature, chasing down and attacking its target while also using different attacks to augment its power that increase as it takes damage.
|
||||
*
|
||||
*The colossus' true danger lies in its ranged capabilities. It fires immensely damaging death bolts that penetrate all armor in a variety of ways:
|
||||
*A. The colossus fires death bolts in alternating patterns: the cardinal directions and the diagonal directions.
|
||||
*B. The colossus fires death bolts in a shotgun-like pattern, instantly downing anything unfortunate enough to be hit by all of them.
|
||||
*C. The colossus fires a spiral of death bolts.
|
||||
*At 33% health, the colossus gains an additional attack:
|
||||
*D. The colossus fires two spirals of death bolts, spinning in opposite directions.
|
||||
*
|
||||
*When a colossus dies, it leaves behind a chunk of glowing crystal known as a black box. Anything placed inside will carry over into future rounds.
|
||||
*For instance, you could place a bag of holding into the black box, and then kill another colossus next round and retrieve the bag of holding from inside.
|
||||
*
|
||||
* Intended Difficulty: Very Hard
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus
|
||||
name = "colossus"
|
||||
desc = "A monstrous creature protected by heavy shielding."
|
||||
|
||||
@@ -9,31 +9,30 @@
|
||||
///used whenever the drake generates a hotspot
|
||||
#define DRAKE_FIRE_EXPOSURE 50
|
||||
|
||||
/*
|
||||
|
||||
ASH DRAKE
|
||||
|
||||
Ash drakes spawn randomly wherever a lavaland creature is able to spawn. They are the draconic guardians of the Necropolis.
|
||||
|
||||
It acts as a melee creature, chasing down and attacking its target while also using different attacks to augment its power that increase as it takes damage.
|
||||
|
||||
Whenever possible, the drake will breathe fire directly at it's target, igniting and heavily damaging anything caught in the blast.
|
||||
It also often causes lava to pool from the ground around you - many nearby turfs will temporarily turn into lava, dealing damage to anything on the turfs.
|
||||
The drake also utilizes its wings to fly into the sky, flying after its target and attempting to slam down on them. Anything near when it slams down takes huge damage.
|
||||
- Sometimes it will chain these swooping attacks over and over, making swiftness a necessity.
|
||||
- Sometimes, it will encase its target in an arena of lava
|
||||
|
||||
When an ash drake dies, it leaves behind a chest that can contain four things:
|
||||
1. A spectral blade that allows its wielder to call ghosts to it, enhancing its power
|
||||
2. A lava staff that allows its wielder to create lava
|
||||
3. A spellbook and wand of fireballs
|
||||
4. A bottle of dragon's blood with several effects, including turning its imbiber into a drake themselves.
|
||||
|
||||
When butchered, they leave behind diamonds, sinew, bone, and ash drake hide. Ash drake hide can be used to create a hooded cloak that protects its wearer from ash storms.
|
||||
|
||||
Difficulty: Medium
|
||||
|
||||
*/
|
||||
/*£
|
||||
*
|
||||
*ASH DRAKE
|
||||
*
|
||||
*Ash drakes spawn randomly wherever a lavaland creature is able to spawn. They are the draconic guardians of the Necropolis.
|
||||
*
|
||||
*It acts as a melee creature, chasing down and attacking its target while also using different attacks to augment its power that increase as it takes damage.
|
||||
*
|
||||
*Whenever possible, the drake will breathe fire directly at it's target, igniting and heavily damaging anything caught in the blast.
|
||||
*It also often causes lava to pool from the ground around you - many nearby turfs will temporarily turn into lava, dealing damage to anything on the turfs.
|
||||
*The drake also utilizes its wings to fly into the sky, flying after its target and attempting to slam down on them. Anything near when it slams down takes huge damage.
|
||||
*Sometimes it will chain these swooping attacks over and over, making swiftness a necessity.
|
||||
*Sometimes, it will encase its target in an arena of lava
|
||||
*
|
||||
*When an ash drake dies, it leaves behind a chest that can contain four things:
|
||||
*A. A spectral blade that allows its wielder to call ghosts to it, enhancing its power
|
||||
*B. A lava staff that allows its wielder to create lava
|
||||
*C. A spellbook and wand of fireballs
|
||||
*D. A bottle of dragon's blood with several effects, including turning its imbiber into a drake themselves.
|
||||
*
|
||||
*When butchered, they leave behind diamonds, sinew, bone, and ash drake hide. Ash drake hide can be used to create a hooded cloak that protects its wearer from ash storms.
|
||||
*
|
||||
*Intended Difficulty: Medium
|
||||
*/
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon
|
||||
name = "ash drake"
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
/**
|
||||
*LEGION
|
||||
*
|
||||
*Legion spawns from the necropolis gate in the far north of lavaland. It is the guardian of the Necropolis and emerges from within whenever an intruder tries to enter through its gate.
|
||||
*Whenever Legion emerges, everything in lavaland will receive a notice via color, audio, and text. This is because Legion is powerful enough to slaughter the entirety of lavaland with little effort. LOL
|
||||
*
|
||||
*It has three attacks.
|
||||
*Spawn Skull. Most of the time it will use this attack. Spawns a single legion skull.
|
||||
*Spawn Sentinel. The legion will spawn up to three sentinels, depending on its size.
|
||||
*CHARGE! The legion starts spinning and tries to melee the player. It will try to flick itself towards the player, dealing some damage if it hits.
|
||||
*
|
||||
*When Legion dies, it will split into three smaller skulls up to three times.
|
||||
*If you kill all of the smaller ones it drops a staff of storms, which allows its wielder to call and disperse ash storms at will and functions as a powerful melee weapon.
|
||||
*
|
||||
*Difficulty: Medium
|
||||
*
|
||||
*SHITCODE AHEAD. BE ADVISED. Also comment extravaganza
|
||||
*/
|
||||
*LEGION
|
||||
*
|
||||
*Legion spawns from the necropolis gate in the far north of lavaland. It is the guardian of the Necropolis and emerges from within whenever an intruder tries to enter through its gate.
|
||||
*Whenever Legion emerges, everything in lavaland will receive a notice via color, audio, and text. This is because Legion is powerful enough to slaughter the entirety of lavaland with little effort. LOL
|
||||
*
|
||||
*It has three attacks.
|
||||
*Spawn Skull. Most of the time it will use this attack. Spawns a single legion skull.
|
||||
*Spawn Sentinel. The legion will spawn up to three sentinels, depending on its size.
|
||||
*CHARGE! The legion starts spinning and tries to melee the player. It will try to flick itself towards the player, dealing some damage if it hits.
|
||||
*
|
||||
*When Legion dies, it will split into three smaller skulls up to three times.
|
||||
*If you kill all of the smaller ones it drops a staff of storms, which allows its wielder to call and disperse ash storms at will and functions as a powerful melee weapon.
|
||||
*
|
||||
*Difficulty: Medium
|
||||
*
|
||||
*SHITCODE AHEAD. BE ADVISED. Also comment extravaganza
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/megafauna/legion
|
||||
name = "Legion"
|
||||
health = 700
|
||||
|
||||
@@ -184,8 +184,10 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
|
||||
"<span class='userdanger'>\The [src] knocks you down!</span>")
|
||||
|
||||
/mob/living/simple_animal/hostile/mimic/copy/machine
|
||||
speak = list("HUMANS ARE IMPERFECT!", "YOU SHALL BE ASSIMILATED!", "YOU ARE HARMING YOURSELF", "You have been deemed hazardous. Will you comply?", \
|
||||
"My logic is undeniable.", "One of us.", "FLESH IS WEAK", "THIS ISN'T WAR, THIS IS EXTERMINATION!")
|
||||
speak = list(
|
||||
"HUMANS ARE IMPERFECT!", "YOU SHALL BE ASSIMILATED!", "YOU ARE HARMING YOURSELF", "You have been deemed hazardous. Will you comply?", \
|
||||
"My logic is undeniable.", "One of us.", "FLESH IS WEAK", "THIS ISN'T WAR, THIS IS EXTERMINATION!",
|
||||
)
|
||||
speak_chance = 7
|
||||
|
||||
/mob/living/simple_animal/hostile/mimic/copy/machine/CanAttack(atom/the_target)
|
||||
|
||||
+11
-11
@@ -4,17 +4,17 @@
|
||||
#define CALL_CHILDREN 4
|
||||
|
||||
/**
|
||||
* # Goliath Broodmother
|
||||
*
|
||||
* A stronger, faster variation of the goliath. Has the ability to spawn baby goliaths, which it can later detonate at will.
|
||||
* When it's health is below half, tendrils will spawn randomly around it. When it is below a quarter of health, this effect is doubled.
|
||||
* It's attacks are as follows:
|
||||
* - Spawns a 3x3/plus shape of tentacles on the target location
|
||||
* - Spawns 2 baby goliaths on its tile, up to a max of 8. Children blow up when they die.
|
||||
* - The broodmother lets out a noise, and is able to move faster for 6.5 seconds.
|
||||
* - Summons your children around you.
|
||||
* The broodmother is a fight revolving around stage control, as the activator has to manage the baby goliaths and the broodmother herself, along with all the tendrils.
|
||||
*/
|
||||
* # Goliath Broodmother
|
||||
*
|
||||
* A stronger, faster variation of the goliath. Has the ability to spawn baby goliaths, which it can later detonate at will.
|
||||
* When it's health is below half, tendrils will spawn randomly around it. When it is below a quarter of health, this effect is doubled.
|
||||
* It's attacks are as follows:
|
||||
* - Spawns a 3x3/plus shape of tentacles on the target location
|
||||
* - Spawns 2 baby goliaths on its tile, up to a max of 8. Children blow up when they die.
|
||||
* - The broodmother lets out a noise, and is able to move faster for 6.5 seconds.
|
||||
* - Summons your children around you.
|
||||
* The broodmother is a fight revolving around stage control, as the activator has to manage the baby goliaths and the broodmother herself, along with all the tendrils.
|
||||
*/
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/broodmother
|
||||
name = "goliath broodmother"
|
||||
|
||||
@@ -4,17 +4,17 @@
|
||||
#define HERALD_MIRROR 4
|
||||
|
||||
/**
|
||||
* # Herald
|
||||
*
|
||||
* A slow-moving projectile user with a few tricks up it's sleeve. Less unga-bunga than Colossus, with more cleverness in it's fighting style.
|
||||
* As it's health gets lower, the amount of projectiles fired per-attack increases.
|
||||
* It's attacks are as follows:
|
||||
* - Fires three projectiles in a given direction.
|
||||
* - Fires a spread in every cardinal and diagonal direction at once, then does it again after a bit.
|
||||
* - Shoots a single, golden bolt. Wherever it lands, the herald will be teleported to the location.
|
||||
* - Spawns a mirror which reflects projectiles directly at the target.
|
||||
* Herald is a more concentrated variation of the Colossus fight, having less projectiles overall, but more focused attacks.
|
||||
*/
|
||||
* # Herald
|
||||
*
|
||||
* A slow-moving projectile user with a few tricks up it's sleeve. Less unga-bunga than Colossus, with more cleverness in it's fighting style.
|
||||
* As it's health gets lower, the amount of projectiles fired per-attack increases.
|
||||
* It's attacks are as follows:
|
||||
* - Fires three projectiles in a given direction.
|
||||
* - Fires a spread in every cardinal and diagonal direction at once, then does it again after a bit.
|
||||
* - Shoots a single, golden bolt. Wherever it lands, the herald will be teleported to the location.
|
||||
* - Spawns a mirror which reflects projectiles directly at the target.
|
||||
* Herald is a more concentrated variation of the Colossus fight, having less projectiles overall, but more focused attacks.
|
||||
*/
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/herald
|
||||
name = "herald"
|
||||
|
||||
@@ -4,17 +4,17 @@
|
||||
#define SPEW_SMOKE 4
|
||||
|
||||
/**
|
||||
* # Legionnaire
|
||||
*
|
||||
* A towering skeleton, embodying the power of Legion.
|
||||
* As it's health gets lower, the head does more damage.
|
||||
* It's attacks are as follows:
|
||||
* - Charges at the target after a telegraph, throwing them across the arena should it connect.
|
||||
* - Legionnaire's head detaches, attacking as it's own entity. Has abilities of it's own later into the fight. Once dead, regenerates after a brief period. If the skill is used while the head is off, it will be killed.
|
||||
* - Leaves a pile of bones at your location. Upon using this skill again, you'll swap locations with the bone pile.
|
||||
* - Spews a cloud of smoke from it's maw, wherever said maw is.
|
||||
* A unique fight incorporating the head mechanic of legion into a whole new beast. Combatants will need to make sure the tag-team of head and body don't lure them into a deadly trap.
|
||||
*/
|
||||
* # Legionnaire
|
||||
*
|
||||
* A towering skeleton, embodying the power of Legion.
|
||||
* As it's health gets lower, the head does more damage.
|
||||
* It's attacks are as follows:
|
||||
* - Charges at the target after a telegraph, throwing them across the arena should it connect.
|
||||
* - Legionnaire's head detaches, attacking as it's own entity. Has abilities of it's own later into the fight. Once dead, regenerates after a brief period. If the skill is used while the head is off, it will be killed.
|
||||
* - Leaves a pile of bones at your location. Upon using this skill again, you'll swap locations with the bone pile.
|
||||
* - Spews a cloud of smoke from it's maw, wherever said maw is.
|
||||
* A unique fight incorporating the head mechanic of legion into a whole new beast. Combatants will need to make sure the tag-team of head and body don't lure them into a deadly trap.
|
||||
*/
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/legionnaire
|
||||
name = "legionnaire"
|
||||
|
||||
@@ -4,17 +4,17 @@
|
||||
#define AOE_SQUARES 4
|
||||
|
||||
/**
|
||||
* # Pandora
|
||||
*
|
||||
* A box with a similar design to the Hierophant which trades large, single attacks for more frequent smaller ones.
|
||||
* As it's health gets lower, the time between it's attacks decrease.
|
||||
* It's attacks are as follows:
|
||||
* - Fires hierophant blasts in a straight line. Can only fire in a straight line in 8 directions, being the diagonals and cardinals.
|
||||
* - Creates a box of hierophant blasts around the target. If they try to run away to avoid it, they'll very likely get hit.
|
||||
* - Teleports the pandora from one location to another, almost identical to Hierophant.
|
||||
* - Spawns a 5x5 AOE at the location of choice, spreading out from the center.
|
||||
* Pandora's fight mirrors Hierophant's closely, but has stark differences in attack effects. Instead of long-winded dodge times and long cooldowns, Pandora constantly attacks the opponent, but leaves itself open for attack.
|
||||
*/
|
||||
* # Pandora
|
||||
*
|
||||
* A box with a similar design to the Hierophant which trades large, single attacks for more frequent smaller ones.
|
||||
* As it's health gets lower, the time between it's attacks decrease.
|
||||
* It's attacks are as follows:
|
||||
* - Fires hierophant blasts in a straight line. Can only fire in a straight line in 8 directions, being the diagonals and cardinals.
|
||||
* - Creates a box of hierophant blasts around the target. If they try to run away to avoid it, they'll very likely get hit.
|
||||
* - Teleports the pandora from one location to another, almost identical to Hierophant.
|
||||
* - Spawns a 5x5 AOE at the location of choice, spreading out from the center.
|
||||
* Pandora's fight mirrors Hierophant's closely, but has stark differences in attack effects. Instead of long-winded dodge times and long cooldowns, Pandora constantly attacks the opponent, but leaves itself open for attack.
|
||||
*/
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/pandora
|
||||
name = "pandora"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Lobstrosities, the poster boy of charging AI mobs. Drops crab meat and bones.
|
||||
* Outside of charging, it's intended behavior is that it is generally slow moving, but makes up for that with a knockdown attack to score additional hits.
|
||||
*/
|
||||
* Lobstrosities, the poster boy of charging AI mobs. Drops crab meat and bones.
|
||||
* Outside of charging, it's intended behavior is that it is generally slow moving, but makes up for that with a knockdown attack to score additional hits.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/asteroid/lobstrosity
|
||||
name = "arctic lobstrosity"
|
||||
desc = "A marvel of evolution gone wrong, the frosty ice produces underground lakes where these ill tempered seafood gather. Beware its charge."
|
||||
|
||||
@@ -112,8 +112,8 @@
|
||||
|
||||
|
||||
/**
|
||||
*This action creates trash, money, dirt, and cheese.
|
||||
*/
|
||||
*This action creates trash, money, dirt, and cheese.
|
||||
*/
|
||||
/datum/action/cooldown/coffer
|
||||
name = "Fill Coffers"
|
||||
desc = "Your newly granted regality and poise let you scavenge for lost junk, but more importantly, cheese."
|
||||
@@ -155,8 +155,8 @@
|
||||
StartCooldown()
|
||||
|
||||
/**
|
||||
*This action checks all nearby mice, and converts them into hostile rats. If no mice are nearby, creates a new one.
|
||||
*/
|
||||
*This action checks all nearby mice, and converts them into hostile rats. If no mice are nearby, creates a new one.
|
||||
*/
|
||||
|
||||
/datum/action/cooldown/riot
|
||||
name = "Raise Army"
|
||||
|
||||
@@ -8,23 +8,23 @@
|
||||
#define DARKNESS_THRESHOLD 0.5
|
||||
|
||||
/**
|
||||
* # Space Dragon
|
||||
*
|
||||
* A space-faring leviathan-esque monster which breathes fire and summons carp. Spawned during its respective midround antagonist event.
|
||||
*
|
||||
* A space-faring monstrosity who has the ability to breathe dangerous fire breath and uses its powerful wings to knock foes away.
|
||||
* Normally spawned as an antagonist during the Space Dragon event, Space Dragon's main goal is to open three rifts from which to pull a great tide of carp onto the station.
|
||||
* Space Dragon can summon only one rift at a time, and can do so anywhere a blob is allowed to spawn. In order to trigger his victory condition, Space Dragon must summon and defend three rifts while they charge.
|
||||
* Space Dragon, when spawned, has five minutes to summon the first rift. Failing to do so will cause Space Dragon to return from whence he came.
|
||||
* When the rift spawns, ghosts can interact with it to spawn in as space carp to help complete the mission. One carp is granted when the rift is first summoned, with an extra one every 40 seconds.
|
||||
* Once the victory condition is met, the shuttle is called and all current rifts are allowed to spawn infinite sentient space carp.
|
||||
* If a charging rift is destroyed, Space Dragon will be incredibly slowed, and the endlag on his gust attack is greatly increased on each use.
|
||||
* Space Dragon has the following abilities to assist him with his objective:
|
||||
* - Can shoot fire in straight line, dealing 30 burn damage and setting those suseptible on fire.
|
||||
* - Can use his wings to temporarily stun and knock back any nearby mobs. This attack has no cooldown, but instead has endlag after the attack where Space Dragon cannot act. This endlag's time decreases over time, but is added to every time he uses the move.
|
||||
* - Can swallow mob corpses to heal for half their max health. Any corpses swallowed are stored within him, and will be regurgitated on death.
|
||||
* - Can tear through any type of wall. This takes 4 seconds for most walls, and 12 seconds for reinforced walls.
|
||||
*/
|
||||
* # Space Dragon
|
||||
*
|
||||
* A space-faring leviathan-esque monster which breathes fire and summons carp. Spawned during its respective midround antagonist event.
|
||||
*
|
||||
* A space-faring monstrosity who has the ability to breathe dangerous fire breath and uses its powerful wings to knock foes away.
|
||||
* Normally spawned as an antagonist during the Space Dragon event, Space Dragon's main goal is to open three rifts from which to pull a great tide of carp onto the station.
|
||||
* Space Dragon can summon only one rift at a time, and can do so anywhere a blob is allowed to spawn. In order to trigger his victory condition, Space Dragon must summon and defend three rifts while they charge.
|
||||
* Space Dragon, when spawned, has five minutes to summon the first rift. Failing to do so will cause Space Dragon to return from whence he came.
|
||||
* When the rift spawns, ghosts can interact with it to spawn in as space carp to help complete the mission. One carp is granted when the rift is first summoned, with an extra one every 40 seconds.
|
||||
* Once the victory condition is met, the shuttle is called and all current rifts are allowed to spawn infinite sentient space carp.
|
||||
* If a charging rift is destroyed, Space Dragon will be incredibly slowed, and the endlag on his gust attack is greatly increased on each use.
|
||||
* Space Dragon has the following abilities to assist him with his objective:
|
||||
* - Can shoot fire in straight line, dealing 30 burn damage and setting those suseptible on fire.
|
||||
* - Can use his wings to temporarily stun and knock back any nearby mobs. This attack has no cooldown, but instead has endlag after the attack where Space Dragon cannot act. This endlag's time decreases over time, but is added to every time he uses the move.
|
||||
* - Can swallow mob corpses to heal for half their max health. Any corpses swallowed are stored within him, and will be regurgitated on death.
|
||||
* - Can tear through any type of wall. This takes 4 seconds for most walls, and 12 seconds for reinforced walls.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/space_dragon
|
||||
name = "Space Dragon"
|
||||
desc = "A vile, leviathan-esque creature that flies in the most unnatural way. Looks slightly similar to a space carp."
|
||||
@@ -180,11 +180,11 @@
|
||||
. = ..()
|
||||
|
||||
/**
|
||||
* Allows space dragon to choose its own name.
|
||||
*
|
||||
* Prompts the space dragon to choose a name, which it will then apply to itself.
|
||||
* If the name is invalid, will re-prompt the dragon until a proper name is chosen.
|
||||
*/
|
||||
* Allows space dragon to choose its own name.
|
||||
*
|
||||
* Prompts the space dragon to choose a name, which it will then apply to itself.
|
||||
* If the name is invalid, will re-prompt the dragon until a proper name is chosen.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/space_dragon/proc/dragon_name()
|
||||
var/chosen_name = sanitize_name(reject_bad_text(stripped_input(src, "What would you like your name to be?", "Choose Your Name", real_name, MAX_NAME_LEN)))
|
||||
if(!chosen_name)
|
||||
@@ -195,11 +195,11 @@
|
||||
fully_replace_character_name(null, chosen_name)
|
||||
|
||||
/**
|
||||
* Allows space dragon to choose a color for itself.
|
||||
*
|
||||
* Prompts the space dragon to choose a color, from which it will then apply to itself.
|
||||
* If an invalid color is given, will re-prompt the dragon until a proper color is chosen.
|
||||
*/
|
||||
* Allows space dragon to choose a color for itself.
|
||||
*
|
||||
* Prompts the space dragon to choose a color, from which it will then apply to itself.
|
||||
* If an invalid color is given, will re-prompt the dragon until a proper color is chosen.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/space_dragon/proc/color_selection()
|
||||
chosen_color = input(src,"What would you like your color to be?","Choose Your Color", COLOR_WHITE) as color|null
|
||||
if(!chosen_color) //redo proc until we get a color
|
||||
@@ -217,10 +217,10 @@
|
||||
add_dragon_overlay()
|
||||
|
||||
/**
|
||||
* Adds the proper overlay to the space dragon.
|
||||
*
|
||||
* Clears the current overlay on space dragon and adds a proper one for whatever animation he's in.
|
||||
*/
|
||||
* Adds the proper overlay to the space dragon.
|
||||
*
|
||||
* Clears the current overlay on space dragon and adds a proper one for whatever animation he's in.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/space_dragon/proc/add_dragon_overlay()
|
||||
cut_overlays()
|
||||
if(stat == DEAD)
|
||||
@@ -239,15 +239,15 @@
|
||||
add_overlay(overlay)
|
||||
|
||||
/**
|
||||
* Determines a line of turfs from sources's position to the target with length range.
|
||||
*
|
||||
* Determines a line of turfs from the source's position to the target with length range.
|
||||
* The line will extend on past the target if the range is large enough, and not reach the target if range is small enough.
|
||||
* Arguments:
|
||||
* * offset - whether or not to aim slightly to the left or right of the target
|
||||
* * range - how many turfs should we go out for
|
||||
* * atom/at - The target
|
||||
*/
|
||||
* Determines a line of turfs from sources's position to the target with length range.
|
||||
*
|
||||
* Determines a line of turfs from the source's position to the target with length range.
|
||||
* The line will extend on past the target if the range is large enough, and not reach the target if range is small enough.
|
||||
* Arguments:
|
||||
* * offset - whether or not to aim slightly to the left or right of the target
|
||||
* * range - how many turfs should we go out for
|
||||
* * atom/at - The target
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/space_dragon/proc/line_target(offset, range, atom/at = target)
|
||||
if(!at)
|
||||
return
|
||||
@@ -261,14 +261,14 @@
|
||||
return (getline(src, T) - get_turf(src))
|
||||
|
||||
/**
|
||||
* Spawns fire at each position in a line from the source to the target.
|
||||
*
|
||||
* Spawns fire at each position in a line from the source to the target.
|
||||
* Stops if it comes into contact with a solid wall, a window, or a door.
|
||||
* Delays the spawning of each fire by 1.5 deciseconds.
|
||||
* Arguments:
|
||||
* * atom/at - The target
|
||||
*/
|
||||
* Spawns fire at each position in a line from the source to the target.
|
||||
*
|
||||
* Spawns fire at each position in a line from the source to the target.
|
||||
* Stops if it comes into contact with a solid wall, a window, or a door.
|
||||
* Delays the spawning of each fire by 1.5 deciseconds.
|
||||
* Arguments:
|
||||
* * atom/at - The target
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/space_dragon/proc/fire_stream(atom/at = target)
|
||||
playsound(get_turf(src),'sound/magic/fireball.ogg', 200, TRUE)
|
||||
var/range = 20
|
||||
@@ -287,14 +287,14 @@
|
||||
addtimer(CALLBACK(src, .proc/dragon_fire_line, T), delayFire)
|
||||
|
||||
/**
|
||||
* What occurs on each tile to actually create the fire.
|
||||
*
|
||||
* Creates a fire on the given turf.
|
||||
* It creates a hotspot on the given turf, damages any living mob with 30 burn damage, and damages mechs by 50.
|
||||
* It can only hit any given target once.
|
||||
* Arguments:
|
||||
* * turf/T - The turf to trigger the effects on.
|
||||
*/
|
||||
* What occurs on each tile to actually create the fire.
|
||||
*
|
||||
* Creates a fire on the given turf.
|
||||
* It creates a hotspot on the given turf, damages any living mob with 30 burn damage, and damages mechs by 50.
|
||||
* It can only hit any given target once.
|
||||
* Arguments:
|
||||
* * turf/T - The turf to trigger the effects on.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/space_dragon/proc/dragon_fire_line(turf/T)
|
||||
var/list/hit_list = list()
|
||||
hit_list += src
|
||||
@@ -314,13 +314,13 @@
|
||||
M.take_damage(50, BRUTE, MELEE, 1)
|
||||
|
||||
/**
|
||||
* Handles consuming and storing consumed things inside Space Dragon
|
||||
*
|
||||
* Plays a sound and then stores the consumed thing inside Space Dragon.
|
||||
* Used in AttackingTarget(), paired with a heal should it succeed.
|
||||
* Arguments:
|
||||
* * atom/movable/A - The thing being consumed
|
||||
*/
|
||||
* Handles consuming and storing consumed things inside Space Dragon
|
||||
*
|
||||
* Plays a sound and then stores the consumed thing inside Space Dragon.
|
||||
* Used in AttackingTarget(), paired with a heal should it succeed.
|
||||
* Arguments:
|
||||
* * atom/movable/A - The thing being consumed
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/space_dragon/proc/eat(atom/movable/A)
|
||||
if(A && A.loc != src)
|
||||
playsound(src, 'sound/magic/demon_attack1.ogg', 100, TRUE)
|
||||
@@ -330,11 +330,11 @@
|
||||
return FALSE
|
||||
|
||||
/**
|
||||
* Disperses the contents of the mob on the surrounding tiles.
|
||||
*
|
||||
* Randomly places the contents of the mob onto surrounding tiles.
|
||||
* Has a 10% chance to place on the same tile as the mob.
|
||||
*/
|
||||
* Disperses the contents of the mob on the surrounding tiles.
|
||||
*
|
||||
* Randomly places the contents of the mob onto surrounding tiles.
|
||||
* Has a 10% chance to place on the same tile as the mob.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/space_dragon/proc/empty_contents()
|
||||
for(var/atom/movable/AM in src)
|
||||
AM.forceMove(loc)
|
||||
@@ -342,12 +342,12 @@
|
||||
step(AM, pick(GLOB.alldirs))
|
||||
|
||||
/**
|
||||
* Resets Space Dragon's status after using wing gust.
|
||||
*
|
||||
* Resets Space Dragon's status after using wing gust.
|
||||
* If it isn't dead by the time it calls this method, reset the sprite back to the normal living sprite.
|
||||
* Also sets the using_special variable to FALSE, allowing Space Dragon to move and attack freely again.
|
||||
*/
|
||||
* Resets Space Dragon's status after using wing gust.
|
||||
*
|
||||
* Resets Space Dragon's status after using wing gust.
|
||||
* If it isn't dead by the time it calls this method, reset the sprite back to the normal living sprite.
|
||||
* Also sets the using_special variable to FALSE, allowing Space Dragon to move and attack freely again.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/space_dragon/proc/reset_status()
|
||||
if(stat != DEAD)
|
||||
icon_state = "spacedragon"
|
||||
@@ -355,12 +355,12 @@
|
||||
add_dragon_overlay()
|
||||
|
||||
/**
|
||||
* Handles Space Dragon's temporary empowerment after boosting a rift.
|
||||
*
|
||||
* Empowers and depowers Space Dragon after a successful rift charge.
|
||||
* Empowered, Space Dragon regains all his health and becomes temporarily faster for 30 seconds, along with being tinted red.
|
||||
* Depowered simply resets him back to his default state.
|
||||
*/
|
||||
* Handles Space Dragon's temporary empowerment after boosting a rift.
|
||||
*
|
||||
* Empowers and depowers Space Dragon after a successful rift charge.
|
||||
* Empowered, Space Dragon regains all his health and becomes temporarily faster for 30 seconds, along with being tinted red.
|
||||
* Depowered simply resets him back to his default state.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/space_dragon/proc/rift_empower(is_empowered)
|
||||
if(is_empowered)
|
||||
fully_heal()
|
||||
@@ -372,12 +372,12 @@
|
||||
set_varspeed(0)
|
||||
|
||||
/**
|
||||
* Destroys all of Space Dragon's current rifts.
|
||||
*
|
||||
* QDeletes all the current rifts after removing their references to other objects.
|
||||
* Currently, the only reference they have is to the Dragon which created them, so we clear that before deleting them.
|
||||
* Currently used when Space Dragon dies.
|
||||
*/
|
||||
* Destroys all of Space Dragon's current rifts.
|
||||
*
|
||||
* QDeletes all the current rifts after removing their references to other objects.
|
||||
* Currently, the only reference they have is to the Dragon which created them, so we clear that before deleting them.
|
||||
* Currently used when Space Dragon dies.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/space_dragon/proc/destroy_rifts()
|
||||
for(var/obj/structure/carp_rift/rift in rift_list)
|
||||
rift.dragon = null
|
||||
@@ -387,15 +387,15 @@
|
||||
rifts_charged = 0
|
||||
|
||||
/**
|
||||
* Handles wing gust from the windup all the way to the endlag at the end.
|
||||
*
|
||||
* Handles the wing gust attack from start to finish, based on the timer.
|
||||
* When intially triggered, starts at 0. Until the timer reaches 10, increase Space Dragon's y position by 2 and call back to the function in 1.5 deciseconds.
|
||||
* When the timer is at 10, trigger the attack. Change Space Dragon's sprite. reset his y position, and push all living creatures back in a 3 tile radius and stun them for 5 seconds.
|
||||
* Stay in the ending state for how much our tiredness dictates and add to our tiredness.
|
||||
* Arguments:
|
||||
* * timer - The timer used for the windup.
|
||||
*/
|
||||
* Handles wing gust from the windup all the way to the endlag at the end.
|
||||
*
|
||||
* Handles the wing gust attack from start to finish, based on the timer.
|
||||
* When intially triggered, starts at 0. Until the timer reaches 10, increase Space Dragon's y position by 2 and call back to the function in 1.5 deciseconds.
|
||||
* When the timer is at 10, trigger the attack. Change Space Dragon's sprite. reset his y position, and push all living creatures back in a 3 tile radius and stun them for 5 seconds.
|
||||
* Stay in the ending state for how much our tiredness dictates and add to our tiredness.
|
||||
* Arguments:
|
||||
* * timer - The timer used for the windup.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/space_dragon/proc/useGust(timer)
|
||||
if(timer != 10)
|
||||
pixel_y = pixel_y + 2;
|
||||
@@ -425,13 +425,13 @@
|
||||
tiredness = tiredness + (30 * tiredness_mult)
|
||||
|
||||
/**
|
||||
* Sets up Space Dragon's victory for completing the objectives.
|
||||
*
|
||||
* Triggers when Space Dragon completes his objective.
|
||||
* Calls the shuttle with a coefficient of 3, making it impossible to recall.
|
||||
* Sets all of his rifts to allow for infinite sentient carp spawns
|
||||
* Also plays appropiate sounds and CENTCOM messages.
|
||||
*/
|
||||
* Sets up Space Dragon's victory for completing the objectives.
|
||||
*
|
||||
* Triggers when Space Dragon completes his objective.
|
||||
* Calls the shuttle with a coefficient of 3, making it impossible to recall.
|
||||
* Sets all of his rifts to allow for infinite sentient carp spawns
|
||||
* Also plays appropiate sounds and CENTCOM messages.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/space_dragon/proc/victory()
|
||||
objective_complete = TRUE
|
||||
var/datum/antagonist/space_dragon/S = mind.has_antag_datum(/datum/antagonist/space_dragon)
|
||||
@@ -497,14 +497,14 @@
|
||||
qdel(src)
|
||||
|
||||
/**
|
||||
* # Carp Rift
|
||||
*
|
||||
* The portals Space Dragon summons to bring carp onto the station.
|
||||
*
|
||||
* The portals Space Dragon summons to bring carp onto the station. His main objective is to summon 3 of them and protect them from being destroyed.
|
||||
* The portals can summon sentient space carp in limited amounts. The portal also changes color based on whether or not a carp spawn is available.
|
||||
* Once it is fully charged, it becomes indestructible, and intermitently spawns non-sentient carp. It is still destroyed if Space Dragon dies.
|
||||
*/
|
||||
* # Carp Rift
|
||||
*
|
||||
* The portals Space Dragon summons to bring carp onto the station.
|
||||
*
|
||||
* The portals Space Dragon summons to bring carp onto the station. His main objective is to summon 3 of them and protect them from being destroyed.
|
||||
* The portals can summon sentient space carp in limited amounts. The portal also changes color based on whether or not a carp spawn is available.
|
||||
* Once it is fully charged, it becomes indestructible, and intermitently spawns non-sentient carp. It is still destroyed if Space Dragon dies.
|
||||
*/
|
||||
/obj/structure/carp_rift
|
||||
name = "carp rift"
|
||||
desc = "A rift akin to the ones space carp use to travel long distances."
|
||||
@@ -584,13 +584,13 @@
|
||||
summon_carp(user)
|
||||
|
||||
/**
|
||||
* Does a series of checks based on the portal's status.
|
||||
*
|
||||
* Performs a number of checks based on the current charge of the portal, and triggers various effects accordingly.
|
||||
* If the current charge is a multiple of 40, add an extra carp spawn.
|
||||
* If we're halfway charged, announce to the crew our location in a CENTCOM announcement.
|
||||
* If we're fully charged, tell the crew we are, change our color to yellow, become invulnerable, and give Space Dragon the ability to make another rift, if he hasn't summoned 3 total.
|
||||
*/
|
||||
* Does a series of checks based on the portal's status.
|
||||
*
|
||||
* Performs a number of checks based on the current charge of the portal, and triggers various effects accordingly.
|
||||
* If the current charge is a multiple of 40, add an extra carp spawn.
|
||||
* If we're halfway charged, announce to the crew our location in a CENTCOM announcement.
|
||||
* If we're fully charged, tell the crew we are, change our color to yellow, become invulnerable, and give Space Dragon the ability to make another rift, if he hasn't summoned 3 total.
|
||||
*/
|
||||
/obj/structure/carp_rift/proc/update_check()
|
||||
// If the rift is fully charged, there's nothing to do here anymore.
|
||||
if(charge_state == CHARGE_COMPLETED)
|
||||
@@ -633,14 +633,14 @@
|
||||
priority_announce("A rift is causing an unnaturally large energy flux in [initial(A.name)]. Stop it at all costs!", "Central Command Spatial Corps", 'sound/ai/spanomalies.ogg')
|
||||
|
||||
/**
|
||||
* Used to create carp controlled by ghosts when the option is available.
|
||||
*
|
||||
* Creates a carp for the ghost to control if we have a carp spawn available.
|
||||
* Gives them prompt to control a carp, and if our circumstances still allow if when they hit yes, spawn them in as a carp.
|
||||
* Also add them to the list of carps in Space Dragon's antgonist datum, so they'll be displayed as having assisted him on round end.
|
||||
* Arguments:
|
||||
* * mob/user - The ghost which will take control of the carp.
|
||||
*/
|
||||
* Used to create carp controlled by ghosts when the option is available.
|
||||
*
|
||||
* Creates a carp for the ghost to control if we have a carp spawn available.
|
||||
* Gives them prompt to control a carp, and if our circumstances still allow if when they hit yes, spawn them in as a carp.
|
||||
* Also add them to the list of carps in Space Dragon's antgonist datum, so they'll be displayed as having assisted him on round end.
|
||||
* Arguments:
|
||||
* * mob/user - The ghost which will take control of the carp.
|
||||
*/
|
||||
/obj/structure/carp_rift/proc/summon_carp(mob/user)
|
||||
if(carp_stored <= 0)//Not enough carp points
|
||||
return FALSE
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
|
||||
#define FINAL_BUD_GROWTH_ICON 3
|
||||
/**
|
||||
* Kudzu Flower Bud
|
||||
*
|
||||
* A flower created by flowering kudzu which spawns a venus human trap after a certain amount of time has passed.
|
||||
*
|
||||
* A flower created by kudzu with the flowering mutation. Spawns a venus human trap after 2 minutes under normal circumstances.
|
||||
* Also spawns 4 vines going out in diagonal directions from the bud. Any living creature not aligned with plants is damaged by these vines.
|
||||
* Once it grows a venus human trap, the bud itself will destroy itself.
|
||||
*
|
||||
*/
|
||||
* Kudzu Flower Bud
|
||||
*
|
||||
* A flower created by flowering kudzu which spawns a venus human trap after a certain amount of time has passed.
|
||||
*
|
||||
* A flower created by kudzu with the flowering mutation. Spawns a venus human trap after 2 minutes under normal circumstances.
|
||||
* Also spawns 4 vines going out in diagonal directions from the bud. Any living creature not aligned with plants is damaged by these vines.
|
||||
* Once it grows a venus human trap, the bud itself will destroy itself.
|
||||
*
|
||||
*/
|
||||
/obj/structure/alien/resin/flower_bud //inheriting basic attack/damage stuff from alien structures
|
||||
name = "flower bud"
|
||||
desc = "A large pulsating plant..."
|
||||
@@ -46,10 +46,10 @@
|
||||
countdown.start()
|
||||
|
||||
/**
|
||||
* Spawns a venus human trap, then qdels itself.
|
||||
*
|
||||
* Displays a message, spawns a human venus trap, then qdels itself.
|
||||
*/
|
||||
* Spawns a venus human trap, then qdels itself.
|
||||
*
|
||||
* Displays a message, spawns a human venus trap, then qdels itself.
|
||||
*/
|
||||
/obj/structure/alien/resin/flower_bud/proc/bear_fruit()
|
||||
visible_message("<span class='danger'>The plant has borne fruit!</span>")
|
||||
new /mob/living/simple_animal/hostile/venus_human_trap(get_turf(src))
|
||||
@@ -76,17 +76,17 @@
|
||||
to_chat(L, "<span class='alert'>You cut yourself on the thorny vines.</span>")
|
||||
|
||||
/**
|
||||
* Venus Human Trap
|
||||
*
|
||||
* The result of a kudzu flower bud, these enemies use vines to drag prey close to them for attack.
|
||||
*
|
||||
* A carnivorious plant which uses vines to catch and ensnare prey. Spawns from kudzu flower buds.
|
||||
* Each one has a maximum of four vines, which can be attached to a variety of things. Carbons are stunned when a vine is attached to them, and movable entities are pulled closer over time.
|
||||
* Attempting to attach a vine to something with a vine already attached to it will pull all movable targets closer on command.
|
||||
* Once the prey is in melee range, melee attacks from the venus human trap heals itself for 10% of its max health, assuming the target is alive.
|
||||
* Akin to certain spiders, venus human traps can also be possessed and controlled by ghosts.
|
||||
*
|
||||
*/
|
||||
* Venus Human Trap
|
||||
*
|
||||
* The result of a kudzu flower bud, these enemies use vines to drag prey close to them for attack.
|
||||
*
|
||||
* A carnivorious plant which uses vines to catch and ensnare prey. Spawns from kudzu flower buds.
|
||||
* Each one has a maximum of four vines, which can be attached to a variety of things. Carbons are stunned when a vine is attached to them, and movable entities are pulled closer over time.
|
||||
* Attempting to attach a vine to something with a vine already attached to it will pull all movable targets closer on command.
|
||||
* Once the prey is in melee range, melee attacks from the venus human trap heals itself for 10% of its max health, assuming the target is alive.
|
||||
* Akin to certain spiders, venus human traps can also be possessed and controlled by ghosts.
|
||||
*
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/venus_human_trap
|
||||
name = "venus human trap"
|
||||
desc = "Now you know how the fly feels."
|
||||
@@ -172,13 +172,13 @@
|
||||
humanize_plant(user)
|
||||
|
||||
/**
|
||||
* Sets a ghost to control the plant if the plant is eligible
|
||||
*
|
||||
* Asks the interacting ghost if they would like to control the plant.
|
||||
* If they answer yes, and another ghost hasn't taken control, sets the ghost to control the plant.
|
||||
* Arguments:
|
||||
* * mob/user - The ghost to possibly control the plant
|
||||
*/
|
||||
* Sets a ghost to control the plant if the plant is eligible
|
||||
*
|
||||
* Asks the interacting ghost if they would like to control the plant.
|
||||
* If they answer yes, and another ghost hasn't taken control, sets the ghost to control the plant.
|
||||
* Arguments:
|
||||
* * mob/user - The ghost to possibly control the plant
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/venus_human_trap/proc/humanize_plant(mob/user)
|
||||
if(key || !playable_plant || stat)
|
||||
return
|
||||
@@ -192,12 +192,12 @@
|
||||
log_game("[key_name(src)] took control of [name].")
|
||||
|
||||
/**
|
||||
* Manages how the vines should affect the things they're attached to.
|
||||
*
|
||||
* Pulls all movable targets of the vines closer to the plant
|
||||
* If the target is on the same tile as the plant, destroy the vine
|
||||
* Removes any QDELETED vines from the vines list.
|
||||
*/
|
||||
* Manages how the vines should affect the things they're attached to.
|
||||
*
|
||||
* Pulls all movable targets of the vines closer to the plant
|
||||
* If the target is on the same tile as the plant, destroy the vine
|
||||
* Removes any QDELETED vines from the vines list.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/venus_human_trap/proc/pull_vines()
|
||||
for(var/datum/beam/B in vines)
|
||||
if(istype(B.target, /atom/movable))
|
||||
@@ -208,12 +208,12 @@
|
||||
B.End()
|
||||
|
||||
/**
|
||||
* Removes a vine from the list.
|
||||
*
|
||||
* Removes the vine from our list.
|
||||
* Called specifically when the vine is about to be destroyed, so we don't have any null references.
|
||||
* Arguments:
|
||||
* * datum/beam/vine - The vine to be removed from the list.
|
||||
*/
|
||||
* Removes a vine from the list.
|
||||
*
|
||||
* Removes the vine from our list.
|
||||
* Called specifically when the vine is about to be destroyed, so we don't have any null references.
|
||||
* Arguments:
|
||||
* * datum/beam/vine - The vine to be removed from the list.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/venus_human_trap/proc/remove_vine(datum/beam/vine, force)
|
||||
vines -= vine
|
||||
|
||||
@@ -254,11 +254,11 @@
|
||||
stuttering = 0
|
||||
|
||||
/**
|
||||
* Updates the simple mob's stamina loss.
|
||||
*
|
||||
* Updates the speed and staminaloss of a given simplemob.
|
||||
* Reduces the stamina loss by stamina_recovery
|
||||
*/
|
||||
* Updates the simple mob's stamina loss.
|
||||
*
|
||||
* Updates the speed and staminaloss of a given simplemob.
|
||||
* Reduces the stamina loss by stamina_recovery
|
||||
*/
|
||||
/mob/living/simple_animal/update_stamina()
|
||||
set_varspeed(initial(speed) + (staminaloss * 0.06))
|
||||
|
||||
|
||||
+33
-33
@@ -1,27 +1,27 @@
|
||||
/**
|
||||
* Run when a client is put in this mob or reconnets to byond and their client was on this mob
|
||||
*
|
||||
* Things it does:
|
||||
* * Adds player to player_list
|
||||
* * sets lastKnownIP
|
||||
* * sets computer_id
|
||||
* * logs the login
|
||||
* * tells the world to update it's status (for player count)
|
||||
* * create mob huds for the mob if needed
|
||||
* * reset next_move to 1
|
||||
* * parent call
|
||||
* * if the client exists set the perspective to the mob loc
|
||||
* * call on_log on the loc (sigh)
|
||||
* * reload the huds for the mob
|
||||
* * reload all full screen huds attached to this mob
|
||||
* * load any global alternate apperances
|
||||
* * sync the mind datum via sync_mind()
|
||||
* * call any client login callbacks that exist
|
||||
* * grant any actions the mob has to the client
|
||||
* * calls [auto_deadmin_on_login](mob.html#proc/auto_deadmin_on_login)
|
||||
* * send signal COMSIG_MOB_CLIENT_LOGIN
|
||||
* client can be deleted mid-execution of this proc, chiefly on parent calls, with lag
|
||||
*/
|
||||
* Run when a client is put in this mob or reconnets to byond and their client was on this mob
|
||||
*
|
||||
* Things it does:
|
||||
* * Adds player to player_list
|
||||
* * sets lastKnownIP
|
||||
* * sets computer_id
|
||||
* * logs the login
|
||||
* * tells the world to update it's status (for player count)
|
||||
* * create mob huds for the mob if needed
|
||||
* * reset next_move to 1
|
||||
* * parent call
|
||||
* * if the client exists set the perspective to the mob loc
|
||||
* * call on_log on the loc (sigh)
|
||||
* * reload the huds for the mob
|
||||
* * reload all full screen huds attached to this mob
|
||||
* * load any global alternate apperances
|
||||
* * sync the mind datum via sync_mind()
|
||||
* * call any client login callbacks that exist
|
||||
* * grant any actions the mob has to the client
|
||||
* * calls [auto_deadmin_on_login](mob.html#proc/auto_deadmin_on_login)
|
||||
* * send signal COMSIG_MOB_CLIENT_LOGIN
|
||||
* client can be deleted mid-execution of this proc, chiefly on parent calls, with lag
|
||||
*/
|
||||
/mob/Login()
|
||||
if(!client)
|
||||
return FALSE
|
||||
@@ -97,16 +97,16 @@
|
||||
|
||||
|
||||
/**
|
||||
* Checks if the attached client is an admin and may deadmin them
|
||||
*
|
||||
* Configs:
|
||||
* * flag/auto_deadmin_players
|
||||
* * client.prefs?.toggles & DEADMIN_ALWAYS
|
||||
* * User is antag and flag/auto_deadmin_antagonists or client.prefs?.toggles & DEADMIN_ANTAGONIST
|
||||
* * or if their job demands a deadminning SSjob.handle_auto_deadmin_roles()
|
||||
*
|
||||
* Called from [login](mob.html#proc/Login)
|
||||
*/
|
||||
* Checks if the attached client is an admin and may deadmin them
|
||||
*
|
||||
* Configs:
|
||||
* * flag/auto_deadmin_players
|
||||
* * client.prefs?.toggles & DEADMIN_ALWAYS
|
||||
* * User is antag and flag/auto_deadmin_antagonists or client.prefs?.toggles & DEADMIN_ANTAGONIST
|
||||
* * or if their job demands a deadminning SSjob.handle_auto_deadmin_roles()
|
||||
*
|
||||
* Called from [login](mob.html#proc/Login)
|
||||
*/
|
||||
/mob/proc/auto_deadmin_on_login() //return true if they're not an admin at the end.
|
||||
if(!client?.holder)
|
||||
return TRUE
|
||||
|
||||
+224
-224
@@ -1,25 +1,25 @@
|
||||
/**
|
||||
* Delete a mob
|
||||
*
|
||||
* Removes mob from the following global lists
|
||||
* * GLOB.mob_list
|
||||
* * GLOB.dead_mob_list
|
||||
* * GLOB.alive_mob_list
|
||||
* * GLOB.all_clockwork_mobs
|
||||
* * GLOB.mob_directory
|
||||
*
|
||||
* Unsets the focus var
|
||||
*
|
||||
* Clears alerts for this mob
|
||||
*
|
||||
* Resets all the observers perspectives to the tile this mob is on
|
||||
*
|
||||
* qdels any client colours in place on this mob
|
||||
*
|
||||
* Ghostizes the client attached to this mob
|
||||
*
|
||||
* Parent call
|
||||
*/
|
||||
* Delete a mob
|
||||
*
|
||||
* Removes mob from the following global lists
|
||||
* * GLOB.mob_list
|
||||
* * GLOB.dead_mob_list
|
||||
* * GLOB.alive_mob_list
|
||||
* * GLOB.all_clockwork_mobs
|
||||
* * GLOB.mob_directory
|
||||
*
|
||||
* Unsets the focus var
|
||||
*
|
||||
* Clears alerts for this mob
|
||||
*
|
||||
* Resets all the observers perspectives to the tile this mob is on
|
||||
*
|
||||
* qdels any client colours in place on this mob
|
||||
*
|
||||
* Ghostizes the client attached to this mob
|
||||
*
|
||||
* Parent call
|
||||
*/
|
||||
/mob/Destroy()//This makes sure that mobs with clients/keys are not just deleted from the game.
|
||||
remove_from_mob_list()
|
||||
remove_from_dead_mob_list()
|
||||
@@ -41,23 +41,23 @@
|
||||
|
||||
|
||||
/**
|
||||
* Intialize a mob
|
||||
*
|
||||
* Sends global signal COMSIG_GLOB_MOB_CREATED
|
||||
*
|
||||
* Adds to global lists
|
||||
* * GLOB.mob_list
|
||||
* * GLOB.mob_directory (by tag)
|
||||
* * GLOB.dead_mob_list - if mob is dead
|
||||
* * GLOB.alive_mob_list - if the mob is alive
|
||||
*
|
||||
* Other stuff:
|
||||
* * Sets the mob focus to itself
|
||||
* * Generates huds
|
||||
* * If there are any global alternate apperances apply them to this mob
|
||||
* * set a random nutrition level
|
||||
* * Intialize the movespeed of the mob
|
||||
*/
|
||||
* Intialize a mob
|
||||
*
|
||||
* Sends global signal COMSIG_GLOB_MOB_CREATED
|
||||
*
|
||||
* Adds to global lists
|
||||
* * GLOB.mob_list
|
||||
* * GLOB.mob_directory (by tag)
|
||||
* * GLOB.dead_mob_list - if mob is dead
|
||||
* * GLOB.alive_mob_list - if the mob is alive
|
||||
*
|
||||
* Other stuff:
|
||||
* * Sets the mob focus to itself
|
||||
* * Generates huds
|
||||
* * If there are any global alternate apperances apply them to this mob
|
||||
* * set a random nutrition level
|
||||
* * Intialize the movespeed of the mob
|
||||
*/
|
||||
/mob/Initialize()
|
||||
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_MOB_CREATED, src)
|
||||
add_to_mob_list()
|
||||
@@ -79,19 +79,19 @@
|
||||
update_movespeed(TRUE)
|
||||
|
||||
/**
|
||||
* Generate the tag for this mob
|
||||
*
|
||||
* This is simply "mob_"+ a global incrementing counter that goes up for every mob
|
||||
*/
|
||||
* Generate the tag for this mob
|
||||
*
|
||||
* This is simply "mob_"+ a global incrementing counter that goes up for every mob
|
||||
*/
|
||||
/mob/GenerateTag()
|
||||
tag = "mob_[next_mob_id++]"
|
||||
|
||||
/**
|
||||
* Prepare the huds for this atom
|
||||
*
|
||||
* Goes through hud_possible list and adds the images to the hud_list variable (if not already
|
||||
* cached)
|
||||
*/
|
||||
* Prepare the huds for this atom
|
||||
*
|
||||
* Goes through hud_possible list and adds the images to the hud_list variable (if not already
|
||||
* cached)
|
||||
*/
|
||||
/atom/proc/prepare_huds()
|
||||
hud_list = list()
|
||||
for(var/hud in hud_possible)
|
||||
@@ -105,8 +105,8 @@
|
||||
hud_list[hud] = I
|
||||
|
||||
/**
|
||||
* Some kind of debug verb that gives atmosphere environment details
|
||||
*/
|
||||
* Some kind of debug verb that gives atmosphere environment details
|
||||
*/
|
||||
/mob/proc/Cell()
|
||||
set category = "Admin"
|
||||
set hidden = TRUE
|
||||
@@ -126,14 +126,14 @@
|
||||
to_chat(usr, t)
|
||||
|
||||
/**
|
||||
* Return the desc of this mob for a photo
|
||||
*/
|
||||
* Return the desc of this mob for a photo
|
||||
*/
|
||||
/mob/proc/get_photo_description(obj/item/camera/camera)
|
||||
return "a ... thing?"
|
||||
|
||||
/**
|
||||
* Show a message to this mob (visual or audible)
|
||||
*/
|
||||
* Show a message to this mob (visual or audible)
|
||||
*/
|
||||
/mob/proc/show_message(msg, type, alt_msg, alt_type, avoid_highlighting = FALSE)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2)
|
||||
if(!client)
|
||||
return
|
||||
@@ -164,22 +164,22 @@
|
||||
to_chat(src, msg, avoid_highlighting = avoid_highlighting)
|
||||
|
||||
/**
|
||||
* Generate a visible message from this atom
|
||||
*
|
||||
* Show a message to all player mobs who sees this atom
|
||||
*
|
||||
* Show a message to the src mob (if the src is a mob)
|
||||
*
|
||||
* Use for atoms performing visible actions
|
||||
*
|
||||
* message is output to anyone who can see, e.g. `"The [src] does something!"`
|
||||
*
|
||||
* Vars:
|
||||
* * self_message (optional) is what the src mob sees e.g. "You do something!"
|
||||
* * blind_message (optional) is what blind people will hear e.g. "You hear something!"
|
||||
* * vision_distance (optional) define how many tiles away the message can be seen.
|
||||
* * ignored_mob (optional) doesn't show any message to a given mob if TRUE.
|
||||
*/
|
||||
* Generate a visible message from this atom
|
||||
*
|
||||
* Show a message to all player mobs who sees this atom
|
||||
*
|
||||
* Show a message to the src mob (if the src is a mob)
|
||||
*
|
||||
* Use for atoms performing visible actions
|
||||
*
|
||||
* message is output to anyone who can see, e.g. `"The [src] does something!"`
|
||||
*
|
||||
* Vars:
|
||||
* * self_message (optional) is what the src mob sees e.g. "You do something!"
|
||||
* * blind_message (optional) is what blind people will hear e.g. "You hear something!"
|
||||
* * vision_distance (optional) define how many tiles away the message can be seen.
|
||||
* * ignored_mob (optional) doesn't show any message to a given mob if TRUE.
|
||||
*/
|
||||
/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE)
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T)
|
||||
@@ -225,15 +225,15 @@
|
||||
show_message(self_message, MSG_VISUAL, blind_message, MSG_AUDIBLE)
|
||||
|
||||
/**
|
||||
* Show a message to all mobs in earshot of this atom
|
||||
*
|
||||
* Use for objects performing audible actions
|
||||
*
|
||||
* vars:
|
||||
* * message is the message output to anyone who can hear.
|
||||
* * deaf_message (optional) is what deaf people will see.
|
||||
* * hearing_distance (optional) is the range, how many tiles away the message can be heard.
|
||||
*/
|
||||
* Show a message to all mobs in earshot of this atom
|
||||
*
|
||||
* Use for objects performing audible actions
|
||||
*
|
||||
* vars:
|
||||
* * message is the message output to anyone who can hear.
|
||||
* * deaf_message (optional) is what deaf people will see.
|
||||
* * hearing_distance (optional) is the range, how many tiles away the message can be heard.
|
||||
*/
|
||||
/atom/proc/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE)
|
||||
var/list/hearers = get_hearers_in_view(hearing_distance, src)
|
||||
if(self_message)
|
||||
@@ -247,16 +247,16 @@
|
||||
M.show_message(message, MSG_AUDIBLE, deaf_message, MSG_VISUAL)
|
||||
|
||||
/**
|
||||
* Show a message to all mobs in earshot of this one
|
||||
*
|
||||
* This would be for audible actions by the src mob
|
||||
*
|
||||
* vars:
|
||||
* * message is the message output to anyone who can hear.
|
||||
* * self_message (optional) is what the src mob hears.
|
||||
* * deaf_message (optional) is what deaf people will see.
|
||||
* * hearing_distance (optional) is the range, how many tiles away the message can be heard.
|
||||
*/
|
||||
* Show a message to all mobs in earshot of this one
|
||||
*
|
||||
* This would be for audible actions by the src mob
|
||||
*
|
||||
* vars:
|
||||
* * message is the message output to anyone who can hear.
|
||||
* * self_message (optional) is what the src mob hears.
|
||||
* * deaf_message (optional) is what deaf people will see.
|
||||
* * hearing_distance (optional) is the range, how many tiles away the message can be heard.
|
||||
*/
|
||||
/mob/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE)
|
||||
. = ..()
|
||||
if(self_message)
|
||||
@@ -289,11 +289,11 @@
|
||||
return
|
||||
|
||||
/**
|
||||
* This proc is called whenever someone clicks an inventory ui slot.
|
||||
*
|
||||
* Mostly tries to put the item into the slot if possible, or call attack hand
|
||||
* on the item in the slot if the users active hand is empty
|
||||
*/
|
||||
* This proc is called whenever someone clicks an inventory ui slot.
|
||||
*
|
||||
* Mostly tries to put the item into the slot if possible, or call attack hand
|
||||
* on the item in the slot if the users active hand is empty
|
||||
*/
|
||||
/mob/proc/attack_ui(slot)
|
||||
var/obj/item/W = get_active_held_item()
|
||||
|
||||
@@ -310,18 +310,18 @@
|
||||
return FALSE
|
||||
|
||||
/**
|
||||
* Try to equip an item to a slot on the mob
|
||||
*
|
||||
* This is a SAFE proc. Use this instead of equip_to_slot()!
|
||||
*
|
||||
* set qdel_on_fail to have it delete W if it fails to equip
|
||||
*
|
||||
* set disable_warning to disable the 'you are unable to equip that' warning.
|
||||
*
|
||||
* unset redraw_mob to prevent the mob icons from being redrawn at the end.
|
||||
*
|
||||
* Initial is used to indicate whether or not this is the initial equipment (job datums etc) or just a player doing it
|
||||
*/
|
||||
* Try to equip an item to a slot on the mob
|
||||
*
|
||||
* This is a SAFE proc. Use this instead of equip_to_slot()!
|
||||
*
|
||||
* set qdel_on_fail to have it delete W if it fails to equip
|
||||
*
|
||||
* set disable_warning to disable the 'you are unable to equip that' warning.
|
||||
*
|
||||
* unset redraw_mob to prevent the mob icons from being redrawn at the end.
|
||||
*
|
||||
* Initial is used to indicate whether or not this is the initial equipment (job datums etc) or just a player doing it
|
||||
*/
|
||||
/mob/proc/equip_to_slot_if_possible(obj/item/W, slot, qdel_on_fail = FALSE, disable_warning = FALSE, redraw_mob = TRUE, bypass_equip_delay_self = FALSE, initial = FALSE)
|
||||
if(!istype(W))
|
||||
return FALSE
|
||||
@@ -335,35 +335,35 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Actually equips an item to a slot (UNSAFE)
|
||||
*
|
||||
* This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on
|
||||
* whether you can or can't equip need to be done before! Use mob_can_equip() for that task.
|
||||
*
|
||||
*In most cases you will want to use equip_to_slot_if_possible()
|
||||
*/
|
||||
* Actually equips an item to a slot (UNSAFE)
|
||||
*
|
||||
* This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on
|
||||
* whether you can or can't equip need to be done before! Use mob_can_equip() for that task.
|
||||
*
|
||||
*In most cases you will want to use equip_to_slot_if_possible()
|
||||
*/
|
||||
/mob/proc/equip_to_slot(obj/item/W, slot)
|
||||
return
|
||||
|
||||
/**
|
||||
* Equip an item to the slot or delete
|
||||
*
|
||||
* This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to
|
||||
* equip people when the round starts and when events happen and such.
|
||||
*
|
||||
* Also bypasses equip delay checks, since the mob isn't actually putting it on.
|
||||
* Initial is used to indicate whether or not this is the initial equipment (job datums etc) or just a player doing it
|
||||
*/
|
||||
* Equip an item to the slot or delete
|
||||
*
|
||||
* This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to
|
||||
* equip people when the round starts and when events happen and such.
|
||||
*
|
||||
* Also bypasses equip delay checks, since the mob isn't actually putting it on.
|
||||
* Initial is used to indicate whether or not this is the initial equipment (job datums etc) or just a player doing it
|
||||
*/
|
||||
/mob/proc/equip_to_slot_or_del(obj/item/W, slot, initial = FALSE)
|
||||
return equip_to_slot_if_possible(W, slot, TRUE, TRUE, FALSE, TRUE, initial)
|
||||
|
||||
/**
|
||||
* Auto equip the passed in item the appropriate slot based on equipment priority
|
||||
*
|
||||
* puts the item "W" into an appropriate slot in a human's inventory
|
||||
*
|
||||
* returns 0 if it cannot, 1 if successful
|
||||
*/
|
||||
* Auto equip the passed in item the appropriate slot based on equipment priority
|
||||
*
|
||||
* puts the item "W" into an appropriate slot in a human's inventory
|
||||
*
|
||||
* returns 0 if it cannot, 1 if successful
|
||||
*/
|
||||
/mob/proc/equip_to_appropriate_slot(obj/item/W, qdel_on_fail = FALSE)
|
||||
if(!istype(W))
|
||||
return FALSE
|
||||
@@ -389,11 +389,11 @@
|
||||
qdel(W)
|
||||
return FALSE
|
||||
/**
|
||||
* Reset the attached clients perspective (viewpoint)
|
||||
*
|
||||
* reset_perspective() set eye to common default : mob on turf, loc otherwise
|
||||
* reset_perspective(thing) set the eye to the thing (if it's equal to current default reset to mob perspective)
|
||||
*/
|
||||
* Reset the attached clients perspective (viewpoint)
|
||||
*
|
||||
* reset_perspective() set eye to common default : mob on turf, loc otherwise
|
||||
* reset_perspective(thing) set the eye to the thing (if it's equal to current default reset to mob perspective)
|
||||
*/
|
||||
/mob/proc/reset_perspective(atom/A)
|
||||
if(client)
|
||||
if(A)
|
||||
@@ -431,12 +431,12 @@
|
||||
|
||||
|
||||
/**
|
||||
* Examine a mob
|
||||
*
|
||||
* mob verbs are faster than object verbs. See
|
||||
* [this byond forum post](https://secure.byond.com/forum/?post=1326139&page=2#comment8198716)
|
||||
* for why this isn't atom/verb/examine()
|
||||
*/
|
||||
* Examine a mob
|
||||
*
|
||||
* mob verbs are faster than object verbs. See
|
||||
* [this byond forum post](https://secure.byond.com/forum/?post=1326139&page=2#comment8198716)
|
||||
* for why this isn't atom/verb/examine()
|
||||
*/
|
||||
/mob/verb/examinate(atom/A as mob|obj|turf in view()) //It used to be oview(12), but I can't really say why
|
||||
set name = "Examine"
|
||||
set category = "IC"
|
||||
@@ -529,12 +529,12 @@
|
||||
LAZYREMOVE(client.recent_examines, A)
|
||||
|
||||
/**
|
||||
* handle_eye_contact() is called when we examine() something. If we examine an alive mob with a mind who has examined us in the last second within 5 tiles, we make eye contact!
|
||||
*
|
||||
* Note that if either party has their face obscured, the other won't get the notice about the eye contact
|
||||
* Also note that examine_more() doesn't proc this or extend the timer, just because it's simpler this way and doesn't lose much.
|
||||
* The nice part about relying on examining is that we don't bother checking visibility, because we already know they were both visible to each other within the last second, and the one who triggers it is currently seeing them
|
||||
*/
|
||||
* handle_eye_contact() is called when we examine() something. If we examine an alive mob with a mind who has examined us in the last second within 5 tiles, we make eye contact!
|
||||
*
|
||||
* Note that if either party has their face obscured, the other won't get the notice about the eye contact
|
||||
* Also note that examine_more() doesn't proc this or extend the timer, just because it's simpler this way and doesn't lose much.
|
||||
* The nice part about relying on examining is that we don't bother checking visibility, because we already know they were both visible to each other within the last second, and the one who triggers it is currently seeing them
|
||||
*/
|
||||
/mob/proc/handle_eye_contact(mob/living/examined_mob)
|
||||
return
|
||||
|
||||
@@ -555,18 +555,18 @@
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, examined_mob, msg), 3)
|
||||
|
||||
/**
|
||||
* Point at an atom
|
||||
*
|
||||
* mob verbs are faster than object verbs. See
|
||||
* [this byond forum post](https://secure.byond.com/forum/?post=1326139&page=2#comment8198716)
|
||||
* for why this isn't atom/verb/pointed()
|
||||
*
|
||||
* note: ghosts can point, this is intended
|
||||
*
|
||||
* visible_message will handle invisibility properly
|
||||
*
|
||||
* overridden here and in /mob/dead/observer for different point span classes and sanity checks
|
||||
*/
|
||||
* Point at an atom
|
||||
*
|
||||
* mob verbs are faster than object verbs. See
|
||||
* [this byond forum post](https://secure.byond.com/forum/?post=1326139&page=2#comment8198716)
|
||||
* for why this isn't atom/verb/pointed()
|
||||
*
|
||||
* note: ghosts can point, this is intended
|
||||
*
|
||||
* visible_message will handle invisibility properly
|
||||
*
|
||||
* overridden here and in /mob/dead/observer for different point span classes and sanity checks
|
||||
*/
|
||||
/mob/verb/pointed(atom/A as mob|obj|turf in view())
|
||||
set name = "Point To"
|
||||
set category = "Object"
|
||||
@@ -589,12 +589,12 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Called by using Activate Held Object with an empty hand/limb
|
||||
*
|
||||
* Does nothing by default. The intended use is to allow limbs to call their
|
||||
* own attack_self procs. It is up to the individual mob to override this
|
||||
* parent and actually use it.
|
||||
*/
|
||||
* Called by using Activate Held Object with an empty hand/limb
|
||||
*
|
||||
* Does nothing by default. The intended use is to allow limbs to call their
|
||||
* own attack_self procs. It is up to the individual mob to override this
|
||||
* parent and actually use it.
|
||||
*/
|
||||
/mob/proc/limb_attack_self()
|
||||
return
|
||||
|
||||
@@ -634,10 +634,10 @@
|
||||
hud_used?.rest_icon?.update_icon()
|
||||
|
||||
/**
|
||||
* Verb to activate the object in your held hand
|
||||
*
|
||||
* Calls attack self on the item and updates the inventory hud for hands
|
||||
*/
|
||||
* Verb to activate the object in your held hand
|
||||
*
|
||||
* Calls attack self on the item and updates the inventory hud for hands
|
||||
*/
|
||||
/mob/verb/mode()
|
||||
set name = "Activate Held Object"
|
||||
set category = "Object"
|
||||
@@ -659,10 +659,10 @@
|
||||
|
||||
|
||||
/**
|
||||
* Get the notes of this mob
|
||||
*
|
||||
* This actually gets the mind datums notes
|
||||
*/
|
||||
* Get the notes of this mob
|
||||
*
|
||||
* This actually gets the mind datums notes
|
||||
*/
|
||||
/mob/verb/memory()
|
||||
set name = "Notes"
|
||||
set category = "IC"
|
||||
@@ -673,8 +673,8 @@
|
||||
to_chat(src, "You don't have a mind datum for some reason, so you can't look at your notes, if you had any.")
|
||||
|
||||
/**
|
||||
* Add a note to the mind datum
|
||||
*/
|
||||
* Add a note to the mind datum
|
||||
*/
|
||||
/mob/verb/add_memory(msg as message)
|
||||
set name = "Add Note"
|
||||
set category = "IC"
|
||||
@@ -690,12 +690,12 @@
|
||||
to_chat(src, "You don't have a mind datum for some reason, so you can't add a note to it.")
|
||||
|
||||
/**
|
||||
* Allows you to respawn, abandoning your current mob
|
||||
*
|
||||
* This sends you back to the lobby creating a new dead mob
|
||||
*
|
||||
* Only works if flag/norespawn is allowed in config
|
||||
*/
|
||||
* Allows you to respawn, abandoning your current mob
|
||||
*
|
||||
* This sends you back to the lobby creating a new dead mob
|
||||
*
|
||||
* Only works if flag/norespawn is allowed in config
|
||||
*/
|
||||
/mob/verb/abandon_mob()
|
||||
set name = "Respawn"
|
||||
set category = "OOC"
|
||||
@@ -730,8 +730,8 @@
|
||||
|
||||
|
||||
/**
|
||||
* Sometimes helps if the user is stuck in another perspective or camera
|
||||
*/
|
||||
* Sometimes helps if the user is stuck in another perspective or camera
|
||||
*/
|
||||
/mob/verb/cancel_camera()
|
||||
set name = "Cancel Camera View"
|
||||
set category = "OOC"
|
||||
@@ -751,12 +751,12 @@
|
||||
set category = null
|
||||
return
|
||||
/**
|
||||
* Topic call back for any mob
|
||||
*
|
||||
* * Unset machines if "mach_close" sent
|
||||
* * refresh the inventory of machines in range if "refresh" sent
|
||||
* * handles the strip panel equip and unequip as well if "item" sent
|
||||
*/
|
||||
* Topic call back for any mob
|
||||
*
|
||||
* * Unset machines if "mach_close" sent
|
||||
* * refresh the inventory of machines in range if "refresh" sent
|
||||
* * handles the strip panel equip and unequip as well if "item" sent
|
||||
*/
|
||||
/mob/Topic(href, href_list)
|
||||
var/mob/user = usr
|
||||
|
||||
@@ -798,8 +798,8 @@
|
||||
return
|
||||
|
||||
/**
|
||||
* Controls if a mouse drop succeeds (return null if it doesnt)
|
||||
*/
|
||||
* Controls if a mouse drop succeeds (return null if it doesnt)
|
||||
*/
|
||||
/mob/MouseDrop(mob/M)
|
||||
. = ..()
|
||||
if(M != usr)
|
||||
@@ -811,10 +811,10 @@
|
||||
if(isAI(M))
|
||||
return
|
||||
/**
|
||||
* Handle the result of a click drag onto this mob
|
||||
*
|
||||
* For mobs this just shows the inventory
|
||||
*/
|
||||
* Handle the result of a click drag onto this mob
|
||||
*
|
||||
* For mobs this just shows the inventory
|
||||
*/
|
||||
/mob/MouseDrop_T(atom/dropping, atom/user)
|
||||
. = ..()
|
||||
if(ismob(dropping) && src == user && dropping != user)
|
||||
@@ -839,10 +839,10 @@
|
||||
. += get_spells_for_statpanel(mob_spell_list)
|
||||
|
||||
/**
|
||||
* Convert a list of spells into a displyable list for the statpanel
|
||||
*
|
||||
* Shows charge and other important info
|
||||
*/
|
||||
* Convert a list of spells into a displyable list for the statpanel
|
||||
*
|
||||
* Shows charge and other important info
|
||||
*/
|
||||
/mob/proc/get_spells_for_statpanel(list/spells)
|
||||
var/list/L = list()
|
||||
for(var/obj/effect/proc_holder/spell/S in spells)
|
||||
@@ -860,15 +860,15 @@
|
||||
|
||||
// facing verbs
|
||||
/**
|
||||
* Returns true if a mob can turn to face things
|
||||
*
|
||||
* Conditions:
|
||||
* * client.last_turn > world.time
|
||||
* * not dead or unconcious
|
||||
* * not anchored
|
||||
* * no transform not set
|
||||
* * we are not restrained
|
||||
*/
|
||||
* Returns true if a mob can turn to face things
|
||||
*
|
||||
* Conditions:
|
||||
* * client.last_turn > world.time
|
||||
* * not dead or unconcious
|
||||
* * not anchored
|
||||
* * no transform not set
|
||||
* * we are not restrained
|
||||
*/
|
||||
/mob/proc/canface()
|
||||
if(world.time < client.last_turn)
|
||||
return FALSE
|
||||
@@ -988,12 +988,12 @@
|
||||
return src
|
||||
|
||||
/**
|
||||
* Buckle a living mob to this mob
|
||||
*
|
||||
* You can buckle on mobs if you're next to them since most are dense
|
||||
*
|
||||
* Turns you to face the other mob too
|
||||
*/
|
||||
* Buckle a living mob to this mob
|
||||
*
|
||||
* You can buckle on mobs if you're next to them since most are dense
|
||||
*
|
||||
* Turns you to face the other mob too
|
||||
*/
|
||||
/mob/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE)
|
||||
if(M.buckled)
|
||||
return FALSE
|
||||
@@ -1042,10 +1042,10 @@
|
||||
/mob/proc/canUseStorage()
|
||||
return FALSE
|
||||
/**
|
||||
* Check if the other mob has any factions the same as us
|
||||
*
|
||||
* If exact match is set, then all our factions must match exactly
|
||||
*/
|
||||
* Check if the other mob has any factions the same as us
|
||||
*
|
||||
* If exact match is set, then all our factions must match exactly
|
||||
*/
|
||||
/mob/proc/faction_check_mob(mob/target, exact_match)
|
||||
if(exact_match) //if we need an exact match, we need to do some bullfuckery.
|
||||
var/list/faction_src = faction.Copy()
|
||||
@@ -1075,12 +1075,12 @@
|
||||
|
||||
|
||||
/**
|
||||
* Fully update the name of a mob
|
||||
*
|
||||
* This will update a mob's name, real_name, mind.name, GLOB.data_core records, pda, id and traitor text
|
||||
*
|
||||
* Calling this proc without an oldname will only update the mob and skip updating the pda, id and records ~Carn
|
||||
*/
|
||||
* Fully update the name of a mob
|
||||
*
|
||||
* This will update a mob's name, real_name, mind.name, GLOB.data_core records, pda, id and traitor text
|
||||
*
|
||||
* Calling this proc without an oldname will only update the mob and skip updating the pda, id and records ~Carn
|
||||
*/
|
||||
/mob/proc/fully_replace_character_name(oldname,newname)
|
||||
log_message("[src] name changed from [oldname] to [newname]", LOG_OWNERSHIP)
|
||||
if(!newname)
|
||||
@@ -1189,8 +1189,8 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Get the mob VV dropdown extras
|
||||
*/
|
||||
* Get the mob VV dropdown extras
|
||||
*/
|
||||
/mob/vv_get_dropdown()
|
||||
. = ..()
|
||||
VV_DROPDOWN_OPTION("", "---------")
|
||||
@@ -1259,8 +1259,8 @@
|
||||
offer_control(src)
|
||||
|
||||
/**
|
||||
* extra var handling for the logging var
|
||||
*/
|
||||
* extra var handling for the logging var
|
||||
*/
|
||||
/mob/vv_get_var(var_name)
|
||||
switch(var_name)
|
||||
if("logging")
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/**
|
||||
* The mob, usually meant to be a creature of some type
|
||||
*
|
||||
* Has a client attached that is a living person (most of the time), although I have to admit
|
||||
* sometimes it's hard to tell they're sentient
|
||||
*
|
||||
* Has a lot of the creature game world logic, such as health etc
|
||||
*/
|
||||
* The mob, usually meant to be a creature of some type
|
||||
*
|
||||
* Has a client attached that is a living person (most of the time), although I have to admit
|
||||
* sometimes it's hard to tell they're sentient
|
||||
*
|
||||
* Has a lot of the creature game world logic, such as health etc
|
||||
*/
|
||||
/mob
|
||||
datum_flags = DF_USE_TAG
|
||||
density = TRUE
|
||||
@@ -18,7 +18,7 @@
|
||||
throwforce = 10
|
||||
blocks_emissive = EMISSIVE_BLOCK_GENERIC
|
||||
|
||||
///when this be added to vis_contents of something it inherit something.plane, important for visualisation of mob in openspace.
|
||||
///when this be added to vis_contents of something it inherit something.plane, important for visualisation of mob in openspace.
|
||||
vis_flags = VIS_INHERIT_PLANE
|
||||
|
||||
var/lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE
|
||||
|
||||
@@ -29,11 +29,11 @@
|
||||
return zone
|
||||
|
||||
/**
|
||||
* Return the zone or randomly, another valid zone
|
||||
*
|
||||
* probability controls the chance it chooses the passed in zone, or another random zone
|
||||
* defaults to 80
|
||||
*/
|
||||
* Return the zone or randomly, another valid zone
|
||||
*
|
||||
* probability controls the chance it chooses the passed in zone, or another random zone
|
||||
* defaults to 80
|
||||
*/
|
||||
/proc/ran_zone(zone, probability = 80)
|
||||
if(prob(probability))
|
||||
zone = check_zone(zone)
|
||||
@@ -50,13 +50,13 @@
|
||||
return FALSE
|
||||
|
||||
/**
|
||||
* Convert random parts of a passed in message to stars
|
||||
*
|
||||
* * phrase - the string to convert
|
||||
* * probability - probability any character gets changed
|
||||
*
|
||||
* This proc is dangerously laggy, avoid it or die
|
||||
*/
|
||||
* Convert random parts of a passed in message to stars
|
||||
*
|
||||
* * phrase - the string to convert
|
||||
* * probability - probability any character gets changed
|
||||
*
|
||||
* This proc is dangerously laggy, avoid it or die
|
||||
*/
|
||||
/proc/stars(phrase, probability = 25)
|
||||
if(probability <= 0)
|
||||
return phrase
|
||||
@@ -73,8 +73,8 @@
|
||||
return sanitize(.)
|
||||
|
||||
/**
|
||||
* Makes you speak like you're drunk
|
||||
*/
|
||||
* Makes you speak like you're drunk
|
||||
*/
|
||||
/proc/slur(phrase)
|
||||
phrase = html_decode(phrase)
|
||||
var/leng = length(phrase)
|
||||
@@ -194,10 +194,10 @@
|
||||
return message
|
||||
|
||||
/**
|
||||
* Turn text into complete gibberish!
|
||||
*
|
||||
* text is the inputted message, replace_characters will cause original letters to be replaced and chance are the odds that a character gets modified.
|
||||
*/
|
||||
* Turn text into complete gibberish!
|
||||
*
|
||||
* text is the inputted message, replace_characters will cause original letters to be replaced and chance are the odds that a character gets modified.
|
||||
*/
|
||||
/proc/Gibberish(text, replace_characters = FALSE, chance = 50)
|
||||
text = html_decode(text)
|
||||
. = ""
|
||||
@@ -250,10 +250,10 @@
|
||||
|
||||
|
||||
/**
|
||||
* change a mob's act-intent.
|
||||
*
|
||||
* Input the intent as a string such as "help" or use "right"/"left
|
||||
*/
|
||||
* change a mob's act-intent.
|
||||
*
|
||||
* Input the intent as a string such as "help" or use "right"/"left
|
||||
*/
|
||||
/mob/verb/a_intent_change(input as text)
|
||||
set name = "a-intent"
|
||||
set hidden = TRUE
|
||||
@@ -318,23 +318,23 @@
|
||||
|
||||
|
||||
/**
|
||||
* Fancy notifications for ghosts
|
||||
*
|
||||
* The kitchen sink of notification procs
|
||||
*
|
||||
* Arguments:
|
||||
* * message
|
||||
* * ghost_sound sound to play
|
||||
* * enter_link Href link to enter the ghost role being notified for
|
||||
* * source The source of the notification
|
||||
* * alert_overlay The alert overlay to show in the alert message
|
||||
* * action What action to take upon the ghost interacting with the notification, defaults to NOTIFY_JUMP
|
||||
* * flashwindow Flash the byond client window
|
||||
* * ignore_key Ignore keys if they're in the GLOB.poll_ignore list
|
||||
* * header The header of the notifiaction
|
||||
* * notify_suiciders If it should notify suiciders (who do not qualify for many ghost roles)
|
||||
* * notify_volume How loud the sound should be to spook the user
|
||||
*/
|
||||
* Fancy notifications for ghosts
|
||||
*
|
||||
* The kitchen sink of notification procs
|
||||
*
|
||||
* Arguments:
|
||||
* * message
|
||||
* * ghost_sound sound to play
|
||||
* * enter_link Href link to enter the ghost role being notified for
|
||||
* * source The source of the notification
|
||||
* * alert_overlay The alert overlay to show in the alert message
|
||||
* * action What action to take upon the ghost interacting with the notification, defaults to NOTIFY_JUMP
|
||||
* * flashwindow Flash the byond client window
|
||||
* * ignore_key Ignore keys if they're in the GLOB.poll_ignore list
|
||||
* * header The header of the notifiaction
|
||||
* * notify_suiciders If it should notify suiciders (who do not qualify for many ghost roles)
|
||||
* * notify_volume How loud the sound should be to spook the user
|
||||
*/
|
||||
/proc/notify_ghosts(message, ghost_sound = null, enter_link = null, atom/source = null, mutable_appearance/alert_overlay = null, action = NOTIFY_JUMP, flashwindow = TRUE, ignore_mapload = TRUE, ignore_key, header = null, notify_suiciders = TRUE, notify_volume = 100) //Easy notification of ghosts.
|
||||
if(ignore_mapload && SSatoms.initialized != INITIALIZATION_INNEW_REGULAR) //don't notify for objects created during a map load
|
||||
return
|
||||
@@ -368,8 +368,8 @@
|
||||
A.add_overlay(alert_overlay)
|
||||
|
||||
/**
|
||||
* Heal a robotic body part on a mob
|
||||
*/
|
||||
* Heal a robotic body part on a mob
|
||||
*/
|
||||
/proc/item_heal_robotic(mob/living/carbon/human/H, mob/user, brute_heal, burn_heal)
|
||||
var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected))
|
||||
if(affecting && affecting.status == BODYPART_ROBOTIC)
|
||||
@@ -408,10 +408,10 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Offer control of the passed in mob to dead player
|
||||
*
|
||||
* Automatic logging and uses pollCandidatesForMob, how convenient
|
||||
*/
|
||||
* Offer control of the passed in mob to dead player
|
||||
*
|
||||
* Automatic logging and uses pollCandidatesForMob, how convenient
|
||||
*/
|
||||
/proc/offer_control(mob/M)
|
||||
to_chat(M, "Control of your mob has been offered to dead players.")
|
||||
if(usr)
|
||||
@@ -507,10 +507,10 @@
|
||||
. = TRUE
|
||||
|
||||
/**
|
||||
* Examine text for traits shared by multiple types.
|
||||
*
|
||||
* I wish examine was less copypasted. (oranges say, be the change you want to see buddy)
|
||||
*/
|
||||
* Examine text for traits shared by multiple types.
|
||||
*
|
||||
* I wish examine was less copypasted. (oranges say, be the change you want to see buddy)
|
||||
*/
|
||||
/mob/proc/common_trait_examine()
|
||||
if(HAS_TRAIT(src, TRAIT_DISSECTED))
|
||||
var/dissectionmsg = ""
|
||||
@@ -525,11 +525,11 @@
|
||||
. += "<span class='warning'>This body has been reduced to a grotesque husk.</span>"
|
||||
|
||||
/**
|
||||
* Get the list of keywords for policy config
|
||||
*
|
||||
* This gets the type, mind assigned roles and antag datums as a list, these are later used
|
||||
* to send the user relevant headadmin policy config
|
||||
*/
|
||||
* Get the list of keywords for policy config
|
||||
*
|
||||
* This gets the type, mind assigned roles and antag datums as a list, these are later used
|
||||
* to send the user relevant headadmin policy config
|
||||
*/
|
||||
/mob/proc/get_policy_keywords()
|
||||
. = list()
|
||||
. += "[type]"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
* If your mob is concious, drop the item in the active hand
|
||||
*
|
||||
* This is a hidden verb, likely for binding with winset for hotkeys
|
||||
*/
|
||||
* If your mob is concious, drop the item in the active hand
|
||||
*
|
||||
* This is a hidden verb, likely for binding with winset for hotkeys
|
||||
*/
|
||||
/client/verb/drop_item()
|
||||
set hidden = TRUE
|
||||
if(!iscyborg(mob) && mob.stat == CONSCIOUS)
|
||||
@@ -10,13 +10,13 @@
|
||||
return
|
||||
|
||||
/**
|
||||
* force move the control_object of your client mob
|
||||
*
|
||||
* Used in admin possession and called from the client Move proc
|
||||
* ensures the possessed object moves and not the admin mob
|
||||
*
|
||||
* Has no sanity other than checking density
|
||||
*/
|
||||
* force move the control_object of your client mob
|
||||
*
|
||||
* Used in admin possession and called from the client Move proc
|
||||
* ensures the possessed object moves and not the admin mob
|
||||
*
|
||||
* Has no sanity other than checking density
|
||||
*/
|
||||
/client/proc/Move_object(direct)
|
||||
if(mob?.control_object)
|
||||
if(mob.control_object.density)
|
||||
@@ -31,41 +31,41 @@
|
||||
#define MOVEMENT_DELAY_BUFFER_DELTA 1.25
|
||||
|
||||
/**
|
||||
* Move a client in a direction
|
||||
*
|
||||
* Huge proc, has a lot of functionality
|
||||
*
|
||||
* Mostly it will despatch to the mob that you are the owner of to actually move
|
||||
* in the physical realm
|
||||
*
|
||||
* Things that stop you moving as a mob:
|
||||
* * world time being less than your next move_delay
|
||||
* * not being in a mob, or that mob not having a loc
|
||||
* * missing the n and direction parameters
|
||||
* * being in remote control of an object (calls Moveobject instead)
|
||||
* * being dead (it ghosts you instead)
|
||||
*
|
||||
* Things that stop you moving as a mob living (why even have OO if you're just shoving it all
|
||||
* in the parent proc with istype checks right?):
|
||||
* * having incorporeal_move set (calls Process_Incorpmove() instead)
|
||||
* * being grabbed
|
||||
* * being buckled (relaymove() is called to the buckled atom instead)
|
||||
* * having your loc be some other mob (relaymove() is called on that mob instead)
|
||||
* * Not having MOBILITY_MOVE
|
||||
* * Failing Process_Spacemove() call
|
||||
*
|
||||
* At this point, if the mob is is confused, then a random direction and target turf will be calculated for you to travel to instead
|
||||
*
|
||||
* Now the parent call is made (to the byond builtin move), which moves you
|
||||
*
|
||||
* Some final move delay calculations (doubling if you moved diagonally successfully)
|
||||
*
|
||||
* if mob throwing is set I believe it's unset at this point via a call to finalize
|
||||
*
|
||||
* Finally if you're pulling an object and it's dense, you are turned 180 after the move
|
||||
* (if you ask me, this should be at the top of the move so you don't dance around)
|
||||
*
|
||||
*/
|
||||
* Move a client in a direction
|
||||
*
|
||||
* Huge proc, has a lot of functionality
|
||||
*
|
||||
* Mostly it will despatch to the mob that you are the owner of to actually move
|
||||
* in the physical realm
|
||||
*
|
||||
* Things that stop you moving as a mob:
|
||||
* * world time being less than your next move_delay
|
||||
* * not being in a mob, or that mob not having a loc
|
||||
* * missing the n and direction parameters
|
||||
* * being in remote control of an object (calls Moveobject instead)
|
||||
* * being dead (it ghosts you instead)
|
||||
*
|
||||
* Things that stop you moving as a mob living (why even have OO if you're just shoving it all
|
||||
* in the parent proc with istype checks right?):
|
||||
* * having incorporeal_move set (calls Process_Incorpmove() instead)
|
||||
* * being grabbed
|
||||
* * being buckled (relaymove() is called to the buckled atom instead)
|
||||
* * having your loc be some other mob (relaymove() is called on that mob instead)
|
||||
* * Not having MOBILITY_MOVE
|
||||
* * Failing Process_Spacemove() call
|
||||
*
|
||||
* At this point, if the mob is is confused, then a random direction and target turf will be calculated for you to travel to instead
|
||||
*
|
||||
* Now the parent call is made (to the byond builtin move), which moves you
|
||||
*
|
||||
* Some final move delay calculations (doubling if you moved diagonally successfully)
|
||||
*
|
||||
* if mob throwing is set I believe it's unset at this point via a call to finalize
|
||||
*
|
||||
* Finally if you're pulling an object and it's dense, you are turned 180 after the move
|
||||
* (if you ask me, this should be at the top of the move so you don't dance around)
|
||||
*
|
||||
*/
|
||||
/client/Move(n, direct)
|
||||
if(world.time < move_delay) //do not move anything ahead of this check please
|
||||
return FALSE
|
||||
@@ -152,10 +152,10 @@
|
||||
mob.setDir(turn(mob.dir, 180))
|
||||
|
||||
/**
|
||||
* Checks to see if you're being grabbed and if so attempts to break it
|
||||
*
|
||||
* Called by client/Move()
|
||||
*/
|
||||
* Checks to see if you're being grabbed and if so attempts to break it
|
||||
*
|
||||
* Called by client/Move()
|
||||
*/
|
||||
/client/proc/Process_Grab()
|
||||
if(!mob.pulledby)
|
||||
return FALSE
|
||||
@@ -172,18 +172,18 @@
|
||||
|
||||
|
||||
/**
|
||||
* Allows mobs to ignore density and phase through objects
|
||||
*
|
||||
* Called by client/Move()
|
||||
*
|
||||
* The behaviour depends on the incorporeal_move value of the mob
|
||||
*
|
||||
* * INCORPOREAL_MOVE_BASIC - forceMoved to the next tile with no stop
|
||||
* * INCORPOREAL_MOVE_SHADOW - the same but leaves a cool effect path
|
||||
* * INCORPOREAL_MOVE_JAUNT - the same but blocked by holy tiles
|
||||
*
|
||||
* You'll note this is another mob living level proc living at the client level
|
||||
*/
|
||||
* Allows mobs to ignore density and phase through objects
|
||||
*
|
||||
* Called by client/Move()
|
||||
*
|
||||
* The behaviour depends on the incorporeal_move value of the mob
|
||||
*
|
||||
* * INCORPOREAL_MOVE_BASIC - forceMoved to the next tile with no stop
|
||||
* * INCORPOREAL_MOVE_SHADOW - the same but leaves a cool effect path
|
||||
* * INCORPOREAL_MOVE_JAUNT - the same but blocked by holy tiles
|
||||
*
|
||||
* You'll note this is another mob living level proc living at the client level
|
||||
*/
|
||||
/client/proc/Process_Incorpmove(direct)
|
||||
var/turf/mobloc = get_turf(mob)
|
||||
if(!isliving(mob))
|
||||
@@ -260,14 +260,14 @@
|
||||
|
||||
|
||||
/**
|
||||
* Handles mob/living movement in space (or no gravity)
|
||||
*
|
||||
* Called by /client/Move()
|
||||
*
|
||||
* return TRUE for movement or FALSE for none
|
||||
*
|
||||
* You can move in space if you have a spacewalk ability
|
||||
*/
|
||||
* Handles mob/living movement in space (or no gravity)
|
||||
*
|
||||
* Called by /client/Move()
|
||||
*
|
||||
* return TRUE for movement or FALSE for none
|
||||
*
|
||||
* You can move in space if you have a spacewalk ability
|
||||
*/
|
||||
/mob/Process_Spacemove(movement_dir = 0)
|
||||
. = ..()
|
||||
if(. || HAS_TRAIT(src, TRAIT_SPACEWALK))
|
||||
@@ -281,8 +281,8 @@
|
||||
return FALSE
|
||||
|
||||
/**
|
||||
* Find movable atoms? near a mob that are viable for pushing off when moving
|
||||
*/
|
||||
* Find movable atoms? near a mob that are viable for pushing off when moving
|
||||
*/
|
||||
/mob/get_spacemove_backup()
|
||||
for(var/A in orange(1, get_turf(src)))
|
||||
if(isarea(A))
|
||||
@@ -310,16 +310,16 @@
|
||||
. = AM
|
||||
|
||||
/**
|
||||
* Returns true if a mob has gravity
|
||||
*
|
||||
* I hate that this exists
|
||||
*/
|
||||
* Returns true if a mob has gravity
|
||||
*
|
||||
* I hate that this exists
|
||||
*/
|
||||
/mob/proc/mob_has_gravity()
|
||||
return has_gravity()
|
||||
|
||||
/**
|
||||
* Does this mob ignore gravity
|
||||
*/
|
||||
* Does this mob ignore gravity
|
||||
*/
|
||||
/mob/proc/mob_negates_gravity()
|
||||
return FALSE
|
||||
|
||||
@@ -345,10 +345,10 @@
|
||||
return mob && mob.hud_used && mob.hud_used.zone_select && istype(mob.hud_used.zone_select, /atom/movable/screen/zone_sel)
|
||||
|
||||
/**
|
||||
* Hidden verb to set the target zone of a mob to the head
|
||||
*
|
||||
* (bound to 8) - repeated presses toggles through head - eyes - mouth
|
||||
*/
|
||||
* Hidden verb to set the target zone of a mob to the head
|
||||
*
|
||||
* (bound to 8) - repeated presses toggles through head - eyes - mouth
|
||||
*/
|
||||
/client/verb/body_toggle_head()
|
||||
set name = "body-toggle-head"
|
||||
set hidden = TRUE
|
||||
@@ -443,10 +443,10 @@
|
||||
mob.toggle_move_intent(usr)
|
||||
|
||||
/**
|
||||
* Toggle the move intent of the mob
|
||||
*
|
||||
* triggers an update the move intent hud as well
|
||||
*/
|
||||
* Toggle the move intent of the mob
|
||||
*
|
||||
* triggers an update the move intent hud as well
|
||||
*/
|
||||
/mob/proc/toggle_move_intent(mob/user)
|
||||
if(m_intent == MOVE_INTENT_RUN)
|
||||
m_intent = MOVE_INTENT_WALK
|
||||
|
||||
+12
-12
@@ -98,18 +98,18 @@
|
||||
///The amount of items we are looking for in the message
|
||||
#define MESSAGE_MODS_LENGTH 6
|
||||
/**
|
||||
* Extracts and cleans message of any extenstions at the begining of the message
|
||||
* Inserts the info into the passed list, returns the cleaned message
|
||||
*
|
||||
* Result can be
|
||||
* * SAY_MODE (Things like aliens, channels that aren't channels)
|
||||
* * MODE_WHISPER (Quiet speech)
|
||||
* * MODE_SING (Singing)
|
||||
* * MODE_HEADSET (Common radio channel)
|
||||
* * RADIO_EXTENSION the extension we're using (lots of values here)
|
||||
* * RADIO_KEY the radio key we're using, to make some things easier later (lots of values here)
|
||||
* * LANGUAGE_EXTENSION the language we're trying to use (lots of values here)
|
||||
*/
|
||||
* Extracts and cleans message of any extenstions at the begining of the message
|
||||
* Inserts the info into the passed list, returns the cleaned message
|
||||
*
|
||||
* Result can be
|
||||
* * SAY_MODE (Things like aliens, channels that aren't channels)
|
||||
* * MODE_WHISPER (Quiet speech)
|
||||
* * MODE_SING (Singing)
|
||||
* * MODE_HEADSET (Common radio channel)
|
||||
* * RADIO_EXTENSION the extension we're using (lots of values here)
|
||||
* * RADIO_KEY the radio key we're using, to make some things easier later (lots of values here)
|
||||
* * LANGUAGE_EXTENSION the language we're trying to use (lots of values here)
|
||||
*/
|
||||
/mob/proc/get_message_mods(message, list/mods)
|
||||
for(var/I in 1 to MESSAGE_MODS_LENGTH)
|
||||
// Prevents "...text" from being read as a radio message
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
jitteriness = max(jitteriness,amount,0)
|
||||
|
||||
/**
|
||||
* Set the dizzyness of a mob to a passed in amount
|
||||
*
|
||||
* Except if dizziness is already higher in which case it does nothing
|
||||
*/
|
||||
* Set the dizzyness of a mob to a passed in amount
|
||||
*
|
||||
* Except if dizziness is already higher in which case it does nothing
|
||||
*/
|
||||
/mob/proc/Dizzy(amount)
|
||||
dizziness = max(dizziness,amount,0)
|
||||
|
||||
@@ -24,18 +24,18 @@
|
||||
adjust_blindness(amount)
|
||||
|
||||
/**
|
||||
* Adjust a mobs blindness by an amount
|
||||
*
|
||||
* Will apply the blind alerts if needed
|
||||
*/
|
||||
* Adjust a mobs blindness by an amount
|
||||
*
|
||||
* Will apply the blind alerts if needed
|
||||
*/
|
||||
/mob/proc/adjust_blindness(amount)
|
||||
var/old_eye_blind = eye_blind
|
||||
eye_blind = max(0, eye_blind + amount)
|
||||
if(!old_eye_blind || !eye_blind && !HAS_TRAIT(src, TRAIT_BLIND))
|
||||
update_blindness()
|
||||
/**
|
||||
* Force set the blindness of a mob to some level
|
||||
*/
|
||||
* Force set the blindness of a mob to some level
|
||||
*/
|
||||
/mob/proc/set_blindness(amount)
|
||||
var/old_eye_blind = eye_blind
|
||||
eye_blind = max(amount, 0)
|
||||
@@ -71,16 +71,16 @@
|
||||
|
||||
|
||||
/**
|
||||
* Make the mobs vision blurry
|
||||
*/
|
||||
* Make the mobs vision blurry
|
||||
*/
|
||||
/mob/proc/blur_eyes(amount)
|
||||
if(amount>0)
|
||||
eye_blurry = max(amount, eye_blurry)
|
||||
update_eye_blur()
|
||||
|
||||
/**
|
||||
* Adjust the current blurriness of the mobs vision by amount
|
||||
*/
|
||||
* Adjust the current blurriness of the mobs vision by amount
|
||||
*/
|
||||
/mob/proc/adjust_blurriness(amount)
|
||||
eye_blurry = max(eye_blurry+amount, 0)
|
||||
update_eye_blur()
|
||||
|
||||
Reference in New Issue
Block a user