AkumaSize: abilities that follow the size of their user¶
The size of a body is its SIZE attribute times the height of its form against a man's (1.8). A race and a form are combined, and opposite sizes cancel. Each family of an ability turns that size into a multiplier, never under 1 (save the creator's slider, see A race's size):
float reach = AkumaSize.factor(entity, ability, AkumaSize.Family.REACH); // 1 for a man, 2 for a body x4
float damage = AkumaSize.factor(entity, ability, AkumaSize.Family.DAMAGE); // 1 for a man, 2 for a body x4, 3 at most
An ability made for its form grows once (akumalib:size_form_made, data/<namespace>/tags/abilities/size_form_made.json; maintainer, 2026-10-28). The base mod sized some abilities for the big form they need: Deka Trample's 5-block area and 7-block cube are a Deka giant's (8.5 high), Mammoth Trample's 3.5 and 5 a mammoth's. Counting the form again grew them twice (a man in the Deka form trampled 10.9 blocks out and ran x2.17; a fishman at SIZE 2.19 hit the x3 ceiling, 15 blocks). For the abilities listed there the form's share is taken out: they grow by SIZE alone (as a plain form, SizeTooltips.plainForms), in their reach, damage, searches (their frame), blocks scanned, pushes, run, cooldown, what it spawns (its projectiles' box, drawing and flight) and tooltips. A man in the Deka form tramples as the base mod wrote it; a giant x4 in it, x2 (10 blocks). AkumaLib lists the two tramples; a kit adds an ability made for its own big form. The list goes to the clients with akumalib:size_moves (a player's game moves his own body).
Nothing has to be called for most abilities:
- the range of a
RangeComponent(area range, line distance and width) and the damage of aProjectileComponentcarry a size bonus on their own bonus managers, put on every ability of a big body each tick (SizeBonuses), so tooltips show it; - every hit through
DealDamageComponent.hurtTargetis multiplied by the damage factor; - every ability projectile hits harder once:
getNewProjectileapplies the bonus manager, and a projectile made any other way gets its owner's damage factor when it joins the world (SizeProjectiles). - every ability projectile grows with its owner when it joins the world: its boxes against entities and blocks by the reach factor (square root, up to x3), and its drawing with them (the factor goes to the clients in its spawn data). It still starts from its owner's eyes, which are at a big body's real height.
- every ability projectile flies as far as its owner reaches (#685): at its first server tick its life grows by the reach factor, and its speed makes up what air drag takes from the longer life, so it covers the factor times a man's distance (a 12-block giant's Hiken x2.58). A shot that sets its own speed every tick (homing) keeps its own speed and flies x the factor too (#703). Once, saved with it. Not grown: a projectile standing still at its first tick (held, placed: its life is a duration), beams (
NuLightningEntity, next item), and the types ofakumalib:size_life_exempt(the base mod's weather balls, which slow down and hover; a pack adds its own). An AkumaLib boomerang's outward leg is grown the same way, not its life: it turns back x the factor as far out. - every beam (
NuLightningEntity: Gomu pistols, El Thor, Amaterasu...) reaches as far as its owner (#690): at its first tick its length (maxTravelDistance) and the speed it gets there (travelSpeed) grow by its stamp, so it is as long as the reach factor times a man's and reaches it in a man's ticks; its life stays a duration. Once, saved with it. The client draws the length the server sends; its own copy of the length grows from the stamp in the spawn data, and a client that starts tracking the beam later gets it grown already (the spawn data says so). Its width is its box (above). Its own tick searches as written in the ability context (below): it is sized already, it does not widen twice. - every explosion an ability makes (
AbilityExplosion, through itsExplosionComponentor built by hand) grows with its user, the exploder or the owner of an exploding projectile: the radius by the explosion factor (cube root, up to x2), which widens the area touched, the blocks broken and the particles together, and the damage by the square root up to x3 (explosionDamageExponent,explosionDamageCeiling, as the damage of abilities: a giant x4 x2), for a target at the same place in the blast. An explosion with no ability (a bomb, a dial, a creature's) does not move. - every push a big body gives goes further (
SizeKnockback, #671), by the knockback factor (square root, up to x3): the game's knockback of its blows and of every ability hit, in the knockback event (a projectile's counts as its owner's), and the hand-written pushes (AbilityHelper.setDeltaMovementon another body) of the abilities listed inakumalib:size_pushes, while the ability is used or ticked or in the tick its hit landed. Sideways by the factor, upwards by its square root, so the whole flight grows by the factor; a part the ability copied from the body's own motion is kept. List only abilities that launch a body, never a hold that keeps a body at a point or a push that scales the body's own motion. AkumaLib lists the base mod's (data/akumalib/tags/abilities/size_pushes.json); a kit adds its own in a file of the same name, or grows a push by hand withAkumaSize.factor(user, ability, Family.KNOCKBACK). - a big body's dashes, leaps and charges cover distance by its size (
SizeMoves, #672), by the movement factor (square root, up to x3): the velocity an ability gives its own user throughAbilityHelper.setDeltaMovementwhile it is used or ticked, for the abilities with the base mod'sDashComponent, AkumaLib'sMoveAbilitys and those listed inakumalib:size_moves(DiveStrikeAbilitygrows its own). Sideways by the factor, upwards by its square root, so a dash goes the factor further and a leap's whole arc grows by it; a part copied from the body's own motion is kept, and the game's collisions stop a big dash at a wall. List only movements that throw the body from what the ability writes, never a flight, a glide or a swim steered every tick from the body's own motion, nor a travel to a set point. Bane Bane's Spring Hopper and Spring Snipe are not listed (maintainer, 2026-10-28): Spring Hopper reads its fall back each tick (x1.15), which grew again every tick. The list goes to every client (a player's game moves him). A kit lists its ability in its ownsize_moves.json, or grows a velocity it sets by hand withSizeMoves.velocity(user, ability, velocity). - every cooldown of a big body is a little longer (
CooldownComponentMixin, maintainer 2026-10-27): x size^0.2165 up to x1.5 (cooldownExponent,cooldownCeiling; x1.16 at 2, x1.35 at 4, x1.5 from 6.5), players and NPCs, every ability of every mod, since all start throughCooldownComponent.startCooldown. Grown once on the server, which sends the length to the clients, so the bar shows the real wait; a stance or a continuous ability whose cooldown comes from how long it was held grows that figure; a cooldown copied to a linked partner (SharedCooldowns) is not grown again. An exempt ability waits as a man's. - the range, damage and cooldown lines of a tooltip read the real figure at the user's size (
SizeTooltips, maintainer 2026-11-02), with the size inside the figure and other bonuses still in brackets. At a size that changes nothing, the base mod's own line. A kit writes its figures as a man's. - no grab lifts a body more than twice its user's size (
AkumaSize.canLift,liftRatio2):GrabEntityComponent(every grab of the base mod and the addons that use it) finds nothing, as when no body is in reach; AkumaLib'sCarryAbilitycounts it a refusal; a big body's extra grabbed bodies (SizeGrabs.more) skip it. A giant x4 lifts a man; a man lifts up to SIZE 2. A grab of a kit's own asksAkumaSize.canLift(user, target).
A partial form (a hybrid) keeps a man's figures: only full forms change the size, in hits and tooltips alike.
An addon whose forms keep their own figures (it takes their height back out of every technique itself) tells the tooltips so once, at setup: SizeTooltips.plainForms(form -> <is one of mine>, MY_SHARE_ID). Its forms then count as no bigger body there (size = SIZE alone), and the MUL bonus it puts under MY_SHARE_ID on the abilities' bonus managers is left out of the "other bonuses", as AkumaLib's own size bonus is. Tooltips only: hits and reaches in play stay the addon's to correct.
An addon's scale of the ability factors¶
An addon can multiply a body's ability factors for a state of its own, with AkumaSize.addFactorScale (Race Race no Mi #3: a giant hunched under a low roof uses his abilities at x0.5, so a giant x4 falls back to a man's reach and damage):
AkumaSize.addFactorScale((entity, family) -> isHunchedGiant(entity) ? 0.5F : 1.0F); // at setup, once
- Asked only for the families of abilities:
REACH,DAMAGE,MELEE_SKILL,EXPLOSION,EXPLOSION_DAMAGE,MOVEMENT,COOLDOWN. Never for the body (WALK,HEALTH, ...) nor a plain blow (MELEE_REACH,MELEE_DAMAGE,ATTACK_SPEED), nor theSIZEattribute: the body stays its size. - Applies wherever an ability's factor is read:
factor,factorFor,cooldownFactor, the searches ofAbilityContextand the spawns' stamp (AkumaSpawnSize.of). Answer 1 for what the state does not touch; mind thatCOOLDOWNx0.5 is a shorter wait. - Never under a man's figures (1), nor under a small body's own factor below 1: a giant x4 at x0.5 is x1, a body x2 at x0.5 stays x1.
- Scales multiply together.
removeFactorScaletakes one back. With none registered nothing is asked and nothing costs (FactorScaleGameTests).