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

A super meter fills during a fight and pays for the strongest attacks. In Street Fighter III: 3rd Strike it gains on a move’s start, on guard, on hit, and on parry, and fills whole stocks up to each Super Art’s limit1.

  • StockedStreet Fighter III: 3rd Strike (1999). Gains on starting a move, on guard, on hit (cut through a combo), and on parry, stored in stocks of 64 to 128 points up to each Super Art's limit.1

Games

GameYearHowNote
Street Fighter III: 3rd Strike1999Stockedgains on starting a move, on guard, on hit (cut through a combo), and on parry, stored in stocks of 64 to 128 points up to each Super Art's limit
Every claim about this mechanic, by game (1)
Street Fighter III: 3rd Strike 1999In the PS2 port of Street Fighter III: 3rd Strike that crowded-street/3s-decomp rebuilds, the Super Art gauge fills from _add_arts_gauge, a table by character, by the move's gauge points (the top four bits of its attack data's piyo byte), and by one of four columns. The attacker gains column 0 when a move starts a new attack, whether it hits or not (unless bit 0x20000000 of its spmv_ng_flag2 is set), and column 1 when it's guarded (set_guard_status, for an attack with any hit stop). When damage is applied (subtract_dm_vital, which the parry statuses also run), a nonzero column 2 gives the defender a third of the table value as read. The attacker then gets the value plus a difficulty bonus, asagh_zuru (−2 to 4), if the attacker is CPU-controlled (operator 0), at least 1, cut to (32 − 2(n − 1))/32 for the defender's nth hit of a combo (at least 1/32), and raised by 120/100 for a CPU attacker when Break_Into_CPU is 1; so the combo cut reaches only the attacker's share. Column 3 goes to the defender when its parry status starts, plus asagh_zuru if the parrying player is CPU-controlled, and nothing while sa_stop_check() is nonzero. add_super_arts_gauge multiplies each gain by 120/100, by 150/100 more when Battle_Number is 0, and by an Extra Option factor of 0, 24, 32, or 44 over 32 (0 stops all gain), and adds nothing while the stocks are full, in a bonus game, or in a few other states the function tests. Past gauge_len the gauge adds a stock and keeps the rest, and at store_max stocks it stops. Each Super Art's gauge_len and store_max come from the super_arts_data table, or from super_arts_DATA when cmd_sel or no_sa is set for that side, shifted by Extra Options and held to 64 to 128 and 1 to 9.Code

