Blocking
A defense that stops an attack's damage while it's held.
On this page
Blocking stops an attack while the defender holds it. Super Smash Bros. gives each fighter a shield with 55 points1 of health that wears down while held and when hit, and breaks when empty1. In its NTSC 1.02 version, Super Smash Bros. Melee makes the shield’s wear while held and its damage from hits both depend on how far the analog trigger is pressed2. Street Fighter III: 3rd Strike adds a parry: a lever tap opens a window of 10 passes3 of the input check, and a hit that lands in it is parried instead of guarded3.
- Guard meterSuper Smash Bros. (1999). A shield of 55 points wears down while held and when hit, and breaks at 0, coming back at 30.1Super Smash Bros. Melee (2001). A shield whose wear while held and damage from hits both depend on how far the analog trigger is pressed.2
- ParryStreet Fighter III: 3rd Strike (1999). A tap of the lever opens a 10-pass parry window (7 in the air), and a hit that lands in it is parried instead of guarded.3
Games
| Game | Year | How | Note |
|---|---|---|---|
| Super Smash Bros. | 1999 | Guard meter | a shield of 55 points wears down while held and when hit, and breaks at 0, coming back at 30 |
| Super Smash Bros. Melee | 2001 | Guard meter | a shield whose wear while held and damage from hits both depend on how far the analog trigger is pressed |
| Street Fighter III: 3rd Strike | 1999 | Parry | a tap of the lever opens a 10-pass parry window (7 in the air), and a hit that lands in it is parried instead of guarded |
Every claim about this mechanic, by game (2)
References
- ^ abcIn the US version of Super Smash Bros., a fighter's
shield_healthstarts at 55. InftMainProcParams, while the fighter isn't shielding and is below 55, it regains 1 each time a 10-count wait runs out; then the damage of the hits its shield took is subtracted, each hit's damage plus itsshield_damage, and at 0 or below the health is set to 30, whatever else that update does. The shield break (ftCommonShieldBreakFlyCommonSetStatus) is called only in the branch taken when the fighter has no knockback to apply (damage_knockbackis 0) and itsshield_damageisn't 0. While the shield is up,ftCommonGuardUpdateShieldVarstakes 1 off every 16 counts (FTCOMMON_GUARD_DECAY_INT).CodeVetriTheRetri/ssb-decomp-rerevisedHow we know
431 fp->shield_health = (fp->fkind == nFTKindYoshi) ? 55 : 55;src/ft/ftmanager.c line 431 at 572a747 · upstream ↗ 3837 if (!(fp->is_shield) && (fp->shield_health < 55)) ⋮ 3839 fp->shield_heal_wait--; ⋮ 3841 if (fp->shield_heal_wait == 0.0F) ⋮ 3843 fp->shield_health++; ⋮ 3845 fp->shield_heal_wait = 10.0F; ⋮ 3848 fp->shield_health -= fp->shield_damage_total; ⋮ 3850 if (fp->shield_health <= 0) ⋮ 3852 fp->shield_health = (fp->fkind == nFTKindYoshi) ? 30 : 30; ⋮ 3854 is_shieldbreak = TRUE;
src/ft/ftmain.c lines 3837–3854 at 572a747 · upstream ↗ 3856 if (fp->damage_knockback != 0.0F)src/ft/ftmain.c line 3856 at 572a747 · upstream ↗ 3925 else if (fp->shield_damage != 0) ⋮ 3927 if (is_shieldbreak != FALSE) ⋮ 3929 ftCommonShieldBreakFlyCommonSetStatus(fighter_gobj);
src/ft/ftmain.c lines 3924–3929 at 572a747 · upstream ↗ 2072 victim_fp->shield_damage_total += (attack_coll->damage + attack_coll->shield_damage);src/ft/ftmain.c line 2072 at 572a747 · upstream ↗ 2264 fp->shield_damage_total += damage + wp_attack_coll->shield_damage;src/ft/ftmain.c line 2264 at 572a747 · upstream ↗ 2446 fp->shield_damage_total += damage + it_attack_coll->shield_damage;src/ft/ftmain.c line 2446 at 572a747 · upstream ↗ 72void ftCommonGuardUpdateShieldVars(GObj *fighter_gobj) ⋮ 76 if (fp->is_shield) ⋮ 78 if (fp->status_vars.common.guard.shield_decay_wait != 0) ⋮ 80 fp->status_vars.common.guard.shield_decay_wait--; ⋮ 82 if (fp->status_vars.common.guard.shield_decay_wait == 0) ⋮ 84 fp->shield_health--; ⋮ 86 if (fp->shield_health != 0) ⋮ 88 fp->status_vars.common.guard.shield_decay_wait = FTCOMMON_GUARD_DECAY_INT;
src/ft/ftcommon/ftcommonguard1.c lines 71–88 at 572a747 · upstream ↗ 234#define FTCOMMON_GUARD_DECAY_INT 16src/ft/ftcommon.h line 234 at 572a747 · 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.
- ^ abIn the NTSC 1.02 version of Super Smash Bros. Melee, a fighter's
shield_healthis a float that starts atx260_startShieldHealth. Each timeFighter_procCollResolveruns for a fighter that isn't asleep (is_sleeping), a fighter whose unnamed flagx221A_b7is clear regains c_27C, up to the start value. That flag is set when the guard statuses switch on the shield's collision (ftColl_8007B1B8), and the atlas reads it as "shield up". While it's set, the fighter instead loses c_284 × s × (1 − (l·(c_2E0 − c_2DC) + c_2DC)) + c_288, where s isx19A0_shieldDamageTaken, each shield hit's damage plus its unnamedx34(a fighter's hit counts only while the flagx221C_b2, set on enteringftCo_MS_GuardReflect, is clear), and l islightshield_amount. Below 0, the health is set tox280_unkShieldHealth, and on the hit path the shield break (ftCo_80098B20, which entersftCo_MS_ShieldBreakFly) starts only in the branch taken when the fighter has no knockback to apply (kb_appliedis 0), the unnamedx18a0is 0, and a shield hit is recorded (x19A4). While the fighter holds the shield, the animation routines offtCo_MS_GuardOnandftCo_MS_GuardcallftCo_800925A4, which, whilex221B_b0is set, sets l from the analog trigger past its deadzone, (trigger − deadzone) / (1 − deadzone), keeping the old value when that's negative, and takes c_278 × (l·(c_2F0 − c_2EC) + c_2EC) off the health; below 0 it sets the health to 0 and starts the shield break. Every c is a field ofp_ftCommonData, from the disc file PlCo.dat, so the numbers aren't in the code. Where Super Smash Bros. counts whole points from a fixed 55 and resets to 30, with no say for how hard the button is pressed (ssb64/shield), Melee's wear while held and its damage from hits both depend on l.Codedoldecomp/melee · VetriTheRetri/ssb-decomp-rerevisedHow we know
420 fp->shield_health = p_ftCommonData->x260_startShieldHealth;src/melee/ft/fighter.c line 420 at f0cdbb0 · upstream ↗ 1741 /* fp+1998 */ float shield_health; 1742 /* fp+199C */ float lightshield_amount; 1743 /* fp+19A0 */ s32 x19A0_shieldDamageTaken;
src/melee/ft/types.h lines 1741–1743 at f0cdbb0 · upstream ↗ 2806void Fighter_procCollResolve(Fighter_GObj* gobj) ⋮ 2816 if (!fp->is_sleeping) { 2817 if (!fp->x221A_b7) { 2818 if (fp->shield_health < p_ftCommonData->x260_startShieldHealth) { 2819 fp->shield_health += p_ftCommonData->x27C; 2820 if (fp->shield_health > p_ftCommonData->x260_startShieldHealth) ⋮ 2822 fp->shield_health = p_ftCommonData->x260_startShieldHealth; ⋮ 2827 if (fp->x221A_b7) { 2828 fp->shield_health -= 2829 (p_ftCommonData->x284 * 2830 ((fp->x19A0_shieldDamageTaken) * 2831 (1.0f - ((fp->lightshield_amount * ⋮
src/melee/ft/fighter.c lines 2806–2842 at f0cdbb0 · upstream ↗ 2853 if (forceAppliedOnHit) {src/melee/ft/fighter.c line 2853 at f0cdbb0 · upstream ↗ 2907 } else if (fp->dmg.x18a0) { ⋮ 2910 } else if (fp->x19A4) { 2911 if (bool3) { 2912 ftCo_80098B20(gobj);
src/melee/ft/fighter.c lines 2907–2912 at f0cdbb0 · upstream ↗ 21void ftCo_80098B20(Fighter_GObj* gobj) ⋮ 25 Fighter_ChangeMotionState(gobj, ftCo_MS_ShieldBreakFly, Ft_MF_Unk06, 0, 1,
src/melee/ft/kinds/ftCommon/ftCo_ShieldBreakFly.c lines 21–26 at f0cdbb0 · upstream ↗ 301 if (!fp1->x221C_b2) { 302 int tmp_dmg = int_dmg + hit0->x34; 303 PAD_STACK(4); 304 fp1->x19A0_shieldDamageTaken += tmp_dmg < 0 ? 0 : tmp_dmg;
src/melee/ft/ftcoll.c lines 301–304 at f0cdbb0 · upstream ↗ 763 int total = dmg + hurt->x34; ⋮ 770 fp->x19A0_shieldDamageTaken += clamped_total;
src/melee/ft/ftcoll.c lines 763–770 at f0cdbb0 · upstream ↗ 899void ftCo_8009388C(HSD_GObj* gobj) ⋮ 902 Fighter_ChangeMotionState(gobj, ftCo_MS_GuardReflect, ⋮ 910 fp->x221C_b2 = true;
src/melee/ft/kinds/ftCommon/ftCo_Guard.c lines 899–910 at f0cdbb0 · upstream ↗ 507void ftCo_80092908(Fighter_GObj* gobj) ⋮ 510 Fighter_ChangeMotionState(gobj, ftCo_MS_Guard, Ft_MF_SkipAnim, 0, 1, 0, ⋮ 523 ftColl_8007B1B8(gobj, (ShieldDesc*) &absorb, ftCo_80092E50); 524 fp2->x221A_b7 = true;
src/melee/ft/kinds/ftCommon/ftCo_Guard.c lines 507–526 at f0cdbb0 · upstream ↗ 2651void ftColl_8007B1B8(Fighter_GObj* gobj, ShieldDesc* shield, HSD_GObjEvent cb) ⋮ 2653 Fighter* fp = GET_FIGHTER(gobj); 2654 fp->x221B.x221B_b0 = true;
src/melee/ft/ftcoll.c lines 2651–2654 at f0cdbb0 · upstream ↗ 400bool ftCo_800925A4(HSD_GObj* gobj) ⋮ 404 if (fp->x221B.x221B_b0) { 405 fp->mv.co.guard.x2C = fp->lightshield_amount; ⋮ 407 fp->lightshield_amount = 408 (fp->input.triggers[0] - 409 p_ftCommonData->analog_shoulder_deadzone) / 410 (1 - p_ftCommonData->analog_shoulder_deadzone) < ⋮ 412 ? fp->mv.co.guard.x2C 413 : (fp->input.triggers[0] - 414 p_ftCommonData->analog_shoulder_deadzone) / 415 (1 - p_ftCommonData->analog_shoulder_deadzone); ⋮ 417 fp->shield_health -= p_ftCommonData->x278 * ⋮
src/melee/ft/kinds/ftCommon/ftCo_Guard.c lines 400–427 at f0cdbb0 · upstream ↗ 440void ftCo_GuardOn_Anim(Fighter_GObj* gobj) ⋮ 442 Fighter* fp = gobj->user_data; 443 fp->mv.co.guard.x0 += 1; 444 if (ftCo_800925A4(gobj) == 0) {
src/melee/ft/kinds/ftCommon/ftCo_Guard.c lines 440–444 at f0cdbb0 · upstream ↗ 530void ftCo_Guard_Anim(Fighter_GObj* gobj) ⋮ 535 if (!ftCo_800925A4(gobj)) {
src/melee/ft/kinds/ftCommon/ftCo_Guard.c lines 530–535 at f0cdbb0 · upstream ↗ 2093 // ftCo_MS_GuardOn = 178 ⋮ 2097 ftCo_GuardOn_Anim, ⋮ 2104 // ftCo_MS_Guard = 179 ⋮ 2108 ftCo_Guard_Anim,
src/melee/ft/ftmotionstates.c lines 2093–2108 at f0cdbb0 · upstream ↗ 431 fp->shield_health = (fp->fkind == nFTKindYoshi) ? 55 : 55;src/ft/ftmanager.c line 431 at 572a747 · upstream ↗ 3837 if (!(fp->is_shield) && (fp->shield_health < 55)) ⋮ 3848 fp->shield_health -= fp->shield_damage_total; ⋮ 3850 if (fp->shield_health <= 0) ⋮ 3852 fp->shield_health = (fp->fkind == nFTKindYoshi) ? 30 : 30;
src/ft/ftmain.c lines 3837–3854 at 572a747 · 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.
- ^ abcIn the PS2 port of Street Fighter III: 3rd Strike that crowded-street/3s-decomp rebuilds (the Street Fighter Anniversary Collection build), the parry is an input command that
check_10in CMD_MAIN.c reads. Once the lever has been neutral, a fresh lever press equal to the command's lever value (4 for the high parry and the air parry, 2 for the low one; the whole lever is compared, so a diagonal doesn't match; the air parry only while the character is above the ground) sets the parry's counter inwaza_flagto the command'sresetvalue, andcommand_ok_movetakes 1 off it on every pass, the tap's own included. When a press sets one parry counter,check_10zeroes each of the other parry counters (entries 3, 4, 5, 6, and 12) that is smaller than the new one, and an air parry press (entry 5) is zeroed at once while the entry-6 command'sfree3is above 0. The command tables every character shares givereset11 for the high and low parries (entries 3 and 4), 8 for the air parry (entry 5), and 6 for entry 12, so the counter stays nonzero for 10, 7, and 5 passes (computed).defense_groundchecks entry 12, not entry 3, against a jumping attack parried high (guard bit 2 withjump_att_flag); a jumping attack parried low still uses entry 4, and both of those branches are gated by bit 0x800. The System Direction setting adds −2, 0, 2, or 4 to each, and its defaults add 0. The window closes early if the held lever turns to another value or includes bit 8, if it's still held 6 passes after the press, or if any direction is pressed after it's let go. The command arms again only after a second counter, set toresetplus 10, has counted below zero. While the defender'sguard_chuuisn't 1 to 4 (the test isguard_chuu != 0 && guard_chuu < 5),defense_groundanddefense_skyturn a hit that the attack's guard bits let it parry into a parry when the matching counter is nonzero, unless the defender is stunned, itsguard_flaghas bit 2 set, or a System Direction setting has switched that parry off.Codecrowded-street/3s-decomprevisedHow we know
610void check_10() { 611 switch (waza_ptr->shot_ok) { 612 case 0: 613 if (chk_pl->sw_lever == 0) { 614 waza_ptr->shot_ok++; ⋮ 618 case 1: 619 if ((cmd_pl->wu.xyz[1].disp.pos > 0 || (waza_type[cmd_id] != 5 && waza_type[cmd_id] != 6)) && 620 chk_pl->now_lvbt & 0xF) { 621 if (chk_pl->sw_lever == waza_ptr->w_lvr) { 622 waza_ptr->shot_ok++; 623 wcp[cmd_id].waza_flag[waza_type[cmd_id]] = wcp[cmd_id].reset[waza_type[cmd_id]]; 624 waza_ptr->free3 = wcp[cmd_id].reset[waza_type[cmd_id]] + 10; ⋮
src/anniversary/sf33rd/Source/Game/CMD_MAIN.c lines 610–625 at be9b9bc · upstream ↗ 627 switch (waza_type[cmd_id]) { 628 case 3: 629 if (wcp[cmd_id].waza_flag[3] > wcp[cmd_id].waza_flag[4]) { 630 wcp[cmd_id].waza_flag[4] = 0; ⋮ 634 wcp[cmd_id].waza_flag[5] = 0; ⋮ 641 if (wcp[cmd_id].waza_flag[3] > wcp[cmd_id].waza_flag[12]) { 642 wcp[cmd_id].waza_flag[12] = 0; ⋮ 649 wcp[cmd_id].waza_flag[3] = 0; ⋮ 653 wcp[cmd_id].waza_flag[5] = 0; ⋮ 661 wcp[cmd_id].waza_flag[12] = 0; ⋮ 666 case 5: ⋮ 668 wcp[cmd_id].waza_flag[3] = 0; ⋮
src/anniversary/sf33rd/Source/Game/CMD_MAIN.c lines 627–728 at be9b9bc · upstream ↗ 739 case 2: 740 waza_ptr->w_int--; 741 waza_ptr->free3--; ⋮ 743 if (waza_ptr->w_int > 0) { 744 if (chk_pl->sw_lever == 0) { 745 waza_ptr->shot_ok++; 746 break; ⋮ 749 if (chk_pl->sw_lever & 8) { 750 wcp[cmd_id].waza_flag[waza_type[cmd_id]] = 0; 751 waza_ptr->shot_ok++; 752 break; ⋮ 755 if (chk_pl->sw_lever != waza_ptr->w_lvr) { ⋮
src/anniversary/sf33rd/Source/Game/CMD_MAIN.c lines 739–785 at be9b9bc · upstream ↗ 107 for (j = 0; j < 56; j++) { 108 if (wcp[cmd_id].waza_flag[j] != -1) { ⋮ 111 waza_ptr = &waza_work[cmd_id][j]; 112 chk_move_jp[waza_ptr->w_type](); ⋮ 116 for (j = 0; j < 56; j++) { 117 if ((wcp[cmd_id].waza_flag[j] != -1) && (wcp[cmd_id].waza_flag[j] != 0)) { 118 waza_ptr = &waza_work[cmd_id][j]; 119 command_ok_move(j);
src/anniversary/sf33rd/Source/Game/CMD_MAIN.c lines 107–121 at be9b9bc · upstream ↗ 1530void command_ok_move(s16 waza_num) { 1531 if (dead_lvr_check()) { ⋮ 1536 wcp[cmd_id].waza_flag[waza_num]--;
src/anniversary/sf33rd/Source/Game/CMD_MAIN.c lines 1530–1536 at be9b9bc · upstream ↗ 9void (*chk_move_jp[28])() = { check_init, check_0, check_1, check_2, check_3, check_4, check_5, 10 check_6, check_7, check_7, check_9, check_10, check_11, check_12,
src/anniversary/sf33rd/Source/Game/CMD_MAIN.c lines 9–10 at be9b9bc · upstream ↗ 124void check_init() { 125 cmd_tbl_ptr += 12; 126 waza_ptr->w_type = *cmd_tbl_ptr++; 127 waza_ptr->w_int = *cmd_tbl_ptr++; 128 waza_ptr->free1 = *cmd_tbl_ptr; 129 waza_ptr->free2 = *cmd_tbl_ptr++; 130 waza_ptr->w_lvr = *cmd_tbl_ptr++;
src/anniversary/sf33rd/Source/Game/CMD_MAIN.c lines 124–130 at be9b9bc · upstream ↗ 37 wcp[cmd_id].reset[i] = *cmd_tbl_ptr++;src/anniversary/sf33rd/Source/Game/CMD_MAIN.c line 37 at be9b9bc · upstream ↗ 43const s16 pc_cmd_03[17] = { 11, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 11, 0, 0, 4, 28 }; ⋮ 45const s16 pc_cmd_04[17] = { 11, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 11, 0, 0, 2, 28 }; ⋮ 47const s16 pc_cmd_05[17] = { 8, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 11, 0, 0, 4, 28 };
src/anniversary/sf33rd/Source/Game/cmd_data.c lines 43–49 at be9b9bc · upstream ↗ 61const s16 pc_cmd_12[17] = { 6, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 11, 0, 0, 4, 28 };src/anniversary/sf33rd/Source/Game/cmd_data.c line 61 at be9b9bc · upstream ↗ 781const_s16_arr p0_cmd[56] = { pc_cmd_00, pc_cmd_01, pc_cmd_02, pc_cmd_03, pc_cmd_04, pc_cmd_05, pc_cmd_06, pc_cmd_07, 782 pc_cmd_08, pc_cmd_09, pc_cmd_10, pc_cmd_11, pc_cmd_12, pc_cmd_13, pc_cmd_14, pc_cmd_15,
src/anniversary/sf33rd/Source/Game/cmd_data.c lines 781–782 at be9b9bc · upstream ↗ 55 switch (i) { 56 case 3: 57 case 4: 58 case 5: 59 wcp[cmd_id].reset[i] += blok_b_omake[omop_b_block_ix[cmd_id]]; 60 make_red_blocking_time(cmd_id, i, wcp[cmd_id].reset[i]); 61 break; ⋮ 63 case 6: 64 case 12: 65 wcp[cmd_id].reset[i] += blok_b_omake[omop_b_block_ix[cmd_id]]; 66 break;
src/anniversary/sf33rd/Source/Game/CMD_MAIN.c lines 55–66 at be9b9bc · upstream ↗ 45const s16 blok_b_omake[4] = { -2, 0, 2, 4 };src/anniversary/sf33rd/Source/Game/SysDir.c line 45 at be9b9bc · upstream ↗ 168void get_system_direction_parameter(DirData* sysdir_data) { 169 if (sysdir_data->contents[0][0] == 0) { 170 omop_spmv_ng_table[0] |= 0x300; ⋮ 173 if (sysdir_data->contents[0][1] == 0) { 174 omop_spmv_ng_table[0] |= 0x800; ⋮ 177 if (sysdir_data->contents[0][2] == 0) { 178 omop_spmv_ng_table[0] |= 0x400; ⋮ 181 omop_b_block_ix[0] = sysdir_data->contents[0][3];
src/anniversary/sf33rd/Source/Game/SysDir.c lines 168–181 at be9b9bc · upstream ↗ 9const DirData Dir_Default_Data = { .contents = { { 1, 1, 1, 1, 1, 1, 1 },src/anniversary/sf33rd/Source/Game/DIR_DATA.c line 9 at be9b9bc · upstream ↗ 102 system_dir[ix] = Dir_Default_Data;src/anniversary/sf33rd/Source/Game/init3rd.c line 102 at be9b9bc · upstream ↗ 1179 if (ds->py->flag == 0 && !(ds->guard_flag & 2) && as->wu.att.guard & 3) { 1180 if (as->wu.att.guard & 2) {
src/anniversary/sf33rd/Source/Game/HITCHECK.c lines 1179–1180 at be9b9bc · upstream ↗ 1198 } else if (!(ds->spmv_ng_flag & 0x100)) { 1199 if (as->wu.jump_att_flag) { 1200 if (!(ds->spmv_ng_flag & 0x800) && (ds->cp->waza_flag[12] != 0 || abs)) { ⋮ 1216 } else if (ds->cp->waza_flag[3] != 0 || abs) {
src/anniversary/sf33rd/Source/Game/HITCHECK.c lines 1198–1216 at be9b9bc · upstream ↗ 1248 } else if (!(ds->spmv_ng_flag & 0x200)) { 1249 if (as->wu.jump_att_flag) { 1250 if (!(ds->spmv_ng_flag & 0x800) && (ds->cp->waza_flag[4] != 0 || abs)) { ⋮ 1261 } else if (ds->cp->waza_flag[4] != 0 || abs) {
src/anniversary/sf33rd/Source/Game/HITCHECK.c lines 1248–1261 at be9b9bc · upstream ↗ 1172 just_now = 0; ⋮ 1174 if (ds->guard_chuu != 0 && ds->guard_chuu < 5) { 1175 just_now = 1;
src/anniversary/sf33rd/Source/Game/HITCHECK.c lines 1172–1175 at be9b9bc · upstream ↗ 1080 if (ds->py->flag == 0 && !(ds->guard_flag & 2) && as->wu.att.guard & 4) { ⋮ 1093 } else if (!(ds->spmv_ng_flag & 0x400) && ((ds->cp->waza_flag[5] != 0) || abs)) {
src/anniversary/sf33rd/Source/Game/HITCHECK.c lines 1080–1093 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.
Sources
Code
- VetriTheRetri. 2026. “ssb-decomp-re: a decompilation of Super Smash Bros. (VetriTheRetri/ssb-decomp-re).” Commit 572a747. VetriTheRetri/ssb-decomp-re @ 572a747 · licence, all uses
- doldecomp. 2026. “melee: a decompilation of Super Smash Bros. Melee (doldecomp/melee).” Commit f0cdbb0. doldecomp/melee @ f0cdbb0 · licence, all uses
- Crowded Street contributors. 2026. “3s-decomp: a decompilation of Street Fighter III: 3rd Strike for PlayStation 2 (crowded-street/3s-decomp).” Commit be9b9bc. crowded-street/3s-decomp @ be9b9bc · licence, all uses