mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-20 11:34:19 +01:00
'merge
This commit is contained in:
@@ -58,6 +58,16 @@
|
||||
)
|
||||
autohiss_exempt = list("Chittin")
|
||||
|
||||
/datum/species/drask
|
||||
autohiss_basic_map = list(
|
||||
"o" = list ("oo", "ooo"),
|
||||
"u" = list ("uu", "uuu")
|
||||
)
|
||||
autohiss_extra_map = list(
|
||||
"m" = list ("mm", "mmm")
|
||||
)
|
||||
autohiss_exempt = list("Orluum")
|
||||
|
||||
|
||||
/datum/species/proc/handle_autohiss(message, datum/language/lang, mode)
|
||||
if(!autohiss_basic_map)
|
||||
|
||||
@@ -832,11 +832,7 @@
|
||||
message = "<span class='danger'><b>[src]</b> snaps [p_their()] fingers right off!</span>"
|
||||
playsound(loc, 'sound/effects/snap.ogg', 50, 1)
|
||||
|
||||
// Needed for M_TOXIC_FART
|
||||
if("fart", "farts")
|
||||
if(reagents.has_reagent("simethicone"))
|
||||
return
|
||||
// playsound(loc, 'sound/effects/fart.ogg', 50, 1, -3) //Admins still vote no to fun
|
||||
if(locate(/obj/item/storage/bible) in get_turf(src))
|
||||
to_chat(viewers(src), "<span class='danger'>[src] farts on the Bible!</span>")
|
||||
var/image/cross = image('icons/obj/storage.dmi', "bible")
|
||||
@@ -844,29 +840,10 @@
|
||||
for(var/client/X in GLOB.admins)
|
||||
if(check_rights(R_EVENT, 0, X.mob))
|
||||
to_chat(X, adminbfmessage)
|
||||
else if(TOXIC_FARTS in mutations)
|
||||
message = "<b>[src]</b> unleashes a [pick("horrible", "terrible", "foul", "disgusting", "awful")] fart."
|
||||
else if(SUPER_FART in mutations)
|
||||
message = "<b>[src]</b> unleashes a [pick("loud", "deafening")] fart."
|
||||
else
|
||||
message = "<b>[src]</b> [pick("passes wind", "farts")]."
|
||||
m_type = 2
|
||||
|
||||
var/turf/location = get_turf(src)
|
||||
|
||||
// Process toxic farts first.
|
||||
if(TOXIC_FARTS in mutations)
|
||||
for(var/mob/living/carbon/C in range(location, 2))
|
||||
if(C.internal != null && C.wear_mask && (C.wear_mask.flags & AIRTIGHT))
|
||||
continue
|
||||
if(C == src)
|
||||
continue
|
||||
C.reagents.add_reagent("jenkem", 1)
|
||||
|
||||
// Farting as a form of locomotion in space
|
||||
if(SUPER_FART in mutations)
|
||||
newtonian_move(dir)
|
||||
|
||||
if("hem")
|
||||
message = "<b>[src]</b> hems."
|
||||
|
||||
|
||||
@@ -148,6 +148,9 @@
|
||||
if("Mime")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/mime
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/mime
|
||||
if("Syndicate Officer")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/nuclear
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/nuclear
|
||||
|
||||
if((H.mind.special_role == SPECIAL_ROLE_WIZARD) || (H.mind.special_role == SPECIAL_ROLE_WIZARD_APPRENTICE))
|
||||
H.equip_to_slot(new /obj/item/clothing/suit/space/eva/plasmaman/wizard(H), slot_wear_suit)
|
||||
|
||||
@@ -9,13 +9,15 @@
|
||||
var/class
|
||||
var/list/default_genes = list(REGEN, BREATHLESS, COLDRES)
|
||||
var/list/default_spells = list()
|
||||
|
||||
var/activated = FALSE //for wishgranters to not give an option if someone already has it.
|
||||
|
||||
/datum/superheroes/proc/create(var/mob/living/carbon/human/H)
|
||||
assign_genes(H)
|
||||
assign_spells(H)
|
||||
equip(H)
|
||||
fixflags(H)
|
||||
assign_id(H)
|
||||
H.mind.special_role = SPECIAL_ROLE_SUPER
|
||||
|
||||
/datum/superheroes/proc/equip(var/mob/living/carbon/human/H)
|
||||
H.rename_character(H.real_name, name)
|
||||
|
||||
@@ -32,6 +32,32 @@ var/datum/paiController/paiController // Global handler for pAI candidates
|
||||
log_debug("Warning: possible href exploit by [key_name(usr)] (paiController/Topic, candidate is not a pAI)")
|
||||
return
|
||||
|
||||
if(href_list["download"])
|
||||
var/obj/item/paicard/card = locate(href_list["device"])
|
||||
if(card.pai)
|
||||
return
|
||||
if(usr.incapacitated() || isobserver(usr) || !card.Adjacent(usr))
|
||||
return
|
||||
if(istype(card, /obj/item/paicard) && istype(candidate, /datum/paiCandidate))
|
||||
var/mob/living/silicon/pai/pai = new(card)
|
||||
if(!candidate.name)
|
||||
pai.name = pick(GLOB.ninja_names)
|
||||
else
|
||||
pai.name = candidate.name
|
||||
pai.real_name = pai.name
|
||||
pai.key = candidate.key
|
||||
|
||||
card.setPersonality(pai)
|
||||
card.looking_for_personality = 0
|
||||
|
||||
ticker.mode.update_cult_icons_removed(card.pai.mind)
|
||||
ticker.mode.update_rev_icons_removed(card.pai.mind)
|
||||
|
||||
pai_candidates -= candidate
|
||||
usr << browse(null, "window=findPai")
|
||||
|
||||
|
||||
if(candidate)
|
||||
if(candidate.key && usr.key && candidate.key != usr.key)
|
||||
message_admins("Warning: possible href exploit by [key_name(usr)] (paiController/Topic, candidate and usr are different mobs)")
|
||||
log_debug("Warning: possible href exploit by [key_name(usr)] (paiController/Topic, candidate and usr are different mobs)")
|
||||
@@ -49,29 +75,6 @@ var/datum/paiController/paiController // Global handler for pAI candidates
|
||||
recruitWindow(O)
|
||||
return
|
||||
|
||||
if(href_list["download"])
|
||||
var/obj/item/paicard/card = locate(href_list["device"])
|
||||
if(card.pai)
|
||||
return
|
||||
if(usr.incapacitated() || isobserver(usr) || !card.Adjacent(usr))
|
||||
return
|
||||
if(istype(card,/obj/item/paicard) && istype(candidate,/datum/paiCandidate))
|
||||
var/mob/living/silicon/pai/pai = new(card)
|
||||
if(!candidate.name)
|
||||
pai.name = pick(GLOB.ninja_names)
|
||||
else
|
||||
pai.name = candidate.name
|
||||
pai.real_name = pai.name
|
||||
pai.key = candidate.key
|
||||
|
||||
card.setPersonality(pai)
|
||||
card.looking_for_personality = 0
|
||||
|
||||
ticker.mode.update_cult_icons_removed(card.pai.mind)
|
||||
ticker.mode.update_rev_icons_removed(card.pai.mind)
|
||||
|
||||
pai_candidates -= candidate
|
||||
usr << browse(null, "window=findPai")
|
||||
|
||||
if(href_list["new"])
|
||||
var/option = href_list["option"]
|
||||
|
||||
@@ -23,12 +23,13 @@
|
||||
path_image_color = "#FF0000"
|
||||
data_hud_type = DATA_HUD_SECURITY_ADVANCED
|
||||
|
||||
allow_pai = 0
|
||||
|
||||
var/lastfired = 0
|
||||
var/shot_delay = 3 //.3 seconds between shots
|
||||
var/lasercolor = ""
|
||||
var/disabled = 0//A holder for if it needs to be disabled, if true it will not seach for targets, shoot at targets, or move, currently only used for lasertag
|
||||
|
||||
|
||||
var/mob/living/carbon/target
|
||||
var/oldtarget_name
|
||||
var/threatlevel = 0
|
||||
@@ -41,10 +42,9 @@
|
||||
var/arrest_type = 0 //If true, don't handcuff
|
||||
var/projectile = /obj/item/projectile/energy/electrode //Holder for projectile type
|
||||
var/shoot_sound = 'sound/weapons/Taser.ogg'
|
||||
allow_pai = 0
|
||||
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/New(loc,created_name,created_lasercolor)
|
||||
/mob/living/simple_animal/bot/ed209/New(loc, created_name, created_lasercolor)
|
||||
..()
|
||||
if(created_name)
|
||||
name = created_name
|
||||
@@ -52,29 +52,33 @@
|
||||
lasercolor = created_lasercolor
|
||||
icon_state = "[lasercolor]ed209[on]"
|
||||
set_weapon() //giving it the right projectile and firing sound.
|
||||
spawn(3)
|
||||
var/datum/job/detective/J = new/datum/job/detective
|
||||
access_card.access += J.get_access()
|
||||
prev_access = access_card.access
|
||||
setup_access()
|
||||
|
||||
if(lasercolor)
|
||||
shot_delay = 6//Longer shot delay because JESUS CHRIST
|
||||
check_records = 0//Don't actively target people set to arrest
|
||||
arrest_type = 1//Don't even try to cuff
|
||||
declare_arrests = 0 // Don't spam sec
|
||||
bot_core.req_access = list(access_maint_tunnels, access_theatre, access_robotics)
|
||||
if(lasercolor)
|
||||
shot_delay = 6//Longer shot delay because JESUS CHRIST
|
||||
check_records = 0//Don't actively target people set to arrest
|
||||
arrest_type = 1//Don't even try to cuff
|
||||
declare_arrests = 0 // Don't spam sec
|
||||
bot_core.req_access = list(access_maint_tunnels, access_theatre, access_robotics)
|
||||
|
||||
if(created_name == initial(name) || !created_name)
|
||||
if(lasercolor == "b")
|
||||
name = pick("BLUE BALLER","SANIC","BLUE KILLDEATH MURDERBOT")
|
||||
else if (lasercolor == "r")
|
||||
name = pick("RED RAMPAGE","RED ROVER","RED KILLDEATH MURDERBOT")
|
||||
if(created_name == initial(name) || !created_name)
|
||||
if(lasercolor == "b")
|
||||
name = pick("BLUE BALLER","SANIC","BLUE KILLDEATH MURDERBOT")
|
||||
else if (lasercolor == "r")
|
||||
name = pick("RED RAMPAGE","RED ROVER","RED KILLDEATH MURDERBOT")
|
||||
|
||||
//SECHUD
|
||||
var/datum/atom_hud/secsensor = huds[DATA_HUD_SECURITY_ADVANCED]
|
||||
secsensor.add_hud_to(src)
|
||||
permanent_huds |= secsensor
|
||||
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/proc/setup_access()
|
||||
if(access_card)
|
||||
var/datum/job/detective/J = new/datum/job/detective
|
||||
access_card.access += J.get_access()
|
||||
prev_access = access_card.access
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/turn_on()
|
||||
. = ..()
|
||||
icon_state = "[lasercolor]ed209[on]"
|
||||
|
||||
@@ -29,12 +29,14 @@
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/New()
|
||||
..()
|
||||
if(access_card)
|
||||
access_card.access = list(access_syndicate, access_syndicate_leader)
|
||||
set_weapon()
|
||||
update_icon()
|
||||
spawn_turf = get_turf(src)
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/setup_access()
|
||||
if(access_card)
|
||||
access_card.access = list(access_syndicate, access_syndicate_leader)
|
||||
prev_access = access_card.access
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/update_icon()
|
||||
icon_state = initial(icon_state)
|
||||
@@ -160,7 +162,7 @@
|
||||
P.fire()
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/explode()
|
||||
if (!QDELETED(src))
|
||||
if(!QDELETED(src))
|
||||
if(depotarea)
|
||||
depotarea.list_remove(src, depotarea.guard_list)
|
||||
walk_to(src,0)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
var/check_friendly_fire = 0 // Should the ranged mob check for friendlies when shooting
|
||||
var/retreat_distance = null //If our mob runs from players when they're too close, set in tile distance. By default, mobs do not retreat.
|
||||
var/minimum_distance = 1 //Minimum approach distance, so ranged mobs chase targets down, but still keep their distance set in tiles to the target, set higher to make mobs keep distance
|
||||
|
||||
|
||||
//These vars are related to how mobs locate and target
|
||||
var/robust_searching = 0 //By default, mobs have a simple searching method, set this to 1 for the more scrutinous searching (stat_attack, stat_exclusive, etc), should be disabled on most mobs
|
||||
var/vision_range = 9 //How big of an area to search for targets in, a vision of 9 attempts to find targets as soon as they walk into screen view
|
||||
@@ -41,6 +41,8 @@
|
||||
/obj/structure/grille,
|
||||
/obj/structure/girder,
|
||||
/obj/structure/rack,
|
||||
/obj/structure/computerframe,
|
||||
/obj/machinery/constructable_frame,
|
||||
/obj/structure/barricade) //turned into a typecache in New()
|
||||
var/atom/targets_from = null //all range/attack/etc. calculations should be done from this atom, defaults to the mob itself, useful for Vehicles and such
|
||||
var/list/emote_taunt = list()
|
||||
|
||||
@@ -29,3 +29,23 @@
|
||||
heat_damage_per_tick = 15 //amount of damage applied if animal's body temperature is higher than maxbodytemp
|
||||
cold_damage_per_tick = 10 //same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp
|
||||
unsuitable_atmos_damage = 10
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/goblin
|
||||
name = "clown goblin"
|
||||
desc = "A tiny walking mask and clown shoes. You want to honk his nose!"
|
||||
icon_state = "clowngoblin"
|
||||
icon_living = "clowngoblin"
|
||||
icon_dead = null
|
||||
response_help = "honks the"
|
||||
speak = list("Honk!")
|
||||
speak_emote = list("sqeaks")
|
||||
emote_see = list("honks")
|
||||
maxHealth = 100
|
||||
health = 100
|
||||
|
||||
speed = -1
|
||||
turns_per_move = 1
|
||||
|
||||
del_on_death = TRUE
|
||||
loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/item/clothing/shoes/clown_shoes)
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
var/area/syndicate_depot/core/depotarea
|
||||
var/raised_alert = FALSE
|
||||
var/alert_on_death = FALSE
|
||||
var/alert_on_timeout = FALSE
|
||||
var/alert_on_timeout = TRUE
|
||||
var/alert_on_spacing = TRUE
|
||||
var/alert_on_shield_breach = FALSE
|
||||
var/seen_enemy = FALSE
|
||||
@@ -99,6 +99,7 @@
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/New()
|
||||
..()
|
||||
name = "[name] [pick(GLOB.last_names)]"
|
||||
// Do not attempt to move this code to Initialize() or LateInitialize(). Doing so with other objects has caused bugs in the past, because assigning "depotarea" may not work there.
|
||||
depotarea = areaMaster
|
||||
spawn_turf = get_turf(src)
|
||||
|
||||
@@ -197,7 +198,6 @@
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer
|
||||
name = "Syndicate Officer"
|
||||
alert_on_death = TRUE
|
||||
alert_on_timeout = TRUE
|
||||
melee_block_chance = 60
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory
|
||||
@@ -209,7 +209,6 @@
|
||||
maxHealth = 250
|
||||
health = 250
|
||||
melee_block_chance = 80
|
||||
alert_on_timeout = TRUE
|
||||
alert_on_shield_breach = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory/Initialize()
|
||||
|
||||
@@ -561,17 +561,16 @@
|
||||
/mob/living/simple_animal/proc/sentience_act() //Called when a simple animal gains sentience via gold slime potion
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/update_sight(reset_sight = FALSE)
|
||||
/mob/living/simple_animal/update_sight()
|
||||
if(!client)
|
||||
return
|
||||
if(stat == DEAD)
|
||||
grant_death_vision()
|
||||
return
|
||||
|
||||
if(reset_sight)
|
||||
see_invisible = initial(see_invisible)
|
||||
see_in_dark = initial(see_in_dark)
|
||||
sight = initial(sight)
|
||||
see_invisible = initial(see_invisible)
|
||||
see_in_dark = initial(see_in_dark)
|
||||
sight = initial(sight)
|
||||
|
||||
if(client.eye != src)
|
||||
var/atom/A = client.eye
|
||||
|
||||
@@ -295,6 +295,13 @@
|
||||
else
|
||||
return 0
|
||||
|
||||
/mob/new_player/proc/IsSyndicateCommand(rank)
|
||||
var/datum/job/job = job_master.GetJob(rank)
|
||||
if(job.syndicate_command)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/mob/new_player/proc/AttemptLateSpawn(rank,var/spawning_at)
|
||||
if(src != usr)
|
||||
return 0
|
||||
@@ -336,6 +343,8 @@
|
||||
if(IsAdminJob(rank))
|
||||
if(IsERTSpawnJob(rank))
|
||||
character.loc = pick(ertdirector)
|
||||
else if(IsSyndicateCommand(rank))
|
||||
character.loc = pick(syndicateofficer)
|
||||
else
|
||||
character.loc = pick(aroomwarp)
|
||||
join_message = "has arrived"
|
||||
|
||||
Reference in New Issue
Block a user