Skip to content

Commit

Permalink
add + spellcheck: Концовки для биоугроз + локализация Пауков Ужаса/Кс…
Browse files Browse the repository at this point in the history
…еноморфов (ss220-space#6587)

* part 1

* spider translate + empress egg ability + weak empress

* spider ending + no ghosts clicker

* xenos

* xeno end + hostile environment

* reloa shuttle split

* fix

* fix x2

* remove some unnecessary code

* правки правочки

* Правки локализации

---------

Co-authored-by: PlayerUnknown14 <[email protected]>
  • Loading branch information
dageavtobusnick and PlayerUnknown14 authored Feb 25, 2025
1 parent c11e2e1 commit a73cb66
Show file tree
Hide file tree
Showing 83 changed files with 2,311 additions and 575 deletions.
20 changes: 20 additions & 0 deletions code/__DEFINES/dcs/signals.dm
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,13 @@
/// cable was placed or joined somewhere : (turf)
#define COMSIG_GLOB_CABLE_UPDATED "!cable_updated"

#define COMSIG_GLOB_WEB_STORM_ENDED "!web_storm_ended"
#define COMSIG_GLOB_EMPRESS_EGG_DESTROYED "!empress_egg_destroyed"
#define COMSIG_GLOB_EMPRESS_EGG_BURST "!empress_egg_burst"
#define COMSIG_GLOB_IFECTION_CREATED "!infection_created"
#define COMSIG_GLOB_IFECTION_REMOVED "!infection_removed"
#define COMSIG_GLOB_XENO_STORM_ENDED "!xeno_storm_ended"

/// signals from globally accessible objects

///from SSsun when the sun changes position : (azimuth)
Expand Down Expand Up @@ -1294,6 +1301,19 @@

/// Source: /proc/random_hair_style (mob/living/carbon/human/human, valid_hairstyles, robohead)
#define COMSIG_RANDOM_HAIR_STYLE "random_hair_style"
// Terror Spiders Signals
/// Defilers ore queen sybtypes now can lay empress egg
#define COMSIG_SPIDER_CAN_LAY "spider_can_lay"

/// Human eaten by prince
#define COMSIG_HUMAN_EATEN "human_eaten"

/// Terror spider died
#define COMSIG_TERROR_SPIDER_DIED "terror_spider_died"

#define COMSIG_EMPRESS_EGG_LAYED "empress_egg_layed"

#define COMSIG_ALIEN_EVOLVE "alien_evolve"

/// Source: /datum/component/ritual_object/proc/pre_ritual_check (status_bitflag, mob/living/carbon/human, list/invokers, list/used_things)
#define COMSIG_RITUAL_ENDED "ritual_ended"
Expand Down
7 changes: 7 additions & 0 deletions code/__DEFINES/gamemode.dm
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,13 @@
#define SPECIAL_ROLE_XENOMORPH_DRONE "Xenomorph Drone"
#define SPECIAL_ROLE_XENOMORPH_SENTINEL "Xenomorph Sentinel"
#define SPECIAL_ROLE_XENOMORPH_LARVA "Xenomorph Larva"
#define SPECIAL_ROLE_TERROR_SPIDER "Terror Spider"
#define SPECIAL_ROLE_TERROR_QUEEN "Terror Queen"
#define SPECIAL_ROLE_TERROR_PRINCE "Terror Prince"
#define SPECIAL_ROLE_TERROR_PRINCESS "Terror Princess"
#define SPECIAL_ROLE_TERROR_DEFILER "Terror Defiler"
#define SPECIAL_ROLE_TERROR_EMPRESS "Terror Empress"
#define SPECIAL_ROLE_TERROR_DESTROYER "Terror Destroyer"
#define SPECIAL_ROLE_SPACE_NINJA "Space Ninja"
#define SPECIAL_ROLE_THIEF "Thief"
#define SPECIAL_ROLE_SPACE_DRAGON "Space Dragon"
Expand Down
6 changes: 6 additions & 0 deletions code/__DEFINES/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,12 @@
#define SLIME_FRIENDSHIP_STAY 3 //Min friendship to order it to stay
#define SLIME_FRIENDSHIP_ATTACK 8 //Min friendship to order it to attack

//Spiders ai states
#define SPINNING_WEB 1
#define LAYING_EGGS 2
#define MOVING_TO_TARGET 3
#define SPINNING_COCOON 4

//Hostile simple animals
//If you add a new status, be sure to add a list for it to the simple_animals global in _globalvars/lists/mobs.dm
#define AI_ON 1
Expand Down
52 changes: 52 additions & 0 deletions code/__DEFINES/terror_spiders.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#define TS_DAMAGE_SIMPLE 0
#define TS_DAMAGE_POISON 1
#define TS_DAMAGE_BRUTE 2

//TIER 1
#define TS_DESC_KNIGHT "Рыцарь - ШТУРМ"
#define TS_DESC_LURKER "Наблюдатель - ЗАСАДЫ"
#define TS_DESC_HEALER "Лекарь - ЛЕЧЕНИЕ"
#define TS_DESC_REAPER "Жнец - БОЙ"
#define TS_DESC_BUILDER "Дрон - СТРОИТЕЛЬСТВО"
//TIER 2
#define TS_DESC_WIDOW "Вдова - ОТРАВЛЕНИЕ"
#define TS_DESC_GUARDIAN "Защитник - ОБОРОНА"
#define TS_DESC_DESTROYER "Разрушитель - САБОТАЖ"
//TIER 3
#define TS_DESC_PRINCE "Принц - КРОВАВАЯ БАНЯ"
#define TS_DESC_PRINCESS "Принцесса - РАЗМНОЖЕНИЕ"
#define TS_DESC_MOTHER "Мать - ПОДДЕРЖКА"
#define TS_DESC_DEFILER "Осквернитель - ЗАРАЖЕНИЕ"
//TIER 4
#define TS_DESC_QUEEN "Королева - ЛИДЕР"

#define TS_TIER_1 1
#define TS_TIER_2 2
#define TS_TIER_3 3
#define TS_TIER_4 4
#define TS_TIER_5 5

#define TERROR_QUEEN "Королева Ужаса"
#define TERROR_PRINCE "Принц Ужаса"
#define TERROR_PRINCESS "Принцесса Ужаса"
#define TERROR_DEFILER "Осквернитель Ужаса"
#define TERROR_OTHER "Пауки Ужаса"
#define SPAWN_TERROR_TYPES list(TERROR_QUEEN, TERROR_PRINCE, TERROR_PRINCESS, TERROR_DEFILER)

#define TERROR_STAGE_START 0
#define TERROR_STAGE_PROTECT_EGG 1
#define TERROR_STAGE_STORM 2
#define TERROR_STAGE_END 3
#define TERROR_STAGE_POST_END 4

#define TERROR_VOTE_LEN 30 SECONDS

#define TERROR_VOTE_TICKS 30

#define INFECTIONS_ANNOUNCE_TRIGGER 0.1

#define SPIDERS_ANNOUNCE_TRIGGER 0.1

#define TIME_TO_ANNOUNCE 10 SECONDS

#define EMPRESS_EGG_TARGET_COUNT 2 + num_station_players() / 5
19 changes: 19 additions & 0 deletions code/__DEFINES/xenomorphs.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#define EMPRESS_EVOLVE_TARGET_COUNT 2 + num_station_players() / 6

#define EVOLVE_ANNOUNCE_TRIGGER 0.1

#define TO_EMPRESS_EVOLVE_TIME 10 SECONDS

#define TO_EMPRESS_EVOLVE_COST 750

#define LARVA_TYPE /mob/living/carbon/alien/larva

#define QUEEN_TYPE /mob/living/carbon/alien/humanoid/queen

#define EMPRESS_TYPE /mob/living/carbon/alien/humanoid/empress

#define XENO_STAGE_START 0
#define XENO_STAGE_PROTECT_COCON 1
#define XENO_STAGE_STORM 2
#define XENO_STAGE_END 3
#define XENO_STAGE_POST_END 4
2 changes: 0 additions & 2 deletions code/__HELPERS/antag_menu_helpers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,8 @@
prepare_antag_list(mode.supervillains, cached_data, "Суперзлодей", antagonist_cache)
prepare_antag_list(mode.greyshirts, cached_data, "Грейтайд", antagonist_cache)
prepare_antag_list(mode.demons, cached_data, "Демон", antagonist_cache)
prepare_antag_list(mode.xenos, cached_data, "Ксеноморф", antagonist_cache)
prepare_antag_list(mode.eventmiscs, cached_data, "Ивентроль", antagonist_cache)
prepare_antag_list(mode.traders, cached_data, "Торговец", antagonist_cache)
prepare_antag_list(mode.terror_spiders, cached_data, "Паук Ужаса", antagonist_cache)
prepare_antag_list(mode.morphs, cached_data, "Морф", antagonist_cache)
prepare_antag_list(mode.swarmers, cached_data, "Свармер", antagonist_cache)
prepare_antag_list(mode.guardians, cached_data, "Голопаразит", antagonist_cache)
Expand Down
1 change: 1 addition & 0 deletions code/controllers/subsystem/shuttles.dm
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ SUBSYSTEM_DEF(shuttle)
var/emergency_sec_level_time = 0 // time sec level was last raised to red or higher
var/area/emergencyLastCallLoc
var/emergencyNoEscape
var/list/hostile_environment = list()

//supply shuttle stuff
var/obj/docking_port/mobile/supply/supply
Expand Down
4 changes: 4 additions & 0 deletions code/controllers/subsystem/ticker.dm
Original file line number Diff line number Diff line change
Expand Up @@ -598,6 +598,10 @@ SUBSYSTEM_DEF(ticker)
emobtext += "<br>"
to_chat(world, emobtext)

for(var/team_type in GLOB.antagonist_teams)
var/datum/team/team = GLOB.antagonist_teams[team_type]
team.declare_completion()

mode.declare_completion()//To declare normal completion.

//calls auto_declare_completion_* for all modes
Expand Down
3 changes: 3 additions & 0 deletions code/controllers/subsystem/weather.dm
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ SUBSYSTEM_DEF(weather)
var/datum/weather/our_event = V
if(our_event.aesthetic || our_event.stage != MAIN_STAGE)
continue
if(our_event.self_fire)
our_event.fire()
continue
for(var/mob/living/act_on as anything in GLOB.mob_living_list)
if(our_event.can_weather_act(act_on))
our_event.weather_act(act_on)
Expand Down
33 changes: 21 additions & 12 deletions code/datums/components/ghost_direct_control.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,17 @@
var/assumed_control_message
/// Type of ban you can get to prevent you from accepting this role
var/ban_type
/// Check Syndicate ban
var/ban_syndicate
/// Any extra checks which need to run before we take over
var/datum/callback/extra_control_checks
/// Callback run after someone successfully takes over the body
var/datum/callback/after_assumed_control
/// If we're currently awaiting the results of a ghost poll
var/awaiting_ghosts = FALSE
/// Aditional text of question
var/question_text


/datum/component/ghost_direct_control/Initialize(
ban_type = ROLE_SENTIENT,
Expand All @@ -21,20 +26,24 @@
antag_age_check = TRUE,
check_antaghud = TRUE,
poll_length = 10 SECONDS,
ban_syndicate = FALSE,
assumed_control_message = null,
datum/callback/extra_control_checks,
datum/callback/after_assumed_control,
question_text,
)
. = ..()
if(!isliving(parent))
return COMPONENT_INCOMPATIBLE

var/mob/mob_parent = parent
src.ban_type = ban_type
src.assumed_control_message = assumed_control_message || "You are [parent]!"
src.ban_syndicate = ban_syndicate
src.assumed_control_message = assumed_control_message || "Вы [mob_parent.declent_ru(NOMINATIVE)]!"
src.extra_control_checks = extra_control_checks
src.after_assumed_control = after_assumed_control
src.question_text = question_text

var/mob/mob_parent = parent
LAZYADD(GLOB.mob_spawners[format_text("[initial(mob_parent.name)]")], mob_parent)

if(poll_candidates)
Expand Down Expand Up @@ -70,7 +79,7 @@
var/mob/living/our_mob = parent
if(our_mob.stat == DEAD || our_mob.key || awaiting_ghosts)
return
examine_text += span_boldnotice("You could take control of this mob by clicking on it.")
examine_text += span_boldnotice("Вы можете взять под контроль это существо, нажав на него.")

/// Send out a request for a brain
/datum/component/ghost_direct_control/proc/request_ghost_control(poll_question, role_name, poll_length, age_check, check_ahud)
Expand Down Expand Up @@ -99,35 +108,35 @@
if(!hopeful_ghost.client)
return
if(awaiting_ghosts)
to_chat(hopeful_ghost, span_warning("Ghost candidate selection currently in progress!"))
to_chat(hopeful_ghost, span_warning("В настоящее время идёт отбор кандидатов-призраков!"))
return COMPONENT_CANCEL_ATTACK_CHAIN
if(!SSticker.HasRoundStarted())
to_chat(hopeful_ghost, span_warning("You cannot assume control of this until after the round has started!"))
to_chat(hopeful_ghost, span_warning("Вы не можете взять на себя управление этим существом до начала раунда!"))
return COMPONENT_CANCEL_ATTACK_CHAIN
INVOKE_ASYNC(src, PROC_REF(attempt_possession), our_mob, hopeful_ghost)
return COMPONENT_CANCEL_ATTACK_CHAIN

/// We got far enough to establish that this mob is a valid target, let's try to posssess it
/datum/component/ghost_direct_control/proc/attempt_possession(mob/our_mob, mob/dead/observer/hopeful_ghost)
var/ghost_asked = tgui_alert(usr, "Become [our_mob]?", "Are you sure?", list("Yes", "No"))
if(ghost_asked != "Yes" || QDELETED(our_mob))
var/ghost_asked = tgui_alert(usr, "[question_text? question_text : "Стать [capitalize(our_mob.declent_ru(INSTRUMENTAL))]?"]", "Стать [capitalize(our_mob.declent_ru(INSTRUMENTAL))]?", list("Да", "Нет"))
if(ghost_asked != "Да" || QDELETED(our_mob))
return
assume_direct_control(hopeful_ghost)

/// Grant possession of our mob, component is now no longer required
/datum/component/ghost_direct_control/proc/assume_direct_control(mob/harbinger)
if(QDELETED(src))
to_chat(harbinger, span_warning("Offer to possess creature has expired!"))
to_chat(harbinger, span_warning("Срок действия предложения о контроле над существом истёк!"))
return
if(jobban_isbanned(harbinger, ban_type))
to_chat(harbinger, span_warning("You are banned from playing as this role!"))
if(jobban_isbanned(harbinger, ban_type) || (ban_syndicate && jobban_isbanned(harbinger, ROLE_SYNDICATE)))
to_chat(harbinger, span_warning("Эта роль для вас заблокирована!"))
return
var/mob/living/new_body = parent
if(new_body.stat == DEAD)
to_chat(harbinger, span_warning("This body has passed away, it is of no use!"))
to_chat(harbinger, span_warning("Это тело умерло, оно бесполезно!"))
return
if(new_body.key)
to_chat(harbinger, span_warning("[parent] has already become sapient!"))
to_chat(harbinger, span_warning("[capitalize(new_body.declent_ru(NOMINATIVE))] уже является разумным!"))
qdel(src)
return
if(extra_control_checks && !extra_control_checks.Invoke(harbinger))
Expand Down
40 changes: 39 additions & 1 deletion code/datums/mind.dm
Original file line number Diff line number Diff line change
Expand Up @@ -550,6 +550,23 @@
. += "<a href='byond://?src=[UID()];blob=blob'>blobize</a>|<b>NO</b>"
. += _memory_edit_role_enabled(ROLE_BLOB)

/datum/mind/proc/memory_edit_terrors()
. = _memory_edit_header("terror spiders")
var/datum/antagonist/terror_spider/spider_datum = has_antag_datum(/datum/antagonist/terror_spider/)
if(spider_datum)
. += "|<b><font color='red'>[spider_datum.spider_category]</font></b>"
else
. += "<a href='byond://?src=[UID()];terror=datumise'>datumise</a>|<b>NO</b>"
. += _memory_edit_role_enabled(ROLE_TERROR_SPIDER)

/datum/mind/proc/memory_edit_xenomorphs()
. = _memory_edit_header("xenomorphs")
var/datum/antagonist/xenomorph/xeno_datum = has_antag_datum(/datum/antagonist/xenomorph)
if(xeno_datum)
. += "|<b><font color='red'>[xeno_datum.antag_menu_name]</font></b>"
else
. += "<a href='byond://?src=[UID()];xenomorph=datumise'>datumise</a>|<b>NO</b>"
. += _memory_edit_role_enabled(ROLE_ALIEN)

/datum/mind/proc/memory_edit_traitor()
. = _memory_edit_header("traitor", list("traitorchan", "traitorvamp", "traitorthief"))
Expand Down Expand Up @@ -755,7 +772,10 @@

if((isliving(current) && current.can_be_blob()) || isblobovermind(src))
sections["blob"] = memory_edit_blob(current)

if(isterrorspider(current))
sections["terror_spiders"] = memory_edit_terrors(current)
if(isalien(current))
sections["xenomorphs"] = memory_edit_xenomorphs()
if(!issilicon(current))
/** CULT ***/
sections["cult"] = memory_edit_cult(H)
Expand Down Expand Up @@ -2476,6 +2496,24 @@
blob_overmind.set_strain(strain)
log_admin("[key_name(usr)] changed the strain to [strain] for [key_name(current)]")
message_admins("[key_name_admin(usr)] changed the strain to [strain] for [key_name_admin(current)]")

else if(href_list["terror"])
switch(href_list["terror"])
if("datumise")
if(QDELETED(current) || current.stat == DEAD)
return
var/mob/living/simple_animal/hostile/poison/terror_spider/spider = current
spider.add_datum_if_not_exist()
log_and_message_admins("has made [key_name(current)] into a \"Terror Spider\"")

else if(href_list["xenomorph"])
switch(href_list["xenomorph"])
if("datumise")
if(QDELETED(current) || current.stat == DEAD)
return
var/mob/living/carbon/alien/alien = current
alien.update_datum()
log_and_message_admins("has made [key_name(current)] into a \"Xenomorph\"")

else if(href_list["common"])
switch(href_list["common"])
Expand Down
1 change: 1 addition & 0 deletions code/datums/spells/alien_spells/evolve.dm
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@

var/mob/living/carbon/alien/new_xeno = new evolution_path(get_turf(user))
user.mind.transfer_to(new_xeno)
SEND_SIGNAL(new_xeno.mind, COMSIG_ALIEN_EVOLVE, user.type, evolution_path)
new_xeno.mind.name = new_xeno.name

if(HAS_TRAIT(user, TRAIT_MOVE_VENTCRAWLING))
Expand Down
4 changes: 4 additions & 0 deletions code/datums/weather/weather.dm
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@

var/barometer_predictable = FALSE
var/next_hit_time = 0 //For barometers to know when the next storm will hit
/// Has special firing
var/self_fire = FALSE

/datum/weather/New(z_levels)
..()
Expand Down Expand Up @@ -139,6 +141,8 @@

return TRUE

/datum/weather/proc/fire()
return

/datum/weather/proc/weather_act(mob/living/target) //What effect does this weather have on the hapless mob?
return
Expand Down
Loading

0 comments on commit a73cb66

Please sign in to comment.