-
Notifications
You must be signed in to change notification settings - Fork 76
(Не)очень большой реворк ксеноморфов #5489
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from 132 commits
06adae4
f37122e
e6b71cc
ce640f8
28a8ea8
c4a49fa
ce6f794
ec7c320
e35f031
ccb2422
4754766
0e74759
101bdc4
913782b
8f313f4
da68742
75759e3
01e4293
925c9e4
95baccc
a44d593
e368bd3
b832932
a1acb08
2b6ce17
b884ec1
464bdc1
88194da
14c6c70
cfa25cb
77f39ad
53af5bb
b437606
87d90b7
37ea342
db452c4
e4c7cf8
acdeaf0
9cde877
deb90c0
bb0f4c6
c17cdbb
51db7aa
e7dd8b5
e7fce3f
30f561e
ed5575d
d013aa8
7e8a337
d3f2ea0
f700ddb
bd1f666
e3d8d7d
deabc42
67bae0a
c3b168b
225c3fb
bc8bfd5
8876ef6
7fb17d7
93f86fe
222be09
f7d19a7
be2029e
2919469
61986cc
bf6a4f5
220aea3
a752729
40f0ac4
05e94a4
4438d62
db4b520
89229f7
bfd7be6
566d79f
1973035
523ea31
3c5eb88
6155950
4d14567
d778ef3
edb8822
f3c341b
2be2b0f
3d3dc8a
dcf114e
767afcf
17c21d6
a0a4272
5a16899
0d2664c
bb45329
724732f
638f929
f7ef022
73830bd
7b276d5
10cdae9
5581328
5d80f74
ab0a8a7
e21600a
30a1b7b
06947c3
a7e9a23
24bc5b4
0625a44
ee0f2b3
abec370
e7059ec
03b21d3
ab30135
4e1b435
cff74eb
f8d8181
62b5bf9
91414e3
fd6c989
da74d4f
28b0af2
e9731f8
9713c72
4150a52
9f2eca1
864c068
8ecc105
72b01a7
f2738d4
eb28095
766e48c
5a2217a
c68a6fb
3db6992
b0fd2fe
823cc99
f917ca2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| // on call adjustPlasma() proc | ||
| #define COMSIG_XENO_PLASMA_ADJUSTED "plasma_adjusted" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,6 +1,10 @@ | ||
| // xeno traits | ||
| /// Trait source for xeno innate abilities | ||
| #define TRAIT_XENO_INNATE "xeno_innate" | ||
| /// Trait source for something added BY a xeno ability | ||
| #define TRAIT_XENO_ABILITY_GIVEN "xeno_ability_given" | ||
| /// Determines if something can receive healing from a xeno | ||
| #define TRAIT_XENO_HEAL_AURA "trait_xeno_heal_aura" | ||
| /// Trait source for traits added by fortify ability | ||
| #define TRAIT_XENO_FORTIFY "xeno_fortify" | ||
| #define TRAIT_XENO_HUD "xeno_hud" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1 +1,12 @@ | ||
| // Nubbers | ||
| #define isnabber(A) (is_species(A, /datum/species/nabber)) | ||
|
|
||
| // TGMC Xenomorph | ||
| #define istgmcalien(A) (istype(A, /mob/living/carbon/alien/adult/tgmc)) | ||
| #define istgmcalienqueen(A) (istype(A, /mob/living/carbon/alien/adult/tgmc/queen)) | ||
| #define istgmcalienpraetorian(A) (istype(A, /mob/living/carbon/alien/adult/tgmc/praetorian)) | ||
| #define istgmcalienravager(A) (istype(A, /mob/living/carbon/alien/adult/tgmc/ravager)) | ||
| #define istgmcaliencrusher(A) (istype(A, /mob/living/carbon/alien/adult/tgmc/crusher)) | ||
| #define istgmcalienspitter(A) (istype(A, /mob/living/carbon/alien/adult/tgmc/spitter)) | ||
|
|
||
| #define istgmcalientier2(A) (istgmcalienpraetorian(A) || istgmcalienravager(A) || istgmcaliencrusher(A) || istgmcalienspitter(A)) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,9 +1,13 @@ | ||
| GLOBAL_VAR_INIT(merged_huds, merge_huds()) | ||
|
|
||
| /proc/merge_huds() | ||
| var/icon/huds = new('modular_nova/master_files/icons/mob/huds/hud.dmi') | ||
| var/icon/ff_huds = new('tff_modular/modules/custom_huds/icons/hud.dmi') | ||
| var/icon/huds = icon('modular_nova/master_files/icons/mob/huds/hud.dmi') | ||
| var/list/icon/additional_huds = list( | ||
| icon('tff_modular/modules/custom_huds/icons/hud.dmi'), | ||
| icon('tff_modular/modules/tgmc_xenos/icons/xeno_hud.dmi'), | ||
| ) | ||
|
|
||
| for(var/state in icon_states(ff_huds)) | ||
| huds.Insert(icon(ff_huds, state), state) | ||
| for(var/icon/hud in additional_huds) | ||
| for(var/state in icon_states(hud)) | ||
| huds.Insert(icon(hud, state), state) | ||
| return huds |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,27 @@ | ||
| GLOBAL_LIST_INIT(additional_observer_huds, list( | ||
| TRAIT_XENO_HUD, | ||
| )) | ||
| GLOBAL_LIST_INIT(additional_combo_huds, list( | ||
| TRAIT_XENO_HUD, | ||
| )) | ||
|
|
||
| /client/enable_combo_hud() | ||
| if(combo_hud_enabled) | ||
| return | ||
| mob.add_traits(GLOB.additional_combo_huds, ADMIN_TRAIT) | ||
| return ..() | ||
|
|
||
| /client/disable_combo_hud() | ||
| if(!combo_hud_enabled) | ||
| return | ||
| mob.remove_traits(GLOB.additional_combo_huds, ADMIN_TRAIT) | ||
| return ..() | ||
|
|
||
| /mob/dead/observer/show_data_huds() | ||
| . = ..() | ||
| add_traits(GLOB.additional_observer_huds, REF(src)) | ||
|
|
||
| /mob/dead/observer/remove_data_huds() | ||
| . = ..() | ||
| remove_traits(GLOB.additional_observer_huds, REF(src)) | ||
|
|
This file was deleted.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,166 @@ | ||
| /// TGMC_XENOS (old nova sector xenos) | ||
|
|
||
| /mob/living/carbon/alien/adult/tgmc | ||
| name = "rare bugged alien" | ||
| icon = 'tff_modular/modules/tgmc_xenos/icons/big_xenos.dmi' | ||
| hud_possible = list(ANTAG_HUD, XENO_HUD, XENOPLASMA_HUD) | ||
| rotate_on_lying = FALSE | ||
| base_pixel_w = -16 | ||
| layer = LARGE_MOB_LAYER //above most mobs, but below speechbubbles | ||
| maptext_height = 64 | ||
| maptext_width = 64 | ||
| pressure_resistance = 200 | ||
|
|
||
| armor_type = /datum/armor/tgmc_xeno | ||
|
|
||
| bodyparts = list( | ||
| /obj/item/bodypart/chest/alien/tgmc, | ||
| /obj/item/bodypart/head/alien/tgmc, | ||
| /obj/item/bodypart/arm/left/alien/tgmc, | ||
| /obj/item/bodypart/arm/right/alien/tgmc, | ||
| /obj/item/bodypart/leg/right/alien/tgmc, | ||
| /obj/item/bodypart/leg/left/alien/tgmc, | ||
| ) | ||
|
|
||
| default_organ_types_by_slot = list( | ||
| ORGAN_SLOT_BRAIN = /obj/item/organ/brain/alien, | ||
| ORGAN_SLOT_XENO_HIVENODE = /obj/item/organ/alien/hivenode, | ||
| ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/alien, | ||
| ORGAN_SLOT_EYES = /obj/item/organ/eyes/alien/tgmc, | ||
| ORGAN_SLOT_LIVER = /obj/item/organ/liver/alien, | ||
| ORGAN_SLOT_EARS = /obj/item/organ/ears, | ||
| ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/alien, | ||
| ) | ||
|
|
||
| /// What icon file update_held_items will look for when making inhands for xenos | ||
| var/alt_inhands_file = 'tff_modular/modules/tgmc_xenos/icons/big_xenos.dmi' | ||
| /// Setting this will give a xeno generic_evolve set to evolve them into this type | ||
| var/next_evolution | ||
| /// Keeps track of if a xeno has evolved recently, if so then we prevent them from evolving until that time is up | ||
| var/has_evolved_recently = FALSE | ||
| /// How long xenos should be unable to evolve after recently evolving | ||
| var/evolution_cooldown_time = 90 SECONDS | ||
| /// Determines if a xeno is unable to use abilities | ||
| var/unable_to_use_abilities = FALSE | ||
| /// Все дополнительные органы, что должны находиться в телах ксеносов | ||
| var/list/additional_organ_types_by_slot | ||
|
|
||
| // Оффсет для огня | ||
| var/fire_offset_x = 16 | ||
| var/fire_offset_y = 0 | ||
|
|
||
| // АП при атаке по мехам | ||
| var/mecha_armor_penetration = 10 | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Я бы поднял до 30 как базовом уровне, ксенов и так бьют мехи
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
30 АП? Это немало... |
||
| // Способность выдержать тяжелые удары мехов и не потерять сознание | ||
| var/resist_heavy_hits = FALSE | ||
|
|
||
| // Включен ли в данный момент фортифай | ||
| var/fortify = FALSE | ||
|
|
||
| // Может ли переносить хагов | ||
| var/can_hold_facehuggers = FALSE | ||
|
|
||
| /mob/living/carbon/alien/adult/tgmc/Initialize(mapload) | ||
| . = ..() | ||
| real_name = "alien [caste]" | ||
|
|
||
| update_offsets() // Необходимо, чтобы base_pixel_w применился | ||
| set_armor(armor_type) | ||
|
|
||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Советую добавить сюда же, |
||
| var/datum/atom_hud/data/xeno/xeno_hud = GLOB.huds[DATA_HUD_XENO] | ||
| xeno_hud.add_atom_to_hud(src) | ||
|
|
||
| if(next_evolution) | ||
| GRANT_ACTION(/datum/action/cooldown/alien/tgmc/generic_evolve) | ||
|
|
||
| add_traits(list(TRAIT_XENO_HEAL_AURA, TRAIT_PIERCEIMMUNE, TRAIT_XENO_HUD), TRAIT_XENO_INNATE) | ||
| AddElement(/datum/element/resin_walker, /datum/movespeed_modifier/resin_speedup) | ||
| AddComponent(/datum/component/seethrough_mob) | ||
|
|
||
| /mob/living/carbon/alien/adult/tgmc/create_internal_organs() | ||
| if(additional_organ_types_by_slot) | ||
| for(var/slot in additional_organ_types_by_slot) | ||
| default_organ_types_by_slot[slot] = additional_organ_types_by_slot[slot] | ||
| return ..() | ||
|
|
||
| /mob/living/carbon/alien/adult/tgmc/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) | ||
| if(body_position == LYING_DOWN) // Лежим - значит отдыхаем. Никакой войны во время отдыха | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Почему? А что ты прикажешь делать ксеносам под огнем на подавление? Все тактика атаки лежа, весьма сильная.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Потому что хил большой при лежании. Да и у них даже текстурка не выглядит так, будто они могут из такого положения кого-то бить |
||
| return FALSE | ||
| if(fortify) | ||
| return FALSE | ||
| if(ishuman(attack_target)) | ||
| var/mob/living/carbon/human/target = attack_target | ||
| if(target.stat == DEAD) | ||
| to_chat(src, span_warning("[target] is dead, why would we want to touch it?")) | ||
| return FALSE | ||
| return ..() | ||
|
|
||
| /mob/living/carbon/alien/adult/tgmc/set_resting(new_resting, silent = TRUE, instant = FALSE) | ||
| if(fortify) | ||
| balloon_alert(src, "Cannot while fortified") | ||
| return FALSE | ||
| return ..() | ||
|
|
||
| /mob/living/carbon/alien/adult/tgmc/on_lying_down(new_lying_angle) | ||
| . = ..() | ||
| ADD_TRAIT(src, TRAIT_IMMOBILIZED, LYING_DOWN_TRAIT) | ||
|
||
|
|
||
| /mob/living/carbon/alien/adult/tgmc/on_standing_up() | ||
| . = ..() | ||
| REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, LYING_DOWN_TRAIT) | ||
|
|
||
| /mob/living/carbon/alien/adult/tgmc/death(gibbed) | ||
| . = ..() | ||
| xeno_hud_set_plasma() | ||
|
|
||
| /mob/living/carbon/alien/adult/tgmc/getarmor(def_zone, type) | ||
| return get_armor_rating(type) | ||
|
|
||
| /datum/armor/tgmc_xeno | ||
| acid = 100 | ||
| bio = 100 | ||
| bomb = 0 | ||
| bullet = 0 | ||
| consume = 0 | ||
| energy = 0 | ||
| laser = 0 | ||
| fire = 0 | ||
| melee = 0 | ||
| wound = 100 | ||
|
|
||
| /mob/living/carbon/alien/adult/tgmc/get_fire_overlay(stacks, on_fire) | ||
| var/fire_icon = "generic_fire" | ||
|
|
||
| if(!GLOB.fire_appearances[fire_icon]) | ||
| var/mutable_appearance/new_fire_overlay = mutable_appearance( | ||
| 'icons/mob/effects/onfire.dmi', | ||
| fire_icon, | ||
| -HIGHEST_LAYER, | ||
| appearance_flags = RESET_COLOR, | ||
| ) | ||
| var/matrix/M = matrix(fire_offset_x, fire_offset_y, MATRIX_TRANSLATE) | ||
| new_fire_overlay.transform = M | ||
| GLOB.fire_appearances[fire_icon] = new_fire_overlay | ||
|
|
||
| return GLOB.fire_appearances[fire_icon] | ||
|
|
||
| /mob/living/carbon/alien/adult/tgmc/add_shared_particles(particle_type, custom_key, particle_flags, pool_size) | ||
| . = ..() | ||
| var/obj/particle_holder = . | ||
| particle_holder.pixel_x = fire_offset_x | ||
| particle_holder.pixel_y = fire_offset_y | ||
|
|
||
| /mob/living/carbon/alien/adult/tgmc/prepare_data_huds() | ||
| . = ..() | ||
| xeno_hud_set_plasma() | ||
|
|
||
| /mob/living/carbon/proc/get_max_plasma() | ||
| var/obj/item/organ/alien/plasmavessel/vessel = get_organ_by_type(/obj/item/organ/alien/plasmavessel) | ||
| if(isnull(vessel)) | ||
| return 0 | ||
| return vessel.max_plasma | ||
|
|
||
| /mob/living/carbon/alien/adult/tgmc/adjustPlasma(amount) | ||
| . = ..() | ||
| if(.) | ||
| SEND_SIGNAL(src, COMSIG_XENO_PLASMA_ADJUSTED, amount) | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Что насчет того, чтобы сделать так. Добавить в /mob/proc/after_mech_attack(), после чего вызывать этот прок от сюда. При этом ты можешь завернуть - это модульно.