On this page
  1. Related
  2. Games
  3. References
  4. Sources

A ground pound turns a jump into a drop. In Super Mario 64, Z in the air stops Mario dead, lifts him up to 110 units over 10 frames if the ceiling allows, holds him until his spin ends, and then drops him from −50 units/frame under the usual gravity1. Banjo-Kazooie’s Beak Buster also stops Banjo dead, but after the hang he pops up before he falls, and Super Mario 64’s ground pound has no pop2,1. The Beak Buster’s pop, gravity, and fall cap are up 2300, gravity −20000, cap −5000 (units/s)2.

  • Hover then dropSuper Mario 64 (1996). Z in the air: a short rise and hold, then a fall from −50 units/frame.1Banjo-Kazooie (1998). The Beak Buster: a hang, a pop up at 2300 units/s, then a drop under −20000 to a cap of −5000.2

Games

GameYearHowNote
Super Mario 641996Hover then dropZ in the air: a short rise and hold, then a fall from −50 units/frame
Banjo-Kazooie1998Hover then dropthe Beak Buster: a hang, a pop up at 2300 units/s, then a drop under −20000 to a cap of −5000
Every claim about this mechanic, by game (2)

References

  1. ^ abcZ in the air starts a ground pound. Mario stops dead and, on each of the first 10 frames (t counting from 0), rises 20 − 2t units, 110 in all, each rise skipped unless his new height plus 160 stays below the ceiling. He holds there until his spin animation ends plus 4 frames; then he falls from −50 units/frame under the usual gravity.Coden64decomp/sm64revised
    How we know
    451    if (m->input & INPUT_Z_PRESSED) {
    452        return set_mario_action(m, ACT_GROUND_POUND, 0);
    
    src/game/mario_actions_airborne.c lines 451–453 at 9921382 · upstream ↗
    924    if (m->actionState == 0) {
    925        if (m->actionTimer < 10) {
    926            yOffset = 20 - 2 * m->actionTimer;
    927            if (m->pos[1] + yOffset + 160.0f < m->ceilHeight) {
    928                m->pos[1] += yOffset;
    ⋮
    934        m->vel[1] = -50.0f;
    935        mario_set_forward_vel(m, 0.0f);
    ⋮
    943        m->actionTimer++;
    944        if (m->actionTimer >= m->marioObj->header.gfx.animInfo.curAnim->loopEnd + 4) {
    ⋮
    946            m->actionState = 1;
    
    src/game/mario_actions_airborne.c lines 924–947 at 9921382 · upstream ↗
    948    } else {
    949        set_mario_animation(m, MARIO_ANIM_GROUND_POUND);
    ⋮
    951        stepResult = perform_air_step(m, 0);
    
    src/game/mario_actions_airborne.c lines 948–951 at 9921382 · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-21.

    Revised after a check by a second AI model, 2026-10-21.

    In the claim ledger

  2. ^ abcWith the Beak Buster learned, Z pressed during a jump (or in the air in another state) starts it. Banjo stops dead: his velocity, his target horizontal speed, and his gravity all go to 0, and he hangs until the opening stretch of his animation stops and then one more frame. Then he pops up at 2300 units/s under a gravity of −20000 units/s², 7.4 times the usual −2700 (computed), with his fall capped at −5000 instead of −4000. Water ends the move at any phase. When he lands (stable ground, an unnamed flag BA_FLAG_8, or four frames in a row with under 1 unit of an unnamed vertical measure from func_8029445C), a landing with fall damage goes to a splat (BS_72_SPLAT); otherwise his speed and gravity go to 0 for 0.09 s; then he bounces up at 730 units/s under −2110, or at 400 under −800 if the Beak Buster hit an object whose marker id is 0x9E or 0xA1, which the hit kills. Super Mario 64's ground pound has no upward pop: Mario rises at most 110 units over 10 frames while he holds, then falls from −50 units/frame (sm64/ground-pound).Codebanjo.decomp/banjo-kazooie · n64decomp/sm64revised
    How we know
    12int bainput_should_beak_bust(void){
    13    return bakey_pressed(BUTTON_Z) && can_beak_bust();
    
    src/core2/bainput.c lines 12–14 at e8d31fa · upstream ↗
    27s32 can_beak_bust(void){
    28    return ability_hasLearned(ABILITY_2_BEAK_BUSTER);
    
    src/core2/playerutils.c lines 27–28 at e8d31fa · upstream ↗
    152    if(bainput_should_beak_bust())
    153        sp34 = BS_F_BBUSTER;
    
    src/core2/bs/jump.c lines 152–153 at e8d31fa · upstream ↗
    9const f32 D_80364990 = 400.0f;
    10const f32 D_80364994 = -800.0f;
    ⋮
    12const f32 D_80364998 = 730.0f;
    13const f32 D_8036499C = -2110.0f;
    ⋮
    15const f32 D_803649A0 = 2300.0f;
    16const f32 D_803649A4 = -20000.0f;
    17const f32 D_803649A8 = -5000.0f;
    
    src/core2/bs/bbuster.c lines 9–17 at e8d31fa · upstream ↗
    64    anctrl_setDuration(aCtrl, 1.02f);
    65    anctrl_setSubRange(aCtrl, 0.0f, 0.35f);
    ⋮
    69    baphysics_set_gravity(0.0f);
    70    baphysics_set_target_horizontal_velocity(0.0f);
    71    ml_vec3f_clear(sp20);
    72    baphysics_set_velocity(sp20);
    ⋮
    78    D_8037D2B0 = 0.0001f;
    
    src/core2/bs/bbuster.c lines 64–78 at e8d31fa · upstream ↗
    98        case 0://8029FDF0
    99            if(anctrl_isStopped(baanim_getAnimCtrlPtr())){
    ⋮
    101                D_8037D2BA = 1;
    ⋮
    104        case 1://8029FE24
    105            D_8037D2B0 -= time_getDelta();
    106            if(D_8037D2B0 <= 0.0f){
    107                baphysics_reset_gravity();
    108                baphysics_set_terminal_velocity(D_803649A8);
    109                baphysics_set_gravity(D_803649A4);
    110                baphysics_set_vertical_velocity(D_803649A0);
    
    src/core2/bs/bbuster.c lines 98–113 at e8d31fa · upstream ↗
    128            D_8037D2B9 = baflag_isTrue(BA_FLAG_8);
    129            func_8029445C(sp30);
    130            //L8029FF78
    131            if(((0.0f <= sp30[1])? sp30[1] : -sp30[1]) < 1.0){
    132                D_8037D2BC++;
    133            }else{
    134                D_8037D2BC = 0;
    ⋮
    139            if(player_isStable() || D_8037D2B9 || !(D_8037D2BC < 4)){
    ⋮
    143                baphysics_set_velocity(0);
    144                baphysics_set_gravity(0.0f);
    145                baphysics_set_target_horizontal_velocity(0.0f);
    ⋮
    148                D_8037D2B0 = 0.09f;
    
    src/core2/bs/bbuster.c lines 128–148 at e8d31fa · upstream ↗
    152                if(bafalldamage_get_damage(&sp3C)){
    153                    sp44 = BS_72_SPLAT;
    
    src/core2/bs/bbuster.c lines 152–154 at e8d31fa · upstream ↗
    195    if(player_inWater())
    196        sp44 = BS_4C_LANDING_IN_WATER;
    
    src/core2/bs/bbuster.c lines 195–196 at e8d31fa · upstream ↗
    163            D_8037D2B0 -= time_getDelta();
    164            if(D_8037D2B0 <= 0.0f){
    165                if(D_8037D2BB){
    166                    baphysics_set_vertical_velocity(D_80364990);
    167                    baphysics_set_gravity(D_80364994);
    168                }else{
    169                    baphysics_set_vertical_velocity(D_80364998);
    170                    baphysics_set_gravity(D_8036499C);
    
    src/core2/bs/bbuster.c lines 163–171 at e8d31fa · upstream ↗
    209void func_802A02B4(s32 arg0){
    210    D_8037D2BB = arg0;
    
    src/core2/bs/bbuster.c lines 209–210 at e8d31fa · upstream ↗
    273        switch(marker->id){
    
    src/core2/ba/marker.c line 273 at e8d31fa · upstream ↗
    313            case 0x9E: //L8028BF54
    314            case 0xA1: //L8028BF54
    315                if(plyr_hitbox_type == HITBOX_1_BEAK_BUSTER){
    316                    func_802A02B4(1);
    317                    obj_collision_type = MARKER_COLLISION_FUNC_2_DIE;
    
    src/core2/ba/marker.c lines 313–317 at e8d31fa · upstream ↗
    924    if (m->actionState == 0) {
    925        if (m->actionTimer < 10) {
    926            yOffset = 20 - 2 * m->actionTimer;
    927            if (m->pos[1] + yOffset + 160.0f < m->ceilHeight) {
    928                m->pos[1] += yOffset;
    ⋮
    934        m->vel[1] = -50.0f;
    935        mario_set_forward_vel(m, 0.0f);
    
    src/game/mario_actions_airborne.c lines 924–935 at 9921382 · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-22.

    Revised after a check by a second AI model, 2026-10-22.

    In the claim ledger

Sources

Code