References

  1. ^ abIn the PS2 port of Street Fighter III: 3rd Strike that crowded-street/3s-decomp rebuilds, the Super Art gauge fills from _add_arts_gauge, a table by character, by the move's gauge points (the top four bits of its attack data's piyo byte), and by one of four columns. The attacker gains column 0 when a move starts a new attack, whether it hits or not (unless bit 0x20000000 of its spmv_ng_flag2 is set), and column 1 when it's guarded (set_guard_status, for an attack with any hit stop). When damage is applied (subtract_dm_vital, which the parry statuses also run), a nonzero column 2 gives the defender a third of the table value as read. The attacker then gets the value plus a difficulty bonus, asagh_zuru (−2 to 4), if the attacker is CPU-controlled (operator 0), at least 1, cut to (32 − 2(n − 1))/32 for the defender's nth hit of a combo (at least 1/32), and raised by 120/100 for a CPU attacker when Break_Into_CPU is 1; so the combo cut reaches only the attacker's share. Column 3 goes to the defender when its parry status starts, plus asagh_zuru if the parrying player is CPU-controlled, and nothing while sa_stop_check() is nonzero. add_super_arts_gauge multiplies each gain by 120/100, by 150/100 more when Battle_Number is 0, and by an Extra Option factor of 0, 24, 32, or 44 over 32 (0 stops all gain), and adds nothing while the stocks are full, in a bonus game, or in a few other states the function tests. Past gauge_len the gauge adds a stock and keeps the rest, and at store_max stocks it stops. Each Super Art's gauge_len and store_max come from the super_arts_data table, or from super_arts_DATA when cmd_sel or no_sa is set for that side, shifted by Extra Options and held to 64 to 128 and 1 to 9.Codecrowded-street/3s-decomprevised
    How we know
    2781    aag_sw = 0;
    ⋮
    2783    if (wk->cg_att_ix < 0) {
    2784        wk->cg_att_ix = -wk->cg_att_ix;
    2785        wk->attack_num = att_req;
    2786        wk->att_hit_ok = 1;
    2787        aag_sw = 1;
    ⋮
    2809    wk->add_arts_point = (wk->att.piyo >> 4) & 0xF;
    ⋮
    2815    if (aag_sw) {
    2816        add_sp_arts_gauge_init((PLW*)wk);
    
    src/anniversary/sf33rd/Source/Game/CHARSET.c lines 2781–2817 at be9b9bc · upstream ↗
    856        if ((mwk->wu.work_id == 1) && !(mwk->spmv_ng_flag2 & 0x20000000)) {
    857            asag = _add_arts_gauge[mwk->player_number][wk->wu.add_arts_point][0];
    ⋮
    860    } else if (!(wk->spmv_ng_flag2 & 0x20000000)) {
    861        asag = _add_arts_gauge[wk->player_number][wk->wu.add_arts_point][0];
    
    src/anniversary/sf33rd/Source/Game/PLS02.c lines 855–862 at be9b9bc · upstream ↗
    627void set_guard_status(PLW* as, PLW* ds) {
    ⋮
    633    if (as->wu.att.hs_you == 0 && as->wu.att.hs_me == 0) {
    634        ds->wu.routine_no[2] = ds->wu.old_rno[2];
    635    } else {
    ⋮
    651        as->wu.cmwk[8]++;
    652        add_sp_arts_gauge_guard(as);
    
    src/anniversary/sf33rd/Source/Game/HITCHECK.c lines 627–652 at be9b9bc · upstream ↗
    878            asag = _add_arts_gauge[mwk->player_number][wk->wu.add_arts_point][1];
    ⋮
    882        asag = _add_arts_gauge[wk->player_number][wk->wu.add_arts_point][1];
    
    src/anniversary/sf33rd/Source/Game/PLS02.c lines 878–883 at be9b9bc · upstream ↗
    887void add_sp_arts_gauge_hit_dm(PLW* wk) {
    ⋮
    900    emwk = (PLW*)wk->wu.target_adrs;
    901    asag = _add_arts_gauge[emwk->player_number][wk->wu.dm_arts_point][2];
    ⋮
    903    if (asag != 0) {
    904        add_super_arts_gauge(wk->sa, wk->wu.id, asag / 3, wk->metamorphose);
    ⋮
    914        asag = cal_sa_gauge_waribiki(wk, asag);
    ⋮
    920        add_super_arts_gauge(emwk->sa, emwk->wu.id, asag, emwk->metamorphose);
    ⋮
    926s16 cal_sa_gauge_waribiki(PLW* wk, s16 asag) {
    ⋮
    929    if (wk->cb->total < 2) {
    930        return asag;
    ⋮
    933    num = 32 - (wk->cb->total - 1) * 2;
    ⋮
    935    if (num <= 0) {
    ⋮
    
    src/anniversary/sf33rd/Source/Game/PLS02.c lines 887–944 at be9b9bc · upstream ↗
    1533void subtract_dm_vital(PLW* wk) {
    ⋮
    1539        add_sp_arts_gauge_hit_dm(wk);
    
    src/anniversary/sf33rd/Source/Game/PLPDM.c lines 1533–1539 at be9b9bc · upstream ↗
    32const s16 asagh_zuru[8] = { -2, -1, 0, 0, 1, 2, 3, 4 };
    
    src/anniversary/sf33rd/Source/Game/PLS02.c line 32 at be9b9bc · upstream ↗
    903    if (asag != 0) {
    904        add_super_arts_gauge(wk->sa, wk->wu.id, asag / 3, wk->metamorphose);
    ⋮
    906        if (emwk->wu.operator == 0) {
    907            asag += asagh_zuru[save_w[Present_Mode].Difficulty];
    ⋮
    910        if (asag <= 0) {
    911            asag = 1;
    ⋮
    914        asag = cal_sa_gauge_waribiki(wk, asag);
    ⋮
    916        if (emwk->wu.operator == 0 && Break_Into_CPU == 1) {
    917            asag = (asag * 120) / 100;
    ⋮
    920        add_super_arts_gauge(emwk->sa, emwk->wu.id, asag, emwk->metamorphose);
    
    src/anniversary/sf33rd/Source/Game/PLS02.c lines 903–920 at be9b9bc · upstream ↗
    948void add_sp_arts_gauge_paring(PLW* wk) {
    ⋮
    956    if (sa_stop_check() != 0) {
    957        return;
    ⋮
    961        return;
    ⋮
    965    asag = _add_arts_gauge[emwk->player_number][wk->wu.dm_arts_point][3];
    ⋮
    967    if (asag != 0) {
    968        if (wk->wu.operator == 0) {
    969            asag += asagh_zuru[save_w[Present_Mode].Difficulty];
    ⋮
    976        add_super_arts_gauge(wk->sa, wk->wu.id, asag, wk->metamorphose);
    
    src/anniversary/sf33rd/Source/Game/PLS02.c lines 948–976 at be9b9bc · upstream ↗
    608        set_hit_stop_hit_quake(&wk->wu);
    609        add_sp_arts_gauge_paring(wk);
    610        subtract_dm_vital(wk);
    
    src/anniversary/sf33rd/Source/Game/PLPNM.c lines 605–610 at be9b9bc · upstream ↗
    1672void get_damage_reaction_data(PLW* wk) {
    ⋮
    1679    subtract_dm_vital(wk);
    
    src/anniversary/sf33rd/Source/Game/PLPDM.c lines 1672–1679 at be9b9bc · upstream ↗
    1100void add_super_arts_gauge(SA_WORK* wk, s16 ix, s16 asag, u8 mf) {
    ⋮
    1106        if (!pcon_dp_flag && !Bonus_Game_Flag && (sa_gauge_omake[omop_sa_gauge_ix[ix]] != 0) && (asag > 0) &&
    1107            (wk->store != wk->store_max)) {
    1108            asag = asag * 0x78 / 100;
    ⋮
    1110            if (save_w[Present_Mode].Battle_Number[Play_Type] == 0) {
    1111                asag = asag * 0x96 / 100;
    ⋮
    1114            asag = asag * sa_gauge_omake[omop_sa_gauge_ix[ix]] / 32;
    ⋮
    1116            if (asag == 0) {
    1117                asag = 1;
    ⋮
    1120            wk->gauge.s.h += asag;
    ⋮
    1123            if (wk->gauge.s.h > wk->gauge_len) {
    1124                wk->store += 1;
    ⋮
    
    src/anniversary/sf33rd/Source/Game/PLS02.c lines 1100–1134 at be9b9bc · upstream ↗
    37const s16 sa_gauge_omake[4] = { 0, 24, 32, 44 };
    
    src/anniversary/sf33rd/Source/Game/SysDir.c line 37 at be9b9bc · upstream ↗
    1399    if (cmd_sel[ix] || no_sa[ix]) {
    1400        saptr = &super_arts_DATA[My_char[ix]][Super_Arts[ix]];
    1401    } else {
    1402        saptr = &super_arts_data[My_char[ix]][Super_Arts[ix]];
    
    src/anniversary/sf33rd/Source/Game/PLCNT.c lines 1399–1403 at be9b9bc · upstream ↗
    1415    super_arts[ix].gauge_len = remake_sa_gauge_len(ix, saptr->gauge_len);
    1416    super_arts[ix].store_max = remake_sa_store_max(ix, saptr->store_max);
    
    src/anniversary/sf33rd/Source/Game/PLCNT.c lines 1415–1416 at be9b9bc · upstream ↗
    1426s16 remake_sa_store_max(s16 ix, s16 store_max) {
    1427    s16 num = store_max + sag_stock_omake[omop_sag_max_ix[ix]];
    ⋮
    1429    if (num <= 0) {
    1430        num = 1;
    ⋮
    1433    if (num > 9) {
    1434        num = 9;
    ⋮
    1440s16 remake_sa_gauge_len(s16 ix, s16 gauge_len) {
    1441    s16 num = gauge_len + sag_length_omake[omop_sag_len_ix[ix]] * 8;
    ⋮
    1443    if (num < 0x40) {
    1444        num = 0x40;
    ⋮
    1447    if (num > 0x80) {
    1448        num = 0x80;
    
    src/anniversary/sf33rd/Source/Game/PLCNT.c lines 1426–1453 at be9b9bc · 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