Moment d'invincibilité
Un moment d'invincibilité (« Moment d'invincibilité » en anglais) est un bref moment pendant lequel une entité ne peut subir aucun dégât. Il est généralement attribué juste après avoir subi des dégâts.
L'objectif général du moment d'invincibilité est d'empêcher une entité de subit trop de dégâts par des attaques continues ou répétées rapidement. Par exemple, s'il n'y a pas de laps d'invincibilité, un joueur submergé dans de la lave prendrait dégâts à chaque tick[1], soit 60 fois par seconde.
Les joueurs en particulier peuvent également avoir des moments d'invincibilité sous certaines autres conditions, et pas seulement en subissant des dégâts.
Invincibilité du joueur
Le joueur obtient un moment d'invincibilité après avoir subi des dégâts de n'importe quelle façon. La longueur de ce moment varie selon les circontances. Certains objets offrent également des moments d'invincibilité lorsque leurs effets sont activés. Voir ci-dessous pour plus de détails.
Groupes d'invincibilité
Sur les Version Bureau,
Version Console et
Version Mobile, certains groupes de sources de dégâts offrent différents "types" de moment d'invincibilité. Ces différents types n'ont pas d'interférence entre eux. La plupart des sources de dégâts sont dans le même groupe (groupe 4 ci-dessous), mais il y trois autres groupes :
Thorny bushes
Pointe
Pointe en bois
Cactus roulant(versions Bureau, Console et Mobile)(seulement les dégâts
au contact, à l'arrêt)Cacti(seulement dans les mondes
Le Constant et Get fixed boi)
Seigneur de la lune(versions Bureau, Console et Mobile)
Impératrice de lumière(versions Bureau, Console et Mobile)
Par exemple, si le joueur subit des dégâts d'une pointe (groupe 1 ci-dessus), il ne prendra pas de dégâts de contact d'un cactus roulant à l'arrêt (aussi dans le groupe 1) pendant la durée du moment d'invincibilité, mais pourra toujours subir des dégâts d'un ennemi (groupe 4) pendant ce temps.
Sur les Version Console old-gen et Version Nintendo
, il n'y a pas ces différents groupes d'invincibilité. Toutes les sources de dégâts donnent le même "type" de moment d'invincibilité.
Durée du moment d'invincibilité
Subir des dégâts offre généralement au joueur un moment d'invincibilité de 0,67 seconde par défaut. Cette durée est divisée de moitié si 1 seul dégât est subi, et est encore plus faible en PvP. Le pendentif en croix et ses améliorations augmentent la durée du moment d'invincibilité[a]. D'autres effets divers offrent également un moment d'invincibilité, comme la ré-apparition, l'esquive, la parade, ou infliger des dégâts avec une monture. Voir le tableau suivant pour plus de détails.
Source | Défaut[b] | Pendentif en croix[c] | |
---|---|---|---|
Moment d'invincibilité par défaut lorsque des dégâts sont subis[6] |
0,67 seconde | 1,33 seconde | |
Si 1 seul dégât est subi[6] | 0,33 seconde | 0,67 seconde | |
Dégâts subis en PvP[d] | 0,13 seconde | n/a | |
Réapparaitre après être mort en PvP[7] | 5 secondes | n/a | |
Réapparaitre après être mort outside of PvP[7] |
3 secondes | n/a | |
En arrivant dans le monde, ou en étant téléporté au point d'apparition (par ex. avec un miroir magique)[7] |
1 seconde | n/a | |
![]() |
Protection bénite(versions Bureau, Console et Mobile)[8] | 1,33 seconde[e] | 2 secondes[e] |
![]() |
Esquive d'ombre(versions Console old-gen et 3DS) | ||
![]() |
Ceinture noire(et ses améliorations)[9] | ||
![]() |
Cerveau de confusion(Effet d'esquive)[10] | ||
![]() |
Marque du Brasier(versions Bureau, Console et Mobile)(parade du bouclier)[11] | 0,5 seconde | 1 seconde |
![]() |
Écu uni de sergent(versions Bureau, Console et Mobile)(parade du bouclier) | ||
![]() |
Infusion bizarre(versions Bureau, Console et Mobile)[12] | Fournit le moment d'invincibilité à différentes chances lorsqu'utilisé:[e] 11%: 4 secondes |
n/a |
![]() |
Cube de voyage(versions Bureau, Console et Mobile)(coup de couteau)[13] | None | n/a |
![]() |
Monture gelée(versions Bureau, Console, Console old-gen et Mobile)(sur le coup)[14] | 0,1 seconde | n/a |
![]() |
Monture gelée ailée(versions Bureau, Console et Mobile)(sur le coup) | ||
![]() |
Monture licorne(versions Bureau, Console et Mobile)(sur le coup)[15] | ||
![]() |
Monture cheval peint(versions Bureau, Console et Mobile)(sur le coup) | ||
![]() |
Monture cheval majestueux(versions Bureau, Console et Mobile)(sur le coup) | ||
![]() |
Monture cheval noir(versions Bureau, Console et Mobile)(sur le coup) | ||
![]() |
Monture chèvre(versions Bureau, Console et Mobile)(sur le coup) | ||
![]() |
Monture navire pirate(versions Bureau, Console et Mobile)(sur le coup) | ||
![]() |
Monture arbre(versions Bureau, Console et Mobile)(sur le coup) | ||
![]() |
Monture basilic(versions Bureau, Console et Mobile)(sur le coup) | ||
![]() |
Tondeuse à gazon(versions Bureau, Console et Mobile)[16] | ||
![]() |
Voiturette de golf(versions Bureau, Console et Mobile)(sur le coup) | 0,2 seconde | n/a |
![]() |
Bouclier de Cthulhu(versions Bureau, Console et Mobile)(au contact lors d'une charge)[17] | 0,07 seconde | n/a |
![]() |
Armure de lueur solaire(versions Bureau, Console et Mobile)(au contact lors d'une charge) |
Invincibilité de l'entité
Les entités non-joueur (ennemis, créatures, et PNJs amicaux) auront un moment d'invincibilité des attaques "perçantes" ou "continues", par exemple des attaques de n'importe quelle source pouvant toucher un ennemi et qui rest capable d'infliger des dégâts par la suite.[18] Cela comprend des sources de dégâts infligés par le joueur comme des balles de météore, des flèches profanes, le vilépine ou le pistolet arc-en-ciel. Les moments d'invincibilté pour les entités durent en général 0,17 seconde.
En interne, le fait qu'un projectile soit considéré commer "perçant" est déterminé par son penetrate
. Cette statistique détermine combien de cibles un seul projectile peut toucher.[19] Si la valeur de penetrate
est supérieure à 1
, le projectile est considéré comme "perçant". Une fois que le projectile a infligé des dégâts à une cible, sa stat penetrate
est réduite de 1, et le projectile se dissipe lorsque penetrate
atteint 0. Les projectiles avec une valeur de penetrate
de 1
sont considérés comme "non-perçants" — le projectile se dissipera au contact d'une cible, et n'offre à l'entité touchée aucun moment d'invincibilité, et n'est pas affecté par un moment d'invincibilité.
- Notez qu'un projectile "perçant" peut devenir "non-perçant" après avoir touché suffisamment de cibles (quand son
penetrate
atteint1
).
Il y a trois différentes manières par lesquelles une source de dégâts peut offrir de l'invincibilité à l'entité :
- Invincibilité globale : Invincible à tous les dégâts perçants d'un joueur
- Invincibilité statique : Invincible aux dégâts des autres projectiles du même type de n'importe quel joueur
- Invincibilité locale : Invincibile aux dégâts de ce projectile en particulier
Invincibilité globale
Si le projectile d'un joueur applique une invincibilité globale, les entités endommagées seront temporairement invulnérables à toutes les sources de dégâts perçants du joueur, y compris d'autres types d'attaques, pour la durée du moment d'invincibilité. Cela dure 0,17 seconde par défaut, mais cela diffère pour certains projectiles pour permettre de toucher plus vite ou lentement. En multijoueur, ce type d'invincibilité est vérifiée séparément pour chaque joueur, donc un joueur appliquant de l'invincibilité globale à une entité n'empêche pas les dégâts perçants d'un autre joueur de blesser cette entité.
C'était l'implémentation originale du système du moment d'invincibilité de Terraria pour les entités, donc un grand nombre de projectiles (notamment les plus anciens) utilisent l'invincibilité globale. Ce type d'invincibilité "empêche" en gros le joueur de faire des dégâts avec différents types de sources de dégâts perçants. Beaucoup de projectiles fournissant de l'invincibilité globale ont été équilibrés autour de cette limite, faisant ainsi plus de dégâts qu'ils ne le feraient sans cette limite.
Sur les Version Console old-gen et Version Nintendo
, l'invincibilité globale s'applique à tous les projectiles perçants. Cela peut nettement limiter les effets d'autres armes perçantes utilisées contre la même cible, comme les armes qui tirent plusieurs projectiles comme le sceptre de poison. La plupart des sbires sont considérés comme ayant des attaques perçantes, qui peuvent également entraver l'efficacité des armes perçantes utilisées en même temps qu'eux. Ce problème est remarquable avec le sceptre d'araignée.
Invincibilité statique
Si un projectile applique de l'invincibilité statique, les entités endommagées ne seront vulnérables qu'aux dégâts des projectiles de ce type de projectile spécifique (c'est à dire les projectiles avec le même ID), tous les projectiles de ce type de n'importe quel joueur ne pourront infliger de dégâts à l'entité pour la durée du moment d'invincibilité.
Avec ce type d'invincibilité, bien que les tirs répétés du même type de projectiles perçants pendant le moment d'invincibilité ne pourront pas atteindre leur cible, les tirs d'autres types de projectiles perçants pourront infliger des dégâts. La plupart des projectiles qui fournissent de l'invincibilité statique sont équilibrés autour de ce fait.
Par exemple, tirer une volée de flèches de bouffon (qui offrent de l'invincibilité statique) avec le Tsunami sur une entité aura pour conséquence qu'une seule flèche touche sa cible. Lorsqu'une des flèches touche, l'entité deviendra temporairement invincible de toutes les flèches de bouffon, et les autres passeront à travers sans infliger de dégâts. Cependant, l'entité subira toujours des dégâts de n'importe quelle autre source de projectile durant le moment d'invincibilité des flèches de bouffon, comme de la pluie du bâton nimbus (ID de projectile 239, différent de l'ID 5 de la flèche de bouffon) ou d'un sbire corbeau (ID de projectile 317).
Invincibilité locale
Si un projectile applique une invincibilité locale, les entités endommagées ne seront invulnérables qu'au projectile lui-même (c'est-à-dire le projectile exact qui a infligé des dégâts) pendant la durée du moment d'invincibilité. Tous les autres projectiles perçants, même les projectiles du même type, peuvent toujours infliger des dégâts durant le moment d'invincibilité.
Par conséquent, tirer de grandes quantités de projectiles qui donnent de l'invincibilité locale n'est pas aussi inefficace qu'avec de l'invincibilité statique. Comme ce type d'invincibilité n'était pas utilisé durant la majeure partie de l'histoire de Terraria, presque toutes les armes perçantes ne sont pas équilibrées autour de lui.
Par exemple, les sbires sphère mortelle (qui offrent de l'invincibilité locale), utilisent chacun leur propre chronomètre d'invincibilité et n'auront pas de conflits. Si une sphère mortelle endommage une entité, une autre sphère mortelle peut toujours infliger des dégâts durant le moment d'invincibilité offert par le premier sbire. Avec un grand nombre de sbires, les sphères mortelles sont capables d'infliger bien plus de dégâts que si elles offraient une invincibilité globale ou statique.
Informations techniques
Chaque type de moment d'invincibilité est implémenté différemment.
Invincibilité globale
Chaque entité suit une liste de temps d'immunité[f] composée de 256 éléments. Parmi ces éléments, 255 correspondent chacun à un joueur. Le dernier ne correspond à aucun joueur (il peut être considéré comme la source de dégâts par défaut).[20] Chaque élément a une valeur de 0 par défaut. Si la valeur est supérieure à 0, elle sera réduite de 1 à chaque tick, et la source de dégâts correspondant ne pourra infliger de dégâts à l'entité.
Lorsque l'invincibilité globale est appliquée à l'entité, la durée du moment d'invincibilité est ajoutée aux éléments correspondant à la source des dégâts dans la liste. Dans la plupart des cas, la source des dégâts est le joueur ayant tiré le projectile. Cependant, si les dégâts ne sont reliés à aucun joueur, ou s'il est impossible de trouver un joueur comme source des dégâts, ils sont considérés comme provenant de la source par défaut et la durée du moment d'invincibilité sera ajoutée au 256e élément.
En solo, la source de dégâts de tous les projectiles amis (soit tous les projectiles qui peuvent infliger des dégâts aux ennemis, y compris les projectiles des armes, pièges, etc.) est considérée comme le joueur.
Dans les cas suivants, la source de dégâts est considérée comme la source par défaut :
- Les dégâts infligés aux entités non-joueurs de sources non-joueurs. Voir ci-dessous pour plus de détails.
- En multijoueur:
- Les projectiles qui ne sont pas créés directement par le joueur, généralement les tuiles pouvant créer des projectiles comme les rochers, Tonneau de TNT(versions Bureau, Console et Mobile), etc.À vérifier[21]
- Les projectiles créés par des pièges comme le piège à fléchette via des déclencheurs, mais le déclencheur n'est pas activé directement par le joueur.[22]
Invincibilité statique
Le jeu suit un tableau à deux dimensions perIDStaticNPCImmunity
avec 1022 lignes et 200 colonnes (perIDStaticNPCImmunity[1022][200]
).[23] Chaque ligne représente un type de projectile, et chaque colonne représente un emplacement de PNJ.
Lorsqu'un projectile appliquant de l'invincibilité statique endommage une entité, la valeur de l'élément
When a projectile that applies static invincibility damages an entity, the value of the element perIDStaticNPCImmunity[ ID du projectile][index de l'emplacement de PNJ]
est définie à Temps du jeu à l'instant[g] + durée du moment d'invincibilité
. La "durée du moment d'invincibilité" est égale à la statistique idStaticNPCHitCooldown
du projectile.[24]
Lorsqu'un projectile appliquant de l'invincibilité statique s'apprête à endommager une entité, le jeu vérifiera si la valeur de l'élément perIDStaticNPCImmunity[ID du projectile][index de l'emplacement de PNJ]
est inférieure au temps du jeu à l'instant. Si sa valeur est supérieure, le projectile ne pourra infliger de dégâts à l'entité
Par exemple, attaquer une entité avec un index d'emplacement de PNJ de 0 avec le projectile éclair de giver de la lame de givre (ID 119, applique 10 ticks d'invincibilité statique) mets la valeur de l'élément perIDStaticNPCImmunity[119][0]
à Temps de jeu à l'instant + 10
. Par conséquent, dans les 10 ticks suivants, n'importe quel projectile éclair de givre ne pourra infliger de dégâts à cette entité.
Invincibilité locale
Chaque projectile suit une liste de temps d'immunité[f] ayant 200 éléments, avec chaque élément correspondant à un emplacement de PNJ. Chaque élément a une valeur de 0 par défaut. Lorsqu'un projectile appliquant de l'invincibilité locale endommage une entité, la valeur de l'élément correspondant à l'emplacement de PNJ occupé par l'entité sera défini sur la durée du moment d'invincibilité. La "durée du moment d'invincibilité" est égale à la statistique localNPCHitCooldown
du projectile.[25] Le projectile ne peut infliger de dégâts à l'entité occupant l'emplacement de PNJ lorsque la valeur de l'élément lié est différente de 0.
La réduction d'une valeur est affectée par la statistique extraUpdates
du projectile comme elle est basée sur la mise à jour du projectile. La mise à jour du projectile survient une fois par tick par défaut, et une valeur de extraUpdates
de n
signifie que le projectile est mis à jour un nombre n
de fois supplémentaires par tick. La valeur sera réduite de 1 par mise à jour si elle est supérieure à 0.
La durée réelle de l'invincibilité locale d'un projectile (en ticks) peut être calculée par la formule suivante :
- [math]\displaystyle{ \text{Moment d'invincibilité}=\left\lfloor\frac{\textit{localNPCHitCooldown}}{\textit{extraUpdates}+1}\right\rfloor + \textit{localNPCHitCooldown}\mod(\textit{extraUpdates}+1) }[/math]
Par exemple, attaquer une entité avec l'index d'emplacement de PNJ de 0 avec le projectile de la furie étoilée (ID 503, applique 30 ticks d'invincibilité locale, a une valeur de extraUpdates
de 1) définit la valeur du premier élément de la liste à 30. La valeur sera réduite de 2 chaque tick, faisant que la durée réelle du moment d'invincibilité sera de 15 ticks.
Invincibilité des entités de sources non-joueurs
Les entités non-joueurs ont également des moments d'invincibilité après avoir subi des dégâts de la lave, ou après avoir subi des dégâts de contact d'autres entités non-joueurs. Elles ne peuvent subir à nouveau des dégâts de la lave et d'autres entités non-joueurs pour la durée du moment d'invincibilité. Ces dégâts ne sont pas considérés comme provenant d'un joueur, donc ils n'interféreront pas avec n'importe quel type de moment d'invincibilité des attaques de joueurs.[26]
En subissant des dégâts de la lave, toutes les entités recevront 0,5 seconde d'invincibilité.
En prenant des dégâts de contact, le cristal Eternia(versions Bureau, Console et Mobile) recevra 0,33 seconde d'invincibilité, et toutes les autres entités recevront 0,5 seconde d'invincibilité.
Seules quelques méthodes peuvent faire que les entités non-joueurs reçoivent des dégâts de contact d'autres entités non-joueurs, y compris :
- Les créatures et PNJs de ville subissant des dégâts au contact des ennemis.
- (versions Bureau, Console et Mobile) Le cristal Eternia subissant des dégâts d'ennemis.
- (versions Bureau, Console et Mobile) Des abeilles attaquant des ennemis.
- (versions Bureau, Console et Mobile) La Reine des abeilles infligeant et recevant des dégâts à d'autres ennemis lorsqu'il y a des abeilles.
Historique
- Bureau 1.4.1.2 : Les dégâts de la lave au joueur ont désormais leur propre groupe d'invincibilité, séparé de toutes les autres sources de dégâts.
- Bureau 1.3.0.5 : Les tuiles endommageantes (buissons épineux, pointes et pointes en bois) ont désormais leur propre groupe d'invincibilité, séparé de toutes les autres sources de dégâts.
- Sortie Bureau : Introduit.
Références
- ↑ Un tick est une unité de temps pouvant être comptée par le logiciel. La plupart des mises à jour logiques de Terraria se produit à chaque tick. Un tick a une longueur de 1/60ème de seconde, ce qui correspond a 60 ticks dans une seconde et 3600 ticks dans une minute.
- ↑ Information provenant du code source de la version
Bureau 1.4.4.9, méthode
Update()
dansTerraria.GameContent.DontStarveDarknessDamageDealer.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, méthode
ApplyTouchDamage()
dansTerraria.Player.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, méthode
Update_NPCCollision()
dansTerraria.Player.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, méthode
Update()
dansTerraria.Player.cs
. - ↑ 6,0 et 6,1 Information provenant du code source de la version
Bureau 1.4.4.9, méthode
Hurt()
dansTerraria.Player.cs
. - ↑ 7,0 7,1 et 7,2 Information provenant du code source de la version
Bureau 1.4.4.9, méthode
Spawn()
dansTerraria.Player.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, méthode
ShadowDodge()
dansTerraria.Player.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, méthode
NinjaDodge()
dansTerraria.Player.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, méthode
BrainOfConfusionDodge()
dansTerraria.Player.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, méthode
Update_NPCCollision()
dansTerraria.Player.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, méthode
ApplyLifeAndOrMana()
dansTerraria.Player.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, méthode
AI_067_FreakingPirates()
dansTerraria.Projectile.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, méthode
JumpMovement()
dansTerraria.Player.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, méthode
HorizontalMovement()
dansTerraria.Player.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, méthode
MowTheLawn()
dansTerraria.Player.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, méthode
DashMovement()
dansTerraria.Player.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, méthode
Damage()
dansTerraria.Projectile.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, champ
penetrate
dansTerraria.Projectile.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, champ
immune
dansTerraria.NPC.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, champ
myPlayer
dansTerraria.Main.cs
et méthodeInitializeServer()
dansTerraria.Netplay.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, champ
CurrentUser
dansTerraria.Wiring.cs
et méthodeSetCurrentUser()
dansTerraria.Wiring.cs
. - ↑ Information provenant du code source de la version
Bureau 1.3.5.3, méthode
IsNPCIndexImmuneToProjectileType()
dansTerraria.Projectile.cs
et champperIDStaticNPCImmunity
dansTerraria.Projectile.cs
. Il peut y avoir des inexactitudes, du fait que laVersion Bureau actuelle soit la 1.4.4.9.
- ↑ Information provenant du code source de la version
Bureau 1.4.4.9, champ
idStaticNPCHitCooldown
dansTerraria.Projectile.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, champ
localNPCHitCooldown
dansTerraria.Projectile.cs
. - ↑ Information provenant du code source de la version
Bureau 1.4.4.9, méthodes
BeHurtByOtherNPC()
dansTerraria.NPC.cs
etCollision_LavaCollision()
dansTerraria.NPC.cs
.
- ↑ Le pendentif en croix et ses améliorations ne peuvent pas accumuler leurs effets.
- ↑ Moment d'invincibilité offert par défaut.
- ↑ Moment d'invincibilité offert si le pendentif en croix ou une des ses améliorations est équipé. "n/a" signifie que ce n'est pas affecté par le pendentif en croix.
- ↑ Includes both damage from another player and self-induced damage, e.g. explosives and (versions Console old-gen et 3DS) Exploding Bullets.
- ↑ 5,0 5,1 et 5,2 Provide all types of invincibility frames. Information provenant du code source de la version
Bureau 1.4.4.9, méthode
SetImmuneTimeForAllTypes()
dansTerraria.Player.cs
. - ↑ 6,0 et 6,1 c.a.d. un tableau
- ↑ Ce temps du jeu est le temps passé depuis le début de la session de jeu (en ticks). Il n'est pas relié avec le temps en jeu affiché par les montres.