Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define BIT(x) (1 << x)
- /* hidSharedMem can be 0x10000000, 0x10001000, 0x10002000 (maybe even 0x10003000 but didn't see the case until now)
- ** the address can be different between games
- ** I don't know for now how to retrieve it automatically so you must define the good one manually
- */
- vu32 *hidSharedMem = (u32 *)0x10002000;
- u32 kDown = 0;
- enum
- {
- KEY_A = BIT(0), ///< A
- KEY_B = BIT(1), ///< B
- KEY_SELECT = BIT(2), ///< Select
- KEY_START = BIT(3), ///< Start
- KEY_DRIGHT = BIT(4), ///< D-Pad Right
- KEY_DLEFT = BIT(5), ///< D-Pad Left
- KEY_DUP = BIT(6), ///< D-Pad Up
- KEY_DDOWN = BIT(7), ///< D-Pad Down
- KEY_R = BIT(8), ///< R
- KEY_L = BIT(9), ///< L
- KEY_X = BIT(10), ///< X
- KEY_Y = BIT(11), ///< Y
- KEY_CPAD_RIGHT = BIT(28), ///< Circle Pad Right
- KEY_CPAD_LEFT = BIT(29), ///< Circle Pad Left
- KEY_CPAD_UP = BIT(30), ///< Circle Pad Up
- KEY_CPAD_DOWN = BIT(31), ///< Circle Pad Down
- };
- u32 hidCheckSectionUpdateTime(vu32 *sharedmem_section, u32 id)
- {
- s64 tick0 = 0;
- s64 tick1 = 0;
- if (id==0)
- {
- tick0 = *((u64 *)&sharedmem_section[0]);
- tick1 = *((u64 *)&sharedmem_section[2]);
- if (tick0 == tick1 || tick0 < 0 || tick1 < 0)
- return 1;
- }
- return 0;
- }
- void scanHID(void)
- {
- u32 id = 0;
- kDown = 0;
- id = hidSharedMem[4];
- if (id > 7)
- id = 7;
- if (hidCheckSectionUpdateTime(hidSharedMem, id) == 0)
- kDown = hidSharedMem[10 + id * 4];
- }
- void editMemoryRights(void)
- {
- int i;
- for (i = 0; i < 8; i++)
- rtCheckRemoteMemoryRegionSafeForWrite(getCurrentProcessHandle(), (u32)hidSharedMem + (10 + i * 4), 4);
- }
- void setHID(u32 keys)
- {
- u32 id;
- id = hidSharedMem[4];
- if(id > 7)
- id = 7;
- hidSharedMem[10 + id * 4] |= keys;
- }
- u32 hidKeysDown()
- {
- return(kDown);
- }
- void send_key(u32 keys)
- {
- setHID(keys);
- }
- void my_super_bot(void)
- {
- editMemoryRights();
- //Press L + A +B to exit the loop
- while (hidKeysDown() != (KEY_A | KEY_B | KEY_L))
- {
- //send A
- send_key(KEY_A);
- //wait 1s
- svcSleep(1000000000);
- //send B
- send_key(KEY_B);
- //wait 1s
- svcSleep(1000000000);
- //send A
- send_key(KEY_A);
- //wait 10s
- svcSleep(10000000000);
- scanHID();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement