I made a small hack some time ago, which allows you to have stompable big boxes.
Here the code:
#include "nsmb.h"
void changeTileAny(void* ptr, int x, int y, int t)
{
//changeTile uses values from a table instead of actual map16 tile numbers.
//With this hack we can set any tile numbers.
//T is a Map16 tile number.
setTileTable[0] = t;
changeTile(ptr, x, y, 0);
setTileTable[0] = 0;
}
void hook_020FD1D4(MarioActor *athis)
{
// Check if Player is Groundpounding
if ((athis->groundPoundRelated77E & 0x2) != 0)
{
u32 xPos = (athis->xPos>>12) / 16;
u32 yPos = ((-athis->yPos)>>12) / 16;
int tb = getTileBehaviorAtPos2(xPos*16, yPos*16);
int tbN = (tb & 0xF0) >> 4;
// Checks if Power-Up state isn't Mini or small Mario
if (tbN == 0xE && (athis->marioPowerupState == 0 || athis->marioPowerupState == 4))
return;
if (tbN == 0xF || tbN == 0xE)
{
// Groundpounded on Block with correct behavior
u32 sx = xPos;
u32 dx = xPos;
u32 sy = yPos;
u32 dy = yPos;
// Get width and height of block
for (int i=-1;; i--)
{
int ctbN = (getTileBehaviorAtPos2((xPos+i)*16, yPos*16) & 0xF0) >> 4;
if (ctbN == 0xF || ctbN == 0xE) sx--;
else break;
}
for (int i=1;; i++)
{
int ctbN = (getTileBehaviorAtPos2((xPos+i)*16, yPos*16) & 0xF0) >> 4;
if (ctbN == 0xF || ctbN == 0xE) dx++;
else break;
}
for (int i=1;; i++)
{
int ctbN = (getTileBehaviorAtPos2(xPos*16, (yPos+i)*16) & 0xF0) >> 4;
if (ctbN == 0xF || ctbN == 0xE) dy++;
else break;
}
// Destroy the block
for (int x=sx; x<=dx; x++)
{
for (int y=sy; y<=dy; y++)
changeTileAny(ptrToLevelActor, x*16, y*16, 0);
}
}
}
}
Add this to symbols.x:
ptrToLevelActor = 0x020CAD40;
changeTile = 0x020AF30C;
setTileTable = 0x020C7EAC;
Replace the MarioActor struct in nsmb.h with this one:
struct MarioActor
{
void* vtable;
u32 unk004; //Settings
u32 unk008; //Zeros
u16 unk00C; //
u16 unk00E; //
u32 unk010; //SOme Ptr
u32 unk014; //settings
u32 unk018;
u32 unk01C; //POINTER to table or struct? Used in pipes??
u32 unk020;
u32 unk024;
u32 unk028;
u32 unk02C;
u32 unk030;
u32 unk034;
u32 unk038;
u32 unk03C;
u32 unk040;
u32 unk044;
u32 unk048;
u32 unk04C;
u32 unk050;
u32 unk054;
u32 unk058;
u32 unk05C;
u32 xPos;
u32 yPos;
u32 unk068;
u32 unk06C;
u32 xPos0;
u32 yPos0;
u32 unk078;
u32 unk07C;
s32 xAccel0;
s32 yAccel0;
u32 unk088;
u16 unk08C;
u16 unk08E; //PIPE and behavior RELATED
u32 unk090;
u32 unk094;
u32 unk098;
u32 unk09C;
u16 unk0A0; //Collision related
u16 unk0A2;
u32 unk0A4;
u32 unk0A8; //PIPE RELATED
u32 unk0AC;
u32 unk0B0;
u8 unk0B4; // collision related hmmm
u8 unk0B5;
u8 unk0B6;
u8 unk0B7;
u32 unk0B8;
u32 unk0BC;
u32 unk0C0;
u32 unk0C4;
u32 unk0C8;
u32 unk0CC;
s32 xAccel;
s32 yAccel;
u32 unk0D8;
u32 unk0DC;
u32 unk0E0;
u32 unk0E4;
u32 unk0E8;
u32 unk0EC;
u32 unk0F0;
u32 unk0F4;
u32 unk0F8;
u32 unk0FC;
u32 unk100;
u32 unk104;
u32 unk108;
u32 unk10C;
u32 unk110;
u32 unk114;
u32 unk118;
u32 unk11C;
u32 unk120;
u32 unk124;
u32 unk128;
u32 unk12C;
u32 unk130;
u32 unk134;
u32 unk138;
u32 unk13C;
u32 unk140;
u32 unk144;
u32 unk148;
u32 unk14C;
u32 unk150;
u32 unk154;
u32 unk158;
u32 unk15C;
u32 unk160;
u32 unk164;
u32 unk168;
u32 unk16C;
u32 unk170;
u32 unk174;
u32 unk178;
u32 unk17C;
u32 unk180;
u32 unk184;
u32 unk188;
u32 unk18C;
u32 unk190;
u32 unk194;
u32 unk198;
u32 unk19C;
u32 unk1A0;
u32 unk1A4;
u32 unk1A8;
u32 unk1AC;
u32 unk1B0;
u32 unk1B4;
u32 unk1B8;
u32 unk1BC;
u32 unk1C0;
u32 unk1C4;
u32 unk1C8;
u32 unk1CC;
u32 unk1D0;
u32 unk1D4;
u32 unk1D8;
u32 unk1DC;
u32 unk1E0;
u32 unk1E4;
u32 unk1E8;
u32 unk1EC;
u32 unk1F0;
u32 unk1F4;
u32 unk1F8;
u32 unk1FC;
u32 unk200;
u32 unk204;
u32 unk208;
u32 unk20C;
u32 unk210;
u32 unk214;
u32 unk218;
u32 unk21C;
u32 unk220;
u32 unk224;
u32 unk228;
u32 unk22C;
u32 unk230;
u32 unk234;
u32 unk238;
u32 unk23C;
u32 unk240;
u32 unk244;
u32 unk248;
u8 unk24C;
u8 isOnGround; //0x0 no ground 0x1: std ground 0x2: jump-through ground 0x10 sprite ground
u8 unk24E;
u8 unk24F;
u32 unk250;
u32 unk254;
u32 unk258;
u32 unk25C;
u32 unk260;
u32 unk264;
u32 unk268;
u32 unk26C;
u32 unk270;
u32 unk274;
u32 unk278;
u32 unk27C;
u32 unk280;
u32 unk284;
u32 unk288;
u32 unk28C;
u32 unk290;
u32 unk294;
u32 unk298;
u32 unk29C;
u32 unk2A0;
u32 unk2A4;
u32 unk2A8;
u32 unk2AC;
u32 unk2B0;
u32 unk2B4;
u32 unk2B8;
u32 unk2BC;
u32 unk2C0;
u32 unk2C4;
u32 unk2C8;
u32 unk2CC;
u32 unk2D0;
u32 unk2D4;
u32 unk2D8;
u32 unk2DC;
u32 unk2E0;
u32 unk2E4;
u32 unk2E8;
u32 unk2EC;
u32 unk2F0;
u32 unk2F4;
u32 unk2F8;
u32 unk2FC;
u32 unk300;
u32 unk304;
u32 unk308;
u32 unk30C;
u32 unk310;
u32 unk314;
u32 unk318;
u32 unk31C;
u32 unk320;
u32 unk324;
u32 unk328;
u32 unk32C;
u32 unk330;
u32 unk334;
u32 unk338;
u32 unk33C;
u32 unk340;
u32 unk344;
u32 unk348;
u32 unk34C;
u32 unk350;
u32 unk354;
u32 unk358;
u32 unk35C;
u32 unk360;
u32 unk364;
u32 unk368;
u32 unk36C;
u32 unk370;
u32 unk374;
u32 unk378;
u32 unk37C;
u32 unk380;
u32 unk384;
u32 unk388;
u32 unk38C;
u32 unk390;
u32 unk394;
u32 unk398;
u32 unk39C;
u32 unk3A0;
u32 unk3A4;
u32 unk3A8;
u32 unk3AC;
u32 unk3B0;
u32 unk3B4;
u32 unk3B8;
u32 unk3BC;
u32 unk3C0;
u32 unk3C4;
u32 unk3C8;
u32 unk3CC;
u32 unk3D0;
u32 unk3D4;
u32 unk3D8;
u32 unk3DC;
u32 unk3E0;
u32 unk3E4;
u32 unk3E8;
u32 unk3EC;
u32 unk3F0;
u32 unk3F4;
u32 unk3F8;
u32 unk3FC;
u32 unk400;
u32 unk404;
u32 unk408;
u32 unk40C;
u32 unk410;
u32 unk414;
u32 unk418;
u32 unk41C;
u32 unk420;
u32 unk424;
u32 unk428;
u32 unk42C;
u32 unk430;
u32 unk434;
u32 unk438;
u32 unk43C;
u32 unk440;
u32 unk444;
u32 unk448;
u32 unk44C;
u32 unk450;
u32 unk454;
u32 unk458;
u32 unk45C;
u32 unk460;
u32 unk464;
u32 unk468;
u32 unk46C;
u32 unk470;
u32 unk474;
u32 unk478;
u32 unk47C;
u32 unk480;
u32 unk484;
u32 unk488;
u32 unk48C;
u32 unk490;
u32 unk494;
u32 unk498;
u32 unk49C;
u32 unk4A0;
u32 unk4A4;
u32 unk4A8;
u32 unk4AC;
u32 unk4B0;
u32 unk4B4;
u32 unk4B8;
u32 unk4BC;
u32 unk4C0;
u32 unk4C4;
u32 unk4C8;
u32 unk4CC;
u32 unk4D0;
u32 unk4D4;
u32 unk4D8;
u32 unk4DC;
u32 unk4E0;
u32 unk4E4;
u32 unk4E8;
u32 unk4EC;
u32 unk4F0;
u32 unk4F4;
u32 unk4F8;
u32 unk4FC;
u32 unk500;
u32 unk504;
u32 unk508;
u32 unk50C;
u32 unk510;
u32 unk514;
u32 unk518;
u32 unk51C;
u32 unk520;
u32 unk524;
u32 unk528;
u32 unk52C;
u32 unk530;
u32 unk534;
u32 unk538;
u32 unk53C;
u32 unk540;
u32 unk544;
u32 unk548;
u32 unk54C;
u32 unk550;
u32 unk554;
u32 unk558;
u32 unk55C;
u32 unk560;
u32 unk564;
u32 unk568;
u32 unk56C;
u32 unk570;
u32 unk574;
u32 unk578;
u32 unk57C;
u32 unk580;
u32 unk584;
u32 unk588;
u32 unk58C;
u32 unk590;
u32 unk594;
u32 unk598;
u32 unk59C;
u32 unk5A0;
u32 unk5A4;
u32 unk5A8;
u32 unk5AC;
u32 unk5B0;
u32 unk5B4;
u32 unk5B8;
u32 unk5BC;
u32 unk5C0;
u32 unk5C4;
u32 unk5C8;
u32 unk5CC;
u32 unk5D0;
u32 unk5D4;
u32 unk5D8;
u32 unk5DC;
u32 unk5E0;
u32 unk5E4;
u32 unk5E8;
u32 unk5EC;
u32 unk5F0;
u32 unk5F4;
u32 unk5F8;
u32 unk5FC;
u32 unk600;
u32 unk604;
u32 unk608;
u32 unk60C;
u32 unk610;
u32 unk614;
u32 unk618;
u32 unk61C;
u32 unk620;
u32 unk624;
u32 unk628;
u32 unk62C;
u32 unk630;
u32 unk634;
u32 unk638;
u32 unk63C;
u32 unk640;
u32 unk644;
u32 unk648;
u32 unk64C;
u32 unk650;
u32 unk654;
u32 unk658;
u32 unk65C;
u32 unk660;
u32 unk664;
u32 unk668;
u32 unk66C;
u32 unk670;
u32 unk674;
u32 unk678;
u32 unk67C;
u32 unk680;
u32 unk684;
u32 unk688;
u32 unk68C;
u32 unk690;
u32 unk694;
u32 unk698;
u32 unk69C;
u32 unk6A0;
u32 unk6A4;
u32 unk6A8;
u32 unk6AC;
u32 unk6B0;
u32 unk6B4;
u32 unk6B8;
u32 unk6BC;
u32 unk6C0;
u32 unk6C4;
u32 unk6C8;
u32 unk6CC;
u32 unk6D0;
u32 unk6D4;
u32 unk6D8;
u32 unk6DC;
u32 unk6E0;
u32 unk6E4;
u32 unk6E8;
u32 unk6EC;
u32 unk6F0;
u32 unk6F4;
u32 unk6F8;
u32 unk6FC;
u32 unk700;
u32 unk704;
u32 unk708;
u32 unk70C;
u32 unk710;
u32 unk714;
u32 unk718;
u32 unk71C;
u32 unk720;
u32 unk724;
u32 unk728;
u32 unk72C;
u32 unk730;
u32 unk734;
u32 unk738;
u32 unk73C;
u32 unk740;
u32 unk744;
u32 unk748;
u32 unk74C;
u32 unk750;
u32 unk754;
u32 unk758;
u32 unk75C;
u32 unk760;
u32 unk764;
u32 unk768;
u32 currentMarioAnim;
u32 unk770;
u32 unk774;
u32 tripleJumpRelated778;
u16 tripleJumpRelated77C;
u8 groundPoundRelated77E;
u8 unk77F;
u32 unk780;
u32 unk784;
u32 unk788;
u32 unk78C;
u32 unk790;
u32 unk794;
u32 unk798;
u32 unk79C;
u32 unk7A0;
u32 unk7A4;
u8 unk7A8;
u8 unk7A9;
u8 unk7AA;
u8 marioPowerupState;
u8 marioPowerupState2;
u8 unk7AD;
u8 unk7AE;
u8 unk7AF;
u32 unk7B0;
u32 unk7B4;
u32 unk7B8;
u8 unk7BC;
u8 unk7BD;
u8 unk7BE;
u8 tripleJumpRelated7BF;
u32 unk7C0;
u32 unk7C4;
u32 unk7C8;
u32 unk7CC;
u32 unk7D0;
u32 unk7D4;
u32 unk7D8;
u32 unk7DC;
u32 unk7E0;
u32 unk7E4;
u32 unk7E8;
u32 unk7EC;
u32 unk7F0;
u32 unk7F4;
u32 unk7F8;
u32 unk7FC;
u32 unk800;
u32 unk804;
u32 unk808;
u32 unk80C;
u32 unk810;
u32 unk814;
u32 unk818;
u32 unk81C;
u32 unk820;
u32 unk824;
u32 unk828;
u32 unk82C;
u32 unk830;
u32 unk834;
u32 unk838;
u32 unk83C;
u32 unk840;
u32 unk844;
u32 unk848;
u32 unk84C;
u32 unk850;
u32 unk854;
u32 unk858;
u32 unk85C;
u32 unk860;
u32 unk864;
u32 unk868;
u32 unk86C;
u32 unk870;
u32 unk874;
u32 unk878;
u32 unk87C;
u32 unk880;
u32 unk884;
u32 unk888;
u32 unk88C;
u32 unk890;
u32 unk894;
u32 unk898;
u32 unk89C;
u32 unk8A0;
u32 unk8A4;
u32 unk8A8;
u32 unk8AC;
u32 unk8B0;
u32 unk8B4;
u32 unk8B8;
u32 unk8BC;
u32 unk8C0;
u32 unk8C4;
u32 unk8C8;
u32 unk8CC;
u32 unk8D0;
u32 unk8D4;
u32 unk8D8;
u32 unk8DC;
u32 unk8E0;
u32 unk8E4;
u32 unk8E8;
u32 unk8EC;
u32 unk8F0;
u32 unk8F4;
u32 unk8F8;
u32 unk8FC;
u32 unk900;
u32 unk904;
u32 unk908;
u32 unk90C;
u32 unk910;
u32 unk914;
u32 unk918;
u32 unk91C;
u32 unk920;
u32 unk924;
u32 unk928;
u32 unk92C;
u32 unk930;
u32 unk934;
u32 unk938;
u32 unk93C;
u32 unk940;
u32 unk944;
u32 unk948;
u32 unk94C;
u32 unk950;
u32 unk954;
u32 unk958;
u32 unk95C;
u32 unk960;
u32 unk964;
u32 unk968;
u32 unk96C;
u32 unk970;
u32 unk974;
u32 unk978;
u32 unk97C;
u32 unk980;
u32 unk984;
u32 unk988;
u32 unk98C;
u32 unk990;
u32 unk994;
u32 unk998;
u32 unk99C;
u32 unk9A0;
u32 unk9A4;
u32 unk9A8;
u32 unk9AC;
u32 unk9B0;
u32 unk9B4;
u32 unk9B8;
u32 unk9BC;
u32 unk9C0;
u32 unk9C4;
u32 unk9C8;
u32 unk9CC;
u32 unk9D0;
u32 unk9D4;
u32 unk9D8;
u32 unk9DC;
u32 unk9E0;
u32 unk9E4;
u32 unk9E8;
u32 unk9EC;
u32 unk9F0;
u32 unk9F4;
u32 unk9F8;
u32 unk9FC;
u32 unkA00;
u32 unkA04;
u32 unkA08;
u32 unkA0C;
u32 unkA10;
u32 unkA14;
u32 unkA18;
u32 unkA1C;
u32 unkA20;
u32 unkA24;
u32 unkA28;
u32 unkA2C;
u32 unkA30;
u32 unkA34;
u32 unkA38;
u32 unkA3C;
u32 unkA40;
u32 unkA44;
u32 unkA48;
u32 unkA4C;
u32 unkA50;
u32 unkA54;
u32 unkA58;
u32 unkA5C;
u32 unkA60;
u32 unkA64;
u32 unkA68;
u32 unkA6C;
u32 unkA70;
u32 unkA74;
u32 unkA78;
u32 unkA7C;
u32 unkA80;
u32 unkA84;
u32 unkA88;
u32 unkA8C;
u32 unkA90;
u32 unkA94;
u32 unkA98;
u32 unkA9C;
u32 unkAA0;
u32 unkAA4;
u32 unkAA8;
u32 unkAAC;
u32 unkAB0;
u32 unkAB4;
u32 unkAB8;
u32 unkABC;
u32 unkAC0;
u32 unkAC4;
u32 unkAC8;
u32 unkACC;
u32 unkAD0;
u32 unkAD4;
u32 unkAD8;
u32 unkADC;
u32 unkAE0;
u32 unkAE4;
u32 unkAE8;
u32 unkAEC;
u32 unkAF0;
u32 unkAF4;
u32 unkAF8;
u32 unkAFC;
u32 unkB00;
u32 unkB04;
u32 unkB08;
u32 unkB0C;
u32 unkB10;
u32 unkB14;
u32 unkB18;
u32 unkB1C;
u32 unkB20;
u32 unkB24;
u32 unkB28;
u32 unkB2C;
u32 unkB30;
u32 unkB34;
u32 unkB38;
u32 unkB3C;
u32 unkB40;
u32 unkB44;
u32 unkB48;
u32 unkB4C;
u32 unkB50;
u32 unkB54;
u32 unkB58;
u32 unkB5C;
u32 unkB60;
u32 unkB64;
u32 unkB68;
u32 unkB6C;
u32 unkB70;
u32 unkB74;
u32 unkB78;
u32 unkB7C;
u32 unkB80;
u32 unkB84;
u32 unkB88;
u32 unkB8C;
u32 unkB90;
u32 unkB94;
u32 unkB98;
u32 unkB9C;
char consecutiveJumps;
u8 unkBA1;
u8 unkBA2;
u8 unkBA3;
u32 unkBA4;
u32 unkBA8;
u32 unkBAC;
u32 unkBB0;
u32 unkBB4;
u32 unkBB8;
u32 unkBBC;
u32 unkBC0;
u32 unkBC4;
u32 unkBC8;
};
Spoiler
Click to show
The new tilebehaviors, which are now available are:
FY XX XX XX: Stompable box, even stompable with mini or small Mario
EY XX XX XX: Stompable box, not stompable with mini or small Mario
XX can be anything. So you can even make it icy or smth. For working correctly, the blocks should be at least solid on top.
Y will be the particle ID that will be spawned when I update the hack (thanks to
skawo for already telling me the particle spawner function)
Also not all blocks in one "box" have to share the same behavior. The only thing, that matters is, that the first nybble is 0xE or 0xF.
I used some code from
Dirbaio's Tile hack and some parts of the CR code.
_________________________
GitHub -
Kuribo64 -
YouTube