diff --git a/3ds.ld b/3ds.ld deleted file mode 100644 index 61ecd51..0000000 --- a/3ds.ld +++ /dev/null @@ -1,42 +0,0 @@ - -OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") -OUTPUT_ARCH(arm) -ENTRY(_Reset) -SECTIONS -{ - . = 0x00100000; - - . = ALIGN(4); - .text : - { - __text_start = .; - bootloader.o (.text*) - *(.text*) - } - - . = ALIGN(4); - .data : - { - *(.data) - } - - . = ALIGN(4); - .rel.dyn : - { - *(.__rel_dyn_start) - *(.rel*) - *(.rel.*) - *(.__rel_dyn_end) - } - - __code_end = .; - - . = ALIGN(4); - .bss : - { - *(.__bss_start) - *(.bss COMMON) - *(.__bss_end) - } - __end__ = .; -} diff --git a/Includes/common.h b/Includes/common.h deleted file mode 100644 index 45dd0af..0000000 --- a/Includes/common.h +++ /dev/null @@ -1,103 +0,0 @@ -#ifndef COMMON_H -#define COMMON_H -#include "plugin.h" -#include "hid.h" - -extern u32 IoBasePad; -extern vu32 *pad_base; - -void set_hid_address(u32 address); - -static inline int is_pressed(u32 keys) -{ - if (pad_base != NULL) - { - if (((hidKeysDown() & keys) == keys)) - return (1); - } - else - if (((((*(vu32*)(IoBasePad) ^ 0xFFF) & 0xFFF) & keys) == keys)) - return (1); - return (0); -} - -static inline int any_is_pressed(u32 keys) -{ - if (pad_base != NULL) - { - if (((hidKeysDown() & keys))) - return (1); - } - else - if (((((*(vu32*)(IoBasePad) ^ 0xFFF) & 0xFFF) & keys))) - return (1); - return (0); -} - -static inline int wait_keys(u32 keys) -{ - while (!(any_is_pressed(keys))) - continue; -} - -static inline void wait_keys_released(u32 keys) -{ - while (1) - if (!(any_is_pressed(keys))) - return; -} - -static inline void wait_all_released(void) -{ - while (1) - if (((*(vu32*)(IoBasePad) ^ 0xFFF) & 0xFFF) == 0) - return; -} - -static inline int upper_left_touched(void) -{ - if (is_pressed(KEY_TOUCH)) - if (hidTouchPos().px < 160 && hidTouchPos().py < 120) - return (1); - return (0); -} - -static inline int upper_right_touched(void) -{ - if (is_pressed(KEY_TOUCH)) - if (hidTouchPos().px >= 160 && hidTouchPos().py < 120) - return (1); - return (0); -} - -static inline int lower_left_touched(void) -{ - if (is_pressed(KEY_TOUCH)) - if (hidTouchPos().px < 160 && hidTouchPos().py >= 120) - return (1); - return (0); -} - -static inline int lower_right_touched(void) -{ - if (is_pressed(KEY_TOUCH)) - if (hidTouchPos().px >= 160 && hidTouchPos().py >= 120) - return (1); - return (0); -} - -static inline int range_touched(int start_x, int end_x, int start_y, int end_y) -{ - u16 px; - u16 py; - - px = hidTouchPos().px; - py = hidTouchPos().py; - if (is_pressed(KEY_TOUCH)) - if (px >= start_x && px <= end_x) - if (py >= start_y && py <= end_y) - return (1); - return (0); -} - -#endif \ No newline at end of file diff --git a/Includes/configs.h b/Includes/configs.h deleted file mode 100644 index 9ba6747..0000000 --- a/Includes/configs.h +++ /dev/null @@ -1,116 +0,0 @@ -#ifndef WRITEU8 -# define WRITEU8(addr, data) *(vu8*)(addr) = data -#endif -#ifndef WRITEU16 -# define WRITEU16(addr, data) *(vu16*)(addr) = data -#endif -#ifndef WRITEU32 -# define WRITEU32(addr, data) *(vu32*)(addr) = data -#endif -#ifndef READU8 -# define READU8(addr) *(volatile unsigned char*)(addr) -#endif -#ifndef READU16 -# define READU16(addr) *(volatile unsigned short*)(addr) -#endif -#ifndef READU32 -# define READU32(addr) *(volatile unsigned int*)(addr) -#endif - -#ifndef IO_BASE_PAD -# define IO_BASE_PAD 1 -#endif -#ifndef IO_BASE_LCD -# define IO_BASE_LCD 2 -#endif -#ifndef IO_BASE_PDC -# define IO_BASE_PDC 3 -#endif -#ifndef IO_BASE_GSPHEAP -# define IO_BASE_GSPHEAP 4 -#endif -#ifndef BUTTON_A -# define BUTTON_A 0x00000001 -#endif -#ifndef BUTTON_B -# define BUTTON_B 0x00000002 -#endif -#ifndef BUTTON_SE -# define BUTTON_SE 0x00000004 -#endif -#ifndef BUTTON_ST -# define BUTTON_ST 0x00000008 -#endif -#ifndef BUTTON_DR -# define BUTTON_DR 0x00000010 -#endif -#ifndef BUTTON_DL -# define BUTTON_DL 0x00000020 -#endif -#ifndef BUTTON_DU -# define BUTTON_DU 0x00000040 -#endif -#ifndef BUTTON_DD -# define BUTTON_DD 0x00000080 -#endif -#ifndef BUTTON_R -# define BUTTON_R 0x00000100 -#endif -#ifndef BUTTON_L -# define BUTTON_L 0x00000200 -#endif -#ifndef BUTTON_ZR -# define BUTTON_ZR 0x00008000 -#endif -#ifndef BUTTON_ZL -# define BUTTON_ZL 0x00004000 -#endif -#ifndef BUTTON_X -# define BUTTON_X 0x00000400 -#endif -#ifndef BUTTON_Y -# define BUTTON_Y 0x00000800 -#endif - -#ifndef A -# define A BUTTON_A -#endif -#ifndef B -# define B BUTTON_B -#endif -#ifndef X -# define X BUTTON_X -#endif -#ifndef Y -# define Y BUTTON_Y -#endif -#ifndef L -# define L BUTTON_L -#endif -#ifndef R -# define R BUTTON_R -#endif -#ifndef ZL -# define ZL BUTTON_ZL -#endif -#ifndef ZR -# define ZR BUTTON_ZR -#endif -#ifndef ST -# define ST BUTTON_ST -#endif -#ifndef SE -# define SE BUTTON_SE -#endif -#ifndef DU -# define DU BUTTON_DU -#endif -#ifndef DD -# define DD BUTTON_DD -#endif -#ifndef DL -# define DL BUTTON_DL -#endif -#ifndef DR -# define DR BUTTON_DR -#endif \ No newline at end of file diff --git a/Includes/ctr/AC.h b/Includes/ctr/AC.h deleted file mode 100644 index dd3e78a..0000000 --- a/Includes/ctr/AC.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef AC_H -#define AC_H - -Result ACU_GetWifiStatus(Handle servhandle, u32 *out); -Result ACU_WaitInternetConnection(); - -#endif - diff --git a/Includes/ctr/APT.h b/Includes/ctr/APT.h deleted file mode 100644 index 5ce2fd6..0000000 --- a/Includes/ctr/APT.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef APT_H -#define APT_H - -typedef enum{ - APPID_HOMEMENU = 0x101, // Home Menu - APPID_CAMERA = 0x110, // Camera applet - APPID_WEB = 0x114, // Internet Browser - APPID_APPLICATION = 0x300, // Application -}NS_APPID; // cf http://3dbrew.org/wiki/NS#AppIDs - -typedef enum{ - APP_NOTINITIALIZED, - APP_RUNNING, - APP_SUSPENDED, - APP_EXITING, - APP_SUSPENDING, - APP_SLEEPMODE, - APP_PREPARE_SLEEPMODE -}APP_STATUS; - -extern Handle aptEvents[3]; - -Result aptInit(NS_APPID appID); -void aptExit(); -void aptOpenSession(); -void aptCloseSession(); -void aptSetupEventHandler(); -void aptSetStatus(APP_STATUS status); -APP_STATUS aptGetStatus(); -u32 aptGetStatusPower();//This can be used when the status is APP_SUSPEND* to check how the return-to-menu was triggered: 0 = home-button, 1 = power-button. -void aptSetStatusPower(u32 status); -void aptReturnToMenu();//This should be called by the user application when aptGetStatus() returns APP_SUSPENDING, not calling this will result in return-to-menu being disabled with the status left at APP_SUSPENDING. This function will not return until the system returns to the application, or when the status was changed to APP_EXITING. -void aptWaitStatusEvent(); -NS_APPID aptGetMenuAppID(); - -Result APT_GetLockHandle(Handle* handle, u16 flags, Handle* lockHandle); -Result APT_Initialize(Handle* handle, NS_APPID appId, Handle* eventHandle1, Handle* eventHandle2); -Result APT_Enable(Handle* handle, u32 a); -Result APT_GetAppletManInfo(Handle* handle, u8 inval, u8 *outval8, u32 *outval32, NS_APPID *menu_appid, NS_APPID *active_appid); -Result APT_PrepareToJumpToHomeMenu(Handle* handle); -Result APT_JumpToHomeMenu(Handle* handle, u32 a, u32 b, u32 c); -Result APT_InquireNotification(Handle* handle, u32 appID, u8* signalType); -Result APT_NotifyToWait(Handle* handle, NS_APPID appID); -Result APT_AppletUtility(Handle* handle, u32* out, u32 a, u32 size1, u8* buf1, u32 size2, u8* buf2); -Result APT_GlanceParameter(Handle* handle, NS_APPID appID, u32 bufferSize, u32* buffer, u32* actualSize, u8* signalType); -Result APT_ReceiveParameter(Handle* handle, NS_APPID appID, u32 bufferSize, u32* buffer, u32* actualSize, u8* signalType); -Result APT_SendParameter(Handle* handle, NS_APPID src_appID, NS_APPID dst_appID, u32 bufferSize, u32* buffer, Handle paramhandle, u8 signalType); -Result APT_SendCaptureBufferInfo(Handle* handle, u32 bufferSize, u32* buffer); -Result APT_ReplySleepQuery(Handle* handle, NS_APPID appID, u32 a); -Result APT_ReplySleepNotificationComplete(Handle* handle, NS_APPID appID); -Result APT_PrepareToCloseApplication(Handle* handle, u8 a); -Result APT_CloseApplication(Handle* handle, u32 a, u32 b, u32 c); - -#endif diff --git a/Includes/ctr/CFGNOR.h b/Includes/ctr/CFGNOR.h deleted file mode 100644 index b6ca73d..0000000 --- a/Includes/ctr/CFGNOR.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef CFGNOR_H -#define CFGNOR_H - -Result CFGNOR_Initialize(u8 value); -Result CFGNOR_Shutdown(); -Result CFGNOR_ReadData(u32 offset, u32 *buf, u32 size); -Result CFGNOR_WriteData(u32 offset, u32 *buf, u32 size); -Result CFGNOR_DumpFlash(u32 *buf, u32 size); -Result CFGNOR_WriteFlash(u32 *buf, u32 size); - -#endif - diff --git a/Includes/ctr/CSND.h b/Includes/ctr/CSND.h deleted file mode 100644 index 408d1da..0000000 --- a/Includes/ctr/CSND.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef CSND_H -#define CSND_H - -//See here regarding CSND shared-mem commands, etc: http://3dbrew.org/wiki/CSND_Shared_Memory - -#define CSND_SHAREDMEM_DEFAULT 0x10004000 - -typedef enum{ - CSND_LOOP_DISABLE, - CSND_LOOP_ENABLE -} CSND_LOOPING; - -typedef enum{ - CSND_ENCODING_PCM8, - CSND_ENCODING_PCM16, - CSND_ENCODING_IMA_ADPCM, - CSND_ENCODING_PSG//"3 = PSG, similar to DS?" -} CSND_ENCODING; - -Result CSND_initialize(u32* sharedMem); -Result CSND_shutdown(); - -Result CSND_playsound(u32 channel, CSND_LOOPING looping, CSND_ENCODING encoding, u32 samplerate, u32 *vaddr0, u32 *vaddr1, u32 totalbytesize, u32 unk0, u32 unk1);//vaddr0 is the initial virtual-address of the audio-data. vaddr1 is the audio-data virtual-address used for looping, when playback is restarted for looping. -void CSND_setchannel_playbackstate(u32 channel, u32 value);//value0 = pause playback, value1 = resume playback. -void CSND_sharedmemtype0_cmd0(u32 channel, u32 value);//value1 = start playback. value0 = stop playback, and reset the CSND registers for this channel. -void CSND_writesharedmem_cmdtype0(u16 cmdid, u8 *cmdparams);//This can be used to use arbitary CSND shared-memory commands. -Result CSND_sharedmemtype0_cmdupdatestate(int waitdone);//This must be used after using CSND shared-memory commands in order for those commands to be processed. CSND_playsound() and CSND_getchannelstate() use this automatically. - -Result CSND_getchannelstate(u32 entryindex, u32 *out); -Result CSND_getchannelstate_isplaying(u32 entryindex, u8 *status); - -#endif - diff --git a/Includes/ctr/FS.h b/Includes/ctr/FS.h deleted file mode 100644 index 7073fef..0000000 --- a/Includes/ctr/FS.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef FS_H -#define FS_H - -#define FS_OPEN_READ (1<<0) -#define FS_OPEN_WRITE (1<<1) -#define FS_OPEN_CREATE (1<<2) - -#define FS_ATTRIBUTE_NONE (0x00000000) -#define FS_ATTRIBUTE_READONLY (0x00000001) -#define FS_ATTRIBUTE_ARCHIVE (0x00000100) -#define FS_ATTRIBUTE_HIDDEN (0x00010000) -#define FS_ATTRIBUTE_DIRECTORY (0x01000000) - -typedef enum{ - PATH_INVALID = 0, // Specifies an invalid path. - PATH_EMPTY = 1, // Specifies an empty path. - PATH_BINARY = 2, // Specifies a binary path, which is non-text based. - PATH_CHAR = 3, // Specifies a text based path with a 8-bit byte per character. - PATH_WCHAR = 4, // Specifies a text based path with a 16-bit short per character. -}FS_pathType; - -typedef struct{ - FS_pathType type; - u32 size; - u8* data; -}FS_path; - -typedef struct{ - u32 id; - FS_path lowPath; - Handle handleLow, handleHigh; -}FS_archive; - -static inline FS_path FS_makePath(FS_pathType type, char* path) -{ - return (FS_path){type, strlen(path)+1, (u8*)path}; -} - -Result FSUSER_Initialize(Handle handle); -Result FSUSER_OpenArchive(Handle handle, FS_archive* archive); -Result FSUSER_OpenDirectory(Handle handle, Handle* out, FS_archive archive, FS_path dirLowPath); -Result FSUSER_OpenFile(Handle handle, Handle* out, FS_archive archive, FS_path fileLowPath, u32 openflags, u32 attributes); -Result FSUSER_OpenFileDirectly(Handle handle, Handle* out, FS_archive archive, FS_path fileLowPath, u32 openflags, u32 attributes); -Result FSUSER_CloseArchive(Handle handle, FS_archive* archive); - -Result FSFILE_Close(Handle handle); -Result FSFILE_Read(Handle handle, u32 *bytesRead, u64 offset, u32 *buffer, u32 size); -Result FSFILE_Write(Handle handle, u32 *bytesWritten, u64 offset, u32 *buffer, u32 size, u32 flushFlags); -Result FSFILE_GetSize(Handle handle, u64 *size); -Result FSFILE_SetSize(Handle handle, u64 size); - -Result FSDIR_Read(Handle handle, u32 *entriesRead, u32 entrycount, u16 *buffer); -Result FSDIR_Close(Handle handle); - -#endif diff --git a/Includes/ctr/GPU.h b/Includes/ctr/GPU.h deleted file mode 100644 index f2e3fce..0000000 --- a/Includes/ctr/GPU.h +++ /dev/null @@ -1,90 +0,0 @@ -#ifndef GPU_H -#define GPU_H - -void GPU_Init(Handle *gsphandle); -void GPU_Reset(u32* gxbuf, u32* gpuBuf, u32 gpuBufSize); - -void GPUCMD_SetBuffer(u32* adr, u32 size, u32 offset); -void GPUCMD_Run(u32* gxbuf); -void GPUCMD_Add(u32 cmd, u32* param, u32 paramlength); -void GPUCMD_AddSingleParam(u32 cmd, u32 param); -void GPUCMD_Finalize(); - -typedef enum{ - GPU_RGBA8=0x0, - GPU_RGB8=0x1, - GPU_RGBA5551=0x2, - GPU_RGB565=0x3, - GPU_RGBA4=0x4, - GPU_LA8=0x5, - GPU_HILO8=0x6, - GPU_L8=0x7, - GPU_A8=0x8, - GPU_LA4=0x9, - GPU_L4=0xA, - GPU_ETC1=0xB, - GPU_ETC1A4=0xC -}GPU_TEXCOLOR; - -typedef enum -{ - GPU_NEVER = 0, - GPU_ALWAYS = 1, - GPU_EQUAL = 2, - GPU_NOTEQUAL = 3, - GPU_LESS = 4, - GPU_LEQUAL = 5, - GPU_GREATER = 6, - GPU_GEQUAL = 7 -}GPU_TESTFUNC; - -typedef enum{ - GPU_BYTE = 0, - GPU_UNSIGNED_BYTE = 1, - GPU_SHORT = 2, - GPU_FLOAT = 3 -}GPU_FORMATS; - -//defines for CW ? -typedef enum{ - GPU_CULL_NONE = 0, - GPU_CULL_FRONT_CCW = 1, - GPU_CULL_BACK_CCW = 2 -}GPU_CULLMODE; - -#define GPU_ATTRIBFMT(i, n, f) (((((n)-1)<<2)|((f)&3))<<((i)*4)) - -typedef enum{ - GPU_PRIMARY_COLOR = 0x00, - GPU_TEXTURE0 = 0x03, - GPU_TEXTURE1 = 0x04, - GPU_TEXTURE2 = 0x05, - GPU_TEXTURE3 = 0x06, - GPU_CONSTANT = 0x0E, - GPU_PREVIOUS = 0x0F, -}GPU_TEVSRC; - -typedef enum{ - GPU_REPLACE = 0x00, - GPU_MODULATE = 0x01, - GPU_ADD = 0x02, - GPU_ADD_SIGNED = 0x03, - GPU_INTERPOLATE = 0x04, - GPU_SUBTRACT = 0x05, - GPU_DOT3_RGB = 0x06 //RGB only -}GPU_COMBINEFUNC; - -#define GPU_TEVSOURCES(a,b,c) (((a))|((b)<<4)|((c)<<8)) -#define GPU_TEVOPERANDS(a,b,c) (((a))|((b)<<4)|((c)<<8)) - -void GPU_SetUniform(u32 startreg, u32* data, u32 numreg); -void GPU_SetViewport(u32* depthBuffer, u32* colorBuffer, u32 x, u32 y, u32 w, u32 h); -void GPU_DepthRange(float nearVal, float farVal); -void GPU_SetDepthTest(bool enable, GPU_TESTFUNC function, u8 ref); -void GPU_SetStencilTest(bool enable, GPU_TESTFUNC function, u8 ref); -void GPU_SetFaceCulling(GPU_CULLMODE mode); -void GPU_SetAttributeBuffers(u8 totalAttributes, u32* baseAddress, u64 attributeFormats, u16 attributeMask, u64 attributePermutation, u8 numBuffers, u32 bufferOffsets[], u64 bufferPermutations[], u8 bufferNumAttributes[]); -void GPU_SetTexture(u32* data, u16 width, u16 height, u32 param, GPU_TEXCOLOR colorType); -void GPU_SetTexEnv(u8 id, u16 rgbSources, u16 alphaSources, u16 rgbOperands, u16 alphaOperands, GPU_COMBINEFUNC rgbCombine, GPU_COMBINEFUNC alphaCombine, u32 constantColor); - -#endif diff --git a/Includes/ctr/GSP.h b/Includes/ctr/GSP.h deleted file mode 100644 index 5ac95ea..0000000 --- a/Includes/ctr/GSP.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef GSP_H -#define GSP_H - -#define GSP_REBASE_REG(r) ((r)-0x1EB00000) - -typedef struct -{ - u32 active_framebuf;//"0=first, 1=second" - u32 *framebuf0_vaddr;//"Framebuffer virtual address, for the main screen this is the 3D left framebuffer" - u32 *framebuf1_vaddr;//"For the main screen: 3D right framebuffer address" - u32 framebuf_widthbytesize;//"Value for 0x1EF00X90, controls framebuffer width" - u32 format;//"Framebuffer format, this u16 is written to the low u16 for LCD register 0x1EF00X70." - u32 framebuf_dispselect;//"Value for 0x1EF00X78, controls which framebuffer is displayed" - u32 unk;//"?" -} GSP_FramebufferInfo; - -typedef struct//See this for GSP_CaptureInfoEntry and GSP_CaptureInfo: http://3dbrew.org/wiki/GSPGPU:ImportDisplayCaptureInfo -{ - u32 *framebuf0_vaddr; - u32 *framebuf1_vaddr; - u32 format; - u32 framebuf_widthbytesize; -} GSP_CaptureInfoEntry; - -typedef struct -{ - GSP_CaptureInfoEntry screencapture[2]; -} GSP_CaptureInfo; - -Result gspInit(); -void gspExit(); - -Result GSPGPU_AcquireRight(Handle *handle, u8 flags); -Result GSPGPU_ReleaseRight(Handle *handle); -Result GSPGPU_ImportDisplayCaptureInfo(Handle* handle, GSP_CaptureInfo *captureinfo); -Result GSPGPU_SaveVramSysArea(Handle* handle); -Result GSPGPU_RestoreVramSysArea(Handle* handle); -Result GSPGPU_SetLcdForceBlack(Handle *handle, u8 flags); -Result GSPGPU_SetBufferSwap(Handle* handle, u32 screenid, GSP_FramebufferInfo *framebufinfo); -Result GSPGPU_FlushDataCache(Handle *handle, u8* adr, u32 size); -Result GSPGPU_InvalidateDataCache(Handle* handle, u8* adr, u32 size); -Result GSPGPU_WriteHWRegs(Handle *handle, u32 regAddr, u32* data, u8 size); -Result GSPGPU_WriteHWRegsWithMask(Handle* handle, u32 regAddr, u32* data, u8 datasize, u32* maskdata, u8 masksize); -Result GSPGPU_ReadHWRegs(Handle *handle, u32 regAddr, u32* data, u8 size); -Result GSPGPU_RegisterInterruptRelayQueue(Handle *handle, Handle eventHandle, u32 flags, Handle* outMemHandle, u8* threadID); -Result GSPGPU_UnregisterInterruptRelayQueue(Handle* handle); -Result GSPGPU_TriggerCmdReqQueue(Handle *handle); - -Result GSPGPU_submitGxCommand(u32* sharedGspCmdBuf, u32 gxCommand[0x8], Handle* handle); - -#endif diff --git a/Includes/ctr/GX.h b/Includes/ctr/GX.h deleted file mode 100644 index ad9e941..0000000 --- a/Includes/ctr/GX.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef GX_H -#define GX_H - -#define GX_BUFFER_DIM(w, h) (((h)<<16)|((w)&0xFFFF)) - -Result GX_RequestDma(u32* gxbuf, u32* src, u32* dst, u32 length); -Result GX_SetCommandList_Last(u32* gxbuf, u32* buf0a, u32 buf0s, u8 flags); -Result GX_SetMemoryFill(u32* gxbuf, u32* buf0a, u32 buf0v, u32* buf0e, u16 width0, u32* buf1a, u32 buf1v, u32* buf1e, u16 width1); -Result GX_SetDisplayTransfer(u32* gxbuf, u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 flags); -Result GX_SetTextureCopy(u32* gxbuf, u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 size, u32 flags); -Result GX_SetCommandList_First(u32* gxbuf, u32* buf0a, u32 buf0s, u32* buf1a, u32 buf1s, u32* buf2a, u32 buf2s); - -#endif diff --git a/Includes/ctr/HID.h b/Includes/ctr/HID.h deleted file mode 100644 index 79a5e8a..0000000 --- a/Includes/ctr/HID.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef HID_H -#define HID_H - -#define HID_SHAREDMEM_DEFAULT (0x10000000) - -#define CPAD_X(v) ((s16)((v)&0xFFFF)) -#define CPAD_Y(v) ((s16)(((v>>16))&0xFFFF)) - -#define TOUCH_X(v) ((u16)((v)&0xFFFF)) -#define TOUCH_Y(v) ((u16)(((v>>16))&0xFFFF)) - -typedef enum -{ - PAD_A = (1<<0), - PAD_B = (1<<1), - PAD_SELECT = (1<<2), - PAD_START = (1<<3), - PAD_RIGHT = (1<<4), - PAD_LEFT = (1<<5), - PAD_UP = (1<<6), - PAD_DOWN = (1<<7), - PAD_R = (1<<8), - PAD_L = (1<<9), - PAD_X = (1<<10), - PAD_Y = (1<<11) -}PAD_KEY; - -extern Handle hidMemHandle; -extern vu32* hidSharedMem; - -Result hidInit(u32* sharedMem); -void hidExit(); - -Result HIDUSER_GetInfo(Handle* handle, Handle* outMemHandle); -Result HIDUSER_EnableAccelerometer(Handle* handle); - -#endif diff --git a/Includes/ctr/HTTPC.h b/Includes/ctr/HTTPC.h deleted file mode 100644 index 3ceeb66..0000000 --- a/Includes/ctr/HTTPC.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef HTTPC_H -#define HTTPC_H - -Result HTTPC_Initialize(Handle handle); -Result HTTPC_InitializeConnectionSession(Handle handle, Handle contextHandle); -Result HTTPC_CreateContext(Handle handle, char* url, Handle* contextHandle); -Result HTTPC_CloseContext(Handle handle, Handle contextHandle); -Result HTTPC_SetProxyDefault(Handle handle, Handle contextHandle); -Result HTTPC_AddRequestHeaderField(Handle handle, Handle contextHandle, char* name, char* value); -Result HTTPC_BeginRequest(Handle handle, Handle contextHandle); -Result HTTPC_ReceiveData(Handle handle, Handle contextHandle, u8* buffer, u32 size); - -#endif diff --git a/Includes/ctr/IR.h b/Includes/ctr/IR.h deleted file mode 100644 index 8c09d66..0000000 --- a/Includes/ctr/IR.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef IR_H -#define IR_H - -Result IRU_Initialize(u32 *sharedmem_addr, u32 sharedmem_size);//The permissions for the specified memory is set to RO. This memory must be already mapped. -Result IRU_Shutdown(); -Handle IRU_GetServHandle(); -Result IRU_SendData(u8 *buf, u32 size, u32 wait); -Result IRU_RecvData(u8 *buf, u32 size, u8 flag, u32 *transfercount, u32 wait); -Result IRU_SetBitRate(u8 value); -Result IRU_GetBitRate(u8 *out); -Result IRU_SetIRLEDState(u32 value); -Result IRU_GetIRLEDRecvState(u32 *out); - -#endif - diff --git a/Includes/ctr/OS.h b/Includes/ctr/OS.h deleted file mode 100644 index ba7d67e..0000000 --- a/Includes/ctr/OS.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef OS_H -#define OS_H - -u32 OS_ConvertVaddr2Physaddr(u32 vaddr); - -#endif - diff --git a/Includes/ctr/SHDR.h b/Includes/ctr/SHDR.h deleted file mode 100644 index e6808f8..0000000 --- a/Includes/ctr/SHDR.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef SHDR_H -#define SHDR_H - -typedef enum{ - VERTEX_SHDR=0x0, - GEOMETRY_SHDR=0x1 -}SHDR_type; - -typedef enum{ - RESULT_POSITION = 0x0, - RESULT_COLOR = 0x2, - RESULT_TEXCOORD0 = 0x3, - RESULT_TEXCOORD1 = 0x5, - RESULT_TEXCOORD2 = 0x6 -}SHDR_outType; - -typedef struct{ - u32 codeSize; - u32* codeData; - u32 opdescSize; - u32* opcdescData; -}DVLP_s; - -typedef struct{ - u32 header; - u32 data[4]; -}DVLE_constEntry_s; - -typedef struct{ - u16 type; - u16 regID; - u32 header; -}DVLE_outEntry_s; - -typedef struct{ - u32 symbolOffset; - u16 startReg; - u16 endReg; -}DVLE_uniformEntry_s; - -typedef struct{ - SHDR_type type; - u32 mainOffset, endmainOffset; - u32 constTableSize; - DVLE_constEntry_s* constTableData; - u32 outTableSize; - DVLE_outEntry_s* outTableData; - u32 uniformTableSize; - DVLE_uniformEntry_s* uniformTableData; - char* symbolTableData; -}DVLE_s; - -typedef struct{ - u32 numDVLE; - DVLP_s DVLP; - DVLE_s* DVLE; -}DVLB_s; - - -DVLB_s* SHDR_ParseSHBIN(u32* shbinData, u32 shbinSize); -void SHDR_UseProgram(DVLB_s* dvlb, u8 id); -void SHDR_FreeDVLB(DVLB_s* dvlb); -s8 SHDR_GetUniformRegister(DVLB_s* dvlb, char* name, u8 programID); - -void DVLP_SendCode(DVLP_s* dvlp); -void DVLP_SendOpDesc(DVLP_s* dvlp); - -void DVLE_SendOutmap(DVLE_s* dvle); -void DVLE_SendConstants(DVLE_s* dvle); - -#endif diff --git a/Includes/ctr/SOC.h b/Includes/ctr/SOC.h deleted file mode 100644 index e93c4f3..0000000 --- a/Includes/ctr/SOC.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef SOC_H -#define SOC_H - -extern Handle SOCU_handle; - -Result SOC_Initialize(u32 *context_addr, u32 context_size);//Example context_size: 0x48000. The specified context buffer can no longer be accessed by the process which called this function, since the userland permissions for this block are set to no-access. -Result SOC_Shutdown(); -int SOC_GetErrno(); - -#endif diff --git a/Includes/ctr/srv.h b/Includes/ctr/srv.h deleted file mode 100644 index c585ad5..0000000 --- a/Includes/ctr/srv.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef SRV_H -#define SRV_H - -Result initSrv(); -Result exitSrv(); -Result srv_RegisterClient(Handle* handleptr); -Result srv_getServiceHandle(Handle* handleptr, Handle* out, char* server); - -extern Handle srvHandle; -#endif diff --git a/Includes/ctr/svc.h b/Includes/ctr/svc.h deleted file mode 100644 index 954199d..0000000 --- a/Includes/ctr/svc.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef SVC_H -#define SVC_H - -typedef enum{ - // MEMOP_FREE = 1, - // MEMOP_RESERVE = 2, - // MEMOP_COMMIT = 3, - // MEMOP_MAP = 4, - // MEMOP_UNMAP = 5, - // MEMOP_PROTECT = 6, - // MEMOP_REGION_APP = 0x100, - // MEMOP_REGION_SYSTEM = 0x200, - // MEMOP_REGION_BASE = 0x300, - MEMOP_LINEAR = 0x1000, -}MEMORY_OPERATION; - - u32* getThreadCommandBuffer(void); - - Result svc_getDmaState(u32* state, Handle dma); - Result svc_startInterProcessDma(Handle* hdma, Handle dstProcess, void* dst, Handle srcProcess, const void* src, u32 size, u32* config); - - Result svc_writeProcessMemory(Handle debug, void const* buffer, u32 addr, u32 size); - Result svc_readProcessMemory(void* buffer, Handle debug, u32 addr, u32 size); - Result svc_debugActiveProcess(s32* handle_out, u32 pid); - Result svc_getProcessList(s32* processCount, u32* processIds, s32 processIdMaxCount); - - Result svc_controlProcessMemory(Handle hProcess, void* Addr0, void* Addr1, u32 size, u32 Type, u32 Permissions); - - Result svc_openProcess(Handle* process, u32 processId); - Result svc_addCodeSegment(u32 addr, u32 size); - Result svc_flushProcessDataCache(Handle handle, u32 addr, u32 size); - Result svc_invalidateProcessDataCache(Handle handle, u32 addr, u32 size); - Result svc_controlMemory(u32* outaddr, u32 addr0, u32 addr1, u32 size, u32 operation, u32 permissions); //(outaddr is usually the same as the input addr0) - void svc_exitProcess(void); - Result svc_createThread(Handle* thread, ThreadFunc entrypoint, u32 arg, u32* stacktop, s32 threadpriority, s32 processorid); - void svc_exitThread(); - void svc_sleepThread(s64 ns); - Result svc_createMutex(Handle* mutex, bool initialLocked); - Result svc_releaseMutex(Handle handle); - Result svc_releaseSemaphore(s32* count, Handle semaphore, s32 releaseCount); - Result svc_createEvent(Handle* event, u8 resettype); - Result svc_signalEvent(Handle handle); - Result svc_clearEvent(Handle handle); - Result svc_createMemoryBlock(Handle* memblock, u32 addr, u32 size, u32 mypermission, u32 otherpermission); - Result svc_mapMemoryBlock(Handle memblock, u32 addr, u32 mypermissions, u32 otherpermission); - Result svc_unmapMemoryBlock(Handle memblock, u32 addr); - Result svc_waitSynchronization1(Handle handle, s64 nanoseconds); - Result svc_waitSynchronizationN(s32* out, Handle* handles, s32 handlecount, bool waitAll, s64 nanoseconds); - Result svc_arbitrateAddress(Handle arbiter, u32 addr, u8 type, s32 value, s64 nanoseconds); - Result svc_closeHandle(Handle handle); - u64 svc_getSystemTick(); - Result svc_getSystemInfo(s64* out, u32 type, s32 param); - Result svc_connectToPort(volatile Handle* out, const char* portName); - Result svc_sendSyncRequest(Handle session); - Result svc_getProcessId(u32 *out, Handle handle); - Result svc_getThreadId(u32 *out, Handle handle); - Result svc_setThreadIdealProcessor(Handle handle, u32 processorid); - -#endif diff --git a/Includes/ctr/types.h b/Includes/ctr/types.h deleted file mode 100644 index 85cb47c..0000000 --- a/Includes/ctr/types.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef TYPES_H -#define TYPES_H - - #include - #include - - #define U64_MAX UINT64_MAX - - typedef uint8_t u8; - typedef uint16_t u16; - typedef uint32_t u32; - typedef uint64_t u64; - - typedef int8_t s8; - typedef int16_t s16; - typedef int32_t s32; - typedef int64_t s64; - - typedef volatile u8 vu8; - typedef volatile u16 vu16; - typedef volatile u32 vu32; - typedef volatile u64 vu64; - - typedef volatile s8 vs8; - typedef volatile s16 vs16; - typedef volatile s32 vs32; - typedef volatile s64 vs64; - - typedef u32 Handle; - typedef s32 Result; - typedef void (*ThreadFunc)(u32); - -#endif diff --git a/Includes/hid.h b/Includes/hid.h deleted file mode 100644 index 8c7248f..0000000 --- a/Includes/hid.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef MYHID_H -#define MYHID_H - -#include "types.h" - -#define BIT(x) (1U << x) -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_ZL = BIT(14), ///< ZL (New 3DS only) - KEY_ZR = BIT(15), ///< ZR (New 3DS only) - KEY_TOUCH = BIT(20), ///< Touch (Not actually provided by HID) - KEY_CSTICK_RIGHT = BIT(24), ///< C-Stick Right (New 3DS only) - KEY_CSTICK_LEFT = BIT(25), ///< C-Stick Left (New 3DS only) - KEY_CSTICK_UP = BIT(26), ///< C-Stick Up (New 3DS only) - KEY_CSTICK_DOWN = BIT(27), ///< C-Stick Down (New 3DS only) - 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 - - // Generic catch-all directions - KEY_UP = KEY_DUP | KEY_CPAD_UP, ///< D-Pad Up or Circle Pad Up - KEY_DOWN = KEY_DDOWN | KEY_CPAD_DOWN, ///< D-Pad Down or Circle Pad Down - KEY_LEFT = KEY_DLEFT | KEY_CPAD_LEFT, ///< D-Pad Left or Circle Pad Left - KEY_RIGHT = KEY_DRIGHT | KEY_CPAD_RIGHT, ///< D-Pad Right or Circle Pad Right - KEY_CPAD = KEY_CPAD_DOWN | KEY_CPAD_UP | KEY_CPAD_LEFT | KEY_CPAD_RIGHT -}; - -typedef struct s_touch -{ - u16 px; ///< Touch X - u16 py; ///< Touch Y -} t_touch; - -u32 hidKeysDown(void); -t_touch hidTouchPos(void); -void setHID(u32 keys); - -#endif \ No newline at end of file diff --git a/Includes/libntrplg/3dstypes.h b/Includes/libntrplg/3dstypes.h deleted file mode 100644 index 9f4774f..0000000 --- a/Includes/libntrplg/3dstypes.h +++ /dev/null @@ -1,191 +0,0 @@ -/*--------------------------------------------------------------------------------- - - ndstypes.h -- Common types (and a few useful macros) - - Copyright (C) 2005 - 2008 - Michael Noland (joat) - Jason Rogers (dovoto) - Dave Murphy (WinterMute) - Chris Double (doublec) - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any - damages arising from the use of this software. - - Permission is granted to anyone to use this software for any - purpose, including commercial applications, and to alter it and - redistribute it freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you - must not claim that you wrote the original software. If you use - this software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and - must not be misrepresented as being the original software. - 3. This notice may not be removed or altered from any source - distribution. - ----------------------------------------------------------------------------------*/ -/*! \file ndstypes.h - \brief Custom types employed by libnds -*/ - -/// Note by Kane49: I kept in stuff i dont use to not mess with stuff i dont understand, this provides some convenient stuff though ! - -#ifndef _3DSTYPES_INCLUDE -#define _3DSTYPES_INCLUDE -//--------------------------------------------------------------------------------- -// define libnds types in terms of stdint -#include -#include - - - -//--------------------------------------------------------------------------------- -// libgba compatible section macros -//--------------------------------------------------------------------------------- -#define ITCM_CODE __attribute__((section(".itcm"), long_call)) - -#define DTCM_DATA __attribute__((section(".dtcm"))) -#define DTCM_BSS __attribute__((section(".sbss"))) - -//! aligns a struct (and other types?) to m, making sure that the size of the struct is a multiple of m. -#define ALIGN(m) __attribute__((aligned (m))) - -//! packs a struct (and other types?) so it won't include padding bytes. -#define PACKED __attribute__ ((packed)) -#define packed_struct struct PACKED - -//--------------------------------------------------------------------------------- -// These are linked to the bin2o macro in the Makefile -//--------------------------------------------------------------------------------- -#define GETRAW(name) (name) -#define GETRAWSIZE(name) ((int)name##_size) -#define GETRAWEND(name) ((int)name##_end) - - -/*! - \brief returns a number with the nth bit set. -*/ -// #define BIT(n) (1 << (n)) - -//! 8 bit unsigned integer. -typedef uint8_t uint8; -//! 16 bit unsigned integer. -typedef uint16_t uint16; -//! 32 bit unsigned integer. -typedef uint32_t uint32; -//! 64 bit unsigned integer. -typedef uint64_t uint64; - -//! 8 bit signed integer. -typedef int8_t int8; -//! 16 bit signed integer. -typedef int16_t int16; -//! 32 bit signed integer. -typedef int32_t int32; -//! 64 bit signed integer. -typedef int64_t int64; - -//! 32 bit signed floating point number. -typedef float float32; -//! 64 bit signed floating point number. -typedef double float64; - -//! 8 bit volatile unsigned integer. -typedef volatile uint8_t vuint8; -//! 16 bit volatile unsigned integer. -typedef volatile uint16_t vuint16; -//! 32 bit volatile unsigned integer. -typedef volatile uint32_t vuint32; -//! 64 bit volatile unsigned integer. -typedef volatile uint64_t vuint64; - -//! 8 bit volatile signed integer. -typedef volatile int8_t vint8; -//! 16 bit volatile signed integer. -typedef volatile int16_t vint16; -//! 32 bit volatile signed integer. -typedef volatile int32_t vint32; -//! 64 bit volatile signed integer. -typedef volatile int64_t vint64; - -//! 32 bit volatile signed floating point number. -typedef volatile float32 vfloat32; -//! 64 bit volatile signed floating point number. -typedef volatile float64 vfloat64; - -//! 8 bit unsigned integer. -typedef uint8_t byte; - -//! 8 bit unsigned integer. -typedef uint8_t u8; -//! 16 bit unsigned integer. -typedef uint16_t u16; -//! 32 bit unsigned integer. -typedef uint32_t u32; -//! 64 bit unsigned integer. -typedef uint64_t u64; - -//! 8 bit signed integer. -typedef int8_t s8; -//! 16 bit signed integer. -typedef int16_t s16; -//! 32 bit signed integer. -typedef int32_t s32; -//! 64 bit signed integer. -typedef int64_t s64; - -//! 8 bit volatile unsigned integer. -typedef volatile u8 vu8; -//! 16 bit volatile unsigned integer. -typedef volatile u16 vu16; -//! 32 bit volatile unsigned integer. -typedef volatile u32 vu32; -//! 64 bit volatile unsigned integer. -typedef volatile u64 vu64; - -//! 8 bit volatile signed integer. -typedef volatile s8 vs8; -//! 16 bit volatile signed integer. -typedef volatile s16 vs16; -//! 32 bit volatile signed integer. -typedef volatile s32 vs32; -//! 64 bit volatile signed integer. -typedef volatile s64 vs64; - -struct RECT { - int x, y, w, h; -}; - -typedef struct RECT rect; - -struct POINT { - int x, y; -}; - -typedef struct POINT point; - -struct COLOR { - u8 r, g, b; -}; - -typedef struct COLOR color; - - -#ifndef TRUE -#define TRUE 1 -#define FALSE 0 -#endif - - -// Handy function pointer typedefs -//! a function pointer that takes no arguments and doesn't return anything. -typedef void (* VoidFn)(void); - -typedef void (* IntFn)(void); -typedef void (* fp)(void); - -//--------------------------------------------------------------------------------- -#endif -//--------------------------------------------------------------------------------- diff --git a/Includes/libntrplg/constants.h b/Includes/libntrplg/constants.h deleted file mode 100644 index 00d4b72..0000000 --- a/Includes/libntrplg/constants.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef CONSTANTS_H -#define CONSTANTS_H - -#define BUTTON_A 0x00000001 -#define BUTTON_B 0x00000002 -#define BUTTON_SE 0x00000004 -#define BUTTON_ST 0x00000008 -#define BUTTON_DR 0x00000010 -#define BUTTON_DL 0x00000020 -#define BUTTON_DU 0x00000040 -#define BUTTON_DD 0x00000080 -#define BUTTON_R 0x00000100 -#define BUTTON_L 0x00000200 -#define BUTTON_X 0x00000400 -#define BUTTON_Y 0x00000800 - -#endif \ No newline at end of file diff --git a/Includes/libntrplg/func.h b/Includes/libntrplg/func.h deleted file mode 100644 index fc06663..0000000 --- a/Includes/libntrplg/func.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef FUNC_H -#define FUNC_H - -#if IS_PLUGIN -#define INIT_SHARED_FUNC(name,id) rtGenerateJumpCode(((NS_CONFIG*)(NS_CONFIGURE_ADDR))->sharedFunc[id], (void*) name);rtFlushInstructionCache((void*) name, 8); -#else -#define INIT_SHARED_FUNC(name,id) (g_nsConfig->sharedFunc[id] = (u32) name) -#endif - - -u32 protectRemoteMemory(Handle hProcess, void* addr, u32 size); -u32 protectMemory(void* addr, u32 size); - - - -extern Handle fsUserHandle; -extern FS_archive sdmcArchive; - - - -#define MAX_PLUGIN_COUNT 32 - -typedef struct _PLGLOADER_INFO { - u32 plgCount; - u32 plgBufferPtr[MAX_PLUGIN_COUNT]; - u32 plgSize[MAX_PLUGIN_COUNT]; - u32 arm11BinStart; - u32 arm11BinSize; - u32 tid[2]; -} PLGLOADER_INFO; - -void updateScreen(); -s32 showMenu(u8* title, u32 entryCount, u8* captions[]); -int showMsg(u8* msg); -void showDbg(u8* fmt, u32 v1, u32 v2); -void kmemcpy(void* dst, void* src, u32 size) ; -u32 plgRegisterMenuEntry(u32 catalog, char* title, void* callback) ; -u32 plgGetSharedServiceHandle(char* servName, u32* handle); - -#define CURRENT_PROCESS_HANDLE 0xffff8001 - -#endif diff --git a/Includes/libntrplg/global.h b/Includes/libntrplg/global.h deleted file mode 100644 index 534f7bf..0000000 --- a/Includes/libntrplg/global.h +++ /dev/null @@ -1,27 +0,0 @@ -#define IS_PLUGIN 1 -#define USE_SOCKET 0 - -#include "main.h" -#include "memory.h" -#include "math.h" -#include "3dstypes.h" -#include "constants.h" -#include "xprintf.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "func.h" -#include "sharedfunc.h" -#include "ns/ns.h" -#include \ No newline at end of file diff --git a/Includes/libntrplg/integer.h b/Includes/libntrplg/integer.h deleted file mode 100644 index 16ad408..0000000 --- a/Includes/libntrplg/integer.h +++ /dev/null @@ -1,37 +0,0 @@ -/*-------------------------------------------*/ -/* Integer type definitions for FatFs module */ -/*-------------------------------------------*/ - -#ifndef _INTEGER -#define _INTEGER - -#ifdef _WIN32 /* FatFs development platform */ - -#include -#include - -#else /* Embedded platform */ - -/* These types must be 16-bit, 32-bit or larger integer */ -typedef int INT; -typedef unsigned int UINT; - -/* These types must be 8-bit integer */ -typedef char CHAR; -typedef unsigned char UCHAR; -typedef unsigned char BYTE; - -/* These types must be 16-bit integer */ -typedef short SHORT; -typedef unsigned short USHORT; -typedef unsigned short WORD; -typedef unsigned short WCHAR; - -/* These types must be 32-bit integer */ -typedef long LONG; -typedef unsigned long ULONG; -typedef unsigned long DWORD; - -#endif - -#endif diff --git a/Includes/libntrplg/memory.h b/Includes/libntrplg/memory.h deleted file mode 100644 index 31ed111..0000000 --- a/Includes/libntrplg/memory.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef MEMORY_H -#define MEMORY_H -#include "math.h" -#include "3dstypes.h" - - -void write_byte(u32 address, u8 byte); -void write_word(u32 address, u32 word); -void write_color(u32 address, u8 r, u8 g, u8 b); -u32 read_word(u32 address); -char nibble_to_readable(u8 nibble); -u32 byte_to_string(u8 byte, char* ret, int max_len); -u32 byte_to_bit_string(u8 byte, char* ret, int max_len); -u32 u32_to_string(u32 byte, char* ret, int max_len); -u32 u16_to_string(u16 sh, char* ret, int max_len); -u32 u16_to_bit_string(u16 sh, char* ret, int max_len); - -#endif - diff --git a/Includes/libntrplg/netdb.h b/Includes/libntrplg/netdb.h deleted file mode 100644 index e24c8ca..0000000 --- a/Includes/libntrplg/netdb.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef NETDB_H -#define NETDB_H - -struct hostent { - char * h_name; - char ** h_aliases; - int h_addrtype; - int h_length; - char ** h_addr_list; -}; - - -#ifdef __cplusplus -extern "C" { -#endif - - struct hostent * gethostbyname(const char * name); - -#ifdef __cplusplus -}; -#endif - - -#endif // NETDB_H diff --git a/Includes/libntrplg/ns/ns.h b/Includes/libntrplg/ns/ns.h deleted file mode 100644 index a659f65..0000000 --- a/Includes/libntrplg/ns/ns.h +++ /dev/null @@ -1,82 +0,0 @@ -#define NS_DEFAULT_MEM_REGION 0x300 - -#define DEBUG_BUFFER_SIZE 0x4000 -#define GLOBAL_BUFFER_SIZE 0x4000 -#define MAX_BREAKPOINT 64 - -typedef struct _RT_LOCK { - vu32 value; -} RT_LOCK; - - -#define NS_CONFIGURE_ADDR 0x06000000 - -typedef struct _RT_HOOK { - u32 model; - u32 isEnabled; - u32 funcAddr; - u32 bakCode[16]; - u32 jmpCode[16]; - u32 callCode[16]; -} RT_HOOK; - -typedef struct _NS_BREAKPOINT { - u32 type; - u32 flag; - u32 addr; - RT_HOOK hook; - u32 stubCode[32]; - u32 isEnabled; -} NS_BREAKPOINT; - - - -typedef struct _NS_CONFIG { - u32 initMode; - u32 startupCommand; - u32 hSOCU; - - u8* debugBuf; - u32 debugBufSize; - u32 debugPtr; - u32 debugReady; - - RT_LOCK debugBufferLock; - - u32 startupInfo[32]; - u32 allowDirectScreenAccess; - u32 exitFlag; - - u32 sharedFunc[100]; - -} NS_CONFIG; - - - -void nsDbgPrint (const char* fmt, ... ); - -void rtInitLock(RT_LOCK *lock) ; -void rtAcquireLock(RT_LOCK *lock) ; -void rtReleaseLock(RT_LOCK *lock) ; -u32 rtAlignToPageSize(u32 size); -u32 rtGetPageOfAddress(u32 addr) ; -u32 rtCheckRemoteMemoryRegionSafeForWrite(Handle hProcess, u32 addr, u32 size) ; -u32 rtSafeCopyMemory(u32 dst, u32 src, u32 size) ; -int rtRecvSocket(u32 sockfd, u8 *buf, int size); -int rtSendSocket(u32 sockfd, u8 *buf, int size); -u16 rtIntToPortNumber(u16 x) ; -u32 rtGetFileSize(u8* fileName); -u32 rtLoadFileToBuffer(u8* fileName, u32* pBuf, u32 bufSize) ; -u32 rtGetThreadReg(Handle hProcess, u32 tid, u32* ctx); -u32 rtFlushInstructionCache(void* ptr, u32 size); -void rtInitHook(RT_HOOK* hook, u32 funcAddr, u32 callbackAddr); -void rtEnableHook(RT_HOOK* hook); -void rtDisableHook(RT_HOOK* hook); -u32 rtGenerateJumpCode(u32 dst, u32* buf); - - -u32 nsAttachProcess(Handle hProcess, u32 remotePC, NS_CONFIG *cfg) ; - - - - diff --git a/Includes/libntrplg/sharedfunc.h b/Includes/libntrplg/sharedfunc.h deleted file mode 100644 index 57abd7a..0000000 --- a/Includes/libntrplg/sharedfunc.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef SHARED_FUNC_H -#define SHARED_FUNC_H - -#if IS_PLUGIN -#define INIT_SHARED_FUNC(name,id) rtGenerateJumpCode(((NS_CONFIG*)(NS_CONFIGURE_ADDR))->sharedFunc[id], (void*) name);rtFlushInstructionCache((void*) name, 8); -#else -#define INIT_SHARED_FUNC(name,id) (g_nsConfig->sharedFunc[id] = (u32) name) -#endif - - -void initSharedFunc(); - -/* register a entry for NTR Menu */ -u32 plgRegisterMenuEntry(u32 catalog, char* title, void* callback) ; -#define CATALOG_MAIN_MENU 1 - -/* get a shared service's handle ie. fs:USER */ -u32 plgGetSharedServiceHandle(char* servName, u32* handle); -/* request a memory block */ -u32 plgRequestMemory(u32 size); -/* not implemented */ -u32 plgRegisterCallback(u32 type, void* callback, u32 param0); - -/* xsprintf(buf, fmt, v1, v2); showMsg(buf) */ -void showDbg(u8* fmt, u32 v1, u32 v2); -/* send debug print to the NTR Debugger */ -void nsDbgPrint (const char* fmt, ... ); - -/* control the direct video access */ -u32 controlVideo(u32 cmd, u32 arg1, u32 arg2, u32 arg3); -#define CONTROLVIDEO_ACQUIREVIDEO 1 -#define CONTROLVIDEO_RELEASEVIDEO 2 -#define CONTROLVIDEO_GETFRAMEBUFFER 3 -#define CONTROLVIDEO_SETFRAMEBUFFER 4 -#define CONTROLVIDEO_UPDATESCREEN 5 - -/* get the base address of specified IO Type */ -u32 plgGetIoBase(u32 IoType); -#define IO_BASE_PAD 1 -#define IO_BASE_LCD 2 -#define IO_BASE_PDC 3 -#define IO_BASE_GSPHEAP 4 - -#endif \ No newline at end of file diff --git a/Includes/libntrplg/xprintf.h b/Includes/libntrplg/xprintf.h deleted file mode 100644 index 95d633f..0000000 --- a/Includes/libntrplg/xprintf.h +++ /dev/null @@ -1,38 +0,0 @@ -/*------------------------------------------------------------------------*/ -/* Universal string handler for user console interface (C)ChaN, 2011 */ -/*------------------------------------------------------------------------*/ - -#ifndef _STRFUNC -#define _STRFUNC - -#define _USE_XFUNC_OUT 1 /* 1: Use output functions */ -#define _CR_CRLF 0 /* 1: Convert \n ==> \r\n in the output char */ - -#define _USE_XFUNC_IN 1 /* 1: Use input function */ -#define _LINE_ECHO 1 /* 1: Echo back input chars in xgets function */ - - -#if _USE_XFUNC_OUT -#define xdev_out(func) xfunc_out = (void(*)(unsigned char))(func) -extern void (*xfunc_out)(unsigned char); -void xputc (char c); -void xputs (const char* str); -void xfputs (void (*func)(unsigned char), const char* str); -void xprintf (const char* fmt, ...); -// void xsprintf (char* buff, const char* fmt, ...); -void xfprintf (void (*func)(unsigned char), const char* fmt, ...); -void put_dump (const void* buff, unsigned long addr, int len, int width); -#define DW_CHAR sizeof(char) -#define DW_SHORT sizeof(short) -#define DW_LONG sizeof(long) -#endif - -#if _USE_XFUNC_IN -#define xdev_in(func) xfunc_in = (unsigned char(*)(void))(func) -extern unsigned char (*xfunc_in)(void); -int xgets (char* buff, int len); -int xfgets (unsigned char (*func)(void), char* buff, int len); -int xatoi (char** str, long* res); -#endif - -#endif diff --git a/Includes/main.h b/Includes/main.h deleted file mode 100644 index d728c2b..0000000 --- a/Includes/main.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef MAIN_H -#define MAIN_H - -int main(); - -#endif - diff --git a/Includes/netinet/in.h b/Includes/netinet/in.h deleted file mode 100644 index 5e3acd3..0000000 --- a/Includes/netinet/in.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef NETINET_IN_H -#define NETINET_IN_H - -#include "sys/socket.h" - -#define INADDR_ANY 0x00000000 -#define INADDR_BROADCAST 0xFFFFFFFF -#define INADDR_NONE 0xFFFFFFFF - -struct in_addr { - unsigned long s_addr; -}; - -struct sockaddr_in { - unsigned short sin_family; - unsigned short sin_port; - struct in_addr sin_addr; - unsigned char sin_zero[8]; -}; - -#ifdef __cplusplus -extern "C" { -#endif - - // actually from arpa/inet.h - but is included through netinet/in.h - unsigned long inet_addr(const char *cp); - int inet_aton(const char *cp, struct in_addr *inp); - char *inet_ntoa(struct in_addr in); - -#ifdef __cplusplus -}; -#endif - -#endif // NETINET_IN_H diff --git a/Includes/netinet/tcp.h b/Includes/netinet/tcp.h deleted file mode 100644 index e69de29..0000000 diff --git a/Includes/plugin.h b/Includes/plugin.h deleted file mode 100644 index 1db54aa..0000000 --- a/Includes/plugin.h +++ /dev/null @@ -1,158 +0,0 @@ -#ifndef PLUGIN_H -#define PLUGIN_H - -#include "types.h" -#include "configs.h" -#include "result.h" -#include "common.h" -#include "hid.h" -#include "svc.h" -#include - -#define MAX(x, y) (x > y ? x : y) - -#define ABS(x) MAX(x, -x) - -u32 plgGetIoBase(u32 IoType); -Handle getCurrentProcessHandle(void); -u32 getCurrentProcessId(void); -void onCheatItemChanged(int id); - -enum -{ - SLOW = 0, - NORMAL = 1, - FAST = 2 -}; - -typedef enum -{ - INFO = BIT(0), - WARNING = BIT(1), - DEBUG = BIT(2), - ERROR = BIT(3) -} log_type; - -typedef union u_ib -{ - u32 i; - u8 b[4]; -} t_ib; - -/* -** void init_img(void) -** Initialize the graphics components of the plugin -*/ -void init_img(void); - -/* -** cheats.c -*/ -/* void menu(void) -** Initialize the menu -*/ -//void menu(void); - -/* -** void set_default_speed(int speed) -** speed: can be SLOW, NORMAL or FAST -** Define the speed of the plugin to the specified mode -*/ -void set_default_speed(int speed); - -/* -** u32 get_tid_high(void) -** Return the high value of the current process's title id -*/ -u32 get_tid_high(void); - -/* -** u32 get_tid_lo(void) -** Return the low value of the current process's title id -*/ -u32 get_tid_low(void); - -/* -** u8 *get_title_id(void) -** Return a pointer to a string with the full title id value -*/ -u8 *get_title_id(void); - -/* -** int new_entry(char *text, void (*f)()) -** *text: a pointer to the entry's text -** *f: the function you want to execute when the entry is active -** can be NULL -** Return value: the index of the entry in the menu -** Create a new entry in the menu -** If a spoiler is open, the entry will be created in the spoiler -*/ -int new_entry(char *text, void(*f)()); - -/* -** int new_spoiler(char *text) -** *text: a pointer to the spoiler's text -** Return value: the index of the spoiler in the menu -** Create a new spoiler and define it as the default location -** for the nexts new_entry calls -*/ -int new_spoiler(char *text); - -/* -** exit_spoiler(void) -** Close a spoiler and redefine the default location of -** the next new_entry call outside of the spoiler -*/ -void exit_spoiler(void); - -/* -** int new_radio_entry(char *text, void (*f)()) -** *text: a pointer to the entry's text -** *f: the function to execute when the entry is active -** can be NULL -** Return value: the index of the entry in the menu -** Create a new menu entry but with a radio mode: -** Only one radio entry can be activated at a time -** The range of the radio mode is the spoiler range -*/ -int new_radio_entry(char *text, void(*f)()); - -/* -** int new_unselectable_entry(char *text) -** *text: a pointer to the entry's text -** Return value: the index of the entry -** Create an entry in the menu which can't be selected by the cursor -*/ -int new_unselectable_entry(char *text); - -/* -** int new_spearator(void) -** Return value: the index of the entry -** Create a separator in the menu which can't be selected -*/ -int new_separator(void); - -/* -** int new_line(void) -** Return value: the index of the entry -** Create an empty and unselectable entry in the menu -*/ -int new_line(void); - -/* -** void set_note(const char *text, int index) -** *text: a pointer to the text note -** index: the index of the entry -** Define the text note printed when pressing Y in the menu -*/ -void set_note(const char *text, int index); - -/* -** void disableCheat(int index) -** index: the index of the entry to disable -** Disable an entry -*/ -void disableCheat(int index); -void new_log(int log_type, char *text, ...); - -#endif diff --git a/Includes/result.h b/Includes/result.h deleted file mode 100644 index 23f89d3..0000000 --- a/Includes/result.h +++ /dev/null @@ -1,92 +0,0 @@ -/** - * @file result.h - * @brief 3DS result code tools - */ -#pragma once -#ifndef RESULT_H -#define RESULT_H -#include "plugin.h" - -/// Checks whether a result code indicates success. -#define R_SUCCEEDED(res) ((res)>=0) -/// Checks whether a result code indicates failure. -#define R_FAILED(res) ((res)<0) -/// Returns the level of a result code. -#define R_LEVEL(res) (((res)>>27)&0x1F) -/// Returns the summary of a result code. -#define R_SUMMARY(res) (((res)>>21)&0x3F) -/// Returns the module ID of a result code. -#define R_MODULE(res) (((res)>>10)&0xFF) -/// Returns the description of a result code. -#define R_DESCRIPTION(res) ((res)&0x3FF) - -/// Builds a result code from its constituent components. -#define MAKERESULT(level,summary,module,description) \ - ((((level)&0x1F)<<27) | (((summary)&0x3F)<<21) | (((module)&0xFF)<<10) | ((description)&0x3FF)) - -/// Result code level values. -enum -{ - // >= 0 - RL_SUCCESS = 0, - RL_INFO = 1, - - // < 0 - RL_FATAL = 0x1F, - RL_RESET = RL_FATAL - 1, - RL_REINITIALIZE = RL_FATAL - 2, - RL_USAGE = RL_FATAL - 3, - RL_PERMANENT = RL_FATAL - 4, - RL_TEMPORARY = RL_FATAL - 5, - RL_STATUS = RL_FATAL - 6, -}; - -/// Result code summary values. -enum -{ - RS_SUCCESS = 0, - RS_NOP = 1, - RS_WOULDBLOCK = 2, - RS_OUTOFRESOURCE = 3, - RS_NOTFOUND = 4, - RS_INVALIDSTATE = 5, - RS_NOTSUPPORTED = 6, - RS_INVALIDARG = 7, - RS_WRONGARG = 8, - RS_CANCELED = 9, - RS_STATUSCHANGED = 10, - RS_INTERNAL = 11, - RS_INVALIDRESVAL = 63, -}; - -/// Result code generic description values. -enum -{ - RD_SUCCESS = 0, - RD_INVALID_RESULT_VALUE = 0x3FF, - RD_TIMEOUT = RD_INVALID_RESULT_VALUE - 1, - RD_OUT_OF_RANGE = RD_INVALID_RESULT_VALUE - 2, - RD_ALREADY_EXISTS = RD_INVALID_RESULT_VALUE - 3, - RD_CANCEL_REQUESTED = RD_INVALID_RESULT_VALUE - 4, - RD_NOT_FOUND = RD_INVALID_RESULT_VALUE - 5, - RD_ALREADY_INITIALIZED = RD_INVALID_RESULT_VALUE - 6, - RD_NOT_INITIALIZED = RD_INVALID_RESULT_VALUE - 7, - RD_INVALID_HANDLE = RD_INVALID_RESULT_VALUE - 8, - RD_INVALID_POINTER = RD_INVALID_RESULT_VALUE - 9, - RD_INVALID_ADDRESS = RD_INVALID_RESULT_VALUE - 10, - RD_NOT_IMPLEMENTED = RD_INVALID_RESULT_VALUE - 11, - RD_OUT_OF_MEMORY = RD_INVALID_RESULT_VALUE - 12, - RD_MISALIGNED_SIZE = RD_INVALID_RESULT_VALUE - 13, - RD_MISALIGNED_ADDRESS = RD_INVALID_RESULT_VALUE - 14, - RD_BUSY = RD_INVALID_RESULT_VALUE - 15, - RD_NO_DATA = RD_INVALID_RESULT_VALUE - 16, - RD_INVALID_COMBINATION = RD_INVALID_RESULT_VALUE - 17, - RD_INVALID_ENUM_VALUE = RD_INVALID_RESULT_VALUE - 18, - RD_INVALID_SIZE = RD_INVALID_RESULT_VALUE - 19, - RD_ALREADY_DONE = RD_INVALID_RESULT_VALUE - 20, - RD_NOT_AUTHORIZED = RD_INVALID_RESULT_VALUE - 21, - RD_TOO_LARGE = RD_INVALID_RESULT_VALUE - 22, - RD_INVALID_SELECTION = RD_INVALID_RESULT_VALUE - 23, -}; - -#endif diff --git a/Includes/sys/socket.h b/Includes/sys/socket.h deleted file mode 100644 index 1ee3502..0000000 --- a/Includes/sys/socket.h +++ /dev/null @@ -1,119 +0,0 @@ -#ifndef SYS_SOCKET_H -#define SYS_SOCKET_H - -#include - -/* - * Level number for (get/set)sockopt() to apply to socket itself. - */ -#define SOL_SOCKET 0xfff /* options for socket level */ -# define SOL_TCP 6 /* TCP level */ - -#define PF_UNSPEC 0 -#define PF_INET 2 -#define PF_INET6 10 - -#define AF_UNSPEC PF_UNSPEC -#define AF_INET PF_INET -#define AF_INET6 PF_INET6 - -#define SOCK_STREAM 1 -#define SOCK_DGRAM 2 - -// need to sync FIO* values with commonly accepted ones sometime -#define FIONBIO 1 -#define FIONREAD 2 - -#define SOCKET_ERROR -1 - -// send()/recv()/etc flags -// at present, only MSG_PEEK is implemented though. -#define MSG_WAITALL 0x40000000 -#define MSG_TRUNC 0x20000000 -#define MSG_PEEK 0x10000000 -#define MSG_OOB 0x08000000 -#define MSG_EOR 0x04000000 -#define MSG_DONTROUTE 0x02000000 -#define MSG_CTRUNC 0x01000000 - -// shutdown() flags: -#define SHUT_RD 1 -#define SHUT_WR 2 -#define SHUT_RDWR 3 - -/* - * Option flags per-socket. - */ -#define SO_DEBUG 0x0001 /* turn on debugging info recording */ -#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ -#define SO_REUSEADDR 0x0004 /* allow local address reuse */ -#define SO_KEEPALIVE 0x0008 /* keep connections alive */ -#define SO_DONTROUTE 0x0010 /* just use interface addresses */ -#define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */ -#define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */ -#define SO_LINGER 0x0080 /* linger on close if data present */ -#define SO_OOBINLINE 0x0100 /* leave received OOB data in line */ -#define SO_REUSEPORT 0x0200 /* allow local address & port reuse */ - -#define SO_DONTLINGER (int)(~SO_LINGER) - -/* - * Additional options, not kept in so_options. - */ -#define SO_SNDBUF 0x1001 /* send buffer size */ -#define SO_RCVBUF 0x1002 /* receive buffer size */ -#define SO_SNDLOWAT 0x1003 /* send low-water mark */ -#define SO_RCVLOWAT 0x1004 /* receive low-water mark */ -#define SO_SNDTIMEO 0x1005 /* send timeout */ -#define SO_RCVTIMEO 0x1006 /* receive timeout */ -#define SO_ERROR 0x1007 /* get error status and clear */ -#define SO_TYPE 0x1008 /* get socket type */ - -struct sockaddr { - unsigned short sa_family; - char sa_data[14]; -}; - -#ifndef ntohs -#define ntohs(num) htons(num) -#define ntohl(num) htonl(num) -#endif - -#ifdef __cplusplus -extern "C" { -#endif - - int socket(int domain, int type, int protocol); - int bind(int socket, const struct sockaddr * addr, int addr_len); - int connect(int socket, const struct sockaddr * addr, int addr_len); - int send(int socket, const void * data, int sendlength, int flags); - int recv(int socket, void * data, int recvlength, int flags); - int sendto(int socket, const void * data, int sendlength, int flags, const struct sockaddr * addr, int addr_len); - int recvfrom(int socket, void * data, int recvlength, int flags, struct sockaddr * addr, int * addr_len); - int listen(int socket, int max_connections); - int accept(int socket, struct sockaddr * addr, int * addr_len); - int shutdown(int socket, int shutdown_type); - int closesocket(int socket); - - int ioctl(int socket, long cmd, void * arg); - - int setsockopt(int socket, int level, int option_name, const void * data, int data_len); - int getsockopt(int socket, int level, int option_name, void * data, int * data_len); - - int getpeername(int socket, struct sockaddr *addr, int * addr_len); - int getsockname(int socket, struct sockaddr *addr, int * addr_len); - - int gethostname(char *name, size_t len); - int sethostname(const char *name, size_t len); - - unsigned short htons(unsigned short num); - unsigned long htonl(unsigned long num); - - extern int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout); - -#ifdef __cplusplus -}; -#endif - - -#endif // SYS_SOCKET_H diff --git a/Includes/types.h b/Includes/types.h deleted file mode 100644 index ea85af2..0000000 --- a/Includes/types.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef TYPES_H -#define TYPES_H - - #include - #include - - #define U64_MAX UINT64_MAX - - #define NULL (void *)0x0 - - typedef uint8_t u8; - typedef uint16_t u16; - typedef uint32_t u32; - typedef uint64_t u64; - - typedef int8_t s8; - typedef int16_t s16; - typedef int32_t s32; - typedef int64_t s64; - - typedef volatile u8 vu8; - typedef volatile u16 vu16; - typedef volatile u32 vu32; - typedef volatile u64 vu64; - - typedef volatile s8 vs8; - typedef volatile s16 vs16; - typedef volatile s32 vs32; - typedef volatile s64 vs64; - - typedef u32 Handle; - typedef s32 Result; - typedef void (*ThreadFunc)(u32); - -#endif diff --git a/README.md b/README.md index 6f949d6..8b13789 100644 --- a/README.md +++ b/README.md @@ -1,83 +1 @@ -# Pokémon Sun & Moon Cheat Plugin -## A cheats plugin for NTR CFW -A plugin created using [@RyDog199](https://github.com/RyDog199/)'s [blankCheatMenu](https://github.com/RyDog199/blankCheatMenu) base which in turn was based off [@Nanquitas](https://github.com/Nanquitas/) work. - -To compile you'll need DevKitARM (from DevKitPro) and Python2. - -To run you'll need a 3DS, Custom Firmware, and BootNTR Selector. Start BootNTR Selector BootNTR Selector Mode-3 for o3DS) to load NTR and then start the game. Activate by pressing SELECT in game. This plugin supports both version 1.0, v1.1 and v1.2 of the games. - -### Cheats include: - -- Pokémon Spawner (Spawn a wild Pokémon by ID) - 1. Set ID or Random - 2. Set Level or Wild Level - 3. Set Form - -- EXP Modifiers - 1. Dynamic EXP multiplier adjustable from 0x to 255x - -- Time Modifiers (Changes time of day in game without affecting 3DS clock) - 1. Increase or decrease in-game time in one-hour intervals - -- Appearance Modifiers - 1. Change Gender (Open a menu to see change. WARNING: This will reset clothes and hair) - 2. Change Skin Tone (Ride a Pokémon or save and reload) - -- Battle Modifiers - 1. No Wild Encounters (Hold START to temporarily allow encounters) - 2. 100% Capture Rate - 3. Shiny Chance Modifier (Does not work on Shiny-locked Pokémon) - 4. View Opponent's Info (Hold X during battle. Press R to cycle enemies) - 5. Stat Stages +6 (Raises all in-battle stat stages to max) - 6. Use Z-Moves without Z-Crystal - 7. Infinite Z-Moves - -- Movement Modifiers - 1. Run Faster - 2. No trip animation - 3. Walk through Walls (Hold R to activate) - -- Pokémon Modifiers - 1. Rename any Pokémon at the Name Rater - 2. Instant Egg available from Nursery (Hold L and speak with NPC) - 3. Instant Hatching (Hatch eggs in one step) - -- Currency Modifiers (Adjust currency to a custom quantity in increments of 500,000) - 1. Poké Dollars - 2. Festival Coins - 3. Total Festival Coins - 4. Photo Thumbs Up - 5. Battle Points - -- Items (Adjust items to a custom quantity in increments of 50) - 1. All Poké Balls Types - 2. All Items - 3. All Medicine Items - 4. All Berries - 5. All Poké Beans - 6. All TMs - 7. All Clothes - -- QR Codes - 1. Removal of 24h wait time between Island Scans - 2. 100 QR Scan Points - -- Misc - 1. Instant message speed - 2. Access PC from Anywhere (Open Options sub-menu) - 3. Re-match trainers (Hold L and speak to Trainer) - 4. Black outline toggle ON/OFF for player and Pokémon. (Open a menu to see change) - 5. NTR Debugger toggle to allow access from NTR Debugger outside of Festival Plaza (Disables in-game NFC while active) - 6. Change Camera Zoom (START+L / START+R to enable or disable) - 7. View IV/EV on Status Screen (Press START or X respectively while on Pokémon Status screen. Switch Pokémon to see change) - -- Illegal Cheats - 1. Catch Trial Pokémon - 2. Catch Trainer's Pokémon - 3. Pokémon can learn any TM - 4. Learn any move from Move Reminder - -Previously I had removed any codes that could make illegal Pokémon that could not be traded or battled online. I have decided to add these codes in but with a large disclaimer. The Spawner code can make legal Pokémon if attention is taken to location, level, and form of spawned Pokémon. - -This is a work in progress and a learning exercise. The GateShark cheats these codes were derived from can be found in the resources folder. diff --git a/Resources/GateShark.txt b/Resources/GateShark.txt deleted file mode 100644 index 0408d97..0000000 --- a/Resources/GateShark.txt +++ /dev/null @@ -1,693 +0,0 @@ -[++EXP Multiplier++] -[1x Exp] -D3000000 00000000 -00595800 E1D002B2 -00595804 E92D4002 -00595808 E3A01001 -0059580C E0000190 -00595810 E8BD8002 -0048F1EC EB041983 - -[2x Exp] -D3000000 00000000 -00595800 E1D002B2 -00595804 E92D4002 -00595808 E3A01002 -0059580C E0000190 -00595810 E8BD8002 -0048F1EC EB041983 - -[4x Exp] -D3000000 00000000 -00595800 E1D002B2 -00595804 E92D4002 -00595808 E3A01004 -0059580C E0000190 -00595810 E8BD8002 -0048F1EC EB041983 - -[8x Exp] -D3000000 00000000 -00595800 E1D002B2 -00595804 E92D4002 -00595808 E3A01008 -0059580C E0000190 -00595810 E8BD8002 -0048F1EC EB041983 - -[16x Exp] -D3000000 00000000 -00595800 E1D002B2 -00595804 E92D4002 -00595808 E3A01010 -0059580C E0000190 -00595810 E8BD8002 -0048F1EC EB041983 - -[32x Exp] -D3000000 00000000 -00595800 E1D002B2 -00595804 E92D4002 -00595808 E3A01020 -0059580C E0000190 -00595810 E8BD8002 -0048F1EC EB041983 - -[64x Exp] -D3000000 00000000 -00595800 E1D002B2 -00595804 E92D4002 -00595808 E3A01040 -0059580C E0000190 -00595810 E8BD8002 -0048F1EC EB041983 -[--] - -[++Time Modifiers++] -[Sun Time] -D3000000 330d9238 -00000000 00015180 -D0000000 00000000 - -[Moon Time] -D3000000 330d9238 -00000000 0000A8C0 -D0000000 00000000 -[--] - -[++Appearance Modifiers++] -[Default Male] -D3000000 330D67D4 -20000001 00000000 -00000050 00808300 -00000054 00040000 -00000058 0010040C -0000005C 00001C01 -00000064 00000000 -D2000000 00000000 - -[Default Female] -D3000000 330D67D4 -20000001 00000001 -00000050 00808304 -00000054 00040000 -00000058 00100405 -0000005C 00003001 -00000064 00000000 -D2000000 00000000 - -[Skin Tone A Male] -D3000000 330D67D4 -20000050 00000000 - -[Skin Tone A Female] -D3000000 330D67D4 -20000050 00000004 - -[Skin Tone B Male] -D3000000 330D67D4 -20000050 00000008 - -[Skin Tone B Female] -D3000000 330D67D4 -20000050 0000000C - -[Skin Tone C Male] -D3000000 330D67D4 -20000050 00000010 - -[Skin Tone C Female] -D3000000 330D67D4 -20000050 00000014 - -[Skin Tone D Male] -D3000000 330D67D4 -20000050 00000018 - -[Skin Tone D Female] -D3000000 330D67D4 -20000050 0000001C -[--] - -[++Battle Modifiers++] -[100% Catch] -D3000000 00000000 -0059585C E5D00008 -00595860 E92D4003 -00595864 E59D0010 -00595868 E59F100C -0059586C E1510000 -00595870 024000F8 -00595874 058D0010 -00595878 E8BD8003 -0059587C 006D839C -0048F1E0 EB04199D - -[Wild Pokemon Shiny *] -D3000000 00000000 -DD000000 00000208 -003183EC EA00001C -D0000000 00000000 -DD000000 00000108 -003183EC 0A00001C -D0000000 00000000 -{* START+L/R = Enable/Disable} - -[Raises the Status of a Pokemon by 6 stages] -D3000000 00000000 -E0595A00 00000090 -E59F2080 E152000E -1A00001D E92D001F -E59F2074 E59400D0 -E2803004 E280401C -E4931004 E3510000 -15C121EA 15C121EB -158121EC 15C121F0 -E1530004 1AFFFFF7 -E59D002C E5900A88 -E2800A01 E5900808 -E590000C E5900008 -E2803004 E280401C -E4931004 E3510000 -15C121EA 15C121EB -158121EC 15C121F0 -E1530004 1AFFFFF7 -E8BD001F EAF41170 -006E77A4 0C0C0C0C -0029A048 EA0BEE6C - -[Z-moves without Z-Crystal *] -D3000000 00000000 -00595900 E92D4005 -00595904 E1A00006 -00595908 EA000000 -0059590C E92D4005 -00595910 E59D2050 -00595914 E59F100C -00595918 E1510002 -0059591C 01D510B4 -00595920 11A01000 -00595924 E8BD8005 -00595928 0078BA28 -00313DC0 EB0A06CE -00313E30 EB0A06B5 -0036D0EC E3A00000 -DD000000 00000200 -0036D0EC E3A00001 -D0000000 00000000 -{* Hold L while choosing FIGHT option} -[--] - -[++Movement Modifiers++] -[Run Speed Faster] -D3000000 00000000 -0039AF74 3F800000 -DD000000 00000002 -0039AF74 3FB00000 -D0000000 00000000 - -[Never Trip] -D3000000 34000000 -2019833E 00000000 -D2000000 00000000 - -[Walk through Walls *] -D3000000 00000000 -0039D140 EB01E7E7 -0039D274 EB01E79A -DD000000 00000100 -0039D140 E1A00000 -0039D274 E1A00000 -D0000000 00000000 -{* Hold R} -[--] - -[++Pokemon Modifiers++] -[Rename Any Pokemon] -D3000000 00000000 -004A84F8 E3A00001 - -[Instant Egg from Daycare *] -D3000000 00000000 -00444A6C E2800E1E -00444A70 E1D000D0 -00444A74 E12FFF1E -DD000000 00000008 -00444A6C E3A01001 -00444A70 E5C011E0 -00444A74 EA00684B -D0000000 00000000 -{* Hold START and speak with Daycare NPC} - -[Instant Egg Hatching] -D3000000 00000000 -005958C0 E59D000C -005958C4 E59F500C -005958C8 E1500005 -005958CC 03A00000 -005958D0 11A00004 -005958D4 E12FFF1E -005958D8 006CE724 -004919E0 EB040FB6 -[--] - -[++QR Codes++] -[Remove Island Scan Wait] -D3000000 00000000 -0043DAA8 E3A00000 - -[QR Scan Point 100] -D3000000 00000000 -6067206C 00000000 -B067206C 00000000 -B0000024 00000000 -B0000004 00000000 -2006960B 00000064 -D0000000 00000000 -[--] - -[++Currency Manipulator++] -[Max Money] -D3000000 30000000 -030D8FC0 0098967F - -[Current Festival Coin 9999999] -D3000000 30000000 -03124D58 0098967F - -[Total Poke Festival Coin 9999999] -D3000000 30000000 -03124D5C 0098967F - -[Total ThumbsUps 1500000] -D3000000 30000000 -03138B8C 0016E360 - -[Max BP (Battle Points)] -D3000000 00000000 -6067206C 00000000 -B067206C 00000000 -B0000024 00000000 -B0000004 00000000 -100037B0 0000270F -D0000000 00000000 -[--] - -[++Items++] -[All Items *] -DD000000 00000044 -D3000000 330D5934 -E0000000 00000068 -000ED801 000ED802 -000ED803 000ED804 -000ED805 000ED806 -000ED807 000ED808 -000ED809 000ED80A -000ED80B 000ED80C -000ED80D 000ED80E -000ED80F 000ED810 -000ED837 000ED838 -000ED839 000ED83A -000ED83B 000ED83C -000ED83D 000ED83E -000ED83F 000ED840 -D5000000 000ED844 -C0000000 0000002D -D6000000 00000068 -D4000000 00000001 -D1000000 00000000 -D3000000 330D5934 -0000011C 000ED874 -E0000120 00000050 -000ED875 000ED876 -000ED877 000ED887 -000ED888 000ED889 -000ED88A 000ED88B -000ED88C 000ED88D -000ED88E 000ED88F -000ED890 000ED891 -000ED892 000ED893 -000ED894 000ED8D5 -000ED8D6 000ED8D7 -D5000000 000ED8D9 -C0000000 0000006F -D6000000 00000170 -D4000000 00000001 -D1000000 00000000 -D3000000 330D5934 -E000032C 000001E8 -000ED9E5 000ED9E6 -000ED9E7 000ED9E8 -000ED9E9 000ED9EA -000ED9EB 000ED9EC -000ED9ED 000ED9EE -000ED9EF 000ED9F0 -000ED9F1 000ED9F2 -000ED9F3 000ED9F4 -000ED9F9 000ED9FA -000ED9FB 000ED9FC -000ED9FD 000ED9FE -000ED9FF 000EDA00 -000EDA01 000EDA02 -000EDA03 000EDA04 -000EDA05 000EDA06 -000EDA07 000EDA08 -000EDA09 000EDA0A -000EDA0B 000EDA0C -000EDA0D 000EDA0E -000EDA0F 000EDA10 -000EDA11 000EDA12 -000EDA13 000EDA16 -000EDA17 000EDA19 -000EDA1A 000EDA1B -000EDA1C 000EDA1D -000EDA1E 000EDA1F -000EDA20 000EDA21 -000EDA22 000EDA23 -000EDA24 000EDA25 -000EDA26 000EDA27 -000EDA28 000EDA29 -000EDA2A 000EDA2B -000EDA2C 000EDA2D -000EDA2E 000EDA2F -000EDA30 000EDA31 -000EDA32 000EDA33 -000EDA34 000EDA3B -000EDA3C 000EDA3D -000EDA3F 000EDA40 -000EDA41 000EDA44 -000EDA45 000EDA46 -000EDA47 000EDA48 -000EDA49 000EDA4A -000EDA4B 000EDA4C -000EDA4D 000EDA4E -000EDA50 000EDA51 -000EDA52 000EDA53 -000EDA54 000EDA55 -000EDA56 000EDA57 -000EDA58 000EDA59 -000EDA5A 000EDA5B -000EDA5C 000EDA5D -000EDA5E 000EDA5F -000EDA60 000EDA61 -000EDA62 000EDA63 -000EDA64 000EDA65 -000EDA66 000EDA67 -000EDA7F 000EDA80 -000EDA84 000EDA86 -000EDA87 000EDA88 -000EDA89 000EDA8A -D5000000 000EDA8C -C0000000 00000022 -D6000000 00000514 -D4000000 00000001 -D1000000 00000000 -D3000000 330D5934 -0000059C 000EDABB -E00005A0 000000D8 -000EDAC0 000EDAC6 -000EDAC7 000EDACB -000EDAF0 000EDAF1 -000EDAF2 000EDAF3 -000EDAF4 000EDAF5 -000EDAF6 000EDAF7 -000EDAF8 000EDAF9 -000EDAFA 000EDAFB -000EDAFC 000EDAFF -000EDB00 000EDB01 -000EDB02 000EDB1B -000EDB1C 000EDB4C -000EDB4E 000EDB51 -000EDB53 000EDB55 -000EDB56 000EDB57 -000EDB58 000EDB6F -000EDB70 000EDB71 -000EDB72 000EDB73 -000EDB74 000EDB88 -000EDB89 000EDB8A -000EDB8B 000EDB8C -000EDB8D 000EDB8E -000EDB8F 000EDB90 -000EDB91 000EDB92 -000EDB93 000EDB94 -000EDB95 000EDB96 -000EDB97 000EDB98 -D0000000 00000000 -{* Select+UP} - -[All Medicine *] -DD000000 00000044 -D3000000 330D647C -D5000000 000ED811 -C0000000 00000026 -D6000000 00000000 -D4000000 00000001 -D1000000 00000000 -D3000000 330D647C -E0000098 00000040 -000ED841 000ED842 -000ED843 000ED886 -000ED9F8 000EDA35 -000EDA36 000EDA37 -000EDA38 000EDA39 -000EDA3A 000EDA4F -000EDA85 000EDAC4 -000EDAC5 000EDB54 -D0000000 00000000 -{* Select+UP} - -[All Berries *] -DD000000 00000044 -D3000000 330D657C -D5000000 000ED895 -C0000000 00000040 -D6000000 00000000 -D4000000 00000001 -D1000000 00000000 -D3000000 330D657C -00000100 000EDAAE -00000104 000EDAAF -00000108 000EDAB0 -D0000000 00000000 -{* Select+UP} - -[All PokeBeans x255] -D3000000 30000000 -C0000000 0000000F -23115490 00000063 -DC000000 00000001 -D0000000 00000000 - -[Receive All TM *] -DD000000 00000044 -D3000000 330D62CC -D5000000 00000548 -C0000000 0000005C -D6000000 00000000 -D4000000 00000001 -D1000000 00000000 -D3000000 330D62CC -E0000170 00000038 -0000066A 0000066B -0000066C 000006B2 -000006B3 000006B4 -000006B5 000006B6 -000005A4 000005A5 -000005A6 000005A7 -000005A8 000005A9 -000001A8 000006E1 -D0000000 00000000 -{* Select+UP} - -[All Clothes Male *] -DD000000 00000044 -D3000000 33116620 -D5000000 00000001 -C0000000 0000003A -D8000000 00000000 -D1000000 00000000 -D5000000 00000000 -C0000000 00000087 -D8000000 00000000 -D1000000 00000000 -D5000000 00000001 -C0000000 00000014 -D8000000 00000000 -D1000000 00000000 -D5000000 00000000 -C0000000 00000020 -D8000000 00000000 -D1000000 00000000 -D5000000 00000001 -C0000000 00000100 -D8000000 00000000 -D1000000 00000000 -D5000000 00000000 -C0000000 0000008F -D8000000 00000000 -D1000000 00000000 -D5000000 00000001 -C0000000 00000069 -D8000000 00000000 -D1000000 00000000 -D5000000 00000000 -C0000000 000000C7 -D8000000 00000000 -D1000000 00000000 -D5000000 00000001 -C0000000 00000025 -D8000000 00000000 -D1000000 00000000 -D5000000 00000000 -C0000000 00000079 -D8000000 00000000 -D1000000 00000000 -D5000000 00000001 -C0000000 0000005F -D8000000 00000000 -D1000000 00000000 -D5000000 00000000 -C0000000 00000066 -D8000000 00000000 -D1000000 00000000 -D5000000 00000001 -C0000000 0000006D -D8000000 00000000 -D1000000 00000000 -D5000000 00000000 -C0000000 00000044 -D8000000 00000000 -D1000000 00000000 -D3000000 33116620 -000000F8 03010101 -0000028C 03010101 -000003B4 01010103 -00000450 01030000 -00000514 03000000 -D0000000 00000000 -{* SELECT+UP} - -[All Clothes Female *] -DD000000 00000044 -D3000000 33116620 -D5000000 00000001 -C0000000 0000005E -D8000000 00000000 -D1000000 00000000 -D5000000 00000000 -C0000000 00000020 -D8000000 00000000 -D1000000 00000000 -D5000000 00000001 -C0000000 00000023 -D8000000 00000000 -D1000000 00000000 -D5000000 00000000 -C0000000 00000020 -D8000000 00000000 -D1000000 00000000 -D5000000 00000001 -C0000000 00000014 -D8000000 00000000 -D1000000 00000000 -D5000000 00000000 -C0000000 00000020 -D8000000 00000000 -D1000000 00000000 -D5000000 00000001 -C0000000 0000018A -D8000000 00000000 -D1000000 00000000 -D5000000 00000000 -C0000000 00000005 -D8000000 00000000 -D1000000 00000000 -D5000000 00000001 -C0000000 000000F9 -D8000000 00000000 -D1000000 00000000 -D5000000 00000000 -C0000000 00000037 -D8000000 00000000 -D1000000 00000000 -D5000000 00000001 -C0000000 0000007E -D8000000 00000000 -D1000000 00000000 -D5000000 00000000 -C0000000 00000020 -D8000000 00000000 -D1000000 00000000 -D5000000 00000001 -C0000000 000000A7 -D8000000 00000000 -D1000000 00000000 -D5000000 00000000 -C0000000 0000001E -D8000000 00000000 -D1000000 00000000 -D5000000 00000001 -C0000000 00000091 -D8000000 00000000 -D1000000 00000000 -D5000000 00000000 -C0000000 00000020 -D8000000 00000000 -D1000000 00000000 -D3000000 33116620 -00000100 01010103 -00000288 01010103 -000003B4 01010103 -00000450 01030000 -00000514 03000000 -D0000000 00000000 -{* SELECT+UP} -[--] - -[++Misc++] -[Instant Text Speed] -D3000000 00000000 -003BF26C E3A05003 -003BE9C8 E3A04003 - -[Access PC from Anywhere *] -D3000000 00000000 -E0595978 00000088 -E92D400E E59F1074 -E5912000 E3A03000 -E5813000 E3A03C13 -E2833093 E1520003 -03A04000 11A04000 -E8BD800E E350000E -EAF77D09 E92D400F -E24DD010 E3A00000 -E58D0000 E58D0004 -E58D0008 E58D000C -E1A03000 E1A02000 -E3A01C13 E2811093 -E59F0018 E5801000 -E59F0014 E5900000 -EBF7D9CE E3A00002 -E28DD010 E8BD800F -00636000 0067206C -0037D560 EB086104 -00373C48 EB088755 -DD000000 00000008 -005959A8 1AF77D09 -D0000000 00000000 -{* Hold START while opening option menu} - -[No Outlines] -0041B748 E320F000 -D2000000 00000000 - -[Rematch Trainers *] -D3000000 00000000 -0049D200 E5911004 -0049D204 E5900044 -DD000000 00000200 -0049D200 E3A00000 -0049D204 E12FFF1E -D0000000 00000000 -{* Hold L & talk to Trainers} -[--] diff --git a/Resources/big2little_endian.py b/Resources/big2little_endian.py deleted file mode 100755 index 7b9ef9f..0000000 --- a/Resources/big2little_endian.py +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/python - -# Big endian code block assigned as string. Credits to @Nanquitas. -print("Enter the codes:") - -lines = [] -while True: - line = raw_input() - if line: - lines.append(line) - else: - break -code = '\n'.join(lines) - - -# Strip out the spaces and new lines -code = code.replace(" ","").replace("\n","") - -# Initiaing loop variables -big_start = 0 -big_end = 8 - -output ="" -size = 0 -loop = 0 - -# Loop through the string 8 characters at a time and convert to little endian -for loop in range(0,(len(code) / 8)): - - bytes = code[big_start:big_end:1] - decoded_bytes = bytes.decode('hex') - swap = decoded_bytes[::-1] - encoded_swap = swap.encode('hex').upper(); - big_start += 8 - big_end += 8 - - # Initializes and resets formatting loop - little_start = 0 - little_end = 2 - - # Loops through little endian bytes and formats them '0x00, ' - for i in range(0,4): - if (size % 8 == 0): - output += " " - output += "0x{}, ".format(encoded_swap[little_start:little_end:1]) - - little_start += 2 - little_end += 2 - size += 1 - if (loop % 2 != 0): - output += "\n" - -# Print result minus last comma -print("\n\n") -out = "static const u8 buffer[0x%X] = {\n" % size -out += output[:-3] -out += "\n};\n" -print out - -# file = open("output.txt", "w") -# file.write(out) -# file.close() diff --git a/Resources/cheats_logo.png b/Resources/cheats_logo.png deleted file mode 100644 index 1c8c5c9..0000000 Binary files a/Resources/cheats_logo.png and /dev/null differ diff --git a/Resources/credit_logo.png b/Resources/credit_logo.png deleted file mode 100644 index 1c8c5c9..0000000 Binary files a/Resources/credit_logo.png and /dev/null differ diff --git a/Resources/hotkeys_logo.png b/Resources/hotkeys_logo.png deleted file mode 100644 index 1c8c5c9..0000000 Binary files a/Resources/hotkeys_logo.png and /dev/null differ diff --git a/Resources/libpng16.dll b/Resources/libpng16.dll deleted file mode 100644 index 5fc8c69..0000000 Binary files a/Resources/libpng16.dll and /dev/null differ diff --git a/Resources/png2c.exe b/Resources/png2c.exe deleted file mode 100644 index 3f59245..0000000 Binary files a/Resources/png2c.exe and /dev/null differ diff --git a/Resources/speed_logo.png b/Resources/speed_logo.png deleted file mode 100644 index 1c8c5c9..0000000 Binary files a/Resources/speed_logo.png and /dev/null differ diff --git a/Resources/sumo_bg.png b/Resources/sumo_bg.png deleted file mode 100644 index 997f892..0000000 Binary files a/Resources/sumo_bg.png and /dev/null differ diff --git a/Resources/sumo_header.png b/Resources/sumo_header.png deleted file mode 100644 index b47bd9e..0000000 Binary files a/Resources/sumo_header.png and /dev/null differ diff --git a/Sources/appearance_modifiers.c b/Sources/appearance_modifiers.c deleted file mode 100644 index 4409d43..0000000 --- a/Sources/appearance_modifiers.c +++ /dev/null @@ -1,175 +0,0 @@ -// Filename: appearance_modifiers.c - -#include "cheats.h" -#include "hid.h" - -/******************************** - * * - * Appearance Modifiers * - * * - ********************************/ - -// Define variables to be used -u8 matchingHair, - currentGender, - currentSkintone; - -u32 o_gender = 0x330D67D5, - o_skintone = 0x330D6824, - o_appearance = 0x330D67D4, - o_keyitems = 0x330D5FEC; - - -// Appearance menu entry -void appearanceMenu(void) { - - // Reads currently set Gender and Skin tone from memory to initialize menu with - currentGender = READU8(o_gender); - currentSkintone = READU8(o_skintone); - - // Creates spoiler and cheat entries - new_spoiler("Appearance"); - new_unselectable_entry("WARNING: Gender change"); - new_unselectable_entry("resets clothes & hair"); - new_line(); - new_entry_managed_note("Current Gender: XXXXXX", "Open a menu to see change", setGender, SETGENDER, AUTO_DISABLE); - new_entry_managed_note("Current Skin Tone: X", "Ride Pokemon to see change\nor save & reboot", setSkintone, SETSKINTONE, AUTO_DISABLE); - new_separator(); - new_entry_managed("Apply Changes", switchLooks, SWITCHLOOKS, EXECUTE_ONCE); - new_line(); - exit_spoiler(); - - // Updates the menu with stored values the first time it's loaded - updateGender(); - updateSkintone(); -} - - -// Changes current gender and skin tone. Sets clothes and hair to default with gender change. -void switchLooks(void) { - - // Runs a check to see if your selected gender is different than current - // gender and resets clothes and hair to prevent crashing. Writes just skin - // tone if gender was not changed, preserving appearance - if (currentGender == 0x00 && currentGender != READU8(o_gender)) { - fixMakeupBag(); - WRITEU8(o_appearance + 0x01, currentGender); - WRITEU32(o_appearance + 0x50, 0x00800000 + (matchingHair * 0x0100) + currentSkintone); - WRITEU32(o_appearance + 0x54, 0x00040000); - WRITEU32(o_appearance + 0x58, 0x0010040C); - WRITEU16(o_appearance + 0x5C, 0x1C01); - WRITEU8(o_appearance + 0x5E, 0x30); - } else if (currentGender == 0x01 && currentGender != READU8(o_gender)) { - fixMakeupBag(); - WRITEU8(o_appearance + 0x01, currentGender); - WRITEU32(o_appearance + 0x50, 0x00800000 + (matchingHair * 0x0100) + currentSkintone); - WRITEU32(o_appearance + 0x54, 0x00040000); - WRITEU32(o_appearance + 0x58, 0x00100405); - WRITEU16(o_appearance + 0x5C, 0x3001); - WRITEU8(o_appearance + 0x5E, 0x30); - } else { - WRITEU8(o_appearance + 0x50, currentSkintone); - } - WRITEU32(o_appearance + 0x64, 0x00000000); -} - - -// Cycles through gender choices -void setGender(void) { - - // Checks if gender is male and sets it to female or vice versa. Also - // increases or decreases skin tone value to match gender - switch(currentGender) { - case 0x00: - currentGender++; - currentSkintone += 0x04; - break; - case 0x01: - currentGender--; - currentSkintone -= 0x04; - break; - } - updateGender(); -} - - -// Updates menu with current gender -void updateGender(void) { - replace_pattern(": ******", (currentGender == 0x00) ? ": Male " : ": Female", SETGENDER); -} - - -// Cycles through skintone choices -void setSkintone(void) { - switch(currentSkintone) { - case 0x18: - currentSkintone = 0x00; - break; - case 0x1C: - currentSkintone = 0x04; - break; - default: - currentSkintone += 0x08; - } - updateSkintone(); -} - - -// Updates menu with current skintone and changes hair color to match -void updateSkintone(void) { - switch(currentSkintone) { - case 0x00: - case 0x04: - matchingHair = 0x83; - replace_pattern(": *", ": A", SETSKINTONE); - break; - case 0x08: - case 0x0C: - matchingHair = 0x04; - replace_pattern(": *", ": B", SETSKINTONE); - break; - case 0x10: - case 0x14: - matchingHair = 0x48; - replace_pattern(": *", ": C", SETSKINTONE); - break; - case 0x18: - case 0x1C: - matchingHair = 0x08; - replace_pattern(": *", ": D", SETSKINTONE); - break; - } -} - - -// Adds or removes Makeup bag based on gender -void fixMakeupBag(void) { - bool moveUp = false; - u32 offset = o_keyitems; - u32 value = READU16(offset); - int i = 0; - switch(currentGender) { - case 0: - while(value) { - if (value != 0x06C2 && !moveUp) { - i += 4; - value = READU16(offset + i); - } else { - moveUp = true; - value = READU16(offset + i + 4); - WRITEU32(offset + i, value); - i += 4; - } - } - break; - case 1: - while(value) { - if (value == 0x06C2) - break; - i += 4; - value = READU16(offset + i); - } - WRITEU32(offset + i, 0x06C2); - break; - } -} diff --git a/Sources/battle_modifiers.c b/Sources/battle_modifiers.c deleted file mode 100644 index 1ae21fe..0000000 --- a/Sources/battle_modifiers.c +++ /dev/null @@ -1,229 +0,0 @@ -// Filename: battle_modifiers.c - -#include "cheats.h" -#include "hid.h" - -/******************************** - * * - * Battle Modifiers * - * * - ********************************/ - -int shinyChanceValue = 4096; - -// Battle menu entry -void battleMenu(void) { - - // Creates spoiler and cheat entries - - new_spoiler("Battle"); - new_entry_arg_note("No Wild Encounters", "Hold START to temporarily enable encounters", noEncounters, 0, NOENCOUNTERS, TOGGLE); - new_entry("100% Capture Rate", catch100); - new_entry_managed("Shiny Chance: XXXXXX", decreaseShinyChance, DECREASESHINYCHANCE, AUTO_DISABLE); - new_entry_arg_note("View Opponent's Info", "Hold X during battle\nPress R to cycle enemies", showOpponentInfo, 0, SHOWOPPONENTINFO, TOGGLE); - new_entry_arg("Stat Stages +6", maxBattleStats, 0, MAXBATTLESTATS, TOGGLE); - new_entry_arg("Use Z-Moves w/o Z-Crystal", zMoves, 0, ZMOVES, TOGGLE); - new_entry_managed("Infinite Z-Moves", infZMoves, INFZMOVES, 0); - new_line(); - exit_spoiler(); - updateShiny(); -} - -// No wild encounters unless START is held -void noEncounters(u32 state) { - u32 offset[] = - { - 0x0807A28C, - 0x0807A5E8, - 0x0807A5E8 - }; - if (state) { - if (!checkAddress(offset[gameVer])) - return; - else { - - if (READU32(offset[gameVer]) == 0xE3A00064) { - if (is_pressed(BUTTON_ST)) - WRITEU32(offset[gameVer] - 0x8, 0xE3A09064); - else - WRITEU32(offset[gameVer] - 0x8, 0xE3A09000); - } - } - } else { - WRITEU32(offset[gameVer] - 0x8, 0xE3A09064); - } -} - - -// Shows opponent Pokémon's info during battle on bottom screen when icon is tapped -void showOpponentInfo(u32 state) { - if (state) - battleInfo = true; - else - battleInfo = false; -} - - - -// Sets all in-battle stats to +6 ranks -void maxBattleStats(u32 state) { - u32 offset[][2] = - { - {0x00595A00, 0x0029A048}, - {0x00597900, 0x0029A168}, - {0x00597900, 0x0029A168} - }; - u32 data[] = - { - 0xEA0BEE6C, - 0xEA0BF5E4, - 0xEA0BF5E4 - }; - - // Checks if cheat is enabled from menu and executes if it is - if (state) { - - static const u8 buffer1[144] = - { - 0x80, 0x20, 0x9F, 0xE5, 0x0E, 0x00, 0x52, 0xE1, - 0x1D, 0x00, 0x00, 0x1A, 0x1F, 0x00, 0x2D, 0xE9, - 0x74, 0x20, 0x9F, 0xE5, 0xD0, 0x00, 0x94, 0xE5, - 0x04, 0x30, 0x80, 0xE2, 0x1C, 0x40, 0x80, 0xE2, - 0x04, 0x10, 0x93, 0xE4, 0x00, 0x00, 0x51, 0xE3, - 0xEA, 0x21, 0xC1, 0x15, 0xEB, 0x21, 0xC1, 0x15, - 0xEC, 0x21, 0x81, 0x15, 0xF0, 0x21, 0xC1, 0x15, - 0x04, 0x00, 0x53, 0xE1, 0xF7, 0xFF, 0xFF, 0x1A, - 0x2C, 0x00, 0x9D, 0xE5, 0x88, 0x0A, 0x90, 0xE5, - 0x01, 0x0A, 0x80, 0xE2, 0x08, 0x08, 0x90, 0xE5, - 0x0C, 0x00, 0x90, 0xE5, 0x08, 0x00, 0x90, 0xE5, - 0x04, 0x30, 0x80, 0xE2, 0x1C, 0x40, 0x80, 0xE2, - 0x04, 0x10, 0x93, 0xE4, 0x00, 0x00, 0x51, 0xE3, - 0xEA, 0x21, 0xC1, 0x15, 0xEB, 0x21, 0xC1, 0x15, - 0xEC, 0x21, 0x81, 0x15, 0xF0, 0x21, 0xC1, 0x15, - 0x04, 0x00, 0x53, 0xE1, 0xF7, 0xFF, 0xFF, 0x1A, - 0x1F, 0x00, 0xBD, 0xE8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x0C, 0x0C - }; - static const u8 buffer2[][8] = - { - {0x70, 0x11, 0xF4, 0xEA, 0xA4, 0x77, 0x6E, 0x00}, - {0xF8, 0x09, 0xF4, 0xEA, 0x80, 0x96, 0x6E, 0x00}, - {0xF8, 0x09, 0xF4, 0xEA, 0x80, 0x96, 0x6E, 0x00} - }; - - memcpy((void *)(offset[gameVer][0]), buffer1, 0x90); - memcpy((void *)(offset[gameVer][0] + 0x84), buffer2[gameVer], 0x08); - WRITEU32(offset[gameVer][1], data[gameVer]); - } else { - - // Sets value back to original when cheat is disabled - WRITEU32(offset[gameVer][1], 0xE1A00000); - } -} - - -// 100% Catch rate for Pokemon -void catch100(void) { - u32 offset[] = - { - 0x0803528C, - 0x080350BC, - 0x080350BC - }; - if (!checkAddress(offset[gameVer])) - return; - if (READU32(offset[gameVer]) == 0x0A000004) - WRITEU32(offset[gameVer], 0xEA000004); -} - -// -void updateShiny(void) { - char buf[7]; - xsprintf(buf, ": 1/%-4d", shinyChanceValue); - replace_pattern(": ******", (shinyChanceValue == 4096) ? ": Normal" : buf, DECREASESHINYCHANCE); -} - - -// -void decreaseShinyChance(void) { - if (shinyChanceValue == 4096) - shinyChanceValue = 1; - else - shinyChanceValue *= 2; - updateShiny(); -} - - -// Make wild Pokemon shiny -void shinyPokemon(void) { - u32 offset[] = - { - 0x003183EC, - 0x00318AF0, - 0x00318AF0 - }; - if (shinyChanceValue == 4096) { - WRITEU32(offset[gameVer], 0x0A00001C); - return; - } else { - int r = randomNum(1, shinyChanceValue); - if (r == 1) - WRITEU32(offset[gameVer], 0xEA00001C); - else - WRITEU32(offset[gameVer], 0x0A00001C); - } -} - - -// Use Z-Moves without the need of a Z-Crystal -void zMoves(u32 state) { - u32 offset[][3] = - { - {0x00595900, 0x00313DC0, 0x0036D0EC}, - {0x00597800, 0x00314300, 0x0036DFF4}, - {0x00597800, 0x00314300, 0x0036DFF4} - }; - u32 data[][3] = - { - {0x0078BA28, 0xEB0A06CE, 0xEB0A06B5}, - {0x0078BF60, 0xEB0A0D3E, 0xEB0A0D25}, - {0x0078BF60, 0xEB0A0D3E, 0xEB0A0D25} - }; - if (state) { - static const u8 buffer[] = - { - 0x05, 0x40, 0x2D, 0xE9, 0x06, 0x00, 0xA0, 0xE1, - 0x00, 0x00, 0x00, 0xEA, 0x05, 0x40, 0x2D, 0xE9, - 0x50, 0x20, 0x9D, 0xE5, 0x0C, 0x10, 0x9F, 0xE5, - 0x02, 0x00, 0x51, 0xE1, 0xB4, 0x10, 0xD5, 0x01, - 0x00, 0x10, 0xA0, 0x11, 0x05, 0x80, 0xBD, 0xE8 - }; - - memcpy((void *)(offset[gameVer][0]), buffer, 0x28); - WRITEU32(offset[gameVer][0] + 0x28, data[gameVer][0]); - WRITEU32(offset[gameVer][1] + 0x00, data[gameVer][1]); - WRITEU32(offset[gameVer][1] + 0x70, data[gameVer][2]); - WRITEU32(offset[gameVer][2], 0xE3A00001); - - } else { - WRITEU32(offset[gameVer][1] + 0x00, 0xE1D510B4); - WRITEU32(offset[gameVer][1] + 0x70, 0xE1D510B4); - WRITEU32(offset[gameVer][2], 0xE3A00000); - } -} - - -// Inifinite Z-Moves -void infZMoves(void) { - u32 offset = 0x08031100; - - if (!checkAddress(offset + 0xDC)) - return; - else { - if (READU32(offset + 0xDC) == 0xE320F000) { - WRITEU32(offset + 0xD4, 0xE3A00000); - WRITEU32(offset + 0xD8, 0xE5C30005); - WRITEU32(offset + 0xDC, 0xE1500000); - } - } -} diff --git a/Sources/cheats.h b/Sources/cheats.h deleted file mode 100644 index b3dfece..0000000 --- a/Sources/cheats.h +++ /dev/null @@ -1,219 +0,0 @@ -#ifndef CHEATS_H -#define CHEATS_H -#include "plugin.h" - -int gameVer; -bool battleInfo; - -u32 o_islandwait, - o_qr100; - -typedef enum -{ - EXECUTE_ONCE = BIT(0), - EXECUTED = BIT(1), - TOGGLE = BIT(2), - TOGGLE_ENABLE = BIT(3), - AUTO_DISABLE = BIT(4) -} entry_flags; - -enum { - TOGGLEOUTLINES, - REMATCHTRAINERS, - PCANYWHERE, - TOGGLENFC, - INCREASEQUANTITY, - ALLPOKEBALLS, - ALLITEMS, - ALLMEDICINE, - ALLTMS, - ALLBERRIES, - ALLBEANS, - ALLCLOTHES, - SETGENDER, - SETSKINTONE, - SWITCHLOOKS, - SHINYPOKEMON, - MAXBATTLESTATS, - CATCH100, - ZMOVES, - INCREASECURRENCYQUANTITY, - MAXMONEY, - MAXBP, - MAXCOINS, - TOTALCOINS, - TOTALTHUMBS, - INCREASEEXP1, - INCREASEEXP10, - INCREASEEXP100, - WALKTHROUGHWALLS, - INSTANTEGG, - INSTANTHATCH, - ACTIVATESPAWN, - INCREASEID1, - INCREASEID10, - INCREASEID100, - RANDOMID, - INCREASELVL1, - INCREASELVL10, - PASSTHRULEVEL, - INCREASETIME, - DECREASETIME, - SETFORM, - CATCHTRAINERS, - LEARNANYTM, - RELEARNANYMOVE, - CAMERAZOOM, - NOENCOUNTERS, - VIEWIVEV, - SHOWOPPONENTINFO, - DECREASESHINYCHANCE, - INFZMOVES -} e_identifiers; - -// Helpers -void disable_entry(int identifier); -void update_status(int state, int identifier); -void new_entry_note(char *str, const char * const note, void (*function)(void)); -void new_entry_managed(char *str, void (*function)(void), int identifier, int flags); -void new_entry_managed_note(char *str, const char * const note, void (*function)(void), int identifier, int flags); -void new_entry_arg(char *name, void (*function)(u32), u32 arg, int identifier, int flags); -void new_entry_arg_note(char *name, char *note, void (*function)(u32), u32 arg, int identifier, int flags); -void new_super_unselectable_entry(char *str, void (*f)()); -void execute_all(void); -void replace_pattern(char *pattern, char *replace_str, int identifier); -void add_prefix(char *prefix, int identifier); -void add_suffix(char *suffix, int identifier); -void xsprintf(char *dst, char *fmt, ...); -bool isinArray(int val, int *arr, int size); -void memset32(void *dst, unsigned int value, unsigned int size); -void protect_region(u32 addr); -bool checkAddress(u32 address); -int randomNum(int start, int end); -bool getWifiStatus(void); - -// Offsets -void getVersion(void); - -// Pokémon Spawner -void pokemonSpawnMenu(void); -void updateSpawn(void); -void increaseID1(void); -void increaseID10(void); -void increaseID100(void); -void randomID(u32 state); -void setRandomID(void); -void increaseLVL1(void); -void increaseLVL10(void); -void passthruLevel(u32 state); -void activateSpawn(u32 state); -void generateSpawn(void); -void getForms(u32 id); -void setForm(void); - - -// EXP Multipliers -void expMenu(void); -void updateEXP(void); -void increaseEXP1(void); -void increaseEXP10(void); -void increaseEXP100(void); - - -// Time Modifiers -void timeMenu(void); -void updateTime(void); -void increaseTime(void); -void decreaseTime(void); - - -// Appearance Modifeirs -void appearanceMenu(void); -void switchLooks(void); -void setGender(void); -void updateGender(void); -void setSkintone(void); -void updateSkintone(void); -void fixMakeupBag(void); - - -// Battle Modifiers -void battleMenu(void); -void noEncounters(u32 state); -void alwaysCritical(void); -void showOpponentInfo(u32 state); -void maxBattleStats(u32 state); -void catch100(void); -void updateShiny(void); -void decreaseShinyChance(void); -void shinyPokemon(void); -void zMoves(u32 state); -void infZMoves(void); - - -// Movement Modifiers -void movementMenu(void); -void runFaster(void); -void neverTrip(void); -void walkThruWalls(void); - - -// Pokémon Modifiers -void pokemonMenu(void); -void renamePokemon(void); -void instantEgg(void); -void instantHatch(u32 state); - - -// Currency Modifiers -void currencyMenu(void); -void maxMoney(void); -void maxCoins(void); -void totalCoins(void); -void totalThumbs(void); -void maxBP(void); -void increaseCurrencyQuantity(void); -void updateCurrencyQuantity(void); - - -// Item Modifiers -void itemMenu(void); -void updateQuantity(void); -void increaseQuantity(void); -void allPokeBalls(void); -void allItems(void); -void allMedicine(void); -void allTMs(void); -void allBerries(void); -void allBeans(void); -u32 clothesFunction(u32 offset, u8 data, u16 loop_num); -void allClothes(void); - - -// QR Codes -void qrMenu(void); -void removeIslandScanWait(void); -void qrScan100(void); - - -// Misc -void miscMenu(void); -void viewIVEV(void); -void cameraZoom(void); -void instantText(void); -void pcAnywhere(u32 state); -void rematchTrainers(void); -void toggleOutlines(u32 state); -void toggleNFC(u32 state); - - -// Illegal Cheats -void illegalMenu(void); -void catchTrial(void); -void catchTrainers(void); -void learnAnyTM(u32 state); -void relearnAnyMove(u32 state); - - -void overlayInit(void); -#endif diff --git a/Sources/currency_modifiers.c b/Sources/currency_modifiers.c deleted file mode 100644 index 30ec641..0000000 --- a/Sources/currency_modifiers.c +++ /dev/null @@ -1,87 +0,0 @@ -// Filename: currency_modifiers.c - -#include "cheats.h" -#include "hid.h" - -/******************************** - * * - * Currency Modifiers * - * * - ********************************/ - -static u32 quantity = 500000; - -// Currency menu entry -void currencyMenu(void) { - new_spoiler("Currency"); - new_entry_managed("Increase Quantity +500,000", increaseCurrencyQuantity, INCREASECURRENCYQUANTITY, AUTO_DISABLE); - new_separator(); - new_entry_managed("Poke Dollars xCCCCCCC", maxMoney, MAXMONEY, EXECUTE_ONCE); - new_entry_managed("Battle Points xCCCCCCC", maxBP, MAXBP, EXECUTE_ONCE); - new_entry_managed("Festival Coins xCCCCCCC", maxCoins, MAXCOINS, EXECUTE_ONCE); - new_entry_managed("Total Festival Coins xCCCCCCC", totalCoins, TOTALCOINS, EXECUTE_ONCE); - new_entry_managed("Thumbs Up xCCCCCCC", totalThumbs, TOTALTHUMBS, EXECUTE_ONCE); - new_line(); - exit_spoiler(); - updateCurrencyQuantity(); -} - -// Increases currency quantity by 500,000 -void increaseCurrencyQuantity(void) { - switch(quantity) { - case 9999999: - quantity = 500000; - break; - case 9500000: - quantity = 9999999; - break; - default: - quantity += 500000; - } - updateCurrencyQuantity(); -} - -// Updates currency quantity on menu and limits value for Max BP and Max FC -void updateCurrencyQuantity(void) { - char buf[9]; - - xsprintf(buf, "x%-7d", quantity); - replace_pattern("x*******", buf, MAXMONEY); - replace_pattern("x*******", buf, TOTALCOINS); - replace_pattern("x*******", buf, TOTALTHUMBS); - replace_pattern("x*******", (quantity > 9999) ? "x9999 " : buf, MAXBP); - replace_pattern("x*******", (quantity > 999999) ? "x999999 " : buf, MAXCOINS); -} - - -// Set Poké Dollars -void maxMoney(void) { - WRITEU32(0x330D8FC0, quantity); -} - -// Set current Festival Coins to 999,999 -void maxCoins(void) { - WRITEU32(0x33124D58, (quantity > 999999) ? 0x000F423F : quantity); -} - - -// Set total Festival Coins and also updates spent amount to match -void totalCoins(void) { - u32 current = READU32(0x33124D58); - u32 total = quantity; - u32 spent = total - current; - WRITEU32(0x3313DCE8, spent); - WRITEU32(0x33124D5C, total); -} - - -// Set total Thumbs Up for photos -void totalThumbs(void) { - WRITEU32(0x33138B8C, quantity); -} - - -// Set Battle Points -void maxBP(void) { - WRITEU16(0x330D90D8, (quantity > 9999) ? 0x270F : quantity); -} diff --git a/Sources/exp_multipliers.c b/Sources/exp_multipliers.c deleted file mode 100644 index cd71d28..0000000 --- a/Sources/exp_multipliers.c +++ /dev/null @@ -1,120 +0,0 @@ -// Filename: exp_multipliers.c - -#include "cheats.h" -#include "hid.h" - -/******************************** - * * - * EXP Multipliers * - * * - ********************************/ - -static char currentEXP[40] = "Current EXP rate: 1x"; -u8 exp_rate = 1; - -// EXP menu entry -void expMenu(void) { - - new_spoiler("EXP Multiplier"); - new_unselectable_entry(currentEXP); - new_separator(); - new_entry_managed("Increase 1's", increaseEXP1, INCREASEEXP1, AUTO_DISABLE); - new_entry_managed("Increase 10's", increaseEXP10, INCREASEEXP10, AUTO_DISABLE); - new_entry_managed("Increase 100's", increaseEXP100, INCREASEEXP100, AUTO_DISABLE); - new_line(); - exit_spoiler(); -} - -// Reads current EXP modifier and prints it to the menu -void updateEXP(void) { - u32 offset[][2] = - { - {0x00595800, 0x0048F1EC}, - {0x00597700, 0x00490E4C}, - {0x0059782C, 0x00490E74} - }; - - u32 data[] = - { - 0xEB041983, - 0xEB041A2B, - 0xEB041A6C - }; - - static const u8 buffer[] = - { - 0xB2, 0x02, 0xD0, 0xE1, - 0x02, 0x40, 0x2D, 0xE9, - 0x01, 0x10, 0xA0, 0xE3, - 0x90, 0x01, 0x00, 0xE0, - 0x02, 0x80, 0xBD, 0xE8 - }; - memcpy((void *)(offset[gameVer][0]), buffer, 0x14); - WRITEU8(offset[gameVer][0] + 0x08, exp_rate); - WRITEU32(offset[gameVer][1], data[gameVer]); - - xsprintf(currentEXP, "Current EXP rate: %3dx", exp_rate); -} - - -// Increases EXP modifier by 1 each time it's called, updates menu and then deactivates -void increaseEXP1(void) { - - // Extracts ones place - int ones = exp_rate % 10; - exp_rate -= ones; - - // Prevent going over 255 - if (exp_rate + ones + 1 > 255) - ones = 0; - else if (ones < 9) - ones++; - else - ones = 0; - - // Adds ones place back in - exp_rate += ones; - updateEXP(); -} - - -// Increases EXP modifier by 10 each time it's called, updates menu and then deactivates -void increaseEXP10(void) { - - // Extracts tens place - int tens = (exp_rate / 10) % 10; - exp_rate -= (tens * 10); - - // Prevents going over 255 - if (exp_rate + (tens * 10) + 10 > 255) - tens = 0; - else if (tens < 9) - tens++; - else - tens = 0; - - // Adds tens place back in - exp_rate += (tens * 10); - updateEXP(); -} - - -// Increases EXP modifier by 100 each time it's called, updates menu and then deactivates -void increaseEXP100(void) { - - // Extracts hundreds place - int hundreds = (exp_rate / 100); - exp_rate -= (hundreds * 100); - - // Prevents going over 255 - if (exp_rate + (hundreds * 100) + 100 > 255) - hundreds = 0; - else if (hundreds < 2) - hundreds++; - else - hundreds = 0; - - // Adds hundreds place back in - exp_rate += (hundreds * 100); - updateEXP(); -} diff --git a/Sources/font.h b/Sources/font.h deleted file mode 100644 index 72b7456..0000000 --- a/Sources/font.h +++ /dev/null @@ -1,260 +0,0 @@ - -static unsigned char font[] = -{ - /*0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, // Char 000 (.) - 0x7E, 0x81, 0xA5, 0x81, 0x9D, 0xB9, 0x81, 0x7E, // Char 001 (.) - 0x7E, 0xFF, 0xDB, 0xFF, 0xE3, 0xC7, 0xFF, 0x7E, // Char 002 (.) - 0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, // Char 003 (.) - 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00, // Char 004 (.) - 0x38, 0x7C, 0x38, 0xFE, 0xFE, 0x10, 0x10, 0x7C, // Char 005 (.) - 0x00, 0x18, 0x3C, 0x7E, 0xFF, 0x7E, 0x18, 0x7E, // Char 006 (.) - 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00, // Char 007 (.) - 0xFF, 0xFF, 0xE7, 0xC3, 0xC3, 0xE7, 0xFF, 0xFF, // Char 008 (.) - 0x00, 0x3C, 0x66, 0x42, 0x42, 0x66, 0x3C, 0x00, // Char 009 (.) - 0xFF, 0xC3, 0x99, 0xBD, 0xBD, 0x99, 0xC3, 0xFF, // Char 010 (.) - 0x0F, 0x07, 0x0F, 0x7D, 0xCC, 0xCC, 0xCC, 0x78, // Char 011 (.) - 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18, // Char 012 (.) - 0x3F, 0x33, 0x3F, 0x30, 0x30, 0x70, 0xF0, 0xE0, // Char 013 (.) - 0x7F, 0x63, 0x7F, 0x63, 0x63, 0x67, 0xE6, 0xC0, // Char 014 (.) - 0x99, 0x5A, 0x3C, 0xE7, 0xE7, 0x3C, 0x5A, 0x99, // Char 015 (.) - 0x80, 0xE0, 0xF8, 0xFE, 0xF8, 0xE0, 0x80, 0x00, // Char 016 (.) - 0x02, 0x0E, 0x3E, 0xFE, 0x3E, 0x0E, 0x02, 0x00, // Char 017 (.) - 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x7E, 0x3C, 0x18, // Char 018 (.) - 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00, // Char 019 (.) - 0x7F, 0xDB, 0xDB, 0x7B, 0x1B, 0x1B, 0x1B, 0x00, // Char 020 (.) - 0x3F, 0x60, 0x7C, 0x66, 0x66, 0x3E, 0x06, 0xFC, // Char 021 (.) - 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x00, // Char 022 (.) - 0x18, 0x3C, 0x7E, 0x18, 0x7E, 0x3C, 0x18, 0xFF, // Char 023 (.) - 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x00, // Char 024 (.) - 0x18, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00, // Char 025 (.) - 0x00, 0x18, 0x0C, 0xFE, 0x0C, 0x18, 0x00, 0x00, // Char 026 (.) - 0x00, 0x30, 0x60, 0xFE, 0x60, 0x30, 0x00, 0x00, // Char 027 (.) - 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xFE, 0x00, 0x00, // Char 028 (.) - 0x00, 0x24, 0x66, 0xFF, 0x66, 0x24, 0x00, 0x00, // Char 029 (.) - 0x00, 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x00, 0x00, // Char 030 (.) - 0x00, 0xFF, 0xFF, 0x7E, 0x3C, 0x18, 0x00, 0x00, // Char 031 (.)*/ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Char 032 ( ) - 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x00, // Char 033 (!) - 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, // Char 034 (") - 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, // Char 035 (#) - 0x18, 0x7E, 0xC0, 0x7C, 0x06, 0xFC, 0x18, 0x00, // Char 036 ($) - 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00, // Char 037 (%) - 0x38, 0x6C, 0x38, 0x76, 0xDC, 0xCC, 0x76, 0x00, // Char 038 (&) - 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, // Char 039 (') - 0x0C, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00, // Char 040 (() - 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00, // Char 041 ()) - 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00, // Char 042 (*) - 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, // Char 043 (+) - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, // Char 044 (,) - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, // Char 045 (-) - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, // Char 046 (.) - 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00, // Char 047 (/) - 0x7C, 0xCE, 0xDE, 0xF6, 0xE6, 0xC6, 0x7C, 0x00, // Char 048 (0) - 0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, // Char 049 (1) - 0x7C, 0xC6, 0x06, 0x7C, 0xC0, 0xC0, 0xFE, 0x00, // Char 050 (2) - 0xFC, 0x06, 0x06, 0x3C, 0x06, 0x06, 0xFC, 0x00, // Char 051 (3) - 0x0C, 0xCC, 0xCC, 0xCC, 0xFE, 0x0C, 0x0C, 0x00, // Char 052 (4) - 0xFE, 0xC0, 0xFC, 0x06, 0x06, 0xC6, 0x7C, 0x00, // Char 053 (5) - 0x7C, 0xC0, 0xC0, 0xFC, 0xC6, 0xC6, 0x7C, 0x00, // Char 054 (6) - 0xFE, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x00, // Char 055 (7) - 0x7C, 0xC6, 0xC6, 0x7C, 0xC6, 0xC6, 0x7C, 0x00, // Char 056 (8) - 0x7C, 0xC6, 0xC6, 0x7E, 0x06, 0x06, 0x7C, 0x00, // Char 057 (9) - 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, // Char 058 (:) - 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, // Char 059 (;) - 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x00, // Char 060 (<) - 0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00, // Char 061 (=) - 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x00, // Char 062 (>) - 0x3C, 0x66, 0x0C, 0x18, 0x18, 0x00, 0x18, 0x00, // Char 063 (?) - 0x7C, 0xC6, 0xDE, 0xDE, 0xDE, 0xC0, 0x7E, 0x00, // Char 064 (@) - 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, // Char 065 (A) - 0xFC, 0xC6, 0xC6, 0xFC, 0xC6, 0xC6, 0xFC, 0x00, // Char 066 (B) - 0x7C, 0xC6, 0xC0, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, // Char 067 (C) - 0xF8, 0xCC, 0xC6, 0xC6, 0xC6, 0xCC, 0xF8, 0x00, // Char 068 (D) - 0xFE, 0xC0, 0xC0, 0xF8, 0xC0, 0xC0, 0xFE, 0x00, // Char 069 (E) - 0xFE, 0xC0, 0xC0, 0xF8, 0xC0, 0xC0, 0xC0, 0x00, // Char 070 (F) - 0x7C, 0xC6, 0xC0, 0xC0, 0xCE, 0xC6, 0x7C, 0x00, // Char 071 (G) - 0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, // Char 072 (H) - 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, // Char 073 (I) - 0x06, 0x06, 0x06, 0x06, 0x06, 0xC6, 0x7C, 0x00, // Char 074 (J) - 0xC6, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0xC6, 0x00, // Char 075 (K) - 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFE, 0x00, // Char 076 (L) - 0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00, // Char 077 (M) - 0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, // Char 078 (N) - 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, // Char 079 (O) - 0xFC, 0xC6, 0xC6, 0xFC, 0xC0, 0xC0, 0xC0, 0x00, // Char 080 (P) - 0x7C, 0xC6, 0xC6, 0xC6, 0xD6, 0xDE, 0x7C, 0x06, // Char 081 (Q) - 0xFC, 0xC6, 0xC6, 0xFC, 0xD8, 0xCC, 0xC6, 0x00, // Char 082 (R) - 0x7C, 0xC6, 0xC0, 0x7C, 0x06, 0xC6, 0x7C, 0x00, // Char 083 (S) - 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, // Char 084 (T) - 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0x00, // Char 085 (U) - 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x38, 0x00, // Char 086 (V) - 0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0x6C, 0x00, // Char 087 (W) - 0xC6, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0xC6, 0x00, // Char 088 (X) - 0xC6, 0xC6, 0xC6, 0x7C, 0x18, 0x30, 0xE0, 0x00, // Char 089 (Y) - 0xFE, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xFE, 0x00, // Char 090 (Z) - 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00, // Char 091 ([) - 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x02, 0x00, // Char 092 (\) - 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00, // Char 093 (]) - 0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00, // Char 094 (^) - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, // Char 095 (_) - 0x18, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, // Char 096 (`) - 0x00, 0x00, 0x7C, 0x06, 0x7E, 0xC6, 0x7E, 0x00, // Char 097 (a) - 0xC0, 0xC0, 0xC0, 0xFC, 0xC6, 0xC6, 0xFC, 0x00, // Char 098 (b) - 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC6, 0x7C, 0x00, // Char 099 (c) - 0x06, 0x06, 0x06, 0x7E, 0xC6, 0xC6, 0x7E, 0x00, // Char 100 (d) - 0x00, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0x7C, 0x00, // Char 101 (e) - 0x1C, 0x36, 0x30, 0x78, 0x30, 0x30, 0x78, 0x00, // Char 102 (f) - 0x00, 0x00, 0x7E, 0xC6, 0xC6, 0x7E, 0x06, 0xFC, // Char 103 (g) - 0xC0, 0xC0, 0xFC, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, // Char 104 (h) - 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00, // Char 105 (i) - 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0xC6, 0x7C, // Char 106 (j) - 0xC0, 0xC0, 0xCC, 0xD8, 0xF8, 0xCC, 0xC6, 0x00, // Char 107 (k) - 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, // Char 108 (l) - 0x00, 0x00, 0xCC, 0xFE, 0xFE, 0xD6, 0xD6, 0x00, // Char 109 (m) - 0x00, 0x00, 0xFC, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, // Char 110 (n) - 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, // Char 111 (o) - 0x00, 0x00, 0xFC, 0xC6, 0xC6, 0xFC, 0xC0, 0xC0, // Char 112 (p) - 0x00, 0x00, 0x7E, 0xC6, 0xC6, 0x7E, 0x06, 0x06, // Char 113 (q) - 0x00, 0x00, 0xFC, 0xC6, 0xC0, 0xC0, 0xC0, 0x00, // Char 114 (r) - 0x00, 0x00, 0x7E, 0xC0, 0x7C, 0x06, 0xFC, 0x00, // Char 115 (s) - 0x18, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x0E, 0x00, // Char 116 (t) - 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x00, // Char 117 (u) - 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0x7C, 0x38, 0x00, // Char 118 (v) - 0x00, 0x00, 0xC6, 0xC6, 0xD6, 0xFE, 0x6C, 0x00, // Char 119 (w) - 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00, // Char 120 (x) - 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0xFC, // Char 121 (y) - 0x00, 0x00, 0xFE, 0x0C, 0x38, 0x60, 0xFE, 0x00, // Char 122 (z) - 0x0E, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0E, 0x00, // Char 123 ({) - 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, // Char 124 (|) - 0x70, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x70, 0x00, // Char 125 (}) - 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Char 126 (~) - /*0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0x00, // Char 127 (.) - 0x7C, 0xC6, 0xC0, 0xC0, 0xC0, 0xD6, 0x7C, 0x30, // Char 128 (.) - 0xC6, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x00, // Char 129 (.) - 0x0E, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0x7C, 0x00, // Char 130 (.) - 0x7E, 0x81, 0x3C, 0x06, 0x7E, 0xC6, 0x7E, 0x00, // Char 131 (.) - 0x66, 0x00, 0x7C, 0x06, 0x7E, 0xC6, 0x7E, 0x00, // Char 132 (.) - 0xE0, 0x00, 0x7C, 0x06, 0x7E, 0xC6, 0x7E, 0x00, // Char 133 (.) - 0x18, 0x18, 0x7C, 0x06, 0x7E, 0xC6, 0x7E, 0x00, // Char 134 (.) - 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xD6, 0x7C, 0x30, // Char 135 (.) - 0x7E, 0x81, 0x7C, 0xC6, 0xFE, 0xC0, 0x7C, 0x00, // Char 136 (.) - 0x66, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0x7C, 0x00, // Char 137 (.) - 0xE0, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0x7C, 0x00, // Char 138 (.) - 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00, // Char 139 (.) - 0x7C, 0x82, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00, // Char 140 (.) - 0x70, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00, // Char 141 (.) - 0xC6, 0x10, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, // Char 142 (.) - 0x38, 0x38, 0x00, 0x7C, 0xC6, 0xFE, 0xC6, 0x00, // Char 143 (.) - 0x0E, 0x00, 0xFE, 0xC0, 0xF8, 0xC0, 0xFE, 0x00, // Char 144 (.) - 0x00, 0x00, 0x7F, 0x0C, 0x7F, 0xCC, 0x7F, 0x00, // Char 145 (.) - 0x3F, 0x6C, 0xCC, 0xFF, 0xCC, 0xCC, 0xCF, 0x00, // Char 146 (.) - 0x7C, 0x82, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, // Char 147 (.) - 0x66, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, // Char 148 (.) - 0xE0, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, // Char 149 (.) - 0x7C, 0x82, 0x00, 0xC6, 0xC6, 0xC6, 0x7E, 0x00, // Char 150 (.) - 0xE0, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x00, // Char 151 (.) - 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x06, 0x7C, // Char 152 (.) - 0xC6, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, // Char 153 (.) - 0xC6, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0x00, // Char 154 (.) - 0x18, 0x18, 0x7E, 0xD8, 0xD8, 0xD8, 0x7E, 0x18, // Char 155 (.) - 0x38, 0x6C, 0x60, 0xF0, 0x60, 0x66, 0xFC, 0x00, // Char 156 (.) - 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18, 0x7E, 0x18, // Char 157 (.) - 0xF8, 0xCC, 0xCC, 0xFA, 0xC6, 0xCF, 0xC6, 0xC3, // Char 158 (.) - 0x0E, 0x1B, 0x18, 0x3C, 0x18, 0x18, 0xD8, 0x70, // Char 159 (.) - 0x0E, 0x00, 0x7C, 0x06, 0x7E, 0xC6, 0x7E, 0x00, // Char 160 (.) - 0x1C, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00, // Char 161 (.) - 0x0E, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, // Char 162 (.) - 0x0E, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x00, // Char 163 (.) - 0x00, 0xFE, 0x00, 0xFC, 0xC6, 0xC6, 0xC6, 0x00, // Char 164 (.) - 0xFE, 0x00, 0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0x00, // Char 165 (.) - 0x3C, 0x6C, 0x6C, 0x3E, 0x00, 0x7E, 0x00, 0x00, // Char 166 (.) - 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x7E, 0x00, 0x00, // Char 167 (.) - 0x18, 0x00, 0x18, 0x18, 0x30, 0x66, 0x3C, 0x00, // Char 168 (.) - 0x00, 0x00, 0x00, 0xFC, 0xC0, 0xC0, 0x00, 0x00, // Char 169 (.) - 0x00, 0x00, 0x00, 0xFC, 0x0C, 0x0C, 0x00, 0x00, // Char 170 (.) - 0xC6, 0xCC, 0xD8, 0x3F, 0x63, 0xCF, 0x8C, 0x0F, // Char 171 (.) - 0xC3, 0xC6, 0xCC, 0xDB, 0x37, 0x6D, 0xCF, 0x03, // Char 172 (.) - 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, // Char 173 (.) - 0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00, // Char 174 (.) - 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00, // Char 175 (.) - 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, // Char 176 (.) - 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, // Char 177 (.) - 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, // Char 178 (.) - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, // Char 179 (.) - 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0x18, 0x18, // Char 180 (.) - 0x18, 0x18, 0xF8, 0x18, 0xF8, 0x18, 0x18, 0x18, // Char 181 (.) - 0x36, 0x36, 0x36, 0x36, 0xF6, 0x36, 0x36, 0x36, // Char 182 (.) - 0x00, 0x00, 0x00, 0x00, 0xFE, 0x36, 0x36, 0x36, // Char 183 (.) - 0x00, 0x00, 0xF8, 0x18, 0xF8, 0x18, 0x18, 0x18, // Char 184 (.) - 0x36, 0x36, 0xF6, 0x06, 0xF6, 0x36, 0x36, 0x36, // Char 185 (.) - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, // Char 186 (.) - 0x00, 0x00, 0xFE, 0x06, 0xF6, 0x36, 0x36, 0x36, // Char 187 (.) - 0x36, 0x36, 0xF6, 0x06, 0xFE, 0x00, 0x00, 0x00, // Char 188 (.) - 0x36, 0x36, 0x36, 0x36, 0xFE, 0x00, 0x00, 0x00, // Char 189 (.) - 0x18, 0x18, 0xF8, 0x18, 0xF8, 0x00, 0x00, 0x00, // Char 190 (.) - 0x00, 0x00, 0x00, 0x00, 0xF8, 0x18, 0x18, 0x18, // Char 191 (.) - 0x18, 0x18, 0x18, 0x18, 0x1F, 0x00, 0x00, 0x00, // Char 192 (.) - 0x18, 0x18, 0x18, 0x18, 0xFF, 0x00, 0x00, 0x00, // Char 193 (.) - 0x00, 0x00, 0x00, 0x00, 0xFF, 0x18, 0x18, 0x18, // Char 194 (.) - 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x18, 0x18, // Char 195 (.) - 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, // Char 196 (.) - 0x18, 0x18, 0x18, 0x18, 0xFF, 0x18, 0x18, 0x18, // Char 197 (.) - 0x18, 0x18, 0x1F, 0x18, 0x1F, 0x18, 0x18, 0x18, // Char 198 (.) - 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, // Char 199 (.) - 0x36, 0x36, 0x37, 0x30, 0x3F, 0x00, 0x00, 0x00, // Char 200 (.) - 0x00, 0x00, 0x3F, 0x30, 0x37, 0x36, 0x36, 0x36, // Char 201 (.) - 0x36, 0x36, 0xF7, 0x00, 0xFF, 0x00, 0x00, 0x00, // Char 202 (.) - 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x36, 0x36, 0x36, // Char 203 (.) - 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, // Char 204 (.) - 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, // Char 205 (.) - 0x36, 0x36, 0xF7, 0x00, 0xF7, 0x36, 0x36, 0x36, // Char 206 (.) - 0x18, 0x18, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, // Char 207 (.) - 0x36, 0x36, 0x36, 0x36, 0xFF, 0x00, 0x00, 0x00, // Char 208 (.) - 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x18, 0x18, 0x18, // Char 209 (.) - 0x00, 0x00, 0x00, 0x00, 0xFF, 0x36, 0x36, 0x36, // Char 210 (.) - 0x36, 0x36, 0x36, 0x36, 0x3F, 0x00, 0x00, 0x00, // Char 211 (.) - 0x18, 0x18, 0x1F, 0x18, 0x1F, 0x00, 0x00, 0x00, // Char 212 (.) - 0x00, 0x00, 0x1F, 0x18, 0x1F, 0x18, 0x18, 0x18, // Char 213 (.) - 0x00, 0x00, 0x00, 0x00, 0x3F, 0x36, 0x36, 0x36, // Char 214 (.) - 0x36, 0x36, 0x36, 0x36, 0xFF, 0x36, 0x36, 0x36, // Char 215 (.) - 0x18, 0x18, 0xFF, 0x18, 0xFF, 0x18, 0x18, 0x18, // Char 216 (.) - 0x18, 0x18, 0x18, 0x18, 0xF8, 0x00, 0x00, 0x00, // Char 217 (.) - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x18, 0x18, // Char 218 (.) - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // Char 219 (.) - 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, // Char 220 (.) - 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, // Char 221 (.) - 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, // Char 222 (.) - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, // Char 223 (.) - 0x00, 0x00, 0x76, 0xDC, 0xC8, 0xDC, 0x76, 0x00, // Char 224 (.) - 0x38, 0x6C, 0x6C, 0x78, 0x6C, 0x66, 0x6C, 0x60, // Char 225 (.) - 0x00, 0xFE, 0xC6, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, // Char 226 (.) - 0x00, 0x00, 0xFE, 0x6C, 0x6C, 0x6C, 0x6C, 0x00, // Char 227 (.) - 0xFE, 0x60, 0x30, 0x18, 0x30, 0x60, 0xFE, 0x00, // Char 228 (.) - 0x00, 0x00, 0x7E, 0xD8, 0xD8, 0xD8, 0x70, 0x00, // Char 229 (.) - 0x00, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0xC0, // Char 230 (.) - 0x00, 0x76, 0xDC, 0x18, 0x18, 0x18, 0x18, 0x00, // Char 231 (.) - 0x7E, 0x18, 0x3C, 0x66, 0x66, 0x3C, 0x18, 0x7E, // Char 232 (.) - 0x3C, 0x66, 0xC3, 0xFF, 0xC3, 0x66, 0x3C, 0x00, // Char 233 (.) - 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x66, 0xE7, 0x00, // Char 234 (.) - 0x0E, 0x18, 0x0C, 0x7E, 0xC6, 0xC6, 0x7C, 0x00, // Char 235 (.) - 0x00, 0x00, 0x7E, 0xDB, 0xDB, 0x7E, 0x00, 0x00, // Char 236 (.) - 0x06, 0x0C, 0x7E, 0xDB, 0xDB, 0x7E, 0x60, 0xC0, // Char 237 (.) - 0x38, 0x60, 0xC0, 0xF8, 0xC0, 0x60, 0x38, 0x00, // Char 238 (.) - 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, // Char 239 (.) - 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, // Char 240 (.) - 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x7E, 0x00, // Char 241 (.) - 0x60, 0x30, 0x18, 0x30, 0x60, 0x00, 0xFC, 0x00, // Char 242 (.) - 0x18, 0x30, 0x60, 0x30, 0x18, 0x00, 0xFC, 0x00, // Char 243 (.) - 0x0E, 0x1B, 0x1B, 0x18, 0x18, 0x18, 0x18, 0x18, // Char 244 (.) - 0x18, 0x18, 0x18, 0x18, 0x18, 0xD8, 0xD8, 0x70, // Char 245 (.) - 0x18, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x18, 0x00, // Char 246 (.) - 0x00, 0x76, 0xDC, 0x00, 0x76, 0xDC, 0x00, 0x00, // Char 247 (.) - 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00, // Char 248 (.) - 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, // Char 249 (.) - 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // Char 250 (.) - 0x0F, 0x0C, 0x0C, 0x0C, 0xEC, 0x6C, 0x3C, 0x1C, // Char 251 (.) - 0x78, 0x6C, 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, // Char 252 (.) - 0x7C, 0x0C, 0x7C, 0x60, 0x7C, 0x00, 0x00, 0x00, // Char 253 (.) - 0x00, 0x00, 0x3C, 0x3C, 0x3C, 0x3C, 0x00, 0x00, // Char 254 (.) - 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Char 255 (.)*/ -}; \ No newline at end of file diff --git a/Sources/font6x10Linux.h b/Sources/font6x10Linux.h deleted file mode 100644 index b2fa027..0000000 --- a/Sources/font6x10Linux.h +++ /dev/null @@ -1,3082 +0,0 @@ -//--------------------------------------------------------------------------------- -// Linux 6x10 font -// https://github.com/torvalds/linux/tree/master/lib/fonts -//--------------------------------------------------------------------------------- -#define FONT_WIDTH 6 -#define FONT_HEIGHT 10 -//--------------------------------------------------------------------------------- -static const unsigned char font[] = { - - /* 0 0x00 '^@' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 1 0x01 '^A' */ - 0x00, /* 00000000 */ - 0x78, /* 01111000 */ - 0x84, /* 10000100 */ - 0xCC, /* 11001100 */ - 0x84, /* 10000100 */ - 0xCC, /* 11001100 */ - 0xB4, /* 10110100 */ - 0x78, /* 01111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 2 0x02 '^B' */ - 0x00, /* 00000000 */ - 0x78, /* 01111000 */ - 0xFC, /* 11111100 */ - 0xB4, /* 10110100 */ - 0xFC, /* 11111100 */ - 0xB4, /* 10110100 */ - 0xCC, /* 11001100 */ - 0x78, /* 01111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 3 0x03 '^C' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x28, /* 00101000 */ - 0x7C, /* 01111100 */ - 0x7C, /* 01111100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 4 0x04 '^D' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x7C, /* 01111100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 5 0x05 '^E' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x38, /* 00111000 */ - 0x6C, /* 01101100 */ - 0x6C, /* 01101100 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 6 0x06 '^F' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x7C, /* 01111100 */ - 0x7C, /* 01111100 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 7 0x07 '^G' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x78, /* 01111000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 8 0x08 '^H' */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xCC, /* 11001100 */ - 0x84, /* 10000100 */ - 0xCC, /* 11001100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - - /* 9 0x09 '^I' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x48, /* 01001000 */ - 0x84, /* 10000100 */ - 0x48, /* 01001000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 10 0x0A '^J' */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xCC, /* 11001100 */ - 0xB4, /* 10110100 */ - 0x78, /* 01111000 */ - 0xB4, /* 10110100 */ - 0xCC, /* 11001100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - - /* 11 0x0B '^K' */ - 0x00, /* 00000000 */ - 0x3C, /* 00111100 */ - 0x14, /* 00010100 */ - 0x20, /* 00100000 */ - 0x78, /* 01111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 12 0x0C '^L' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 13 0x0D '^M' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x14, /* 00010100 */ - 0x14, /* 00010100 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x70, /* 01110000 */ - 0x60, /* 01100000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 14 0x0E '^N' */ - 0x00, /* 00000000 */ - 0x3C, /* 00111100 */ - 0x24, /* 00100100 */ - 0x3C, /* 00111100 */ - 0x24, /* 00100100 */ - 0x24, /* 00100100 */ - 0x6C, /* 01101100 */ - 0x6C, /* 01101100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 15 0x0F '^O' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x54, /* 01010100 */ - 0x38, /* 00111000 */ - 0x6C, /* 01101100 */ - 0x38, /* 00111000 */ - 0x54, /* 01010100 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 16 0x10 '^P' */ - 0x00, /* 00000000 */ - 0x40, /* 01000000 */ - 0x60, /* 01100000 */ - 0x70, /* 01110000 */ - 0x78, /* 01111000 */ - 0x70, /* 01110000 */ - 0x60, /* 01100000 */ - 0x40, /* 01000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 17 0x11 '^Q' */ - 0x00, /* 00000000 */ - 0x04, /* 00000100 */ - 0x0C, /* 00001100 */ - 0x1C, /* 00011100 */ - 0x3C, /* 00111100 */ - 0x1C, /* 00011100 */ - 0x0C, /* 00001100 */ - 0x04, /* 00000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 18 0x12 '^R' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x54, /* 01010100 */ - 0x10, /* 00010000 */ - 0x54, /* 01010100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 19 0x13 '^S' */ - 0x00, /* 00000000 */ - 0x48, /* 01001000 */ - 0x48, /* 01001000 */ - 0x48, /* 01001000 */ - 0x48, /* 01001000 */ - 0x48, /* 01001000 */ - 0x00, /* 00000000 */ - 0x48, /* 01001000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 20 0x14 '^T' */ - 0x3C, /* 00111100 */ - 0x54, /* 01010100 */ - 0x54, /* 01010100 */ - 0x54, /* 01010100 */ - 0x3C, /* 00111100 */ - 0x14, /* 00010100 */ - 0x14, /* 00010100 */ - 0x14, /* 00010100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 21 0x15 '^U' */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x20, /* 00100000 */ - 0x50, /* 01010000 */ - 0x48, /* 01001000 */ - 0x24, /* 00100100 */ - 0x14, /* 00010100 */ - 0x08, /* 00001000 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - - /* 22 0x16 '^V' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xF8, /* 11111000 */ - 0xF8, /* 11111000 */ - 0xF8, /* 11111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 23 0x17 '^W' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x54, /* 01010100 */ - 0x10, /* 00010000 */ - 0x54, /* 01010100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x7C, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 24 0x18 '^X' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x54, /* 01010100 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 25 0x19 '^Y' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x54, /* 01010100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 26 0x1A '^Z' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x08, /* 00001000 */ - 0x7C, /* 01111100 */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 27 0x1B '^[' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - 0x7C, /* 01111100 */ - 0x20, /* 00100000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 28 0x1C '^\' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x78, /* 01111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 29 0x1D '^]' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x48, /* 01001000 */ - 0x84, /* 10000100 */ - 0xFC, /* 11111100 */ - 0x84, /* 10000100 */ - 0x48, /* 01001000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 30 0x1E '^^' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x38, /* 00111000 */ - 0x7C, /* 01111100 */ - 0x7C, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 31 0x1F '^_' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x7C, /* 01111100 */ - 0x38, /* 00111000 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 32 0x20 ' ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 33 0x21 '!' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 34 0x22 '"' */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 35 0x23 '#' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x28, /* 00101000 */ - 0x7C, /* 01111100 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x7C, /* 01111100 */ - 0x28, /* 00101000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 36 0x24 '$' */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x54, /* 01010100 */ - 0x50, /* 01010000 */ - 0x38, /* 00111000 */ - 0x14, /* 00010100 */ - 0x54, /* 01010100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - - /* 37 0x25 '%' */ - 0x00, /* 00000000 */ - 0x64, /* 01100100 */ - 0x64, /* 01100100 */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - 0x4C, /* 01001100 */ - 0x4C, /* 01001100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 38 0x26 '&' */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x48, /* 01001000 */ - 0x50, /* 01010000 */ - 0x20, /* 00100000 */ - 0x54, /* 01010100 */ - 0x48, /* 01001000 */ - 0x34, /* 00110100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 39 0x27 ''' */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 40 0x28 '(' */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - 0x20, /* 00100000 */ - 0x20, /* 00100000 */ - 0x20, /* 00100000 */ - 0x20, /* 00100000 */ - 0x10, /* 00010000 */ - 0x08, /* 00001000 */ - 0x00, /* 00000000 */ - - /* 41 0x29 ')' */ - 0x20, /* 00100000 */ - 0x10, /* 00010000 */ - 0x08, /* 00001000 */ - 0x08, /* 00001000 */ - 0x08, /* 00001000 */ - 0x08, /* 00001000 */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - 0x00, /* 00000000 */ - - /* 42 0x2A '*' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x54, /* 01010100 */ - 0x38, /* 00111000 */ - 0x54, /* 01010100 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 43 0x2B '+' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x7C, /* 01111100 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 44 0x2C ',' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - - /* 45 0x2D '-' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 46 0x2E '.' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 47 0x2F '/' */ - 0x04, /* 00000100 */ - 0x04, /* 00000100 */ - 0x08, /* 00001000 */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - 0x20, /* 00100000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - - /* 48 0x30 '0' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x4C, /* 01001100 */ - 0x54, /* 01010100 */ - 0x64, /* 01100100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 49 0x31 '1' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x30, /* 00110000 */ - 0x50, /* 01010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x7C, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 50 0x32 '2' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x04, /* 00000100 */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - 0x7C, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 51 0x33 '3' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x04, /* 00000100 */ - 0x18, /* 00011000 */ - 0x04, /* 00000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 52 0x34 '4' */ - 0x00, /* 00000000 */ - 0x08, /* 00001000 */ - 0x18, /* 00011000 */ - 0x28, /* 00101000 */ - 0x48, /* 01001000 */ - 0x7C, /* 01111100 */ - 0x08, /* 00001000 */ - 0x08, /* 00001000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 53 0x35 '5' */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x40, /* 01000000 */ - 0x78, /* 01111000 */ - 0x04, /* 00000100 */ - 0x04, /* 00000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 54 0x36 '6' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x20, /* 00100000 */ - 0x40, /* 01000000 */ - 0x78, /* 01111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 55 0x37 '7' */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x04, /* 00000100 */ - 0x04, /* 00000100 */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 56 0x38 '8' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 57 0x39 '9' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x3C, /* 00111100 */ - 0x04, /* 00000100 */ - 0x08, /* 00001000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 58 0x3A ':' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 59 0x3B ';' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - - /* 60 0x3C '<' */ - 0x00, /* 00000000 */ - 0x04, /* 00000100 */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - 0x10, /* 00010000 */ - 0x08, /* 00001000 */ - 0x04, /* 00000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 61 0x3D '=' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 62 0x3E '>' */ - 0x00, /* 00000000 */ - 0x20, /* 00100000 */ - 0x10, /* 00010000 */ - 0x08, /* 00001000 */ - 0x04, /* 00000100 */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 63 0x3F '?' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x04, /* 00000100 */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 64 0x40 '@' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x5C, /* 01011100 */ - 0x54, /* 01010100 */ - 0x5C, /* 01011100 */ - 0x40, /* 01000000 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 65 0x41 'A' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x28, /* 00101000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x7C, /* 01111100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 66 0x42 'B' */ - 0x00, /* 00000000 */ - 0x78, /* 01111000 */ - 0x24, /* 00100100 */ - 0x24, /* 00100100 */ - 0x38, /* 00111000 */ - 0x24, /* 00100100 */ - 0x24, /* 00100100 */ - 0x78, /* 01111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 67 0x43 'C' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 68 0x44 'D' */ - 0x00, /* 00000000 */ - 0x78, /* 01111000 */ - 0x24, /* 00100100 */ - 0x24, /* 00100100 */ - 0x24, /* 00100100 */ - 0x24, /* 00100100 */ - 0x24, /* 00100100 */ - 0x78, /* 01111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 69 0x45 'E' */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x78, /* 01111000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x7C, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 70 0x46 'F' */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x78, /* 01111000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 71 0x47 'G' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x40, /* 01000000 */ - 0x5C, /* 01011100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 72 0x48 'H' */ - 0x00, /* 00000000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x7C, /* 01111100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 73 0x49 'I' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 74 0x4A 'J' */ - 0x00, /* 00000000 */ - 0x1C, /* 00011100 */ - 0x08, /* 00001000 */ - 0x08, /* 00001000 */ - 0x08, /* 00001000 */ - 0x48, /* 01001000 */ - 0x48, /* 01001000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 75 0x4B 'K' */ - 0x00, /* 00000000 */ - 0x44, /* 01000100 */ - 0x48, /* 01001000 */ - 0x50, /* 01010000 */ - 0x60, /* 01100000 */ - 0x50, /* 01010000 */ - 0x48, /* 01001000 */ - 0x44, /* 01000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 76 0x4C 'L' */ - 0x00, /* 00000000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x7C, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 77 0x4D 'M' */ - 0x00, /* 00000000 */ - 0x44, /* 01000100 */ - 0x6C, /* 01101100 */ - 0x54, /* 01010100 */ - 0x54, /* 01010100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 78 0x4E 'N' */ - 0x00, /* 00000000 */ - 0x44, /* 01000100 */ - 0x64, /* 01100100 */ - 0x54, /* 01010100 */ - 0x4C, /* 01001100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 79 0x4F 'O' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 80 0x50 'P' */ - 0x00, /* 00000000 */ - 0x78, /* 01111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x78, /* 01111000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 81 0x51 'Q' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x54, /* 01010100 */ - 0x48, /* 01001000 */ - 0x34, /* 00110100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 82 0x52 'R' */ - 0x00, /* 00000000 */ - 0x78, /* 01111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x78, /* 01111000 */ - 0x50, /* 01010000 */ - 0x48, /* 01001000 */ - 0x44, /* 01000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 83 0x53 'S' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x40, /* 01000000 */ - 0x38, /* 00111000 */ - 0x04, /* 00000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 84 0x54 'T' */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 85 0x55 'U' */ - 0x00, /* 00000000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 86 0x56 'V' */ - 0x00, /* 00000000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x28, /* 00101000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 87 0x57 'W' */ - 0x00, /* 00000000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x54, /* 01010100 */ - 0x54, /* 01010100 */ - 0x6C, /* 01101100 */ - 0x44, /* 01000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 88 0x58 'X' */ - 0x00, /* 00000000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x28, /* 00101000 */ - 0x10, /* 00010000 */ - 0x28, /* 00101000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 89 0x59 'Y' */ - 0x00, /* 00000000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x28, /* 00101000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 90 0x5A 'Z' */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x04, /* 00000100 */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - 0x40, /* 01000000 */ - 0x7C, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 91 0x5B '[' */ - 0x18, /* 00011000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 92 0x5C '\' */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x20, /* 00100000 */ - 0x20, /* 00100000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x08, /* 00001000 */ - 0x08, /* 00001000 */ - 0x04, /* 00000100 */ - 0x04, /* 00000100 */ - - /* 93 0x5D ']' */ - 0x30, /* 00110000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - - /* 94 0x5E '^' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x28, /* 00101000 */ - 0x44, /* 01000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 95 0x5F '_' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 96 0x60 '`' */ - 0x20, /* 00100000 */ - 0x10, /* 00010000 */ - 0x08, /* 00001000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 97 0x61 'a' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x04, /* 00000100 */ - 0x3C, /* 00111100 */ - 0x44, /* 01000100 */ - 0x3C, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 98 0x62 'b' */ - 0x00, /* 00000000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x58, /* 01011000 */ - 0x64, /* 01100100 */ - 0x44, /* 01000100 */ - 0x64, /* 01100100 */ - 0x58, /* 01011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 99 0x63 'c' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x40, /* 01000000 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 100 0x64 'd' */ - 0x00, /* 00000000 */ - 0x04, /* 00000100 */ - 0x04, /* 00000100 */ - 0x34, /* 00110100 */ - 0x4C, /* 01001100 */ - 0x44, /* 01000100 */ - 0x4C, /* 01001100 */ - 0x34, /* 00110100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 101 0x65 'e' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x7C, /* 01111100 */ - 0x40, /* 01000000 */ - 0x3C, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 102 0x66 'f' */ - 0x00, /* 00000000 */ - 0x0C, /* 00001100 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 103 0x67 'g' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x34, /* 00110100 */ - 0x4C, /* 01001100 */ - 0x44, /* 01000100 */ - 0x4C, /* 01001100 */ - 0x34, /* 00110100 */ - 0x04, /* 00000100 */ - 0x38, /* 00111000 */ - - /* 104 0x68 'h' */ - 0x00, /* 00000000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x78, /* 01111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 105 0x69 'i' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 106 0x6A 'j' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x60, /* 01100000 */ - - /* 107 0x6B 'k' */ - 0x00, /* 00000000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x48, /* 01001000 */ - 0x50, /* 01010000 */ - 0x70, /* 01110000 */ - 0x48, /* 01001000 */ - 0x44, /* 01000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 108 0x6C 'l' */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 109 0x6D 'm' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x68, /* 01101000 */ - 0x54, /* 01010100 */ - 0x54, /* 01010100 */ - 0x54, /* 01010100 */ - 0x54, /* 01010100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 110 0x6E 'n' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x58, /* 01011000 */ - 0x64, /* 01100100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 111 0x6F 'o' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 112 0x70 'p' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x58, /* 01011000 */ - 0x64, /* 01100100 */ - 0x44, /* 01000100 */ - 0x64, /* 01100100 */ - 0x58, /* 01011000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - - /* 113 0x71 'q' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x34, /* 00110100 */ - 0x4C, /* 01001100 */ - 0x44, /* 01000100 */ - 0x4C, /* 01001100 */ - 0x34, /* 00110100 */ - 0x04, /* 00000100 */ - 0x04, /* 00000100 */ - - /* 114 0x72 'r' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x58, /* 01011000 */ - 0x64, /* 01100100 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 115 0x73 's' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3C, /* 00111100 */ - 0x40, /* 01000000 */ - 0x38, /* 00111000 */ - 0x04, /* 00000100 */ - 0x78, /* 01111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 116 0x74 't' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x0C, /* 00001100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 117 0x75 'u' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x4C, /* 01001100 */ - 0x34, /* 00110100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 118 0x76 'v' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x28, /* 00101000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 119 0x77 'w' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x54, /* 01010100 */ - 0x54, /* 01010100 */ - 0x54, /* 01010100 */ - 0x54, /* 01010100 */ - 0x28, /* 00101000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 120 0x78 'x' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x44, /* 01000100 */ - 0x28, /* 00101000 */ - 0x10, /* 00010000 */ - 0x28, /* 00101000 */ - 0x44, /* 01000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 121 0x79 'y' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x3C, /* 00111100 */ - 0x04, /* 00000100 */ - 0x38, /* 00111000 */ - - /* 122 0x7A 'z' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - 0x7C, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 123 0x7B '{' */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x08, /* 00001000 */ - 0x00, /* 00000000 */ - - /* 124 0x7C '|' */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - - /* 125 0x7D '}' */ - 0x20, /* 00100000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - 0x00, /* 00000000 */ - - /* 126 0x7E '~' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x20, /* 00100000 */ - 0x54, /* 01010100 */ - 0x08, /* 00001000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 127 0x7F '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x28, /* 00101000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x7C, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 128 0x80 '\200' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - - /* 129 0x81 '\201' */ - 0x00, /* 00000000 */ - 0x28, /* 00101000 */ - 0x00, /* 00000000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x4C, /* 01001100 */ - 0x34, /* 00110100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 130 0x82 '\202' */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x7C, /* 01111100 */ - 0x40, /* 01000000 */ - 0x3C, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 131 0x83 '\203' */ - 0x10, /* 00010000 */ - 0x28, /* 00101000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x04, /* 00000100 */ - 0x3C, /* 00111100 */ - 0x44, /* 01000100 */ - 0x3C, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 132 0x84 '\204' */ - 0x00, /* 00000000 */ - 0x28, /* 00101000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x04, /* 00000100 */ - 0x3C, /* 00111100 */ - 0x44, /* 01000100 */ - 0x3C, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 133 0x85 '\205' */ - 0x10, /* 00010000 */ - 0x08, /* 00001000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x04, /* 00000100 */ - 0x3C, /* 00111100 */ - 0x44, /* 01000100 */ - 0x3C, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 134 0x86 '\206' */ - 0x18, /* 00011000 */ - 0x24, /* 00100100 */ - 0x18, /* 00011000 */ - 0x38, /* 00111000 */ - 0x04, /* 00000100 */ - 0x3C, /* 00111100 */ - 0x44, /* 01000100 */ - 0x3C, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 135 0x87 '\207' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x40, /* 01000000 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - - /* 136 0x88 '\210' */ - 0x10, /* 00010000 */ - 0x28, /* 00101000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x7C, /* 01111100 */ - 0x40, /* 01000000 */ - 0x3C, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 137 0x89 '\211' */ - 0x00, /* 00000000 */ - 0x28, /* 00101000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x7C, /* 01111100 */ - 0x40, /* 01000000 */ - 0x3C, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 138 0x8A '\212' */ - 0x20, /* 00100000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x7C, /* 01111100 */ - 0x40, /* 01000000 */ - 0x3C, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 139 0x8B '\213' */ - 0x00, /* 00000000 */ - 0x28, /* 00101000 */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 140 0x8C '\214' */ - 0x10, /* 00010000 */ - 0x28, /* 00101000 */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 141 0x8D '\215' */ - 0x20, /* 00100000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 142 0x8E '\216' */ - 0x44, /* 01000100 */ - 0x10, /* 00010000 */ - 0x28, /* 00101000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x7C, /* 01111100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 143 0x8F '\217' */ - 0x30, /* 00110000 */ - 0x48, /* 01001000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x7C, /* 01111100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 144 0x90 '\220' */ - 0x10, /* 00010000 */ - 0x7C, /* 01111100 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x78, /* 01111000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x7C, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 145 0x91 '\221' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x78, /* 01111000 */ - 0x14, /* 00010100 */ - 0x7C, /* 01111100 */ - 0x50, /* 01010000 */ - 0x3C, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 146 0x92 '\222' */ - 0x00, /* 00000000 */ - 0x3C, /* 00111100 */ - 0x50, /* 01010000 */ - 0x50, /* 01010000 */ - 0x78, /* 01111000 */ - 0x50, /* 01010000 */ - 0x50, /* 01010000 */ - 0x5C, /* 01011100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 147 0x93 '\223' */ - 0x10, /* 00010000 */ - 0x28, /* 00101000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 148 0x94 '\224' */ - 0x00, /* 00000000 */ - 0x28, /* 00101000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 149 0x95 '\225' */ - 0x20, /* 00100000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 150 0x96 '\226' */ - 0x10, /* 00010000 */ - 0x28, /* 00101000 */ - 0x00, /* 00000000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x4C, /* 01001100 */ - 0x34, /* 00110100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 151 0x97 '\227' */ - 0x20, /* 00100000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x4C, /* 01001100 */ - 0x34, /* 00110100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 152 0x98 '\230' */ - 0x00, /* 00000000 */ - 0x28, /* 00101000 */ - 0x00, /* 00000000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x3C, /* 00111100 */ - 0x04, /* 00000100 */ - 0x38, /* 00111000 */ - - /* 153 0x99 '\231' */ - 0x84, /* 10000100 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 154 0x9A '\232' */ - 0x88, /* 10001000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 155 0x9B '\233' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x54, /* 01010100 */ - 0x50, /* 01010000 */ - 0x54, /* 01010100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - - /* 156 0x9C '\234' */ - 0x30, /* 00110000 */ - 0x48, /* 01001000 */ - 0x40, /* 01000000 */ - 0x70, /* 01110000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x44, /* 01000100 */ - 0x78, /* 01111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 157 0x9D '\235' */ - 0x00, /* 00000000 */ - 0x44, /* 01000100 */ - 0x28, /* 00101000 */ - 0x7C, /* 01111100 */ - 0x10, /* 00010000 */ - 0x7C, /* 01111100 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 158 0x9E '\236' */ - 0x00, /* 00000000 */ - 0x70, /* 01110000 */ - 0x48, /* 01001000 */ - 0x70, /* 01110000 */ - 0x48, /* 01001000 */ - 0x5C, /* 01011100 */ - 0x48, /* 01001000 */ - 0x44, /* 01000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 159 0x9F '\237' */ - 0x00, /* 00000000 */ - 0x0C, /* 00001100 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x60, /* 01100000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 160 0xA0 '\240' */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x04, /* 00000100 */ - 0x3C, /* 00111100 */ - 0x44, /* 01000100 */ - 0x3C, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 161 0xA1 '\241' */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 162 0xA2 '\242' */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 163 0xA3 '\243' */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x4C, /* 01001100 */ - 0x34, /* 00110100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 164 0xA4 '\244' */ - 0x34, /* 00110100 */ - 0x58, /* 01011000 */ - 0x00, /* 00000000 */ - 0x58, /* 01011000 */ - 0x64, /* 01100100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 165 0xA5 '\245' */ - 0x58, /* 01011000 */ - 0x44, /* 01000100 */ - 0x64, /* 01100100 */ - 0x54, /* 01010100 */ - 0x4C, /* 01001100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 166 0xA6 '\246' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x04, /* 00000100 */ - 0x3C, /* 00111100 */ - 0x44, /* 01000100 */ - 0x3C, /* 00111100 */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 167 0xA7 '\247' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 168 0xA8 '\250' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - 0x40, /* 01000000 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 169 0xA9 '\251' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 170 0xAA '\252' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x04, /* 00000100 */ - 0x04, /* 00000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 171 0xAB '\253' */ - 0x20, /* 00100000 */ - 0x60, /* 01100000 */ - 0x24, /* 00100100 */ - 0x28, /* 00101000 */ - 0x10, /* 00010000 */ - 0x28, /* 00101000 */ - 0x44, /* 01000100 */ - 0x08, /* 00001000 */ - 0x1C, /* 00011100 */ - 0x00, /* 00000000 */ - - /* 172 0xAC '\254' */ - 0x20, /* 00100000 */ - 0x60, /* 01100000 */ - 0x24, /* 00100100 */ - 0x28, /* 00101000 */ - 0x10, /* 00010000 */ - 0x28, /* 00101000 */ - 0x58, /* 01011000 */ - 0x3C, /* 00111100 */ - 0x08, /* 00001000 */ - 0x00, /* 00000000 */ - - /* 173 0xAD '\255' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 174 0xAE '\256' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x24, /* 00100100 */ - 0x48, /* 01001000 */ - 0x90, /* 10010000 */ - 0x48, /* 01001000 */ - 0x24, /* 00100100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 175 0xAF '\257' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x90, /* 10010000 */ - 0x48, /* 01001000 */ - 0x24, /* 00100100 */ - 0x48, /* 01001000 */ - 0x90, /* 10010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 176 0xB0 '\260' */ - 0x10, /* 00010000 */ - 0x44, /* 01000100 */ - 0x10, /* 00010000 */ - 0x44, /* 01000100 */ - 0x10, /* 00010000 */ - 0x44, /* 01000100 */ - 0x10, /* 00010000 */ - 0x44, /* 01000100 */ - 0x10, /* 00010000 */ - 0x44, /* 01000100 */ - - /* 177 0xB1 '\261' */ - 0xA8, /* 10101000 */ - 0x54, /* 01010100 */ - 0xA8, /* 10101000 */ - 0x54, /* 01010100 */ - 0xA8, /* 10101000 */ - 0x54, /* 01010100 */ - 0xA8, /* 10101000 */ - 0x54, /* 01010100 */ - 0xA8, /* 10101000 */ - 0x54, /* 01010100 */ - - /* 178 0xB2 '\262' */ - 0xDC, /* 11011100 */ - 0x74, /* 01110100 */ - 0xDC, /* 11011100 */ - 0x74, /* 01110100 */ - 0xDC, /* 11011100 */ - 0x74, /* 01110100 */ - 0xDC, /* 11011100 */ - 0x74, /* 01110100 */ - 0xDC, /* 11011100 */ - 0x74, /* 01110100 */ - - /* 179 0xB3 '\263' */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - - /* 180 0xB4 '\264' */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0xF0, /* 11110000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - - /* 181 0xB5 '\265' */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0xF0, /* 11110000 */ - 0x10, /* 00010000 */ - 0xF0, /* 11110000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - - /* 182 0xB6 '\266' */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0xE8, /* 11101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - - /* 183 0xB7 '\267' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xF8, /* 11111000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - - /* 184 0xB8 '\270' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xF0, /* 11110000 */ - 0x10, /* 00010000 */ - 0xF0, /* 11110000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - - /* 185 0xB9 '\271' */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0xE8, /* 11101000 */ - 0x08, /* 00001000 */ - 0xE8, /* 11101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - - /* 186 0xBA '\272' */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - - /* 187 0xBB '\273' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xF8, /* 11111000 */ - 0x08, /* 00001000 */ - 0xE8, /* 11101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - - /* 188 0xBC '\274' */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0xE8, /* 11101000 */ - 0x08, /* 00001000 */ - 0xF8, /* 11111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 189 0xBD '\275' */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0xF8, /* 11111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 190 0xBE '\276' */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0xF0, /* 11110000 */ - 0x10, /* 00010000 */ - 0xF0, /* 11110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 191 0xBF '\277' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xF0, /* 11110000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - - /* 192 0xC0 '\300' */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x1C, /* 00011100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 193 0xC1 '\301' */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0xFC, /* 11111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 194 0xC2 '\302' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xFC, /* 11111100 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - - /* 195 0xC3 '\303' */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x1C, /* 00011100 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - - /* 196 0xC4 '\304' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xFC, /* 11111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 197 0xC5 '\305' */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0xFC, /* 11111100 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - - /* 198 0xC6 '\306' */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x1C, /* 00011100 */ - 0x10, /* 00010000 */ - 0x1C, /* 00011100 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - - /* 199 0xC7 '\307' */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x2C, /* 00101100 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - - /* 200 0xC8 '\310' */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x2C, /* 00101100 */ - 0x20, /* 00100000 */ - 0x3C, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 201 0xC9 '\311' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3C, /* 00111100 */ - 0x20, /* 00100000 */ - 0x2C, /* 00101100 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - - /* 202 0xCA '\312' */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0xEC, /* 11101100 */ - 0x00, /* 00000000 */ - 0xFC, /* 11111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 203 0xCB '\313' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xFC, /* 11111100 */ - 0x00, /* 00000000 */ - 0xEC, /* 11101100 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - - /* 204 0xCC '\314' */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x2C, /* 00101100 */ - 0x20, /* 00100000 */ - 0x2C, /* 00101100 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - - /* 205 0xCD '\315' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xFC, /* 11111100 */ - 0x00, /* 00000000 */ - 0xFC, /* 11111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 206 0xCE '\316' */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0xEC, /* 11101100 */ - 0x00, /* 00000000 */ - 0xEC, /* 11101100 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - - /* 207 0xCF '\317' */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0xFC, /* 11111100 */ - 0x00, /* 00000000 */ - 0xFC, /* 11111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 208 0xD0 '\320' */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0xFC, /* 11111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 209 0xD1 '\321' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xFC, /* 11111100 */ - 0x00, /* 00000000 */ - 0xFC, /* 11111100 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - - /* 210 0xD2 '\322' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xFC, /* 11111100 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - - /* 211 0xD3 '\323' */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x3C, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 212 0xD4 '\324' */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x1C, /* 00011100 */ - 0x10, /* 00010000 */ - 0x1C, /* 00011100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 213 0xD5 '\325' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x1C, /* 00011100 */ - 0x10, /* 00010000 */ - 0x1C, /* 00011100 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - - /* 214 0xD6 '\326' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3C, /* 00111100 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - - /* 215 0xD7 '\327' */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0xFC, /* 11111100 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - - /* 216 0xD8 '\330' */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0xFC, /* 11111100 */ - 0x10, /* 00010000 */ - 0xFC, /* 11111100 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - - /* 217 0xD9 '\331' */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0xF0, /* 11110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 218 0xDA '\332' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x1C, /* 00011100 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - - /* 219 0xDB '\333' */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - - /* 220 0xDC '\334' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - - /* 221 0xDD '\335' */ - 0xE0, /* 11100000 */ - 0xE0, /* 11100000 */ - 0xE0, /* 11100000 */ - 0xE0, /* 11100000 */ - 0xE0, /* 11100000 */ - 0xE0, /* 11100000 */ - 0xE0, /* 11100000 */ - 0xE0, /* 11100000 */ - 0xE0, /* 11100000 */ - 0xE0, /* 11100000 */ - - /* 222 0xDE '\336' */ - 0x1C, /* 00011100 */ - 0x1C, /* 00011100 */ - 0x1C, /* 00011100 */ - 0x1C, /* 00011100 */ - 0x1C, /* 00011100 */ - 0x1C, /* 00011100 */ - 0x1C, /* 00011100 */ - 0x1C, /* 00011100 */ - 0x1C, /* 00011100 */ - 0x1C, /* 00011100 */ - - /* 223 0xDF '\337' */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0xFC, /* 11111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 224 0xE0 '\340' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x34, /* 00110100 */ - 0x48, /* 01001000 */ - 0x48, /* 01001000 */ - 0x48, /* 01001000 */ - 0x34, /* 00110100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 225 0xE1 '\341' */ - 0x18, /* 00011000 */ - 0x24, /* 00100100 */ - 0x44, /* 01000100 */ - 0x48, /* 01001000 */ - 0x48, /* 01001000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x58, /* 01011000 */ - 0x40, /* 01000000 */ - 0x00, /* 00000000 */ - - /* 226 0xE2 '\342' */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 227 0xE3 '\343' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x28, /* 00101000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 228 0xE4 '\344' */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x24, /* 00100100 */ - 0x10, /* 00010000 */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x24, /* 00100100 */ - 0x7C, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 229 0xE5 '\345' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3C, /* 00111100 */ - 0x48, /* 01001000 */ - 0x48, /* 01001000 */ - 0x48, /* 01001000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 230 0xE6 '\346' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x48, /* 01001000 */ - 0x48, /* 01001000 */ - 0x48, /* 01001000 */ - 0x48, /* 01001000 */ - 0x74, /* 01110100 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - - /* 231 0xE7 '\347' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x0C, /* 00001100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 232 0xE8 '\350' */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 233 0xE9 '\351' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x7C, /* 01111100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 234 0xEA '\352' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x28, /* 00101000 */ - 0x6C, /* 01101100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 235 0xEB '\353' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x20, /* 00100000 */ - 0x18, /* 00011000 */ - 0x24, /* 00100100 */ - 0x24, /* 00100100 */ - 0x24, /* 00100100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 236 0xEC '\354' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x54, /* 01010100 */ - 0x54, /* 01010100 */ - 0x54, /* 01010100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 237 0xED '\355' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x04, /* 00000100 */ - 0x38, /* 00111000 */ - 0x54, /* 01010100 */ - 0x54, /* 01010100 */ - 0x38, /* 00111000 */ - 0x40, /* 01000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 238 0xEE '\356' */ - 0x00, /* 00000000 */ - 0x3C, /* 00111100 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x38, /* 00111000 */ - 0x40, /* 01000000 */ - 0x40, /* 01000000 */ - 0x3C, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 239 0xEF '\357' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x44, /* 01000100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 240 0xF0 '\360' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xFC, /* 11111100 */ - 0x00, /* 00000000 */ - 0xFC, /* 11111100 */ - 0x00, /* 00000000 */ - 0xFC, /* 11111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 241 0xF1 '\361' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x7C, /* 01111100 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 242 0xF2 '\362' */ - 0x00, /* 00000000 */ - 0x20, /* 00100000 */ - 0x10, /* 00010000 */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 243 0xF3 '\363' */ - 0x00, /* 00000000 */ - 0x08, /* 00001000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - 0x10, /* 00010000 */ - 0x08, /* 00001000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 244 0xF4 '\364' */ - 0x00, /* 00000000 */ - 0x0C, /* 00001100 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - - /* 245 0xF5 '\365' */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x10, /* 00010000 */ - 0x60, /* 01100000 */ - 0x00, /* 00000000 */ - - /* 246 0xF6 '\366' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x7C, /* 01111100 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 247 0xF7 '\367' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x20, /* 00100000 */ - 0x54, /* 01010100 */ - 0x08, /* 00001000 */ - 0x20, /* 00100000 */ - 0x54, /* 01010100 */ - 0x08, /* 00001000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 248 0xF8 '\370' */ - 0x30, /* 00110000 */ - 0x48, /* 01001000 */ - 0x48, /* 01001000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 249 0xF9 '\371' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 250 0xFA '\372' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 251 0xFB '\373' */ - 0x00, /* 00000000 */ - 0x04, /* 00000100 */ - 0x08, /* 00001000 */ - 0x08, /* 00001000 */ - 0x50, /* 01010000 */ - 0x50, /* 01010000 */ - 0x20, /* 00100000 */ - 0x20, /* 00100000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 252 0xFC '\374' */ - 0x60, /* 01100000 */ - 0x50, /* 01010000 */ - 0x50, /* 01010000 */ - 0x50, /* 01010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 253 0xFD '\375' */ - 0x60, /* 01100000 */ - 0x10, /* 00010000 */ - 0x20, /* 00100000 */ - 0x70, /* 01110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 254 0xFE '\376' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x38, /* 00111000 */ - 0x38, /* 00111000 */ - 0x38, /* 00111000 */ - 0x38, /* 00111000 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 255 0xFF '\377' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ -}; -//const int font_size = sizeof(font); \ No newline at end of file diff --git a/Sources/font_mini_4x6.h b/Sources/font_mini_4x6.h deleted file mode 100644 index 814b76a..0000000 --- a/Sources/font_mini_4x6.h +++ /dev/null @@ -1,2149 +0,0 @@ - -/* Hand composed "Minuscule" 4x6 font, with binary data generated using - * Perl stub. - * - * Use 'perl -x mini_4x6.c < mini_4x6.c > new_version.c' to regenerate - * binary data. - * - * Created by Kenneth Albanowski. - * No rights reserved, released to the public domain. - * - * Version 1.0 - */ - -/* - -#!/usr/bin/perl -pn - -s{((0x)?[0-9a-fA-F]+)(.*\[([\*\ ]{4})\])}{ - - ($num,$pat,$bits) = ($1,$3,$4); - - $bits =~ s/([^\s0])|(.)/ defined($1) + 0 /ge; - - $num = ord(pack("B8", $bits)); - $num |= $num >> 4; - $num = sprintf("0x%.2x", $num); - - #print "$num,$pat,$bits\n"; - - $num . $pat; -}ge; - -__END__; -*/ - -/* Note: binary data consists of one byte for each row of each character top - to bottom, character 0 to character 255, six bytes per character. Each - byte contains the same four character bits in both nybbles. - MSBit to LSBit = left to right. - */ - - -#define FONTDATAMAX 1536 - -static const unsigned char fontdata_mini_4x6[FONTDATAMAX] = { - - /*{*/ - /* Char 0: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 1: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 2: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 3: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 4: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 5: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 6: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 7: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 8: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 9: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 10: '' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 11: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 12: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 13: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 14: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 15: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 16: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 17: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 18: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 19: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 20: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 21: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 22: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 23: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 24: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 25: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 26: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 27: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 28: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 29: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 30: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 31: ' ' */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 32: ' ' */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 33: '!' */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 34: '"' */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 35: '#' */ - 0xaa, /*= [* * ] */ - 0xff, /*= [****] */ - 0xff, /*= [****] */ - 0xaa, /*= [* * ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 36: '$' */ - 0x44, /*= [ * ] */ - 0x66, /*= [ ** ] */ - 0xee, /*= [*** ] */ - 0xcc, /*= [** ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 37: '%' */ - 0xaa, /*= [* * ] */ - 0x22, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x88, /*= [* ] */ - 0xaa, /*= [* * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 38: '&' */ - 0x66, /*= [ ** ] */ - 0x99, /*= [* *] */ - 0x66, /*= [ ** ] */ - 0xaa, /*= [* * ] */ - 0xdd, /*= [** *] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 39: ''' */ - 0x22, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 40: '(' */ - 0x22, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x22, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 41: ')' */ - 0x44, /*= [ * ] */ - 0x22, /*= [ * ] */ - 0x22, /*= [ * ] */ - 0x22, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 42: '*' */ - 0x00, /*= [ ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 43: '+' */ - 0x00, /*= [ ] */ - 0x44, /*= [ * ] */ - 0xee, /*= [*** ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 44: ',' */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x44, /*= [ * ] */ - 0x88, /*= [* ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 45: '-' */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 46: '.' */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 47: '/' */ - 0x00, /*= [ ] */ - 0x22, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x88, /*= [* ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 48: '0' */ - 0x44, /*= [ * ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 49: '1' */ - 0x44, /*= [ * ] */ - 0xcc, /*= [** ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 50: '2' */ - 0xcc, /*= [** ] */ - 0x22, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x88, /*= [* ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ - /* Char 51: '3' */ - 0xee, /*= [*** ] */ - 0x22, /*= [ * ] */ - 0x66, /*= [ ** ] */ - 0x22, /*= [ * ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 52: '4' */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0xee, /*= [*** ] */ - 0x22, /*= [ * ] */ - 0x22, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 53: '5' */ - 0xee, /*= [*** ] */ - 0x88, /*= [* ] */ - 0xee, /*= [*** ] */ - 0x22, /*= [ * ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 54: '6' */ - 0xee, /*= [*** ] */ - 0x88, /*= [* ] */ - 0xee, /*= [*** ] */ - 0xaa, /*= [* * ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 55: '7' */ - 0xee, /*= [*** ] */ - 0x22, /*= [ * ] */ - 0x22, /*= [ * ] */ - 0x22, /*= [ * ] */ - 0x22, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 56: '8' */ - 0xee, /*= [*** ] */ - 0xaa, /*= [* * ] */ - 0xee, /*= [*** ] */ - 0xaa, /*= [* * ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 57: '9' */ - 0xee, /*= [*** ] */ - 0xaa, /*= [* * ] */ - 0xee, /*= [*** ] */ - 0x22, /*= [ * ] */ - 0x22, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 58: ':' */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 59: ';' */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - 0x44, /*= [ * ] */ - 0x88, /*= [* ] */ - /*}*/ - /*{*/ /* Char 60: '<' */ - 0x22, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x88, /*= [* ] */ - 0x44, /*= [ * ] */ - 0x22, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 61: '=' */ - 0x00, /*= [ ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 62: '>' */ - 0x88, /*= [* ] */ - 0x44, /*= [ * ] */ - 0x22, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x88, /*= [* ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 63: '?' */ - 0xee, /*= [*** ] */ - 0x22, /*= [ * ] */ - 0x66, /*= [ ** ] */ - 0x00, /*= [ ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 64: '@' */ - 0x44, /*= [ * ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x88, /*= [* ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 65: 'A' */ - 0x44, /*= [ * ] */ - 0xaa, /*= [* * ] */ - 0xee, /*= [*** ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 66: 'B' */ - 0xcc, /*= [** ] */ - 0xaa, /*= [* * ] */ - 0xcc, /*= [** ] */ - 0xaa, /*= [* * ] */ - 0xcc, /*= [** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 67: 'C' */ - 0x66, /*= [ ** ] */ - 0x88, /*= [* ] */ - 0x88, /*= [* ] */ - 0x88, /*= [* ] */ - 0x66, /*= [ ** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 68: 'D' */ - 0xcc, /*= [** ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0xcc, /*= [** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 69: 'E' */ - 0xee, /*= [*** ] */ - 0x88, /*= [* ] */ - 0xee, /*= [*** ] */ - 0x88, /*= [* ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 70: 'F' */ - 0xee, /*= [*** ] */ - 0x88, /*= [* ] */ - 0xee, /*= [*** ] */ - 0x88, /*= [* ] */ - 0x88, /*= [* ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 71: 'G' */ - 0x66, /*= [ ** ] */ - 0x88, /*= [* ] */ - 0xee, /*= [*** ] */ - 0xaa, /*= [* * ] */ - 0x66, /*= [ ** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 72: 'H' */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0xee, /*= [*** ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 73: 'I' */ - 0xee, /*= [*** ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 74: 'J' */ - 0x22, /*= [ * ] */ - 0x22, /*= [ * ] */ - 0x22, /*= [ * ] */ - 0xaa, /*= [* * ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 75: 'K' */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0xcc, /*= [** ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 76: 'L' */ - 0x88, /*= [* ] */ - 0x88, /*= [* ] */ - 0x88, /*= [* ] */ - 0x88, /*= [* ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 77: 'M' */ - 0xaa, /*= [* * ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 78: 'N' */ - 0xaa, /*= [* * ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xaa, /*= [* * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 79: 'O' */ - 0x44, /*= [ * ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 80: 'P' */ - 0xcc, /*= [** ] */ - 0xaa, /*= [* * ] */ - 0xcc, /*= [** ] */ - 0x88, /*= [* ] */ - 0x88, /*= [* ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 81: 'Q' */ - 0x44, /*= [ * ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0xee, /*= [*** ] */ - 0x66, /*= [ ** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 82: 'R' */ - 0xcc, /*= [** ] */ - 0xaa, /*= [* * ] */ - 0xee, /*= [*** ] */ - 0xcc, /*= [** ] */ - 0xaa, /*= [* * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 83: 'S' */ - 0x66, /*= [ ** ] */ - 0x88, /*= [* ] */ - 0x44, /*= [ * ] */ - 0x22, /*= [ * ] */ - 0xcc, /*= [** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 84: 'T' */ - 0xee, /*= [*** ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 85: 'U' */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0x66, /*= [ ** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 86: 'V' */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 87: 'W' */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xaa, /*= [* * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 88: 'X' */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0x44, /*= [ * ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 89: 'Y' */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 90: 'Z' */ - 0xee, /*= [*** ] */ - 0x22, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x88, /*= [* ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 91: '[' */ - 0x66, /*= [ ** ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x66, /*= [ ** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 92: '\' */ - 0x00, /*= [ ] */ - 0x88, /*= [* ] */ - 0x44, /*= [ * ] */ - 0x22, /*= [ * ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 93: ']' */ - 0x66, /*= [ ** ] */ - 0x22, /*= [ * ] */ - 0x22, /*= [ * ] */ - 0x22, /*= [ * ] */ - 0x66, /*= [ ** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 94: '^' */ - 0x44, /*= [ * ] */ - 0xaa, /*= [* * ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 95: '_' */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xff, /*= [****] */ - /*}*/ - /*{*/ /* Char 96: '`' */ - 0x88, /*= [* ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 97: 'a' */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x66, /*= [ ** ] */ - 0xaa, /*= [* * ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 98: 'b' */ - 0x88, /*= [* ] */ - 0x88, /*= [* ] */ - 0xcc, /*= [** ] */ - 0xaa, /*= [* * ] */ - 0xcc, /*= [** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 99: 'c' */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x66, /*= [ ** ] */ - 0x88, /*= [* ] */ - 0x66, /*= [ ** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 100: 'd' */ - 0x22, /*= [ * ] */ - 0x22, /*= [ * ] */ - 0x66, /*= [ ** ] */ - 0xaa, /*= [* * ] */ - 0x66, /*= [ ** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 101: 'e' */ - 0x00, /*= [ ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x88, /*= [* ] */ - 0x66, /*= [ ** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 102: 'f' */ - 0x22, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0xee, /*= [*** ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 103: 'g' */ - 0x00, /*= [ ] */ - 0x66, /*= [ ** ] */ - 0xaa, /*= [* * ] */ - 0x66, /*= [ ** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 104: 'h' */ - 0x88, /*= [* ] */ - 0x88, /*= [* ] */ - 0xcc, /*= [** ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 105: 'i' */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 106: 'j' */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x88, /*= [* ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 107: 'k' */ - 0x00, /*= [ ] */ - 0x88, /*= [* ] */ - 0xaa, /*= [* * ] */ - 0xcc, /*= [** ] */ - 0xaa, /*= [* * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 108: 'l' */ - 0x00, /*= [ ] */ - 0xcc, /*= [** ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 109: 'm' */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xaa, /*= [* * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 110: 'n' */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xcc, /*= [** ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 111: 'o' */ - 0x00, /*= [ ] */ - 0x44, /*= [ * ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 112: 'p' */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xcc, /*= [** ] */ - 0xaa, /*= [* * ] */ - 0xcc, /*= [** ] */ - 0x88, /*= [* ] */ - /*}*/ - /*{*/ /* Char 113: 'q' */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x66, /*= [ ** ] */ - 0xaa, /*= [* * ] */ - 0x66, /*= [ ** ] */ - 0x22, /*= [ * ] */ - /*}*/ - /*{*/ /* Char 114: 'r' */ - 0x00, /*= [ ] */ - 0xcc, /*= [** ] */ - 0xaa, /*= [* * ] */ - 0x88, /*= [* ] */ - 0x88, /*= [* ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 115: 's' */ - 0x00, /*= [ ] */ - 0x66, /*= [ ** ] */ - 0xcc, /*= [** ] */ - 0x22, /*= [ * ] */ - 0xcc, /*= [** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 116: 't' */ - 0x00, /*= [ ] */ - 0x44, /*= [ * ] */ - 0xee, /*= [*** ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 117: 'u' */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0x66, /*= [ ** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 118: 'v' */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xaa, /*= [* * ] */ - 0xee, /*= [*** ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 119: 'w' */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xaa, /*= [* * ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 120: 'x' */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xaa, /*= [* * ] */ - 0x44, /*= [ * ] */ - 0xaa, /*= [* * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 121: 'y' */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xaa, /*= [* * ] */ - 0xee, /*= [*** ] */ - 0x22, /*= [ * ] */ - 0xcc, /*= [** ] */ - /*}*/ - /*{*/ /* Char 122: 'z' */ - 0x00, /*= [ ] */ - 0xee, /*= [*** ] */ - 0x66, /*= [ ** ] */ - 0xcc, /*= [** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 123: '{' */ - 0x22, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0xcc, /*= [** ] */ - 0x44, /*= [ * ] */ - 0x22, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 124: '|' */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 125: '}' */ - 0x88, /*= [* ] */ - 0x44, /*= [ * ] */ - 0x66, /*= [ ** ] */ - 0x44, /*= [ * ] */ - 0x88, /*= [* ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 126: '~' */ - 0x55, /*= [ * *] */ - 0xaa, /*= [* * ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 127: '' */ - 0x44, /*= [ * ] */ - 0xaa, /*= [* * ] */ - 0xaa, /*= [* * ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 128: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 129: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 130: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 131: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 132: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 133: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 134: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 135: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 136: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 137: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 138: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 139: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 140: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 141: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 142: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 143: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 144: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 145: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 146: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 147: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 148: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 149: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 150: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 151: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 152: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 153: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 154: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 155: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 156: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 157: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 158: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 159: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 160: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 161: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 162: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 163: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 164: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 165: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 166: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 167: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 168: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 169: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 170: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 171: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 172: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 173: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 174: */ - 0x00, /*= [ ] */ - 0x66, /*= [ ** ] */ - 0xcc, /*= [** ] */ - 0x66, /*= [ ** ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 175: */ - 0x00, /*= [ ] */ - 0xcc, /*= [** ] */ - 0x66, /*= [ ** ] */ - 0xcc, /*= [** ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 176: */ - 0x88, /*= [* ] */ - 0x22, /*= [ * ] */ - 0x88, /*= [* ] */ - 0x22, /*= [ * ] */ - 0x88, /*= [* ] */ - 0x22, /*= [ * ] */ - /*}*/ - /*{*/ /* Char 177: */ - 0xaa, /*= [* * ] */ - 0x55, /*= [ * *] */ - 0xaa, /*= [* * ] */ - 0x55, /*= [ * *] */ - 0xaa, /*= [* * ] */ - 0x55, /*= [ * *] */ - /*}*/ - /*{*/ /* Char 178: */ - 0xdd, /*= [** *] */ - 0xbb, /*= [* **] */ - 0xdd, /*= [** *] */ - 0xbb, /*= [* **] */ - 0xdd, /*= [** *] */ - 0xbb, /*= [* **] */ - /*}*/ - /*{*/ /* Char 179: */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - /*}*/ - /*{*/ /* Char 180: */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0xcc, /*= [** ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - /*}*/ - /*{*/ /* Char 181: */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0xcc, /*= [** ] */ - 0xcc, /*= [** ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - /*}*/ - /*{*/ /* Char 182: */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0xee, /*= [*** ] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - /*}*/ - /*{*/ /* Char 183: */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xee, /*= [*** ] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - /*}*/ - /*{*/ /* Char 184: */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xcc, /*= [** ] */ - 0xcc, /*= [** ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - /*}*/ - /*{*/ /* Char 185: */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - /*}*/ - /*{*/ /* Char 186: */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - /*}*/ - /*{*/ /* Char 187: */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - /*}*/ - /*{*/ /* Char 188: */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 189: */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 190: */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0xcc, /*= [** ] */ - 0xcc, /*= [** ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 191: */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xcc, /*= [** ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - /*}*/ - /*{*/ /* Char 192: */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x77, /*= [ ***] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 193: */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0xff, /*= [****] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 194: */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xff, /*= [****] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - /*}*/ - /*{*/ /* Char 195: */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x77, /*= [ ***] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - /*}*/ - /*{*/ /* Char 196: */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xff, /*= [****] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 197: */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0xff, /*= [****] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - /*}*/ - /*{*/ /* Char 198: */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x77, /*= [ ***] */ - 0x77, /*= [ ***] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - /*}*/ - /*{*/ /* Char 199: */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0x77, /*= [ ***] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - /*}*/ - /*{*/ /* Char 200: */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0x77, /*= [ ***] */ - 0x77, /*= [ ***] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 201: */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x77, /*= [ ***] */ - 0x77, /*= [ ***] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - /*}*/ - /*{*/ /* Char 202: */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0xff, /*= [****] */ - 0xff, /*= [****] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 203: */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xff, /*= [****] */ - 0xff, /*= [****] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - /*}*/ - /*{*/ /* Char 204: */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0x77, /*= [ ***] */ - 0x77, /*= [ ***] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - /*}*/ - /*{*/ /* Char 205: */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xff, /*= [****] */ - 0xff, /*= [****] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 206: */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0xff, /*= [****] */ - 0xff, /*= [****] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - /*}*/ - /*{*/ /* Char 207: */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0xff, /*= [****] */ - 0xff, /*= [****] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 208: */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0xff, /*= [****] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 209: */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xff, /*= [****] */ - 0xff, /*= [****] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - /*}*/ - /*{*/ /* Char 210: */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xff, /*= [****] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - /*}*/ - /*{*/ /* Char 211: */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0x77, /*= [ ***] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 212: */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x77, /*= [ ***] */ - 0x77, /*= [ ***] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 213: */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x77, /*= [ ***] */ - 0x77, /*= [ ***] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - /*}*/ - /*{*/ /* Char 214: */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x77, /*= [ ***] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - /*}*/ - /*{*/ /* Char 215: */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0xff, /*= [****] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - /*}*/ - /*{*/ /* Char 216: */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0xff, /*= [****] */ - 0xff, /*= [****] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - /*}*/ - /*{*/ /* Char 217: */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0xcc, /*= [** ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 218: */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x77, /*= [ ***] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - 0x44, /*= [ * ] */ - /*}*/ - /*{*/ /* Char 219: */ - 0xff, /*= [****] */ - 0xff, /*= [****] */ - 0xff, /*= [****] */ - 0xff, /*= [****] */ - 0xff, /*= [****] */ - 0xff, /*= [****] */ - /*}*/ - /*{*/ /* Char 220: */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0xff, /*= [****] */ - 0xff, /*= [****] */ - 0xff, /*= [****] */ - /*}*/ - /*{*/ /* Char 221: */ - 0xcc, /*= [** ] */ - 0xcc, /*= [** ] */ - 0xcc, /*= [** ] */ - 0xcc, /*= [** ] */ - 0xcc, /*= [** ] */ - 0xcc, /*= [** ] */ - /*}*/ - /*{*/ /* Char 222: */ - 0x33, /*= [ **] */ - 0x33, /*= [ **] */ - 0x33, /*= [ **] */ - 0x33, /*= [ **] */ - 0x33, /*= [ **] */ - 0x33, /*= [ **] */ - /*}*/ - /*{*/ /* Char 223: */ - 0xff, /*= [****] */ - 0xff, /*= [****] */ - 0xff, /*= [****] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 224: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 225: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 226: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 227: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 228: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 229: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 230: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 231: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 232: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 233: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 234: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 235: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 236: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 237: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 238: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 239: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 240: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 241: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 242: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 243: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 244: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 245: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 246: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 247: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 248: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 249: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 250: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 251: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 252: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 253: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 254: */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - 0x66, /*= [ ** ] */ - 0x66, /*= [ ** ] */ - 0x00, /*= [ ] */ - 0x00, /*= [ ] */ - /*}*/ - /*{*/ /* Char 255: */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0xee, /*= [*** ] */ - 0x00, /*= [ ] */ - /*}*/ -}; - - diff --git a/Sources/helpers/bootloader.s b/Sources/helpers/bootloader.s deleted file mode 100644 index 7334f55..0000000 --- a/Sources/helpers/bootloader.s +++ /dev/null @@ -1,81 +0,0 @@ -.arm -.align(4); -.section .text -.global _Reset -_Reset: - -STMFD SP!, {R0-R12, LR}; -MRS R0, CPSR -STMFD SP!, {R0} - -LDR R6, =_Reset -ADR R5, _Reset -sub r5, r5, r6 /* r5 = realAddress - baseAddress */ -ldr r6, = __rel_dyn_start -ldr r7, = __rel_dyn_end -add r6, r6, r5 -add r7, r7, r5 -relocNotFinished: -ldmia r6!, {r3, r4} -cmp r4, #0x17 -bne notRelativeEntry -add r3, r3, r5 -ldr r4, [r3] -add r4, r4, r5 -str r4, [r3] -notRelativeEntry: -cmp r6, r7 -bcc relocNotFinished -ldr r0, =0xffff8001 -adr r1, _Reset -ldr r2, =__rel_dyn_end -sub r2, r2, r1 /* r2 = codesize */ -svc 0x54 /* flush instruction cache */ -nop -nop - -mov r0, sp -bl c_entry - -ldmfd sp!, {r0} -msr cpsr, r0 -ldmfd SP!, {R0-R12, LR}; - -.global _ReturnToUser -_ReturnToUser: -bx lr -nop -nop -nop -msr cpsr, r0 - -.global plgGetIoBase; -.type plgGetIoBase, %function; -plgGetIoBase: -nop -nop - -.global copyRemoteMemory; -.type copyRemoteMemory, %function; -copyRemoteMemory: -nop -nop - - - -.section .__rel_dyn_start -__rel_dyn_start: - -.section .__rel_dyn_end -__rel_dyn_end: - -.section .__bss_start -.global __c_bss_start -__c_bss_start: - -.section .__bss_end -.global __c_bss_end -__c_bss_end: - - - diff --git a/Sources/helpers/config.c b/Sources/helpers/config.c deleted file mode 100644 index a3ca2c3..0000000 --- a/Sources/helpers/config.c +++ /dev/null @@ -1,53 +0,0 @@ -#include "config.h" - -#define NULL (void *)0 - -#define POS(x, y) (x | (y << 16)) -#define DIM(w, h) (w | (h << 16)) - -typedef struct s_img_infos -{ - int pos; - int dimension; - int rgb; -} t_img_infos; - -extern unsigned int ui_offset; -extern unsigned char *BACKGROUND; -//extern unsigned char *SPLASH; -extern unsigned char *NOTE_BACKGROUND; -extern unsigned char *CHEATS_LABEL; -extern unsigned char *SPEED_LABEL; -extern unsigned char *HOTKEY_LABEL; -extern unsigned char *CREDIT_LABEL; -unsigned char *background_img = NULL; -unsigned char *credit_label = NULL; -unsigned char *splash_img = NULL; -unsigned char *cheats_label = NULL; -unsigned char *speed_label = NULL; -unsigned char *hotkey_label = NULL; -unsigned char *note_background = NULL; -t_img_infos background_infos = { 0, 0, 0}; -t_img_infos cheats_label_infos = { 0, 0, 0 }; -t_img_infos speed_label_infos = { 0, 0, 0 }; -t_img_infos hotkey_label_infos = { 0, 0, 0 }; -t_img_infos credit_label_infos = { 0, 0, 0 }; -t_img_infos note_background_infos = { 0, 0, 0 }; - - -void init_img(void) { - ui_offset = UI_OFFSET; - background_img = (unsigned char *)BACKGROUND; - //splash_img = SPLASH; - note_background = (unsigned char *)NOTE_BACKGROUND; - cheats_label = CHEATS_LABEL; - speed_label = SPEED_LABEL; - hotkey_label = HOTKEY_LABEL; - credit_label = CREDIT_LABEL; - background_infos = (t_img_infos) { POS(BACKGROUND_POS_X, BACKGROUND_POS_Y), DIM(BACKGROUND_WIDTH, BACKGROUND_HEIGHT), BACKGROUND_RGB }; - cheats_label_infos = (t_img_infos) { POS(CHEATS_LABEL_POS_X, CHEATS_LABEL_POS_Y), DIM(CHEATS_LABEL_WIDTH, CHEATS_LABEL_HEIGHT), CHEATS_LABEL_RGB }; - speed_label_infos = (t_img_infos) { POS(SPEED_LABEL_POS_X, SPEED_LABEL_POS_Y), DIM(SPEED_LABEL_WIDTH, SPEED_LABEL_HEIGHT), SPEED_LABEL_RGB }; - hotkey_label_infos = (t_img_infos) { POS(HOTKEY_LABEL_POS_X, HOTKEY_LABEL_POS_Y), DIM(HOTKEY_LABEL_WIDTH, HOTKEY_LABEL_HEIGHT), HOTKEY_LABEL_RGB }; - credit_label_infos = (t_img_infos) { POS(CREDIT_LABEL_POS_X, CREDIT_LABEL_POS_Y), DIM(CREDIT_LABEL_WIDTH, CREDIT_LABEL_HEIGHT), CREDIT_LABEL_RGB }; - note_background_infos = (t_img_infos) { POS(NOTE_BACKGROUND_POS_X, NOTE_BACKGROUND_POS_Y), DIM(NOTE_BACKGROUND_WIDTH, NOTE_BACKGROUND_HEIGHT), NOTE_BACKGROUND_RGB }; -} diff --git a/Sources/helpers/config.h b/Sources/helpers/config.h deleted file mode 100644 index a88ea07..0000000 --- a/Sources/helpers/config.h +++ /dev/null @@ -1,49 +0,0 @@ -unsigned char *fill_img = "Don't edit this."; -unsigned char *null_img = (void *)0x0; -//unsigned char *gateshark_label = "Don't edit this."; - -#define BACKGROUND sumo_bg -#define BACKGROUND_POS_X 0 -#define BACKGROUND_POS_Y 42 -#define BACKGROUND_WIDTH 320 -#define BACKGROUND_HEIGHT 198 -#define BACKGROUND_RGB 1 - -#define SPLASH BACKGROUND - -#define UI_OFFSET 13 - -#define CREDIT_LABEL credit_logo -#define CREDIT_LABEL_POS_X 0 -#define CREDIT_LABEL_POS_Y 0 -#define CREDIT_LABEL_WIDTH 320 -#define CREDIT_LABEL_HEIGHT 42 -#define CREDIT_LABEL_RGB 1 - -#define CHEATS_LABEL cheats_logo -#define CHEATS_LABEL_POS_X 0 -#define CHEATS_LABEL_POS_Y 0 -#define CHEATS_LABEL_WIDTH 320 -#define CHEATS_LABEL_HEIGHT 42 -#define CHEATS_LABEL_RGB 1 - -#define SPEED_LABEL speed_logo -#define SPEED_LABEL_POS_X 0 -#define SPEED_LABEL_POS_Y 0 -#define SPEED_LABEL_WIDTH 320 -#define SPEED_LABEL_HEIGHT 42 -#define SPEED_LABEL_RGB 1 - -#define HOTKEY_LABEL hotkeys_logo -#define HOTKEY_LABEL_POS_X 0 -#define HOTKEY_LABEL_POS_Y 0 -#define HOTKEY_LABEL_WIDTH 320 -#define HOTKEY_LABEL_HEIGHT 42 -#define HOTKEY_LABEL_RGB 1 - -#define NOTE_BACKGROUND note_back2 -#define NOTE_BACKGROUND_POS_X 30 -#define NOTE_BACKGROUND_POS_Y 47 -#define NOTE_BACKGROUND_WIDTH 260 -#define NOTE_BACKGROUND_HEIGHT 145 -#define NOTE_BACKGROUND_RGB 0 diff --git a/Sources/helpers/ctrulib.c b/Sources/helpers/ctrulib.c deleted file mode 100644 index f867d0f..0000000 --- a/Sources/helpers/ctrulib.c +++ /dev/null @@ -1,105 +0,0 @@ -#include "ctrulib.h" - - -static Handle srv2Handle; -static int srvRefCount; - -Result srvRegisterClient(void) -{ - Result rc = 0; - u32* cmdbuf = getThreadCommandBuffer(); - - cmdbuf[0] = IPC_MakeHeader(0x1,0,2); // 0x10002 - cmdbuf[1] = IPC_Desc_CurProcessHandle(); - - if(R_FAILED(rc = svcSendSyncRequest(srv2Handle)))return rc; - - return cmdbuf[1]; -} - -Result srvInit(void) -{ - Result rc = 0; - - if (AtomicPostIncrement(&srvRefCount)) return 0; - - rc = svcConnectToPort(&srv2Handle, "srv:"); - if (R_FAILED(rc)) goto end; - - rc = srvRegisterClient(); -end: - if (R_FAILED(rc)) - { - //new_log(WARNING, "Services Init: FAILED\n"); - srvExit(); - } - //else new_log(INFO, "Services Init: OK\n"); - return rc; -} - -Result srvGetServiceHandle(Handle* out, const char* name) -{ - Result rc = 0; - u32* cmdbuf = getThreadCommandBuffer(); - - cmdbuf[0] = IPC_MakeHeader(0x5,4,0); // 0x50100 - strncpy((char*) &cmdbuf[1], name,8); - cmdbuf[3] = strlen(name); - cmdbuf[4] = 0x0; - - if(R_FAILED(rc = svcSendSyncRequest(srv2Handle)))return rc; - - if(out) *out = cmdbuf[3]; - - return cmdbuf[1]; -} - - -static Handle acHandle; -static int acRefCount; - -Result acInit(void) -{ - Result ret; - - if (AtomicPostIncrement(&acRefCount)) return 0; - - ret = srvGetServiceHandle(&acHandle, "ac:u"); - if(R_FAILED(ret)) ret = srvGetServiceHandle(&acHandle, "ac:i"); - if(R_FAILED(ret)) AtomicDecrement(&acRefCount); - - return ret; -} - -Result ACU_GetWifiStatus(u32 *out) -{ - Result ret=0; - u32 *cmdbuf = getThreadCommandBuffer(); - - cmdbuf[0] = IPC_MakeHeader(0xD,0,0); // 0x000D0000 - - if(R_FAILED(ret = svcSendSyncRequest(acHandle)))return ret; - - *out = cmdbuf[2]; - - return (Result)cmdbuf[1]; -} - -static inline u32 IPC_Desc_CurProcessHandle(void) -{ - return 0x20; -} - -void acExit(void) -{ - if (AtomicDecrement(&acRefCount)) return; - svcCloseHandle(acHandle); -} - -void srvExit(void) -{ - if (AtomicDecrement(&srvRefCount)) return; - - if (srv2Handle != 0) svcCloseHandle(srv2Handle); - srv2Handle = 0; -} diff --git a/Sources/helpers/ctrulib.h b/Sources/helpers/ctrulib.h deleted file mode 100644 index 281e129..0000000 --- a/Sources/helpers/ctrulib.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef CTRULIB_H -#define CTRULIB_H - -#include "types.h" -#include "result.h" -#include "svc.h" -#include - -typedef u32 Handle; -typedef s32 Result; - -static inline u32 IPC_MakeHeader(u16 command_id, unsigned normal_params, unsigned translate_params) -{ - return ((u32) command_id << 16) | (((u32) normal_params & 0x3F) << 6) | (((u32) translate_params & 0x3F) << 0); -} - -/// Performs an atomic pre-increment operation. -#define AtomicIncrement(ptr) __atomic_add_fetch((u32*)(ptr), 1, __ATOMIC_SEQ_CST) -/// Performs an atomic pre-decrement operation. -#define AtomicDecrement(ptr) __atomic_sub_fetch((u32*)(ptr), 1, __ATOMIC_SEQ_CST) -/// Performs an atomic post-increment operation. -#define AtomicPostIncrement(ptr) __atomic_fetch_add((u32*)(ptr), 1, __ATOMIC_SEQ_CST) -/// Performs an atomic post-decrement operation. -#define AtomicPostDecrement(ptr) __atomic_fetch_sub((u32*)(ptr), 1, __ATOMIC_SEQ_CST) - -Result srvInit(void); -Result acInit(void); -Result ACU_GetWifiStatus(u32 *out); -static inline u32 IPC_Desc_CurProcessHandle(void); -void srvExit(void); -Result srvGetServiceHandle(Handle* out, const char* name); -void acExit(void); -#endif diff --git a/Sources/helpers/entry_name_manager.c b/Sources/helpers/entry_name_manager.c deleted file mode 100644 index 4767d83..0000000 --- a/Sources/helpers/entry_name_manager.c +++ /dev/null @@ -1,159 +0,0 @@ -#include "cheats.h" -#include "manager.h" -#include - -extern t_entry_data g_entry_data[MAX_STORAGE]; -extern int g_current_data_count; - -static t_entry_data *find_entry(int identifier) -{ - t_entry_data *current; - int i; - - for (i = 0; i < g_current_data_count; i++) - { - current = &g_entry_data[i]; - if (current->identifier == identifier) - break; - } - if (i == g_current_data_count) - return (NULL); - return (current); -} - -char *new_entry_name(char *name) -{ - t_entry_data *current; - char *buffer; - - if (!name || g_current_data_count >= MAX_STORAGE) - goto error; - current = &g_entry_data[g_current_data_count]; - memset(current->name, 0, 40); - memset(current->displayed, 0, 40); - strncpy(current->name, name, 39); - buffer = current->displayed; - strcpy(buffer, name); - return (buffer); -error: - return (name); -} - -char *get_base_name(int identifier) -{ - t_entry_data *current; - - current = find_entry(identifier); - if (current) - return (current->name); - return (NULL); -} - -char *get_displayed_name(int identifier) -{ - t_entry_data *current; - - current = find_entry(identifier); - if (current) - return (current->displayed); - return (NULL); -} - -void reset_name(int identifier) -{ - t_entry_data *current; - - current = find_entry(identifier); - if (current) - strcpy(current->displayed, current->name); -exit: - return; -} - -void change_base_name(char *str, int identifier) -{ - t_entry_data *current; - int size; - - current = find_entry(identifier); - if (!current) - goto exit; - memset(current->name, 0, 40); - memset(current->displayed, 0, 40); - strncpy(current->name, str, 39); - strcpy(current->displayed, current->name); -exit: - return; -} - -void add_suffix(char *suffix, int identifier) -{ - t_entry_data *current; - int size; - - current = find_entry(identifier); - if (!current) - goto exit; - size = strlen(current->name); - memset(current->displayed, 0, 40); - strcpy(current->displayed, current->name); - strncpy(current->displayed + size, suffix, 40 - size); -exit: - return; -} - -void add_prefix(char *prefix, int identifier) -{ - t_entry_data *current; - int size; - - current = find_entry(identifier); - if (!current) - goto exit; - size = strlen(prefix); - memset(current->displayed, 0, 40); - strcpy(current->displayed, prefix); - strncpy(current->displayed + size, current->name, 40 - size); -exit: - return; -} - -void replace_pattern(char *pattern, char *replace_str, int identifier) -{ - char buf[40]; - char *p_pattern; - char *p_buf; - char *p_result; - - char *src = get_displayed_name(identifier); - if (!src) return; - strcpy(buf, src); - p_pattern = pattern; - p_buf = buf; -again: - while(*p_pattern != *p_buf && *p_buf != '\0') - p_buf++; - if(*p_pattern == *p_buf && *p_pattern != '\0' && *p_buf != '\0') - { - p_result = p_buf; - while((*p_pattern == *p_buf || *p_pattern == '*' ) && *p_pattern != '\0' && *p_buf != '\0') - { - p_pattern++; - p_buf++; - } - if(*p_pattern != '\0' && *p_buf != '\0') - { - p_buf = p_result + 1; - p_result = NULL; - p_pattern = pattern; - goto again; - } - if(*p_pattern != '\0' && *p_buf == '\0') - return; - if(*p_pattern == '\0') - { - strncpy(p_result, replace_str, strlen(replace_str)); - strcpy(src, buf); - } - } -} diff --git a/Sources/helpers/helpers.c b/Sources/helpers/helpers.c deleted file mode 100644 index ad9550d..0000000 --- a/Sources/helpers/helpers.c +++ /dev/null @@ -1,270 +0,0 @@ -#include "cheats.h" -#include "manager.h" -#include "ctrulib.h" -#include - -t_entry_data g_entry_data[MAX_STORAGE] = {0}; -int g_current_data_count = 0; - -void disable_entry(int identifier) -{ - int index; - - index = get_index(identifier); - if (index != -1) - disableCheat(index); -} - -void memset32(void *dst, unsigned int value, unsigned int size) -{ - unsigned int *p = (unsigned int *)dst; - unsigned int s = size / 4; - - while (s-- > 0) - *p++ = value; -} - -Handle getCurrentProcessHandle(void); - -bool checkAddress(u32 address) { - Result res; - PageInfo pInfo = {0}; - MemInfo mInfo = {0}; - - res = svcQueryMemory(&mInfo, &pInfo, address); - if (R_SUCCEEDED(res) && mInfo.base_addr <= address && mInfo.base_addr + mInfo.size > address) { - if (!(mInfo.perm & MEMPERM_WRITE)) { - res = svcControlProcessMemory(getCurrentProcessHandle(), mInfo.base_addr, mInfo.base_addr, mInfo.size, 6, 7); - if (R_SUCCEEDED(res)) - return true; - else - return false; - } - return true; - } - return false; -} - -int randomNum(int start, int end) { - srand(svcGetSystemTick()); - int r[20]; - for (int i = 0; i < 20; i++) { - r[i] = rand()%(end - start + 1) + start; - } - return r[rand()%20]; -} - -bool isinArray(int val, int *arr, int size) { - for (int i = 0; i < (size / 4); i++) { - if (arr[i] == val) - return true; - } - return false; -} - - -bool getWifiStatus() -{ - Result r = 0; - u32 wifiStatus = 0; - static bool wifiInit = false; - - if (!wifiInit) { - r = srvInit(); - if (R_FAILED(r)) return false; - - r = acInit(); - if (R_FAILED(r)) return false; - - wifiInit = true; - } - - if (wifiInit) { - r = ACU_GetWifiStatus(&wifiStatus); - if (R_FAILED(r)) return false; - - if (wifiStatus == 1 || wifiStatus == 2) - return true; - else - return false; - } - return false; -} - - - -static int add_new_entry(char *str, void (*function)(void), int identifier, int flags) -{ - int index; - char *buffer; - - if (g_current_data_count >= MAX_STORAGE) goto exit; - - buffer = new_entry_name(str); - index = new_entry(buffer, function); - push_index(index, identifier); - g_entry_data[g_current_data_count].f = NULL; - g_entry_data[g_current_data_count].arg = 0; - g_entry_data[g_current_data_count].flags = flags; - g_current_data_count++; - - return (index); -exit: - return (-1); -} - -static int add_new_entry_arg(char *str, void (*function)(u32), u32 arg, int identifier, int flags) -{ - int index; - char *buffer; - - if (g_current_data_count >= MAX_STORAGE) goto exit; - - buffer = new_entry_name(str); - index = new_entry(buffer, NULL); - push_index(index, identifier); - g_entry_data[g_current_data_count].f = function; - g_entry_data[g_current_data_count].arg = arg; - g_entry_data[g_current_data_count].flags = flags; - g_current_data_count++; - - return (index); -exit: - return (-1); -} - -void new_entry_note(char *str, const char * const note, void (*function)(void)) -{ - int index; - - index = new_entry(str, function); - set_note((char *)note, index); -} - -void new_entry_managed(char *str, void (*function)(void), int identifier, int flags) -{ - add_new_entry(str, function, identifier, flags); -} - -void new_entry_managed_note(char *str, const char * const note, void (*function)(void), int identifier, int flags) -{ - int index; - - index = add_new_entry(str, function, identifier, flags); - set_note((char *)note, index); -} - -void new_entry_arg(char *name, void (*function)(u32), u32 arg, int identifier, int flags) -{ - add_new_entry_arg(name, function, arg, identifier, flags); -} - -void new_entry_arg_note(char *name, char *note, void (*function)(u32), u32 arg, int identifier, int flags) -{ - int index; - - index = add_new_entry_arg(name, function, arg, identifier, flags); - set_note(note, index); -} - -extern t_menu menu; - -void new_super_unselectable_entry(char *str, void (*f)()) -{ - int index; - - index = new_unselectable_entry(str); - if (index == 0) - index = 2; - if (index >= menu.count) return; - menu.flags[index] |= STATE; - menu.flags[index] |= FREEZE; - menu.f[index] = f; -} - -void execute_all(void) -{ - int i; - int index; - - for (i = 0; i < g_current_data_count; i++) - { - index = g_entry_data[i].index; - u32 flags = g_entry_data[i].flags; - - if (index > 2 && index < menu.count) - { - if (flags & TOGGLE) - { - if ((menu.flags[index] & STATE) && !(flags & TOGGLE_ENABLE)) - { - g_entry_data[i].flags |= TOGGLE_ENABLE; - if (g_entry_data[i].f != NULL) - { - g_entry_data[i].f(1); - } - } - else if (!(menu.flags[index] & STATE) && (flags & TOGGLE_ENABLE)) - { - g_entry_data[i].flags &= ~(flags & TOGGLE_ENABLE); - if (g_entry_data[i].f != NULL) - { - g_entry_data[i].f(0); - } - } - } - else if(menu.flags[index] & STATE) - { - if (flags & EXECUTE_ONCE) - { - if (flags & EXECUTED) - { - g_entry_data[i].flags &= ~(flags & EXECUTED); - menu.flags[index] &= ~(menu.flags[index] & STATE); - } - else - { - g_entry_data[i].flags |= EXECUTED; - if (g_entry_data[i].f != NULL) - g_entry_data[i].f(g_entry_data[i].arg); - else - menu.f[index](); - } - } - else if (flags & AUTO_DISABLE) - { - if (g_entry_data[i].f != NULL) - { - g_entry_data[i].f(g_entry_data[i].arg); - } - else - menu.f[index](); - menu.flags[index] &= ~(menu.flags[index] & STATE); - - } - else if (g_entry_data[i].f != NULL) - { - g_entry_data[i].f(g_entry_data[i].arg); - } - } - } - } -} - -void disable_once_only(void) -{ - int i; - int index; - - for (i = 0; i < g_current_data_count; i++) - { - if (!(g_entry_data[i].flags & EXECUTE_ONCE)) - continue; - index = g_entry_data[i].index; - - if (index > 2 && index < menu.count) - { - menu.flags[index] &= ~(menu.flags[index] & STATE); - } - } -} diff --git a/Sources/helpers/index_manager.c b/Sources/helpers/index_manager.c deleted file mode 100644 index 17bdd9e..0000000 --- a/Sources/helpers/index_manager.c +++ /dev/null @@ -1,27 +0,0 @@ -#include "manager.h" - -extern t_entry_data g_entry_data[MAX_STORAGE]; -extern int g_current_data_count; - -void push_index(int index, int identifier) -{ - t_entry_data *current; - - current = &g_entry_data[g_current_data_count]; - current->index = index; - current->identifier = identifier; -} - -int get_index(int identifier) -{ - t_entry_data *current; - int i; - - for (i = 0; i < g_current_data_count; i++) - { - current = &g_entry_data[i]; - if (current->identifier == identifier) - return (current->index); - } - return (-1); -} diff --git a/Sources/helpers/manager.h b/Sources/helpers/manager.h deleted file mode 100644 index fc0c9c9..0000000 --- a/Sources/helpers/manager.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef MANAGER_H -#define MANAGER_H - -#include "plugin.h" - -// The menu can handle a maximum of 300 entries -#define MAX_STORAGE 100 - - - -typedef struct s_entry_data -{ - char name[40]; - char displayed[40]; - int identifier; - int index; - int flags; - u32 arg; - void (*f)(u32); -} t_entry_data; - -#define ENTRY_COUNT 300 - -typedef enum -{ - STATE = BIT(0), - FREEZE = BIT(1), - SELECTABLE = BIT(2), - NOTE = BIT(3) -} menu_flags; - -typedef struct s_menu -{ - int count; - int status; - u32 flags[ENTRY_COUNT]; - u32 spoiler[ENTRY_COUNT]; - int args[ENTRY_COUNT]; - const char *text[ENTRY_COUNT]; - const char *note[ENTRY_COUNT]; - void (*f[ENTRY_COUNT])(); -} t_menu; - -/* -** index_manager.c -*/ -void push_index(int index, int identifier); -int get_index(int identifier); - -/* -** entry_name_manager.c -*/ -char *new_entry_name(char *name); -char *get_base_name(int identifier); -char *get_displayed_name(int identifier); -void reset_name(int identifier); -void change_base_name(char *str, int identifier); -void add_suffix(char *suffix, int identifier); -void add_prefix(char *prefix, int identifier); - - -#endif diff --git a/Sources/helpers/svc.h b/Sources/helpers/svc.h deleted file mode 100644 index 678e78b..0000000 --- a/Sources/helpers/svc.h +++ /dev/null @@ -1,1108 +0,0 @@ -/** - * @file svc.h - * @brief Syscall wrappers. - */ -#pragma once - -#include "types.h" - -/// Pseudo handle for the current process -#define CUR_PROCESS_HANDLE 0xFFFF8001 - -///@name Memory management -///@{ - -/** - * @brief @ref svcControlMemory operation flags - * - * The lowest 8 bits are the operation - */ -typedef enum { - MEMOP_FREE = 1, ///< Memory un-mapping - MEMOP_RESERVE = 2, ///< Reserve memory - MEMOP_ALLOC = 3, ///< Memory mapping - MEMOP_MAP = 4, ///< Mirror mapping - MEMOP_UNMAP = 5, ///< Mirror unmapping - MEMOP_PROT = 6, ///< Change protection - - MEMOP_REGION_APP = 0x100, ///< APPLICATION memory region. - MEMOP_REGION_SYSTEM = 0x200, ///< SYSTEM memory region. - MEMOP_REGION_BASE = 0x300, ///< BASE memory region. - - MEMOP_OP_MASK = 0xFF, ///< Operation bitmask. - MEMOP_REGION_MASK = 0xF00, ///< Region bitmask. - MEMOP_LINEAR_FLAG = 0x10000, ///< Flag for linear memory operations - - MEMOP_ALLOC_LINEAR = MEMOP_LINEAR_FLAG | MEMOP_ALLOC, ///< Allocates linear memory. -} MemOp; - -/// The state of a memory block. -typedef enum { - MEMSTATE_FREE = 0, ///< Free memory - MEMSTATE_RESERVED = 1, ///< Reserved memory - MEMSTATE_IO = 2, ///< I/O memory - MEMSTATE_STATIC = 3, ///< Static memory - MEMSTATE_CODE = 4, ///< Code memory - MEMSTATE_PRIVATE = 5, ///< Private memory - MEMSTATE_SHARED = 6, ///< Shared memory - MEMSTATE_CONTINUOUS = 7, ///< Continuous memory - MEMSTATE_ALIASED = 8, ///< Aliased memory - MEMSTATE_ALIAS = 9, ///< Alias memory - MEMSTATE_ALIASCODE = 10, ///< Aliased code memory - MEMSTATE_LOCKED = 11, ///< Locked memory -} MemState; - -/// Memory permission flags -typedef enum { - MEMPERM_READ = 1, ///< Readable - MEMPERM_WRITE = 2, ///< Writable - MEMPERM_EXECUTE = 4, ///< Executable - MEMPERM_DONTCARE = 0x10000000, ///< Don't care -} MemPerm; - -/// Memory information. -typedef struct { - u32 base_addr; ///< Base address. - u32 size; ///< Size. - u32 perm; ///< Memory permissions. See @ref MemPerm - u32 state; ///< Memory state. See @ref MemState -} MemInfo; - -/// Memory page information. -typedef struct { - u32 flags; ///< Page flags. -} PageInfo; - -/// Arbitration modes. -typedef enum { - ARBITRATION_SIGNAL = 0, ///< Signal #value threads for wake-up. - ARBITRATION_WAIT_IF_LESS_THAN = 1, ///< If the memory at the address is strictly lower than #value, then wait for signal. - ARBITRATION_DECREMENT_AND_WAIT_IF_LESS_THAN = 2, ///< If the memory at the address is strictly lower than #value, then decrement it and wait for signal. - ARBITRATION_WAIT_IF_LESS_THAN_TIMEOUT = 3, ///< If the memory at the address is strictly lower than #value, then wait for signal or timeout. - ARBITRATION_DECREMENT_AND_WAIT_IF_LESS_THAN_TIMEOUT = 4, ///< If the memory at the address is strictly lower than #value, then decrement it and wait for signal or timeout. -} ArbitrationType; - -/// Special value to signal all the threads -#define ARBITRATION_SIGNAL_ALL (-1) - -///@} - -///@name Multithreading -///@{ - -/// Reset types (for use with events and timers) -typedef enum { - RESET_ONESHOT = 0, ///< When the primitive is signaled, it will wake up exactly one thread and will clear itself automatically. - RESET_STICKY = 1, ///< When the primitive is signaled, it will wake up all threads and it won't clear itself automatically. - RESET_PULSE = 2, ///< Only meaningful for timers: same as ONESHOT but it will periodically signal the timer instead of just once. -} ResetType; - -/// Types of thread info. -typedef enum { - THREADINFO_TYPE_UNKNOWN ///< Unknown. -} ThreadInfoType; - -/// Pseudo handle for the current thread -#define CUR_THREAD_HANDLE 0xFFFF8000 - -///@} - - -///@name Debugging -///@{ - -/// Event relating to the attachment of a process. -typedef struct { - u64 program_id; ///< ID of the program. - char process_name[8]; ///< Name of the process. - u32 process_id; ///< ID of the process. - u32 other_flags; ///< Always 0 -} AttachProcessEvent; - -/// Reasons for an exit process event. -typedef enum { - EXITPROCESS_EVENT_NONE = 0, ///< No reason. - EXITPROCESS_EVENT_TERMINATE = 1, ///< Process terminated. - EXITPROCESS_EVENT_UNHANDLED_EXCEPTION = 2, ///< Unhandled exception occurred. -} ExitProcessEventReason; - -/// Event relating to the exiting of a process. -typedef struct { - ExitProcessEventReason reason; ///< Reason for exiting. See @ref ExitProcessEventReason -} ExitProcessEvent; - -/// Event relating to the attachment of a thread. -typedef struct { - u32 creator_thread_id; ///< ID of the creating thread. - u32 thread_local_storage; ///< Thread local storage. - u32 entry_point; ///< Entry point of the thread. -} AttachThreadEvent; - -/// Reasons for an exit thread event. -typedef enum { - EXITTHREAD_EVENT_NONE = 0, ///< No reason. - EXITTHREAD_EVENT_TERMINATE = 1, ///< Thread terminated. - EXITTHREAD_EVENT_UNHANDLED_EXC = 2, ///< Unhandled exception occurred. - EXITTHREAD_EVENT_TERMINATE_PROCESS = 3, ///< Process terminated. -} ExitThreadEventReason; - -/// Event relating to the exiting of a thread. -typedef struct { - ExitThreadEventReason reason; ///< Reason for exiting. See @ref ExitThreadEventReason -} ExitThreadEvent; - -/// Reasons for a user break. -typedef enum { - USERBREAK_PANIC = 0, ///< Panic. - USERBREAK_ASSERT = 1, ///< Assertion failed. - USERBREAK_USER = 2, ///< User related. - USERBREAK_LOAD_RO = 3, ///< Load RO. - USERBREAK_UNLOAD_RO = 4, ///< Unload RO. -} UserBreakType; - -/// Reasons for an exception event. -typedef enum { - EXCEVENT_UNDEFINED_INSTRUCTION = 0, ///< Undefined instruction. - EXCEVENT_PREFETCH_ABORT = 1, ///< Prefetch abort. - EXCEVENT_DATA_ABORT = 2, ///< Data abort (other than the below kind). - EXCEVENT_UNALIGNED_DATA_ACCESS = 3, ///< Unaligned data access. - EXCEVENT_ATTACH_BREAK = 4, ///< Attached break. - EXCEVENT_STOP_POINT = 5, ///< Stop point reached. - EXCEVENT_USER_BREAK = 6, ///< User break occurred. - EXCEVENT_DEBUGGER_BREAK = 7, ///< Debugger break occurred. - EXCEVENT_UNDEFINED_SYSCALL = 8, ///< Undefined syscall. -} ExceptionEventType; - -/// Event relating to fault exceptions (CPU exceptions other than stop points and undefined syscalls). -typedef struct { - u32 fault_information; ///< FAR (for DATA ABORT / UNALIGNED DATA ACCESS), attempted syscall or 0 -} FaultExceptionEvent; - -/// Stop point types -typedef enum { - STOPPOINT_SVC_FF = 0, ///< See @ref SVC_STOP_POINT. - STOPPOINT_BREAKPOINT = 1, ///< Breakpoint. - STOPPOINT_WATCHPOINT = 2, ///< Watchpoint. -} StopPointType; - -/// Event relating to stop points -typedef struct { - StopPointType type; ///< Stop point type, see @ref StopPointType. - u32 fault_information; ///< FAR for Watchpoints, otherwise 0. -} StopPointExceptionEvent; - -/// Event relating to @ref svcBreak -typedef struct { - UserBreakType type; ///< User break type, see @ref UserBreakType. - u32 croInfo; ///< For LOAD_RO and UNLOAD_RO. - u32 croInfoSize; ///< For LOAD_RO and UNLOAD_RO. -} UserBreakExceptionEvent; - -/// Event relating to @ref svcBreakDebugProcess -typedef struct { - void *threads[4]; ///< KThread instances of the attached process's that were running on each at the time of the function call (only the first 2 values are meaningful on O3DS). -} DebuggerBreakExceptionEvent; - -/// Event relating to exceptions. -typedef struct { - ExceptionEventType type; ///< Type of event. See @ref ExceptionEventType. - u32 address; ///< Address of the exception. - union { - FaultExceptionEvent fault; ///< Fault exception event data. - StopPointExceptionEvent stop_point; ///< Stop point exception event data. - UserBreakExceptionEvent user_break; ///< User break exception event data. - DebuggerBreakExceptionEvent debugger_break; ///< Debugger break exception event data - }; -} ExceptionEvent; - -/// Event relating to the scheduler. -typedef struct { - u64 clock_tick; ///< Clock tick that the event occurred. -} ScheduleInOutEvent; - -/// Event relating to syscalls. -typedef struct { - u64 clock_tick; ///< Clock tick that the event occurred. - u32 syscall; ///< Syscall sent/received. -} SyscallInOutEvent; - -/// Event relating to debug output. -typedef struct { - u32 string_addr; ///< Address of the outputted string. - u32 string_size; ///< Size of the outputted string. -} OutputStringEvent; - -/// Event relating to the mapping of memory. -typedef struct { - u32 mapped_addr; ///< Mapped address. - u32 mapped_size; ///< Mapped size. - MemPerm memperm; ///< Memory permissions. See @ref MemPerm. - MemState memstate; ///< Memory state. See @ref MemState. -} MapEvent; - -/// Debug event type. -typedef enum { - DBGEVENT_ATTACH_PROCESS = 0, ///< Process attached event. - DBGEVENT_ATTACH_THREAD = 1, ///< Thread attached event. - DBGEVENT_EXIT_THREAD = 2, ///< Thread exit event. - DBGEVENT_EXIT_PROCESS = 3, ///< Process exit event. - DBGEVENT_EXCEPTION = 4, ///< Exception event. - DBGEVENT_DLL_LOAD = 5, ///< DLL load event. - DBGEVENT_DLL_UNLOAD = 6, ///< DLL unload event. - DBGEVENT_SCHEDULE_IN = 7, ///< Schedule in event. - DBGEVENT_SCHEDULE_OUT = 8, ///< Schedule out event. - DBGEVENT_SYSCALL_IN = 9, ///< Syscall in event. - DBGEVENT_SYSCALL_OUT = 10, ///< Syscall out event. - DBGEVENT_OUTPUT_STRING = 11, ///< Output string event. - DBGEVENT_MAP = 12, ///< Map event. -} DebugEventType; - -/// Information about a debug event. -typedef struct { - DebugEventType type; ///< Type of event. See @ref DebugEventType - u32 thread_id; ///< ID of the thread. - u32 flags; ///< Flags. Bit0 means that @ref svcContinueDebugEvent needs to be called for this event (except for EXIT PROCESS events, where this flag is disregarded). - u8 remnants[4]; ///< Always 0. - union { - AttachProcessEvent attach_process; ///< Process attachment event data. - AttachThreadEvent attach_thread; ///< Thread attachment event data. - ExitThreadEvent exit_thread; ///< Thread exit event data. - ExitProcessEvent exit_process; ///< Process exit event data. - ExceptionEvent exception; ///< Exception event data. - /* DLL_LOAD and DLL_UNLOAD do not seem to possess any event data */ - ScheduleInOutEvent scheduler; ///< Schedule in/out event data. - SyscallInOutEvent syscall; ///< Syscall in/out event data. - OutputStringEvent output_string; ///< Output string event data. - MapEvent map; ///< Map event data. - }; -} DebugEventInfo; - -/// Debug flags for an attached process, set by @ref svcContinueDebugEvent -typedef enum { - DBG_NO_ERRF_CPU_EXCEPTION_DUMPS = BIT(0), ///< Don't produce err:f-format dumps for CPU exceptions (including watchpoints and breakpoints, regardless of any @ref svcKernelSetState call). - DBG_SIGNAL_FAULT_EXCEPTION_EVENTS = BIT(1), ///< Signal fault exception events. See @ref FaultExceptionEvent. - DBG_SIGNAL_SCHEDULE_EVENTS = BIT(2), ///< Signal schedule in/out events. See @ref ScheduleInOutEvent. - DBG_SIGNAL_SYSCALL_EVENTS = BIT(3), ///< Signal syscall in/out events. See @ref SyscallInOutEvent. - DBG_SIGNAL_MAP_EVENTS = BIT(4), ///< Signal map events. See @ref MapEvent. -} DebugFlags; - -typedef struct { - u32 cpu_registers; ///< CPU registers. - u32 fpu_registers; ///< FPU registers. -} ThreadContext; - -/// Control flags for @ref svcGetDebugThreadContext and @ref svcSetDebugThreadContext -typedef enum { - THREADCONTEXT_CONTROL_CPU_GPRS = BIT(0), ///< Control r0-r12. - THREADCONTEXT_CONTROL_CPU_SPRS = BIT(1), ///< Control sp, lr, pc, cpsr. - THREADCONTEXT_CONTROL_FPU_GPRS = BIT(2), ///< Control d0-d15 (or f0-f31). - THREADCONTEXT_CONTROL_FPU_SPRS = BIT(3), ///< Control fpscr, fpexc. - - THREADCONTEXT_CONTROL_CPU_REGS = BIT(0) | BIT(1), ///< Control r0-r12, sp, lr, pc, cpsr. - THREADCONTEXT_CONTROL_FPU_REGS = BIT(2) | BIT(3), ///< Control d0-d15, fpscr, fpexc. - - THREADCONTEXT_CONTROL_ALL = BIT(0) | BIT(1) | BIT(2) | BIT(3), ///< Control all of the above. -} ThreadContextControlFlags; - -/// Thread parameter field for @ref svcGetDebugThreadParameter -typedef enum { - DBGTHREAD_PARAMETER_PRIORITY = 0, ///< Thread priority. - DBGTHREAD_PARAMETER_SCHEDULING_MASK_LOW = 1, ///< Low scheduling mask. - DBGTHREAD_PARAMETER_CPU_IDEAL = 2, ///< Ideal processor. - DBGTHREAD_PARAMETER_CPU_CREATOR = 3, ///< Processor that created the threod. -} DebugThreadParameter; - -///@} - -///@name Processes -///@{ - -/// Information on address space for process. All sizes are in pages (0x1000 bytes) -typedef struct { - u8 name[8]; ///< ASCII name of codeset - u16 unk1; - u16 unk2; - u32 unk3; - u32 text_addr; ///< .text start address - u32 text_size; ///< .text number of pages - u32 ro_addr; ///< .rodata start address - u32 ro_size; ///< .rodata number of pages - u32 rw_addr; ///< .data, .bss start address - u32 rw_size; ///< .data number of pages - u32 text_size_total; ///< total pages for .text (aligned) - u32 ro_size_total; ///< total pages for .rodata (aligned) - u32 rw_size_total; ///< total pages for .data, .bss (aligned) - u32 unk4; - u64 program_id; ///< Program ID -} CodeSetInfo; - -/// Information for the main thread of a process. -typedef struct -{ - int priority; ///< Priority of the main thread. - u32 stack_size; ///< Size of the stack of the main thread. - int argc; ///< Unused on retail kernel. - u16* argv; ///< Unused on retail kernel. - u16* envp; ///< Unused on retail kernel. -} StartupInfo; - -///@} - -/** - * @brief Gets the thread local storage buffer. - * @return The thread local storage bufger. - */ -static inline void* getThreadLocalStorage(void) -{ - void* ret; - __asm__ ("mrc p15, 0, %[data], c13, c0, 3" : [data] "=r" (ret)); - return ret; -} - -/** - * @brief Gets the thread command buffer. - * @return The thread command bufger. - */ -static inline u32* getThreadCommandBuffer(void) -{ - return (u32*)((u8*)getThreadLocalStorage() + 0x80); -} - -/** - * @brief Gets the thread static buffer. - * @return The thread static bufger. - */ -static inline u32* getThreadStaticBuffers(void) -{ - return (u32*)((u8*)getThreadLocalStorage() + 0x180); -} - -///@name Memory management -///@{ -/** - * @brief Controls memory mapping - * @param[out] addr_out The virtual address resulting from the operation. Usually the same as addr0. - * @param addr0 The virtual address to be used for the operation. - * @param addr1 The virtual address to be (un)mirrored by @p addr0 when using @ref MEMOP_MAP or @ref MEMOP_UNMAP. - * It has to be pointing to a RW memory. - * Use NULL if the operation is @ref MEMOP_FREE or @ref MEMOP_ALLOC. - * @param size The requested size for @ref MEMOP_ALLOC and @ref MEMOP_ALLOC_LINEAR. - * @param op Operation flags. See @ref MemOp. - * @param perm A combination of @ref MEMPERM_READ and @ref MEMPERM_WRITE. Using MEMPERM_EXECUTE will return an error. - * Value 0 is used when unmapping memory. - * - * If a memory is mapped for two or more addresses, you have to use MEMOP_UNMAP before being able to MEMOP_FREE it. - * MEMOP_MAP will fail if @p addr1 was already mapped to another address. - * - * More information is available at http://3dbrew.org/wiki/SVC#Memory_Mapping. - * - * @sa svcControlProcessMemory - */ -Result svcControlMemory(u32* addr_out, u32 addr0, u32 addr1, u32 size, MemOp op, MemPerm perm); - -/** - * @brief Controls the memory mapping of a process - * @param addr0 The virtual address to map - * @param addr1 The virtual address to be mapped by @p addr0 - * @param type Only operations @ref MEMOP_MAP, @ref MEMOP_UNMAP and @ref MEMOP_PROT are allowed. - * - * This is the only SVC which allows mapping executable memory. - * Using @ref MEMOP_PROT will change the memory permissions of an already mapped memory. - * - * @note The pseudo handle for the current process is not supported by this service call. - * @sa svcControlProcess - */ -Result svcControlProcessMemory(Handle process, u32 addr0, u32 addr1, u32 size, u32 type, u32 perm); - -/** - * @brief Creates a block of shared memory - * @param[out] memblock Pointer to store the handle of the block - * @param addr Address of the memory to map, page-aligned. So its alignment must be 0x1000. - * @param size Size of the memory to map, a multiple of 0x1000. - * @param my_perm Memory permissions for the current process - * @param other_perm Memory permissions for the other processes - * - * @note The shared memory block, and its rights, are destroyed when the handle is closed. - */ -Result svcCreateMemoryBlock(Handle* memblock, u32 addr, u32 size, MemPerm my_perm, MemPerm other_perm); - -/** - * @brief Maps a block of shared memory - * @param memblock Handle of the block - * @param addr Address of the memory to map, page-aligned. So its alignment must be 0x1000. - * @param my_perm Memory permissions for the current process - * @param other_perm Memory permissions for the other processes - * - * @note The shared memory block, and its rights, are destroyed when the handle is closed. - */ -Result svcMapMemoryBlock(Handle memblock, u32 addr, MemPerm my_perm, MemPerm other_perm); - -/** - * @brief Maps a block of process memory. - * @param process Handle of the process. - * @param startAddr Start address of the memory to map. - * @param endAddr End address of the memory to map. - */ -Result svcMapProcessMemory(Handle process, u32 startAddr, u32 endAddr); - -/** - * @brief Unmaps a block of process memory. - * @param process Handle of the process. - * @param startAddr Start address of the memory to unmap. - * @param endAddr End address of the memory to unmap. - */ -Result svcUnmapProcessMemory(Handle process, u32 startAddr, u32 endAddr); - -/** - * @brief Unmaps a block of shared memory - * @param memblock Handle of the block - * @param addr Address of the memory to unmap, page-aligned. So its alignment must be 0x1000. - */ -Result svcUnmapMemoryBlock(Handle memblock, u32 addr); - -/** - * @brief Begins an inter-process DMA. - * @param[out] dma Pointer to output the handle of the DMA to. - * @param dstProcess Destination process. - * @param dst Buffer to write data to. - * @param srcprocess Source process. - * @param src Buffer to read data from. - * @param size Size of the data to DMA. - * @param dmaConfig DMA configuration data. - */ -Result svcStartInterProcessDma(Handle* dma, Handle dstProcess, void* dst, Handle srcProcess, const void* src, u32 size, void* dmaConfig); - -/** - * @brief Terminates an inter-process DMA. - * @param dma Handle of the DMA. - */ -Result svcStopDma(Handle dma); - -/** - * @brief Gets the state of an inter-process DMA. - * @param[out] dmaState Pointer to output the state of the DMA to. - * @param dma Handle of the DMA. - */ -Result svcGetDmaState(void* dmaState, Handle dma); - -/** - * @brief Queries memory information. - * @param[out] info Pointer to output memory info to. - * @param out Pointer to output page info to. - * @param addr Virtual memory address to query. - */ -Result svcQueryMemory(MemInfo* info, PageInfo* out, u32 addr); - -/** - * @brief Queries process memory information. - * @param[out] info Pointer to output memory info to. - * @param[out] out Pointer to output page info to. - * @param process Process to query memory from. - * @param addr Virtual memory address to query. - */ -Result svcQueryProcessMemory(MemInfo* info, PageInfo* out, Handle process, u32 addr); - -/** - * @brief Invalidates a process's data cache. - * @param process Handle of the process. - * @param addr Address to invalidate. - * @param size Size of the memory to invalidate. - */ -Result svcInvalidateProcessDataCache(Handle process, void* addr, u32 size); - -/** - * @brief Flushes a process's data cache. - * @param process Handle of the process. - * @param addr Address to flush. - * @param size Size of the memory to flush. - */ -Result svcFlushProcessDataCache(Handle process, void const* addr, u32 size); -///@} - - -///@name Process management -///@{ -/** - * @brief Gets the handle of a process. - * @param[out] process The handle of the process - * @param processId The ID of the process to open - */ -Result svcOpenProcess(Handle* process, u32 processId); - -/// Exits the current process. -void svcExitProcess() __attribute__((noreturn)); - -/** - * @brief Terminates a process. - * @param process Handle of the process to terminate. - */ -Result svcTerminateProcess(Handle process); - -/** - * @brief Gets information about a process. - * @param[out] out Pointer to output process info to. - * @param process Handle of the process to get information about. - * @param type Type of information to retreieve. - */ -Result svcGetProcessInfo(s64* out, Handle process, u32 type); - -/** - * @brief Gets the ID of a process. - * @param[out] out Pointer to output the process ID to. - * @param handle Handle of the process to get the ID of. - */ -Result svcGetProcessId(u32 *out, Handle handle); - -/** - * @brief Gets a list of running processes. - * @param[out] processCount Pointer to output the process count to. - * @param[out] processIds Pointer to output the process IDs to. - * @param processIdMaxCount Maximum number of process IDs. - */ -Result svcGetProcessList(s32* processCount, u32* processIds, s32 processIdMaxCount); - -/** - * @brief Gets a list of the threads of a process. - * @param[out] threadCount Pointer to output the thread count to. - * @param[out] threadIds Pointer to output the thread IDs to. - * @param threadIdMaxCount Maximum number of thread IDs. - * @param process Process handle to list the threads of. - */ -Result svcGetThreadList(s32* threadCount, u32* threadIds, s32 threadIdMaxCount, Handle process); - -/** - * @brief Creates a port. - * @param[out] portServer Pointer to output the port server handle to. - * @param[out] portClient Pointer to output the port client handle to. - * @param name Name of the port. - * @param maxSessions Maximum number of sessions that can connect to the port. - */ -Result svcCreatePort(Handle* portServer, Handle* portClient, const char* name, s32 maxSessions); - -/** - * @brief Connects to a port. - * @param[out] out Pointer to output the port handle to. - * @param portName Name of the port. - */ -Result svcConnectToPort(volatile Handle* out, const char* portName); - -/** - * @brief Sets up virtual address space for a new process - * @param[out] out Pointer to output the code set handle to. - * @param info Description for setting up the addresses - * @param code_ptr Pointer to .text in shared memory - * @param ro_ptr Pointer to .rodata in shared memory - * @param data_ptr Pointer to .data in shared memory - */ -Result svcCreateCodeSet(Handle* out, const CodeSetInfo *info, void* code_ptr, void* ro_ptr, void* data_ptr); - -/** - * @brief Sets up virtual address space for a new process - * @param[out] out Pointer to output the process handle to. - * @param codeset Codeset created for this process - * @param arm11kernelcaps ARM11 Kernel Capabilities from exheader - * @param arm11kernelcaps_num Number of kernel capabilities - */ -Result svcCreateProcess(Handle* out, Handle codeset, const u32 *arm11kernelcaps, u32 arm11kernelcaps_num); - -/** - * @brief Sets a process's affinity mask. - * @param process Handle of the process. - * @param affinitymask Pointer to retrieve the affinity masks from. - * @param processorcount Number of processors. - */ -Result svcSetProcessAffinityMask(Handle process, const u8* affinitymask, s32 processorcount); - -/** - * Sets a process's ideal processor. - * @param process Handle of the process. - * @param processorid ID of the thread's ideal processor. - */ -Result svcSetProcessIdealProcessor(Handle process, s32 processorid); - -/** - * Launches the main thread of the process. - * @param process Handle of the process. - * @param info Pointer to a StartupInfo structure describing information for the main thread. - */ -Result svcRun(Handle process, const StartupInfo* info); - -///@} - -///@name Multithreading -///@{ -/** - * @brief Creates a new thread. - * @param[out] thread The thread handle - * @param entrypoint The function that will be called first upon thread creation - * @param arg The argument passed to @p entrypoint - * @param stack_top The top of the thread's stack. Must be 0x8 bytes mem-aligned. - * @param thread_priority Low values gives the thread higher priority. - * For userland apps, this has to be within the range [0x18;0x3F] - * @param processor_id The id of the processor the thread should be ran on. Those are labelled starting from 0. - * For old 3ds it has to be <2, and for new 3DS <4. - * Value -1 means all CPUs and -2 read from the Exheader. - * - * The processor with ID 1 is the system processor. - * To enable multi-threading on this core you need to call APT_SetAppCpuTimeLimit at least once with a non-zero value. - * - * Since a thread is considered as a waitable object, you can use @ref svcWaitSynchronization - * and @ref svcWaitSynchronizationN to join with it. - * - * @note The kernel will clear the @p stack_top's address low 3 bits to make sure it is 0x8-bytes aligned. - */ -Result svcCreateThread(Handle* thread, ThreadFunc entrypoint, u32 arg, u32* stack_top, s32 thread_priority, s32 processor_id); - -/** - * @brief Gets the handle of a thread. - * @param[out] thread The handle of the thread - * @param process The ID of the process linked to the thread - */ -Result svcOpenThread(Handle* thread,Handle process, u32 threadId); - -/** - * @brief Exits the current thread. - * - * This will trigger a state change and hence release all @ref svcWaitSynchronization operations. - * It means that you can join a thread by calling @code svcWaitSynchronization(threadHandle,yourtimeout); @endcode - */ -void svcExitThread(void) __attribute__((noreturn)); - -/** - * @brief Puts the current thread to sleep. - * @param ns The minimum number of nanoseconds to sleep for. - */ -void svcSleepThread(s64 ns); - -/// Retrieves the priority of a thread. -Result svcGetThreadPriority(s32 *out, Handle handle); - -/** - * @brief Changes the priority of a thread - * @param prio For userland apps, this has to be within the range [0x18;0x3F] - * - * Low values gives the thread higher priority. - */ -Result svcSetThreadPriority(Handle thread, s32 prio); - -/** - * @brief Gets a thread's affinity mask. - * @param[out] affinitymask Pointer to output the affinity masks to. - * @param thread Handle of the thread. - * @param processorcount Number of processors. - */ -Result svcGetThreadAffinityMask(u8* affinitymask, Handle thread, s32 processorcount); - -/** - * @brief Sets a thread's affinity mask. - * @param thread Handle of the thread. - * @param affinitymask Pointer to retrieve the affinity masks from. - * @param processorcount Number of processors. - */ -Result svcSetThreadAffinityMask(Handle thread, const u8* affinitymask, s32 processorcount); - -/** - * @brief Gets a thread's ideal processor. - * @param[out] processorid Pointer to output the ID of the thread's ideal processor to. - * @param thread Handle of the thread. - */ -Result svcGetThreadIdealProcessor(s32* processorid, Handle thread); - -/** - * Sets a thread's ideal processor. - * @param thread Handle of the thread. - * @param processorid ID of the thread's ideal processor. - */ -Result svcSetThreadIdealProcessor(Handle thread, s32 processorid); - -/** - * @brief Returns the ID of the processor the current thread is running on. - * @sa svcCreateThread - */ -s32 svcGetProcessorID(void); - -/** - * @brief Gets the ID of a thread. - * @param[out] out Pointer to output the thread ID of the thread @p handle to. - * @param handle Handle of the thread. - */ -Result svcGetThreadId(u32 *out, Handle handle); - -/** - * @brief Gets the resource limit set of a process. - * @param[out] resourceLimit Pointer to output the resource limit set handle to. - * @param process Process to get the resource limits of. - */ -Result svcGetResourceLimit(Handle* resourceLimit, Handle process); - -/** - * @brief Gets the value limits of a resource limit set. - * @param[out] values Pointer to output the value limits to. - * @param resourceLimit Resource limit set to use. - * @param names Resource limit names to get the limits of. - * @param nameCount Number of resource limit names. - */ -Result svcGetResourceLimitLimitValues(s64* values, Handle resourceLimit, u32* names, s32 nameCount); - -/** - * @brief Gets the values of a resource limit set. - * @param[out] values Pointer to output the values to. - * @param resourceLimit Resource limit set to use. - * @param names Resource limit names to get the values of. - * @param nameCount Number of resource limit names. - */ -Result svcGetResourceLimitCurrentValues(s64* values, Handle resourceLimit, u32* names, s32 nameCount); - -/** - * @brief Gets the process ID of a thread. - * @param[out] out Pointer to output the process ID of the thread @p handle to. - * @param handle Handle of the thread. - * @sa svcOpenProcess - */ -Result svcGetProcessIdOfThread(u32 *out, Handle handle); - -/** - * @brief Checks if a thread handle is valid. - * This requests always return an error when called, it only checks if the handle is a thread or not. - * @return 0xD8E007ED (BAD_ENUM) if the Handle is a Thread Handle - * @return 0xD8E007F7 (BAD_HANDLE) if it isn't. - */ -Result svcGetThreadInfo(s64* out, Handle thread, ThreadInfoType type); -///@} - - -///@name Synchronization -///@{ -/** - * @brief Creates a mutex. - * @param[out] mutex Pointer to output the handle of the created mutex to. - * @param initially_locked Whether the mutex should be initially locked. - */ -Result svcCreateMutex(Handle* mutex, bool initially_locked); - -/** - * @brief Releases a mutex. - * @param handle Handle of the mutex. - */ -Result svcReleaseMutex(Handle handle); - -/** - * @brief Creates a semaphore. - * @param[out] semaphore Pointer to output the handle of the created semaphore to. - * @param initial_count Initial count of the semaphore. - * @param max_count Maximum count of the semaphore. - */ -Result svcCreateSemaphore(Handle* semaphore, s32 initial_count, s32 max_count); - -/** - * @brief Releases a semaphore. - * @param[out] count Pointer to output the current count of the semaphore to. - * @param semaphore Handle of the semaphore. - * @param release_count Number to increase the semaphore count by. - */ -Result svcReleaseSemaphore(s32* count, Handle semaphore, s32 release_count); - -/** - * @brief Creates an event handle. - * @param[out] event Pointer to output the created event handle to. - * @param reset_type Type of reset the event uses (RESET_ONESHOT/RESET_STICKY). - */ -Result svcCreateEvent(Handle* event, ResetType reset_type); - -/** - * @brief Signals an event. - * @param handle Handle of the event to signal. - */ -Result svcSignalEvent(Handle handle); - -/** - * @brief Clears an event. - * @param handle Handle of the event to clear. - */ -Result svcClearEvent(Handle handle); - -/** - * @brief Waits for synchronization on a handle. - * @param handle Handle to wait on. - * @param nanoseconds Maximum nanoseconds to wait for. - */ -Result svcWaitSynchronization(Handle handle, s64 nanoseconds); - -/** - * @brief Waits for synchronization on multiple handles. - * @param[out] out Pointer to output the index of the synchronized handle to. - * @param handles Handles to wait on. - * @param handles_num Number of handles. - * @param wait_all Whether to wait for synchronization on all handles. - * @param nanoseconds Maximum nanoseconds to wait for. - */ -Result svcWaitSynchronizationN(s32* out, Handle* handles, s32 handles_num, bool wait_all, s64 nanoseconds); - -/** - * @brief Creates an address arbiter - * @param[out] mutex Pointer to output the handle of the created address arbiter to. - * @sa svcArbitrateAddress - */ -Result svcCreateAddressArbiter(Handle *arbiter); - -/** - * @brief Arbitrate an address, can be used for synchronization - * @param arbiter Handle of the arbiter - * @param addr A pointer to a s32 value. - * @param type Type of action to be performed by the arbiter - * @param value Number of threads to signal if using @ref ARBITRATION_SIGNAL, or the value used for comparison. - * - * This will perform an arbitration based on #type. The comparisons are done between #value and the value at the address #addr. - * - * @code - * s32 val=0; - * // Does *nothing* since val >= 0 - * svcCreateAddressArbiter(arbiter,&val,ARBITRATION_WAIT_IF_LESS_THAN,0,0); - * // Thread will wait for a signal or wake up after 10000000 nanoseconds because val < 1. - * svcCreateAddressArbiter(arbiter,&val,ARBITRATION_WAIT_IF_LESS_THAN_TIMEOUT,1,10000000ULL); - * @endcode - */ -Result svcArbitrateAddress(Handle arbiter, u32 addr, ArbitrationType type, s32 value, s64 nanoseconds); - -/** - * @brief Sends a synchronized request to a session handle. - * @param session Handle of the session. - */ -Result svcSendSyncRequest(Handle session); - -/** - * @brief Accepts a session. - * @param[out] session Pointer to output the created session handle to. - * @param port Handle of the port to accept a session from. - */ -Result svcAcceptSession(Handle* session, Handle port); - -/** - * @brief Replies to and receives a new request. - * @param index Pointer to the index of the request. - * @param handles Session handles to receive requests from. - * @param handleCount Number of handles. - * @param replyTarget Handle of the session to reply to. - */ -Result svcReplyAndReceive(s32* index, Handle* handles, s32 handleCount, Handle replyTarget); - -/** - * @brief Binds an event or semaphore handle to an ARM11 interrupt. - * @param interruptId Interrupt identfier (see https://www.3dbrew.org/wiki/ARM11_Interrupts). - * @param eventOrSemaphore Event or semaphore handle to bind to the given interrupt. - * @param priority Priority of the interrupt for the current process. - * @param isManualClear Indicates whether the interrupt has to be manually cleared or not (= level-high active). - */ -Result svcBindInterrupt(u32 interruptId, Handle eventOrSemaphore, s32 priority, bool isManualClear); - -/** - * @brief Unbinds an event or semaphore handle from an ARM11 interrupt. - * @param interruptId Interrupt identfier, see (see https://www.3dbrew.org/wiki/ARM11_Interrupts). - * @param eventOrSemaphore Event or semaphore handle to unbind from the given interrupt. - */ -Result svcUnbindInterrupt(u32 interruptId, Handle eventOrSemaphore); -///@} - -///@name Time -///@{ -/** - * @brief Creates a timer. - * @param[out] timer Pointer to output the handle of the created timer to. - * @param reset_type Type of reset to perform on the timer. - */ -Result svcCreateTimer(Handle* timer, ResetType reset_type); - -/** - * @brief Sets a timer. - * @param timer Handle of the timer to set. - * @param initial Initial value of the timer. - * @param interval Interval of the timer. - */ -Result svcSetTimer(Handle timer, s64 initial, s64 interval); - -/** - * @brief Cancels a timer. - * @param timer Handle of the timer to cancel. - */ -Result svcCancelTimer(Handle timer); - -/** - * @brief Clears a timer. - * @param timer Handle of the timer to clear. - */ -Result svcClearTimer(Handle timer); - -/** - * @brief Gets the current system tick. - * @return The current system tick. - */ -u64 svcGetSystemTick(void); -///@} - -///@name System -///@{ -/** - * @brief Closes a handle. - * @param handle Handle to close. - */ -Result svcCloseHandle(Handle handle); - -/** - * @brief Duplicates a handle. - * @param[out] out Pointer to output the duplicated handle to. - * @param original Handle to duplicate. - */ -Result svcDuplicateHandle(Handle* out, Handle original); - -/** - * @brief Gets a handle info. - * @param[out] out Pointer to output the handle info to. - * @param handle Handle to get the info for. - * @param param Parameter clarifying the handle info type. - */ -Result svcGetHandleInfo(s64* out, Handle handle, u32 param); - -/** - * @brief Gets the system info. - * @param[out] out Pointer to output the system info to. - * @param type Type of system info to retrieve. - * @param param Parameter clarifying the system info type. - */ -Result svcGetSystemInfo(s64* out, u32 type, s32 param); - -/** - * @brief Sets the current kernel state. - * @param type Type of state to set (the other parameters depend on it). - */ -Result svcKernelSetState(u32 type, ...); -///@} - - -///@name Debugging -///@{ -/** - * @brief Breaks execution. - * @param breakReason Reason for breaking. - */ -void svcBreak(UserBreakType breakReason); - -/** - * @brief Breaks execution (LOAD_RO and UNLOAD_RO). - * @param breakReason Debug reason for breaking. - * @param croInfo Library information. - * @param croInfoSize Size of the above structure. - */ -void svcBreakRO(UserBreakType breakReason, const void* croInfo, u32 croInfoSize) __asm__("svcBreak"); - -/** - * @brief Outputs a debug string. - * @param str String to output. - * @param length Length of the string to output, needs to be positive. - */ -Result svcOutputDebugString(const char* str, s32 length); -/** - * @brief Creates a debug handle for an active process. - * @param[out] debug Pointer to output the created debug handle to. - * @param processId ID of the process to debug. - */ -Result svcDebugActiveProcess(Handle* debug, u32 processId); - -/** - * @brief Breaks a debugged process. - * @param debug Debug handle of the process. - */ -Result svcBreakDebugProcess(Handle debug); - -/** - * @brief Terminates a debugged process. - * @param debug Debug handle of the process. - */ -Result svcTerminateDebugProcess(Handle debug); - -/** - * @brief Gets the current debug event of a debugged process. - * @param[out] info Pointer to output the debug event information to. - * @param debug Debug handle of the process. - */ -Result svcGetProcessDebugEvent(DebugEventInfo* info, Handle debug); - -/** - * @brief Continues the current debug event of a debugged process (not necessarily the same as @ref svcGetProcessDebugEvent). - * @param debug Debug handle of the process. - * @param flags Flags to continue with, see @ref DebugFlags. - */ -Result svcContinueDebugEvent(Handle debug, DebugFlags flags); - -/** - * @brief Fetches the saved registers of a thread, either inactive or awaiting @ref svcContinueDebugEvent, belonging to a debugged process. - * @param[out] context Values of the registers to fetch, see @ref ThreadContext. - * @param debug Debug handle of the parent process. - * @param threadId ID of the thread to fetch the saved registers of. - * @param controlFlags Which registers to fetch, see @ref ThreadContextControlFlags. - */ -Result svcGetDebugThreadContext(ThreadContext* context, Handle debug, u32 threadId, ThreadContextControlFlags controlFlags); - -/** - * @brief Updates the saved registers of a thread, either inactive or awaiting @ref svcContinueDebugEvent, belonging to a debugged process. - * @param debug Debug handle of the parent process. - * @param threadId ID of the thread to update the saved registers of. - * @param context Values of the registers to update, see @ref ThreadContext. - * @param controlFlags Which registers to update, see @ref ThreadContextControlFlags. - */ -Result svcSetDebugThreadContext(Handle debug, u32 threadId, ThreadContext* context, ThreadContextControlFlags controlFlags); - -/** - * @brief Queries memory information of a debugged process. - * @param[out] info Pointer to output memory info to. - * @param[out] out Pointer to output page info to. - * @param debug Debug handle of the process to query memory from. - * @param addr Virtual memory address to query. - */ -Result svcQueryDebugProcessMemory(MemInfo* info, PageInfo* out, Handle debug, u32 addr); - -/** - * @brief Reads from a debugged process's memory. - * @param buffer Buffer to read data to. - * @param debug Debug handle of the process. - * @param addr Address to read from. - * @param size Size of the memory to read. - */ -Result svcReadProcessMemory(void* buffer, Handle debug, u32 addr, u32 size); - -/** - * @brief Writes to a debugged process's memory. - * @param debug Debug handle of the process. - * @param buffer Buffer to write data from. - * @param addr Address to write to. - * @param size Size of the memory to write. - */ -Result svcWriteProcessMemory(Handle debug, const void* buffer, u32 addr, u32 size); - -/** - * @brief Sets an hardware breakpoint or watchpoint. This is an interface to the BRP/WRP registers, see http://infocenter.arm.com/help/topic/com.arm.doc.ddi0360f/CEGEBGFC.html . - * @param registerId range 0..5 = breakpoints (BRP0-5), 0x100..0x101 = watchpoints (WRP0-1). The previous stop point for the register is disabled. - * @param control Value of the control regiser. - * @param value Value of the value register: either and address (if bit21 of control is clear) or the debug handle of a process to fetch the context ID of. - */ -Result svcSetHardwareBreakPoint(s32 registerId, u32 control, u32 value); - -/** - * @brief Gets a debugged thread's parameter. - * @param[out] unused Unused. - * @param[out] out Output value. - * @param debug Debug handle of the process. - * @param threadId ID of the thread - * @param parameter Parameter to fetch, see @ref DebugThreadParameter. - */ -Result svcGetDebugThreadParam(s64* unused, u32* out, Handle debug, u32 threadId, DebugThreadParameter parameter); - -///@} - -/** - * @brief Executes a function in supervisor mode. - * @param callback Function to execute. - */ -Result svcBackdoor(s32 (*callback)(void)); - -/// Stop point, does nothing if the process is not attached (as opposed to 'bkpt' instructions) -#define SVC_STOP_POINT __asm__ volatile("svc 0xFF"); \ No newline at end of file diff --git a/Sources/illegal_cheats.c b/Sources/illegal_cheats.c deleted file mode 100644 index ca0eff5..0000000 --- a/Sources/illegal_cheats.c +++ /dev/null @@ -1,105 +0,0 @@ -// Filename: illegal_cheats.c - -#include "cheats.h" -#include "hid.h" - -/******************************** - * * - * Illegal Cheats * - * * - ********************************/ - -void illegalMenu(void) { - - new_entry("Catch Trial Pokemon", catchTrial); - new_entry("Catch Trainer's Pokemon", catchTrainers); - new_entry_arg("Pokemon can learn any TM", learnAnyTM, 0, LEARNANYTM, TOGGLE); - new_entry_arg("Learn all from Move Reminder", relearnAnyMove, 0, RELEARNANYMOVE, TOGGLE); -} - -// Catch Pokémon during Trial -void catchTrial(void) { - - u32 offset[][2] = - { - {0x080B8440, 0x0807638C}, - {0x080B88FC, 0x08076530}, - {0x080B8914, 0x08076530} - }; - - if (!checkAddress(offset[gameVer][0])) - return; - if (READU32(offset[gameVer][0]) == 0xE1A01004) { - WRITEU32(offset[gameVer][1], 0xE3A00001); - WRITEU32(offset[gameVer][0], 0xE3A01000); - } -} - - -// Catch Trainer's Pokémon -void catchTrainers(void) { - - u32 offset[] = - { - 0x08035000, - 0x08034E30, - 0x08034E30 - }; - - if (!checkAddress(offset[gameVer] + 0xC84)) - return; - if (READU32(offset[gameVer] + 0xC84) == 0x0A00000B) { - WRITEU32(offset[gameVer] + 0xC78, 0xE3A0B000); - WRITEU32(offset[gameVer] + 0xC7C, 0xE590000C); - WRITEU32(offset[gameVer] + 0xC80, 0xE5C0B000); - WRITEU32(offset[gameVer] + 0xC84, 0xEA00000B); - } -} - -void learnAnyTM(u32 state) { - - u32 offset[] = - { - 0x0048F0AC, - 0x00490D0C, - 0x00490D34 - }; - - static u32 original; - - if (state) { - original = READU32(offset[gameVer]); - WRITEU32(offset[gameVer], 0xE3A00001); - } else { - WRITEU32(offset[gameVer], original); - } -} - -void relearnAnyMove(u32 state) { - - u32 offset[][2] = - { - {0x0042DCD4, 0x004A6B30}, - {0x0042F698, 0x004A88D0}, - {0x0042F698, 0x004A88D0} - }; - - static u32 original[4]; - - if (state) { - original[0] = READU32(offset[gameVer][0] + 0x00000); - original[1] = READU32(offset[gameVer][0] + 0x4); - original[2] = READU32(offset[gameVer][0] + 0x8); - original[3] = READU32(offset[gameVer][1]); - - WRITEU32(offset[gameVer][0] + 0x0, 0xE3A01C02); - WRITEU32(offset[gameVer][0] + 0x4, 0xE28110CF); - WRITEU32(offset[gameVer][0] + 0x8, 0xE5851004); - WRITEU32(offset[gameVer][1], 0xE2850001); - } else { - WRITEU32(offset[gameVer][0] + 0x0, original[0]); - WRITEU32(offset[gameVer][0] + 0x4, original[1]); - WRITEU32(offset[gameVer][0] + 0x8, original[2]); - WRITEU32(offset[gameVer][1], original[3]); - } -} diff --git a/Sources/items.c b/Sources/items.c deleted file mode 100644 index 450efef..0000000 --- a/Sources/items.c +++ /dev/null @@ -1,257 +0,0 @@ -// Filename: items.c - -#include "cheats.h" -#include "hid.h" -#include "items.h" - - - -/******************************** - * * - * Items * - * * - ********************************/ - - -char selectedQuantity[4]; - -static u16 quantity = 50; - - -// Item menu entry -void itemMenu(void) { - - new_spoiler("Items"); - new_entry_managed("Increase Quantity +50", increaseQuantity, INCREASEQUANTITY, AUTO_DISABLE); - new_separator(); - - new_entry_managed("All Poke Balls xCCC", allPokeBalls, ALLPOKEBALLS, EXECUTE_ONCE); - new_entry_managed("All Items xCCC", allItems, ALLITEMS, EXECUTE_ONCE); - new_entry_managed("All Medicine xCCC", allMedicine, ALLMEDICINE, EXECUTE_ONCE); - new_entry_managed("All Berries xCCC", allBerries, ALLBERRIES, EXECUTE_ONCE); - new_entry_managed("All Poke Beans xCCC", allBeans, ALLBEANS, EXECUTE_ONCE); - new_entry_managed("All TMs", allTMs, ALLTMS, EXECUTE_ONCE); - new_entry_managed("All Clothes", allClothes, ALLCLOTHES, EXECUTE_ONCE); - new_line(); - exit_spoiler(); - updateQuantity(); -} - -// Updates item quantity on menu -void updateQuantity(void) { - char buf[5]; - - xsprintf(buf, "x%-3d", quantity); - replace_pattern("x***", buf, ALLPOKEBALLS); - replace_pattern("x***", buf, ALLITEMS); - replace_pattern("x***", buf, ALLMEDICINE); - replace_pattern("x***", buf, ALLBERRIES); - replace_pattern("x***", (quantity > 255) ? "x255" : buf, ALLBEANS); -} - - -// Increases item quantity by 50 -void increaseQuantity(void) { - switch(quantity) { - case 999: - quantity = 50; - break; - case 950: - quantity = 999; - break; - default: - quantity += 50; - } - updateQuantity(); -} - - -// Gives only Poké Balls -void allPokeBalls(void) { - u32 offset = 0x330D5934; - int value; - int existingIndex = 0; - - // Initialize array of already owned Poké Balls to an unused value - int existingPokeBalls[25]; - memset32(existingPokeBalls, 999, sizeof(existingPokeBalls)); - - // Iterates through inventory - for (int itemCount = 0; itemCount < TOTALPOKEBALLS + TOTALITEMS; itemCount++) { - - // Reads inventory slot and stores the item - value = READU32(offset + itemCount*4) & 0x3FF; - - // Checks if inventory slot has an item in it - if (value) { - - // Checks if inventory slot is already a Poké Ball and sets quantity - if (isinArray(value, arr_allPokeBalls, sizeof(arr_allPokeBalls))) { - WRITEU32(offset + itemCount*4, value + (quantity << 10)); - - // Adds Poké Ball to array so it will be skipped when end of - // inventory is reached - existingPokeBalls[existingIndex] = value; - existingIndex++; - } - - // Reached end of inventory - } else { - - // Iterates through Poké Balls to add - for (int i = 0; i < TOTALPOKEBALLS; i++) { - - // Checks if Poké Ball already exists in inventory and adds it if not - if (!isinArray(arr_allPokeBalls[i], existingPokeBalls, sizeof(existingPokeBalls))) { - WRITEU32(offset + itemCount*4, arr_allPokeBalls[i] + (quantity << 10)); - itemCount++; - } - } - - // Stops checking inventory and exits function after writing the - // last remaining Poké Balls - break; - } - } -} - - -// Gives all items -void allItems(void) { - int i = 0; - - // Start of Item Inventory - u32 offset = 0x330D5934; - - // Writes the array to inventory overwriting what's already there - for (i = 0; i < TOTALPOKEBALLS; i++) { - WRITEU32(offset + i*4, arr_allPokeBalls[i] + (quantity << 10)); - } - offset += i*4; - - for (i = 0; i < TOTALITEMS; i++) { - WRITEU32(offset + i*4, arr_allItems[i] + (quantity << 10)); - } - offset += i*4; - - // Writes 82 empty slots at end of inventory to erase duplicates from previous versions of this code - for (i = 0; i < 82; i++) { - WRITEU32(offset + i*4, 0x0); - } -} - - -// Gives all medicine -void allMedicine(void) { - int i = 0; - // Start of Medicine Inventory - u32 offset = 0x330D647C; - - // Writes the array to inventory overwriting what's already there - for (i = 0; i < TOTALMEDICINE; i++) { - WRITEU32(offset + i*4, arr_allMedicine[i] + (quantity << 10)); - } - offset += i*4; - // Writes 3 empty slots at end of inventory to erase duplicates from previous versions of this code - for (i = 0; i < 3; i++) { - WRITEU32(offset + i*4, 0x0); - } -} - -// Gives all TMs -void allTMs(void) { - - // Start of TM Inventory - u32 offset = 0x330D62CC; - - // Writes the array to inventory overwriting what's already there - for (int i = 0; i < TOTALTMS; i++) { - WRITEU32(offset + i*4, arr_allTMs[i] + (1 << 10)); - } -} - - -// Gives all Berries -void allBerries(void) { - int i = 0; - // Start of Berry Inventory - u32 offset = 0x330D657C; - - // Writes the array to inventory overwriting what's already there - for (i = 0; i < TOTALBERRIES; i++) { - WRITEU32(offset + i*4, arr_allBerries[i] + (quantity << 10)); - } - offset += i*4; - // Writes 17 empty slots at end of inventory to erase duplicates from previous versions of this code - for (i = 0; i < 17; i++) { - WRITEU32(offset + i*4, 0x0); - } -} - - -// Gives all PokeBeans -void allBeans(void) { - for (int i = 0; i < 15; i++) { - WRITEU8(0x33115490 + i, (quantity > 255) ? 0xFF : quantity); - } -} - - -// Function to add clothes to inventory -u32 clothesFunction(u32 offset, u8 data, u16 loop_num) { - for (int i = 0; i < loop_num; i++) { - WRITEU8(offset, data); - offset += 0x01; - } - return(offset); -} - -// All Clothes -void allClothes(void) { - u32 offset = 0x33116620; - - //Check if character is male - if (READU8(0x330D67D5) == 0x00) { - offset = clothesFunction(offset, 0x01, 0x003A); - offset = clothesFunction(offset, 0x00, 0x0087); - offset = clothesFunction(offset, 0x01, 0x0014); - offset = clothesFunction(offset, 0x00, 0x0020); - offset = clothesFunction(offset, 0x01, 0x0100); - offset = clothesFunction(offset, 0x00, 0x008F); - offset = clothesFunction(offset, 0x01, 0x0069); - offset = clothesFunction(offset, 0x00, 0x00C7); - offset = clothesFunction(offset, 0x01, 0x0025); - offset = clothesFunction(offset, 0x00, 0x0079); - offset = clothesFunction(offset, 0x01, 0x005F); - offset = clothesFunction(offset, 0x00, 0x0066); - offset = clothesFunction(offset, 0x01, 0x006D); - clothesFunction(offset, 0x00, 0x0044); - - // Else character is female - } else { - offset = clothesFunction(offset, 0x01, 0x005E); - offset = clothesFunction(offset, 0x00, 0x0020); - offset = clothesFunction(offset, 0x01, 0x0023); - offset = clothesFunction(offset, 0x00, 0x0020); - offset = clothesFunction(offset, 0x01, 0x0014); - offset = clothesFunction(offset, 0x00, 0x0020); - offset = clothesFunction(offset, 0x01, 0x018A); - offset = clothesFunction(offset, 0x00, 0x0005); - offset = clothesFunction(offset, 0x01, 0x00F9); - offset = clothesFunction(offset, 0x00, 0x0037); - offset = clothesFunction(offset, 0x01, 0x007E); - offset = clothesFunction(offset, 0x00, 0x0020); - offset = clothesFunction(offset, 0x01, 0x00A7); - offset = clothesFunction(offset, 0x00, 0x001E); - offset = clothesFunction(offset, 0x01, 0x0091); - clothesFunction(offset, 0x00, 0x0020); - } - - offset = 0x33116620; - - WRITEU32(0x000000F8 + offset, 0x03010101); - WRITEU32(0x000002C8 + offset, 0x03010101); - WRITEU32(0x000003B4 + offset, 0x01010103); - WRITEU32(0x00000450 + offset, 0x01030000); - WRITEU32(0x00000514 + offset, 0x03000000); -} diff --git a/Sources/items.h b/Sources/items.h deleted file mode 100644 index 7090e63..0000000 --- a/Sources/items.h +++ /dev/null @@ -1,99 +0,0 @@ -#ifndef ITEMS_H -#define ITEMS_H -#define TOTALPOKEBALLS (sizeof(arr_allPokeBalls) / 4) -#define TOTALITEMS (sizeof(arr_allItems) / 4) -#define TOTALMEDICINE (sizeof(arr_allMedicine) / 4) -#define TOTALTMS (sizeof(arr_allTMs) / 4) -#define TOTALBERRIES (sizeof(arr_allBerries) / 4) - - -// Array for all Poké Ball types -int arr_allPokeBalls[22] = -{ - 1, 2, 3, 4, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 492, 493, - 494, 495, 496, 497, 498, 851 -}; - - -// Array of legal items -int arr_allItems[236] = -{ - 55, 56, 57, 58, 59, 60, 61, 62, - 63, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, - 104, 105, 106, 107, 108, 109, 110, 112, - 116, 117, 118, 119, 135, 136, 213, 214, - 215, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 265, 266, 267, 268, - 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, 534, 535, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 547, - 571, 572, 573, 577, 580, 581, 582, 583, - 639, 640, 644, 646, 647, 648, 649, 650, - 656, 659, 660, 661, 670, 671, 672, 673, - 675, 676, 677, 678, 679, 683, 704, 754, - 758, 759, 760, 763, 769, 795, 796, 846, - 849, 853, 854, 855, 856, 879, 880, 881, - 882, 883, 884, 904, 905, 906, 907, 908, - 909, 910, 911, 912, 913, 914, 915, 916, - 917, 918, 919, 920 -}; - - -// Array of legal medicine -int arr_allMedicine[51] = -{ - 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 134, 504, - 565, 566, 567, 568, 569, 570, 591, 645, - 708, 709, 852 -}; - - -// Array of legal TMs -int arr_allTMs[100] = -{ - 328, 329, 330, 331, 332, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, 379, 380, 381, 382, 383, - 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 618, 619, 620, 690, - 691, 692, 693, 694 -}; - - -// Array of legal berries -int arr_allBerries[50] = -{ - 149, 150, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, 163, 165, - 168, 169, 170, 171, 172, 173, 174, 184, - 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 686, - 687, 688 -}; - -#endif diff --git a/Sources/menu.c b/Sources/menu.c deleted file mode 100644 index e92803b..0000000 --- a/Sources/menu.c +++ /dev/null @@ -1,81 +0,0 @@ -#include "cheats.h" - -// Note: Luma3DS LayeredFS writes code up to 0x005977B8. Do not use addresses -// prior to this when storing ASM code for cheats - -char *builder_name = "AnalogMan", - version[7] = "v0.6.2", - updateVer[12] = "Update v?.?", - formattedVer[35]; - -int gameVer = 0; -bool battleInfo = false; - -void getVersion(void) { - protect_region(0x00100000); - switch (READU8(0x00100040)) { - case 0x30: - gameVer = 0; - xsprintf(updateVer, "%s", "Update v1.0"); - break; - case 0x78: - gameVer = 1; - xsprintf(updateVer, "%s", "Update v1.1"); - break; - case 0x80: - gameVer = 2; - xsprintf(updateVer, "%s", "Update v1.2"); - break; - default: - xsprintf(updateVer, "%s", "Update v?.?"); - } -} - -void disableOnlineCheats(void) { - if(getWifiStatus()) { - disable_entry(MAXBATTLESTATS); - disable_entry(ZMOVES); - disable_entry(INFZMOVES); - disable_entry(SHOWOPPONENTINFO); - } -} - - -void always_run(void) { - execute_all(); - generateSpawn(); - setRandomID(); - shinyPokemon(); - disableOnlineCheats(); -} - - -void my_menus(void) { - overlayInit(); - getVersion(); - xsprintf(formattedVer, "%14s %s", version, updateVer); - new_unselectable_entry("Entries w/ an orange background"); - new_unselectable_entry("have notes. Press (Y) to view."); - new_super_unselectable_entry(formattedVer, always_run); - new_separator(); - expMenu(); - new_spoiler("Modifiers"); - timeMenu(); - appearanceMenu(); - battleMenu(); - movementMenu(); - pokemonMenu(); - exit_spoiler(); - itemMenu(); - currencyMenu(); - miscMenu(); - new_line(); - new_line(); - new_separator(); - new_unselectable_entry("WARNING: The codes on the next"); - new_unselectable_entry("page may create Pokemon that"); - new_unselectable_entry("cannot be battled or traded"); - new_separator(); - pokemonSpawnMenu(); - illegalMenu(); -} diff --git a/Sources/misc.c b/Sources/misc.c deleted file mode 100644 index e49333f..0000000 --- a/Sources/misc.c +++ /dev/null @@ -1,232 +0,0 @@ -// Filename: misc.c - -#include "cheats.h" -#include "hid.h" - -/******************************** - * * - * Misc * - * * - ********************************/ - - -// Misc menu entry -void miscMenu(void) { - - new_spoiler("Misc"); - qrMenu(); - new_spoiler("Group 1"); - new_entry("Instant Text Speed", instantText); - new_entry_arg_note("Access PC Anywhere", "Open Options submenu", pcAnywhere, 0, PCANYWHERE, TOGGLE); - new_entry_managed_note("Rematch Trainers", "Hold L & talk to Trainer", rematchTrainers, REMATCHTRAINERS, 0); - new_entry_arg_note("Remove Character Outlines", "Open a menu to see change", toggleOutlines, 0, TOGGLEOUTLINES, TOGGLE); - new_entry_arg_note("NTR Debug Connection", "Disables NFC in order to allow stable NTR connection", toggleNFC, 0, TOGGLENFC, TOGGLE); - exit_spoiler(); - new_spoiler("Group 2"); - new_entry_managed_note("Change Camera Zoom", "START+L = Enable\nSTART+R = Disable", cameraZoom, CAMERAZOOM, 0); - new_entry_managed_note("View IV/EV on Status Screen", "Press (START) or (X) respectively on Pokemon staus screen and then change Pokemon", viewIVEV, VIEWIVEV, 0); - exit_spoiler(); - new_line(); - exit_spoiler(); -} - -// Displays IVs or EVs in place of stats on Pokémon Status screen when X or START is held -void viewIVEV(void) { - - u32 offset = 0x08010000; - - u32 version_diff[] = - { - 0x00, - 0xE8, - 0xDE - }; - - if (!checkAddress(offset + 0xEAC)) - return; - if (READU32(offset + 0xEAC) == 0xEBFFFCE7) { - if (is_pressed(BUTTON_X)) { - WRITEU32(offset + 0xE78, 0xE591000C); - WRITEU32(offset + 0xE7C, 0xEBF77382 - version_diff[gameVer]); - WRITEU32(offset + 0xEB0, 0xE596000C); - WRITEU32(offset + 0xEB4, 0xEBF77374 - version_diff[gameVer]); - WRITEU32(offset + 0xEE0, 0xE596000C); - WRITEU32(offset + 0xEE4, 0xEBF7740A - version_diff[gameVer]); - WRITEU32(offset + 0xF10, 0xE596000C); - WRITEU32(offset + 0xF14, 0xEBF77409 - version_diff[gameVer]); - WRITEU32(offset + 0xF40, 0xE596000C); - WRITEU32(offset + 0xF44, 0xEBF77484 - version_diff[gameVer]); - WRITEU32(offset + 0xF70, 0xE596000C); - WRITEU32(offset + 0xF74, 0xEBF77483 - version_diff[gameVer]); - WRITEU32(offset + 0xFA0, 0xE596000C); - WRITEU32(offset + 0xFA4, 0xEBF773CF - version_diff[gameVer]); - } - if (is_pressed(BUTTON_ST)) { - WRITEU32(offset + 0xE78, 0xE591000C); - WRITEU32(offset + 0xE7C, 0xEBF773E3 - version_diff[gameVer]); - WRITEU32(offset + 0xEB0, 0xE596000C); - WRITEU32(offset + 0xEB4, 0xEBF773D5 - version_diff[gameVer]); - WRITEU32(offset + 0xEE0, 0xE596000C); - WRITEU32(offset + 0xEE4, 0xEBF7742D - version_diff[gameVer]); - WRITEU32(offset + 0xF10, 0xE596000C); - WRITEU32(offset + 0xF14, 0xEBF7742E - version_diff[gameVer]); - WRITEU32(offset + 0xF40, 0xE596000C); - WRITEU32(offset + 0xF44, 0xEBF774B6 - version_diff[gameVer]); - WRITEU32(offset + 0xF70, 0xE596000C); - WRITEU32(offset + 0xF74, 0xEBF774B7 - version_diff[gameVer]); - WRITEU32(offset + 0xFA0, 0xE596000C); - WRITEU32(offset + 0xFA4, 0xEBF773F0 - version_diff[gameVer]); - } - } -} - - -// Zooms camera out or in with START+L / START+R -void cameraZoom(void) { - - u32 offset[][2] = - { - {0x00595824, 0x0803797C}, - {0x00597724, 0x08037B18}, - {0x00597840, 0x08037B18}, - }; - - u32 data[] = - { - 0xEBFAEBA8, - 0xEBFAEB01, - 0xEBFAEB48 - }; - - static const u8 buffer[] = { - 0x1C, 0x0A, 0x94, 0xED, - 0x03, 0x1A, 0x9F, 0xED, - 0x01, 0x0A, 0x30, 0xEE, - 0x1C, 0x0A, 0x84, 0xED, - 0x04, 0x00, 0x84, 0xE2, - 0x1E, 0xFF, 0x2F, 0xE1 - }; - memcpy((void *)(offset[gameVer][0]), buffer, 0x18); - - if (!checkAddress(offset[gameVer][1])) - return; - else { - if (READU32(offset[gameVer][1]) == 0xE2840004) - WRITEU32(offset[gameVer][1], data[gameVer]); - if (is_pressed(BUTTON_L + BUTTON_ST)) - WRITEU32(offset[gameVer][0] + 0x18, 0xC4BB8000); - if (is_pressed(BUTTON_R + BUTTON_ST)) - WRITEU32(offset[gameVer][0] + 0x18, 0x00000000); - } -} - - -// Sets text speed to instant -void instantText(void) { - - u32 offset[] = - { - 0x003BE9C8, - 0x003BFBF4, - 0x003BFBF4 - }; - - WRITEU32(offset[gameVer] + 0x000, 0xE3A04003); - WRITEU32(offset[gameVer] + 0x8A4, 0xE3A05003); -} - - -// Access PC from anywhere by opening options menu -void pcAnywhere(u32 state) { - - u32 offset[][3] = - { - {0x00595978, 0x00373C48, 0x00373C48}, - {0x00597878, 0x0037E5E4, 0x00374C3C}, - {0x00597878, 0x0037E5E4, 0x00374C3C} - }; - - u32 data[][7] = - { - {0x1AF77D09, 0xEBF7D9CE, 0x00636000, 0x0067206C, 0xEB088755, 0xEB086104, 0xEAF77D09}, - {0x1AF77958, 0xEBF7D6DC, 0x00638000, 0x006740B4, 0xEB088B18, 0xEB0864A3, 0xEAF77958}, - {0x1AF77958, 0xEBF7D6DC, 0x00638000, 0x006740BC, 0xEB0864A3, 0xEB088B18, 0xEAF77958} - }; - - static const u8 buffer[] = - { - 0x0E, 0x40, 0x2D, 0xE9, 0x74, 0x10, 0x9F, 0xE5, - 0x00, 0x20, 0x91, 0xE5, 0x00, 0x30, 0xA0, 0xE3, - 0x00, 0x30, 0x81, 0xE5, 0x13, 0x3C, 0xA0, 0xE3, - 0x93, 0x30, 0x83, 0xE2, 0x03, 0x00, 0x52, 0xE1, - 0x00, 0x40, 0xA0, 0x03, 0x00, 0x40, 0xA0, 0x11, - 0x0E, 0x80, 0xBD, 0xE8, 0x0E, 0x00, 0x50, 0xE3, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0x40, 0x2D, 0xE9, - 0x10, 0xD0, 0x4D, 0xE2, 0x00, 0x00, 0xA0, 0xE3, - 0x00, 0x00, 0x8D, 0xE5, 0x04, 0x00, 0x8D, 0xE5, - 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5, - 0x00, 0x30, 0xA0, 0xE1, 0x00, 0x20, 0xA0, 0xE1, - 0x13, 0x1C, 0xA0, 0xE3, 0x93, 0x10, 0x81, 0xE2, - 0x18, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x80, 0xE5, - 0x14, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xA0, 0xE3, - 0x10, 0xD0, 0x8D, 0xE2, 0x0F, 0x80, 0xBD, 0xE8 - }; - - if (state) { - - memcpy((void *)(offset[gameVer][0]), buffer, 0x80); - WRITEU32(offset[gameVer][0] + 0x30, data[gameVer][0]); - WRITEU32(offset[gameVer][0] + 0x70, data[gameVer][1]); - WRITEU32(offset[gameVer][0] + 0x80, data[gameVer][2]); - WRITEU32(offset[gameVer][0] + 0x84, data[gameVer][3]); - WRITEU32(offset[gameVer][1], data[gameVer][4]); - WRITEU32(offset[gameVer][2], data[gameVer][5]); - - } else { - WRITEU32(offset[gameVer][0] + 0x30, data[gameVer][6]); - } -} - - -// Re-battle trainer that have already been fought. Active by holding L and talking to them -void rematchTrainers(void) { - - u32 offset[] = - { - 0x0049D200, - 0x0049EFA0, - 0x0049EFC8 - }; - - WRITEU32(offset[gameVer], (is_pressed(BUTTON_L)) ? 0xE3A00000 : 0xE5911004); - WRITEU32(offset[gameVer] + 0x04, (is_pressed(BUTTON_L)) ? 0xE12FFF1E : 0xE5900044); -} - - -// Toggles model outlines for player and Pokémon off and on -void toggleOutlines(u32 state) { - - u32 offset[] = - { - 0x0041B748, - 0x0041CFCC, - 0x0041CFCC - }; - - WRITEU32(offset[gameVer], (state) ? 0xE320F000 : 0xE5802004); -} - - -// Disables inGame NFC to allow NTR connection outside of Festival Plaza. -void toggleNFC(u32 state) { - - u32 offset[] = - { - 0x003DFFD0, - 0x003E14C0, - 0x003E14C0 - }; - - WRITEU32(offset[gameVer], (state) ? 0xE3A01000 : 0xE3A01001); -} diff --git a/Sources/movement_modifiers.c b/Sources/movement_modifiers.c deleted file mode 100644 index aef89a7..0000000 --- a/Sources/movement_modifiers.c +++ /dev/null @@ -1,60 +0,0 @@ -// Filename: movement_modifiers.c - -#include "cheats.h" -#include "hid.h" - -/******************************** - * * - * Movement Modifiers * - * * - ********************************/ - -// Movement menu entry -void movementMenu(void) { - - new_spoiler("Movement"); - new_entry("Run Faster", runFaster); - new_entry("Never Trip", neverTrip); - new_entry_managed_note("Walk Through Walls", "Hold R = Enable", walkThruWalls, WALKTHROUGHWALLS, 0); - new_line(); - exit_spoiler(); -} - - -// Increases run speed to 1.375x -void runFaster(void) { - u32 offset[] = - { - 0x0039AF74, - 0x0039C394, - 0x0039C394 - }; - WRITEU32(offset[gameVer], (is_pressed(BUTTON_B)) ? 0x3FB00000 : 0x3F800000); -} - - -// Disables occational tripping animation -void neverTrip(void) { - WRITEU8(0x3419833E, 0x00); -} - - -// Walk through wall while R is held down -void walkThruWalls(void) { - u32 offset[] = - { - 0x0039D140, - 0x0039E560, - 0x0039E560 - }; - - u32 original[][2] = - { - {0xEB01E7E7, 0xEB01E79A}, - {0xEB01E8DC, 0xEB01E88F}, - {0xEB01E8DC, 0xEB01E88F} - }; - - WRITEU32(offset[gameVer], (is_pressed(BUTTON_R)) ? 0xE1A00000 : original[gameVer][0]); - WRITEU32(offset[gameVer] + 0x134, (is_pressed(BUTTON_R)) ? 0xE1A00000 : original[gameVer][1]); -} diff --git a/Sources/ov.c b/Sources/ov.c deleted file mode 100644 index b987655..0000000 --- a/Sources/ov.c +++ /dev/null @@ -1,204 +0,0 @@ -#include "global.h" -#include "font_mini_4x6.h" -#include "font6x10Linux.h" -#include "ov.h" - -static u32 g_lframebuf; -static u32 g_rframebuf; -static u32 g_stride; -static u32 g_format; -static u32 g_isTop; -static u32 g_maxWidth; -static u32 g_is3DEnabled; - -void OvSettings(u32 addr, u32 addrB, u32 stride, u32 format, int isTop) -{ - g_lframebuf = addr; - g_rframebuf = addrB; - g_stride = stride; - g_format = format & 0xF; - g_isTop = isTop; - g_maxWidth = isTop ? 400 : 320; - g_is3DEnabled = *(float *)(0x1FF81080) > 0.f && isTop && addr != addrB && addrB; -} - -void OvDrawTranspartBlackRect(int posX, int posY, int width, int height, u8 level) -{ - static int mode3D = 0; - - if (g_is3DEnabled && mode3D == 0) - { - mode3D = 1; - OvDrawTranspartBlackRect(posX - 5, posY, width, height, level); - mode3D = 0; - } - - u32 addr = mode3D ? g_rframebuf : g_lframebuf; - - for (int posC = posX; posC < posX + width; posC++) - { - if (g_format == 2) - { - u16* sp = (u16*)(addr + g_stride * posC + 240 * 2 - 2 * (posY + height - 1)); - u16* spEnd = sp + height; - while (sp < spEnd) - { - u16 pix = *sp; - u16 r = (pix >> 11) & 0x1f; - u16 g = (pix >> 5) & 0x3f; - u16 b = (pix & 0x1f); - pix = ((r >> level) << 11) | ((g >> level) << 5) | (b >> level); - *sp = pix; - sp++; - } - } - else if (g_format == 1) - { - u8* sp = (u8*)(addr + g_stride * posC + 240 * 3 - 3 * (posY + height - 1)); - u8* spEnd = sp + 3 * height; - while (sp < spEnd) - { - sp[0] >>= level; - sp[1] >>= level; - sp[2] >>= level; - sp += 3; - } - } - } -} - -static inline void OvDrawPixel(u32 addr, int posX, int posY, u32 r, u32 g, u32 b) -{ - if (g_format == 2) - { - u16 pix = ((r ) << 11) | ((g ) << 5) | (b ); - *(u16*)(addr + g_stride * posX + 240 * 2 -2 * posY) = pix; - } - else - { - u8* sp = (u8*)(addr + g_stride * posX + 240 * 3 - 3 * posY); - sp[0] = b; - sp[1] = g; - sp[2] = r; - } -} - -void OvDrawRect(int posX, int posY, int width, int height, u32 r, u32 g, u32 b) -{ - static int mode3D = 0; - - if (g_is3DEnabled && mode3D == 0) - { - mode3D = 1; - OvDrawRect(posX - 5, posY, width, height, r, g, b); - mode3D = 0; - } - - u32 addr = mode3D ? g_rframebuf : g_lframebuf; - - for (int x = posX; x < posX + width; x++) - { - for (int y = posY; y < posY + height; y++) - { - OvDrawPixel(addr, x, y, r, g, b); - } - } -} - -void OvDrawChar(char letter, int posX, int posY, u32 r, u32 g, u32 b) -{ - - static int mode3D = 0; - - if (g_is3DEnabled && mode3D == 0) - { - mode3D = 1; - OvDrawChar(letter, posX - 5, posY, r, g, b); - mode3D = 0; - } - - u32 addr = mode3D ? g_rframebuf : g_lframebuf; - - if ((letter < 32) || (letter > 127)) - { - letter = '?'; - } - - int c = letter * 10; - - for (int y = 0; y < 10; y++) - { - u8 l = font[y + c]; - int xx = posX; - for (int x = 6; x > 0; x--, xx++) - { - if ((l >> x) & 1) - OvDrawPixel(addr, xx, posY + y, r, g, b); - } - } -} - -int OvDrawString(char *str, int posX, int posY, u32 r, u32 g, u32 b) -{ - while(*str) - { - if ((posY + 6 > 240) || (posX + 6 > g_maxWidth)) - { - break; - } - - OvDrawChar(*str, posX, posY, r, g, b); - str++; - posX += 6; - } - return (posY + 12); -} - -void OvDrawCharTiny(char letter, int posX, int posY, u32 r, u32 g, u32 b) -{ - - static int mode3D = 0; - - if (g_is3DEnabled && mode3D == 0) - { - mode3D = 1; - OvDrawCharTiny(letter, posX - 5, posY, r, g, b); - mode3D = 0; - } - - u32 addr = mode3D ? g_rframebuf : g_lframebuf; - - if ((letter < 32) || (letter > 127)) - { - letter = '?'; - } - - int c = (letter) * 6; - - for (int y = 0; y < 6; y++) - { - u8 l = fontdata_mini_4x6[y + c]; - int xx = posX; - for (int x = 3; x >= 0; x--, xx++) - { - if ((l >> x) & 1) - OvDrawPixel(addr, xx, posY + y, r, g, b); - } - } -} - -int OvDrawStringTiny(char *str, int posX, int posY, u32 r, u32 g, u32 b) -{ - while(*str) - { - if ((posY + 4 > 240) || (posX + 4 > g_maxWidth)) - { - break; - } - - OvDrawCharTiny(*str, posX, posY, r, g, b); - str++; - posX += 4; - } - return (posY + 8); -} diff --git a/Sources/ov.h b/Sources/ov.h deleted file mode 100644 index 9a5408f..0000000 --- a/Sources/ov.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef OV_H -#define OV_H - -void OvSettings(u32 addr, u32 addrB, u32 stride, u32 format, int isTop); -void OvDrawTranspartBlackRect(int posX, int posY, int width, int height, u8 level); -void OvDrawRect(int posX, int posY, int width, int height, u32 r, u32 g, u32 b); -void OvDrawChar(char letter, int posX, int posY, u32 r, u32 g, u32 b); -int OvDrawString(char *str, int posX, int posY, u32 r, u32 g, u32 b); -int OvDrawStringTiny(char *str, int posX, int posY, u32 r, u32 g, u32 b); - -#endif \ No newline at end of file diff --git a/Sources/overlay_cheats.c b/Sources/overlay_cheats.c deleted file mode 100644 index b933a1a..0000000 --- a/Sources/overlay_cheats.c +++ /dev/null @@ -1,119 +0,0 @@ -// Credit to dragonfyre173 for their PokeViewNTR code: https://github.com/dragonfyre173/PokeViewNTR - -#include "cheats.h" -#include "hid.h" -#include "global.h" -#include "ov.h" -#include "pokeutil/pokemon.h" -#include "pokeutil/lookup.h" - -Handle fsUserHandle = 0; - -#define CALLBACK_OVERLAY (101) - -#define TICKS_PER_MSEC (268123.480) -#define BLANK 255,255,255 - -Opponent selectedOpponent = PRIMARY; - -bool isInBattle() { - u32 offset[] = - { - 0x006731A4, - 0x006747D8, - 0x006747E0 - }; - - u32 data[] = - { - 0x00000000, - 0x40400000, - 0x40400000 - }; - if (READU32(offset[gameVer]) >= data[gameVer] && READU32(offset[gameVer]) <= data[gameVer] + 0x10000) - return true; - return false; -} - -void drawPokemonID() { - if (is_pressed(BUTTON_R)) { - selectedOpponent = (selectedOpponent + 1) % NUM_OPPONENTS; - svc_sleepThread(300000000); - } - u8 pkbytes[232]; - Pokemon* pkm = (Pokemon*)pkbytes; - - if(pkm != 0) { - decryptPokemon(selectedOpponent, pkm); - - char buf[100]; - char nick[13]; - int posX = 14; - int posY = 11; - - // Bounding box - OvDrawTranspartBlackRect(posX, 9, 125, 87, 1); - - // See if the pokemon's actually valid first - if(isValid(pkm)) { - // This value will be updated when the battle is over - // Now we're good to display it - // Pokemon name - asciiNick(pkm, nick); - xsprintf(buf, "[%s] %s", OPPONENT_NAMES[selectedOpponent], nick); - posY = OvDrawString(buf, posX, posY, BLANK); - - posX += 10; - - //Nature - if(pkm->nature < NATURE_COUNT) { - xsprintf(buf, "%s", NATURE_LOOKUP[pkm->nature]); - posY = OvDrawString(buf, posX, posY, BLANK); - } - - // Ability - if(pkm->ability < ABILITY_COUNT) { - xsprintf(buf, "%s", ABILITY_LOOKUP[pkm->ability]); - posY = OvDrawString(buf, posX, posY, BLANK); - } - - // Held item - if(pkm->heldItem < ITEM_COUNT) { - xsprintf(buf, "%s", ITEM_LOOKUP[pkm->heldItem]); - posY = OvDrawString(buf, posX, posY, BLANK); - } - - posX += 6; - // IVs - int statOrder[] = {0, 1, 2, 4, 5, 3}; - - for(u8 i = 0; i < 6; i++) { - u8 iv = getIV(pkm, statOrder[i]); - xsprintf(buf, "%3s: %2d", STAT_NAME[statOrder[i]], iv); - u8 r = iv > 29 ? 0 : 255; - u8 g = iv < 2 ? 0 : 255; - u8 b = (iv > 29 || iv < 2) ? 0 : 255; - OvDrawString(buf, posX + (60 * (i / 3)), posY + (12 * (i % 3)), r, g, b); - } - } else { - xsprintf(buf, "[%s] No Info", OPPONENT_NAMES[selectedOpponent]); - OvDrawString(buf, posX, posY, BLANK); - } - } -} - - -u32 overlayCallback(u32 isBottom, u32 addr, u32 addrB, u32 stride, u32 format) { - // Set draw settings - OvSettings(addr, addrB, stride, format, !isBottom); - if(is_pressed(BUTTON_X) && isBottom == 0 && isInBattle() && battleInfo) { - drawPokemonID(); - return 0; - } - return 1; -} - -void overlayInit(void) { - initSharedFunc(); - plgRegisterCallback(CALLBACK_OVERLAY, (void*) overlayCallback, 0); -} diff --git a/Sources/pokemon_modifiers.c b/Sources/pokemon_modifiers.c deleted file mode 100644 index 061adce..0000000 --- a/Sources/pokemon_modifiers.c +++ /dev/null @@ -1,83 +0,0 @@ -// Filename: pokemon_modifiers.c - -#include "cheats.h" -#include "hid.h" - -/******************************** - * * - * Pokémon Modifiers * - * * - ********************************/ - -// Pokémon menu entry -void pokemonMenu(void) { - - new_spoiler("Pokemon"); - new_entry("Rename any Pokemon", renamePokemon); - new_entry_managed_note("Instant Egg from Nursery", "Hold L & talk to Nursery NPC", instantEgg, INSTANTEGG, 0); - new_entry_arg("Instant Egg Hatching", instantHatch, 0, INSTANTHATCH, TOGGLE); - new_line(); - exit_spoiler(); -} - - -// Rename any Pokemon at the Name Rater -void renamePokemon(void) { - u32 offset[] = - { - 0x004A84F8, - 0x004AA298, - 0x004AA2C0 - }; - WRITEU32(offset[gameVer], 0xE3A00001); -} - - -// Egg instantly ready when talking to Nursery NPC while holding L -void instantEgg(void) { - u32 offset[] = - { - 0x00444A6C, - 0x00446684, - 0x004466A8 - }; - WRITEU32(offset[gameVer] + 0x00, (is_pressed(BUTTON_L)) ? 0xE3A01001 : 0xE2800E1E); - WRITEU32(offset[gameVer] + 0x04, (is_pressed(BUTTON_L)) ? 0xE5C011E0 : 0xE1D000D0); - WRITEU32(offset[gameVer] + 0x08, (is_pressed(BUTTON_L)) ? 0xEA00684B : 0xE12FFF1E); -} - - -// Instant egg hatching in one step -void instantHatch(u32 state) { - - u32 offset[][2] = - { - {0x005958C0, 0x004919E0}, - {0x005977C0, 0x00493640}, - {0x005977C0, 0x00493668} - }; - u32 data[][2] = - { - {0x006CE724, 0xEB040FB6}, - {0x006D08C0, 0xEB04105E}, - {0x006D08C0, 0xEB041054} - }; - - if (state) { - static const u8 buffer[] = - { - 0x0C, 0x00, 0x9D, 0xE5, - 0x0C, 0x50, 0x9F, 0xE5, - 0x05, 0x00, 0x50, 0xE1, - 0x00, 0x00, 0xA0, 0x03, - 0x04, 0x00, 0xA0, 0x11, - 0x1E, 0xFF, 0x2F, 0xE1 - }; - memcpy((void *)(offset[gameVer][0]), buffer, 0x18); - WRITEU32(offset[gameVer][0] + 0x18, data[gameVer][0]); - WRITEU32(offset[gameVer][1], data[gameVer][1]); - } else { - WRITEU32(offset[gameVer][1], 0xE1A00004); - } - -} diff --git a/Sources/pokemon_spawner.c b/Sources/pokemon_spawner.c deleted file mode 100644 index 77c26cd..0000000 --- a/Sources/pokemon_spawner.c +++ /dev/null @@ -1,496 +0,0 @@ -// Filename: pokemon_spawner.c - -#include "cheats.h" -#include "hid.h" -#include "pokemon_spawner.h" - -/******************************** - * * - * Pokémon Spawner * - * * - ********************************/ - -int spawnID = 1, - spawnLVL = 5, - formIndex = 0; - -char currentSpawn[40], - currentLVL[40]; - -bool spawnIsOn = false, - randomIsOn = false, - levelpass = false; - -// Pokémon Spawner menu entry -void pokemonSpawnMenu(void) { - - getForms(spawnID); - updateSpawn(); - new_spoiler("Pokemon Spawner"); - new_unselectable_entry(currentSpawn); - new_unselectable_entry(currentLVL); - new_spoiler("Change ID"); - new_entry_managed("Increase Spawn ID 1's", increaseID1, INCREASEID1, AUTO_DISABLE); - new_entry_managed("Increase Spawn ID 10's", increaseID10, INCREASEID10, AUTO_DISABLE); - new_entry_managed("Increase Spawn ID 100's", increaseID100, INCREASEID100, AUTO_DISABLE); - new_entry_arg("Random Spawn ID", randomID, 0, RANDOMID, TOGGLE); - exit_spoiler(); - new_spoiler("Change LVL"); - new_entry_managed("Increase Level 1's", increaseLVL1, INCREASELVL1, AUTO_DISABLE); - new_entry_managed("Increase Level 10's", increaseLVL10, INCREASELVL10, AUTO_DISABLE); - new_entry_arg("Passthrough Wild Level", passthruLevel, 0, PASSTHRULEVEL, TOGGLE); - exit_spoiler(); - new_entry_managed("Change Form", setForm, SETFORM, AUTO_DISABLE); - new_entry_arg("Activate", activateSpawn, 0, ACTIVATESPAWN, TOGGLE); - new_line(); - exit_spoiler(); -} - - -// Updates menu with currently selected ID and level -void updateSpawn(void) { - if (spawnID == 0) - spawnID = 1; - if (spawnLVL == 0) - spawnLVL = 1; - if (spawnLVL > 100) - spawnLVL = 100; - spawnPokemon *array; - array = &pokemonID[spawnID - 1]; - spawnForms *formArray; - formArray = &formID[formIndex]; - if (randomIsOn) { - xsprintf(currentSpawn, "Pokemon: Random"); - if (levelpass) - xsprintf(currentLVL, "Level: --- Form: Random"); - else - xsprintf(currentLVL, "Level: %3d Form: Random" , spawnLVL); - } else { - xsprintf(currentSpawn, "Pokemon: %3d %s", array->id, array->name); - if (levelpass) - xsprintf(currentLVL, "Level: --- Form: %s", formArray->name); - else - xsprintf(currentLVL, "Level: %3d Form: %s", spawnLVL, formArray->name); - } -} - - -// Redirects stack calls to custom location with selected data -void generateSpawn(void) { - - u32 offset[][2] = - { - {0x005957E0, 0x003988DC}, - {0x005976E0, 0x00399CB4}, - {0x0059785C, 0x00399CB4} - }; - u32 data[][3] = - { - {0xEB07F3BF, 0xEB07F3BB, 0xEB07F3B4}, - {0xEB07F689, 0xEB07F685, 0xEB07F67E}, - {0xEB07F6E8, 0xEB07F6E4, 0xEB07F6DD} - }; - - if (spawnIsOn) - WRITEU32(offset[gameVer][0] + 0x04, 0xE59F000C); - else - WRITEU32(offset[gameVer][0] + 0x04, 0xE12FFF1E); - - WRITEU32(offset[gameVer][0] + 0x00, 0xE1D500B0); - if (levelpass) - WRITEU32(offset[gameVer][0] + 0x08, 0xE1A00000); - else - WRITEU32(offset[gameVer][0] + 0x08, 0xE5C40004); - WRITEU32(offset[gameVer][0] + 0x0C, 0xE59F0000); - WRITEU32(offset[gameVer][0] + 0x10, 0xE12FFF1E); - WRITEU32(offset[gameVer][0] + 0x14, spawnID + (0x800 * formIndex)); - WRITEU32(offset[gameVer][0] + 0x18, spawnLVL); - WRITEU32(offset[gameVer][1] + 0x00, data[gameVer][0]); - WRITEU32(offset[gameVer][1] + 0x10, data[gameVer][1]); - WRITEU32(offset[gameVer][1] + 0x2C, data[gameVer][2]); -} - -// -void activateSpawn(u32 state) { - spawnIsOn = state ? true : false; -} - - -// Increases spawn ID by 1 each time it's called, updates menu and then deactivates -void increaseID1(void) { - if (strcmp(currentSpawn, "Pokemon: Random") == 0) { - disable_entry(RANDOMID); - spawnID = 0; - } - // Extracts ones place - int ones = spawnID % 10; - spawnID -= ones; - - // Prevent going above maximum ID (802) - if (spawnID + ones + 1 > 802) - ones = 0; - else if (ones < 9) - ones++; - else - ones = 0; - - // Adds ones place back in - spawnID += ones; - getForms(spawnID); - formIndex = 0; - updateSpawn(); -} - - -// Increases spawn ID by 10 each time it's called, updates menu and then deactivates -void increaseID10(void) { - if (strcmp(currentSpawn, "Pokemon: Random") == 0) { - disable_entry(RANDOMID); - spawnID = 0; - } - // Extracts tens place - int tens = (spawnID / 10) % 10; - spawnID -= (tens * 10); - - // Prevent going above maximum ID (802) - if (spawnID + (tens * 10) + 10 > 802) - tens = 0; - else if (tens < 9) - tens++; - else - tens = 0; - - // Adds tens place back in - spawnID += (tens * 10); - getForms(spawnID); - formIndex = 0; - updateSpawn(); -} - - -// Increases spawn ID by 100 each time it's called, updates menu and then deactivates -void increaseID100(void) { - if (strcmp(currentSpawn, "Pokemon: Random") == 0) { - disable_entry(RANDOMID); - spawnID = 0; - } - // Extracts hundreds place - int hundreds = (spawnID / 100); - spawnID -= (hundreds * 100); - - // Prevent going above maximum ID (802) - if (spawnID + (hundreds * 100) + 100 > 802) - hundreds = 0; - else if (hundreds < 8) - hundreds++; - else - hundreds = 0; - - // Adds hundreds place back in - spawnID += (hundreds * 100); - getForms(spawnID); - formIndex = 0; - updateSpawn(); -} - -// -void randomID(u32 state) { - if (state) - randomIsOn = true; - else { - randomIsOn = false; - spawnID = 1; - formIndex = 0; - } - updateSpawn(); -} - - -void setRandomID(void) { - if (randomIsOn) { - if (!checkAddress(0x080AE178)) - return; - spawnID = randomNum(1, 802); - getForms(spawnID); - formIndex = 28; - while (!formID[formIndex].name) { - formIndex = randomNum(0, 27); - } - } -} - - -// Increases spawn level by 1 each time it's called, updates menu and then deactivates -void increaseLVL1(void) { - if (levelpass) { - spawnLVL = 4; - disable_entry(PASSTHRULEVEL); - } - // Extracts ones place - int ones = spawnLVL % 10; - spawnLVL -= ones; - - // Prevent going above maximum level (100) - if (spawnLVL == 100) - spawnLVL = 1; - else if (ones < 9) - ones++; - else - ones = 0; - - // Adds ones place back in - spawnLVL += ones; - updateSpawn(); - -} - - -// Increases spawn level by 10 each time it's called, updates menu and then deactivates -void increaseLVL10(void) { - if (levelpass) { - spawnLVL = 5; - disable_entry(PASSTHRULEVEL); - } - // Extracts tens place - int tens = (spawnLVL / 10); - spawnLVL -= (tens * 10); - - // Prevent going above maximum level (100) - if (tens < 10) - tens++; - else - tens = 0; - - // Adds tens place back in - spawnLVL += (tens * 10); - updateSpawn(); - -} - - -void passthruLevel(u32 state) { - if (state) - levelpass = true; - else - levelpass = false; - updateSpawn(); -} - - - -// Cycles through the forms of the selected ID -void setForm(void) { - if (strcmp(currentSpawn, "Pokemon: Random") == 0) - return; - if (!formID[formIndex + 1].name) - formIndex = 0; - else - formIndex++; - updateSpawn(); - -} - - -// Looks up ID from switch case and loads available forms into array -void getForms(u32 id) { - memset32(formID, 0, sizeof(formID)); - switch(id) { - case 19: // Rattata - case 20: // Raticate - case 26: // Raichu - case 27: // Sandshrew - case 28: // Sandslash - case 37: // Vulpix - case 38: // Ninetails - case 50: // Diglett - case 51: // Dugtrio - case 52: // Meowth - case 53: // Persian - case 74: // Geodude - case 75: // Graveler - case 76: // Golem - case 88: // Grimer - case 89: // Muk - case 103: // Marowak - case 105: // Exeggutor - formID[0].name = "Normal"; - formID[1].name = "Alola"; - break; - case 25: // Pikachu - formID[0].name = "Normal"; - formID[1].name = "Original Cap"; - formID[2].name = "Hoenn Cap"; - formID[3].name = "Sinnoh Cap"; - formID[4].name = "Unova Cap"; - formID[5].name = "Kalos Cap"; - formID[6].name = "Alola Cap"; - break; - case 201: // Unown - formID[0].name = "A"; - formID[1].name = "B"; - formID[2].name = "C"; - formID[3].name = "D"; - formID[4].name = "E"; - formID[5].name = "F"; - formID[6].name = "G"; - formID[7].name = "H"; - formID[8].name = "I"; - formID[9].name = "J"; - formID[10].name = "K"; - formID[11].name = "L"; - formID[12].name = "M"; - formID[13].name = "N"; - formID[14].name = "O"; - formID[15].name = "P"; - formID[16].name = "Q"; - formID[17].name = "R"; - formID[18].name = "S"; - formID[19].name = "T"; - formID[20].name = "U"; - formID[21].name = "V"; - formID[22].name = "W"; - formID[23].name = "X"; - formID[24].name = "Y"; - formID[25].name = "Z"; - formID[26].name = "!"; - formID[27].name = "?"; - break; - case 386: //Deoxys - formID[0].name = "Normal"; - formID[1].name = "Attack"; - formID[2].name = "Defense"; - formID[3].name = "Speed"; - break; - case 412: // Burmy - case 413: // Wormadam - case 414: // Mothim - formID[0].name = "Plant"; - formID[1].name = "Sandy"; - formID[2].name = "Trash"; - break; - case 423: //Gastrodon - formID[0].name = "East"; - formID[1].name = "West"; - break; - case 479: // Rotom - formID[0].name = "Normal"; - formID[1].name = "Heat"; - formID[2].name = "Wash"; - formID[3].name = "Frost"; - formID[4].name = "Fan"; - formID[5].name = "Mow"; - break; - case 487: // Giratina - formID[0].name = "Altered"; - formID[1].name = "Origin"; - break; - case 550: // Basculin - formID[0].name = "Red"; - formID[1].name = "Blue"; - break; - case 585: // Deerling - case 586: // Sawsbuck - formID[0].name = "Spring"; - formID[1].name = "Summer"; - formID[2].name = "Autumn"; - formID[3].name = "Winter"; - break; - case 641: // Tornadus - case 642: // Thundurus - case 645: // Landorus - formID[0].name = "Incarnate"; - formID[1].name = "Therian"; - break; - case 646: // Kyurem - formID[0].name = "Normal"; - formID[1].name = "White"; - formID[2].name = "Black"; - break; - case 647: //Keldeo - formID[0].name = "Ordinary"; - formID[1].name = "Resolute"; - break; - case 658: //Greninja - formID[0].name = "Normal"; - formID[1].name = "Ash"; - break; - case 664: // Scatterbug - case 665: // Spewpa - case 666: // Vivillon - formID[0].name = "Icy Snow"; - formID[1].name = "Polar"; - formID[2].name = "Tundra"; - formID[3].name = "Continental"; - formID[4].name = "Garden"; - formID[5].name = "Elegant"; - formID[6].name = "Meadow"; - formID[7].name = "Modern"; - formID[8].name = "Marine"; - formID[9].name = "Archipelago"; - formID[10].name = "High-Plains"; - formID[11].name = "Sandstorm"; - formID[12].name = "River"; - formID[13].name = "Monsoon"; - formID[14].name = "Savannah"; - formID[15].name = "Sun"; - formID[16].name = "Ocean"; - formID[17].name = "Jungle"; - formID[18].name = "Fancy"; - formID[19].name = "Poke Ball"; - break; - case 669: // Flabébé - case 671: // Florges - formID[0].name = "Red"; - formID[1].name = "Yellow"; - formID[2].name = "Orange"; - formID[3].name = "Blue"; - formID[4].name = "White"; - break; - case 670: // Floette - formID[0].name = "Red"; - formID[1].name = "Yellow"; - formID[2].name = "Orange"; - formID[3].name = "Blue"; - formID[4].name = "White"; - formID[5].name = "Eternal"; - break; - case 676: //Furfrou - formID[0].name = "Natural"; - formID[1].name = "Heart"; - formID[2].name = "Star"; - formID[3].name = "Diamond"; - formID[4].name = "Deputante"; - formID[5].name = "Matron"; - formID[6].name = "Dandy"; - formID[7].name = "La Reine"; - formID[8].name = "Kabuki"; - formID[9].name = "Pharaoh"; - break; - case 710: // Pumpkaboo - case 711: // Gourgeist - formID[0].name = "Average"; - formID[1].name = "Small"; - formID[2].name = "Large"; - formID[3].name = "Super"; - break; - case 741: // Oricorio - formID[0].name = "Red"; - formID[1].name = "Yellow"; - formID[2].name = "Pink"; - formID[3].name = "Blue"; - break; - case 745: // Lycanroc - formID[0].name = "Midday"; - formID[1].name = "Midnight"; - break; - case 774: //Minior - formID[0].name = "Random"; - break; - case 801: // Magearna - formID[0].name = "Normal"; - formID[1].name = "Original"; - break; - default: // All Others - formID[0].name = "Normal"; - } -} diff --git a/Sources/pokemon_spawner.h b/Sources/pokemon_spawner.h deleted file mode 100644 index 5cac7b8..0000000 --- a/Sources/pokemon_spawner.h +++ /dev/null @@ -1,827 +0,0 @@ -#ifndef POKEMON_SPAWNER_H -#define POKEMON_SPAWNER_H - - -// Array of Pokémon IDs and names -typedef struct arrayPokemon -{ - int id; - char *name; -} spawnPokemon; - -spawnPokemon pokemonID[802] = -{ - {1, "Bulbasaur"}, - {2, "Ivysaur"}, - {3, "Venusaur"}, - {4, "Charmander"}, - {5, "Charmeleon"}, - {6, "Charizard"}, - {7, "Squirtle"}, - {8, "Wartortle"}, - {9, "Blastoise"}, - {10, "Caterpie"}, - {11, "Metapod"}, - {12, "Butterfree"}, - {13, "Weedle"}, - {14, "Kakuna"}, - {15, "Beedrill"}, - {16, "Pidgey"}, - {17, "Pidgeotto"}, - {18, "Pidgeot"}, - {19, "Rattata"}, - {20, "Raticate"}, - {21, "Spearow"}, - {22, "Fearow"}, - {23, "Ekans"}, - {24, "Arbok"}, - {25, "Pikachu"}, - {26, "Raichu"}, - {27, "Sandshrew"}, - {28, "Sandslash"}, - {29, "Nidoran F"}, - {30, "Nidorina"}, - {31, "Nidoqueen"}, - {32, "Nidoran M"}, - {33, "Nidorino"}, - {34, "Nidoking"}, - {35, "Clefairy"}, - {36, "Clefable"}, - {37, "Vulpix"}, - {38, "Ninetales"}, - {39, "Jigglypuff"}, - {40, "Wigglytuff"}, - {41, "Zubat"}, - {42, "Golbat"}, - {43, "Oddish"}, - {44, "Gloom"}, - {45, "Vileplume"}, - {46, "Paras"}, - {47, "Parasect"}, - {48, "Venonat"}, - {49, "Venomoth"}, - {50, "Diglett"}, - {51, "Dugtrio"}, - {52, "Meowth"}, - {53, "Persian"}, - {54, "Psyduck"}, - {55, "Golduck"}, - {56, "Mankey"}, - {57, "Primeape"}, - {58, "Growlithe"}, - {59, "Arcanine"}, - {60, "Poliwag"}, - {61, "Poliwhirl"}, - {62, "Poliwrath"}, - {63, "Abra"}, - {64, "Kadabra"}, - {65, "Alakazam"}, - {66, "Machop"}, - {67, "Machoke"}, - {68, "Machamp"}, - {69, "Bellsprout"}, - {70, "Weepinbell"}, - {71, "Victreebel"}, - {72, "Tentacool"}, - {73, "Tentacruel"}, - {74, "Geodude"}, - {75, "Graveler"}, - {76, "Golem"}, - {77, "Ponyta"}, - {78, "Rapidash"}, - {79, "Slowpoke"}, - {80, "Slowbro"}, - {81, "Magnemite"}, - {82, "Magneton"}, - {83, "Farfetch'd"}, - {84, "Doduo"}, - {85, "Dodrio"}, - {86, "Seel"}, - {87, "Dewgong"}, - {88, "Grimer"}, - {89, "Muk"}, - {90, "Shellder"}, - {91, "Cloyster"}, - {92, "Gastly"}, - {93, "Haunter"}, - {94, "Gengar"}, - {95, "Onix"}, - {96, "Drowzee"}, - {97, "Hypno"}, - {98, "Krabby"}, - {99, "Kingler"}, - {100, "Voltorb"}, - {101, "Electrode"}, - {102, "Exeggcute"}, - {103, "Exeggutor"}, - {104, "Cubone"}, - {105, "Marowak"}, - {106, "Hitmonlee"}, - {107, "Hitmonchan"}, - {108, "Lickitung"}, - {109, "Koffing"}, - {110, "Weezing"}, - {111, "Rhyhorn"}, - {112, "Rhydon"}, - {113, "Chansey"}, - {114, "Tangela"}, - {115, "Kangaskhan"}, - {116, "Horsea"}, - {117, "Seadra"}, - {118, "Goldeen"}, - {119, "Seaking"}, - {120, "Staryu"}, - {121, "Starmie"}, - {122, "Mr. Mime"}, - {123, "Scyther"}, - {124, "Jynx"}, - {125, "Electabuzz"}, - {126, "Magmar"}, - {127, "Pinsir"}, - {128, "Tauros"}, - {129, "Magikarp"}, - {130, "Gyarados"}, - {131, "Lapras"}, - {132, "Ditto"}, - {133, "Eevee"}, - {134, "Vaporeon"}, - {135, "Jolteon"}, - {136, "Flareon"}, - {137, "Porygon"}, - {138, "Omanyte"}, - {139, "Omastar"}, - {140, "Kabuto"}, - {141, "Kabutops"}, - {142, "Aerodactyl"}, - {143, "Snorlax"}, - {144, "Articuno"}, - {145, "Zapdos"}, - {146, "Moltres"}, - {147, "Dratini"}, - {148, "Dragonair"}, - {149, "Dragonite"}, - {150, "Mewtwo"}, - {151, "Mew"}, - {152, "Chikorita"}, - {153, "Bayleef"}, - {154, "Meganium"}, - {155, "Cyndaquil"}, - {156, "Quilava"}, - {157, "Typhlosion"}, - {158, "Totodile"}, - {159, "Croconaw"}, - {160, "Feraligatr"}, - {161, "Sentret"}, - {162, "Furret"}, - {163, "Hoothoot"}, - {164, "Noctowl"}, - {165, "Ledyba"}, - {166, "Ledian"}, - {167, "Spinarak"}, - {168, "Ariados"}, - {169, "Crobat"}, - {170, "Chinchou"}, - {171, "Lanturn"}, - {172, "Pichu"}, - {173, "Cleffa"}, - {174, "Igglybuff"}, - {175, "Togepi"}, - {176, "Togetic"}, - {177, "Natu"}, - {178, "Xatu"}, - {179, "Mareep"}, - {180, "Flaaffy"}, - {181, "Ampharos"}, - {182, "Bellossom"}, - {183, "Marill"}, - {184, "Azumarill"}, - {185, "Sudowoodo"}, - {186, "Politoed"}, - {187, "Hoppip"}, - {188, "Skiploom"}, - {189, "Jumpluff"}, - {190, "Aipom"}, - {191, "Sunkern"}, - {192, "Sunflora"}, - {193, "Yanma"}, - {194, "Wooper"}, - {195, "Quagsire"}, - {196, "Espeon"}, - {197, "Umbreon"}, - {198, "Murkrow"}, - {199, "Slowking"}, - {200, "Misdreavus"}, - {201, "Unown"}, - {202, "Wobbuffet"}, - {203, "Girafarig"}, - {204, "Pineco"}, - {205, "Forretress"}, - {206, "Dunsparce"}, - {207, "Gligar"}, - {208, "Steelix"}, - {209, "Snubbull"}, - {210, "Granbull"}, - {211, "Qwilfish"}, - {212, "Scizor"}, - {213, "Shuckle"}, - {214, "Heracross"}, - {215, "Sneasel"}, - {216, "Teddiursa"}, - {217, "Ursaring"}, - {218, "Slugma"}, - {219, "Magcargo"}, - {220, "Swinub"}, - {221, "Piloswine"}, - {222, "Corsola"}, - {223, "Remoraid"}, - {224, "Octillery"}, - {225, "Delibird"}, - {226, "Mantine"}, - {227, "Skarmory"}, - {228, "Houndour"}, - {229, "Houndoom"}, - {230, "Kingdra"}, - {231, "Phanpy"}, - {232, "Donphan"}, - {233, "Porygon2"}, - {234, "Stantler"}, - {235, "Smeargle"}, - {236, "Tyrogue"}, - {237, "Hitmontop"}, - {238, "Smoochum"}, - {239, "Elekid"}, - {240, "Magby"}, - {241, "Miltank"}, - {242, "Blissey"}, - {243, "Raikou"}, - {244, "Entei"}, - {245, "Suicune"}, - {246, "Larvitar"}, - {247, "Pupitar"}, - {248, "Tyranitar"}, - {249, "Lugia"}, - {250, "Ho-oh"}, - {251, "Celebi"}, - {252, "Treecko"}, - {253, "Grovyle"}, - {254, "Sceptile"}, - {255, "Torchic"}, - {256, "Combusken"}, - {257, "Blaziken"}, - {258, "Mudkip"}, - {259, "Marshtomp"}, - {260, "Swampert"}, - {261, "Poochyena"}, - {262, "Mightyena"}, - {263, "Zigzagoon"}, - {264, "Linoone"}, - {265, "Wurmple"}, - {266, "Silcoon"}, - {267, "Beautifly"}, - {268, "Cascoon"}, - {269, "Dustox"}, - {270, "Lotad"}, - {271, "Lombre"}, - {272, "Ludicolo"}, - {273, "Seedot"}, - {274, "Nuzleaf"}, - {275, "Shiftry"}, - {276, "Taillow"}, - {277, "Swellow"}, - {278, "Wingull"}, - {279, "Pelipper"}, - {280, "Ralts"}, - {281, "Kirlia"}, - {282, "Gardevoir"}, - {283, "Surskit"}, - {284, "Masquerain"}, - {285, "Shroomish"}, - {286, "Breloom"}, - {287, "Slakoth"}, - {288, "Vigoroth"}, - {289, "Slaking"}, - {290, "Nincada"}, - {291, "Ninjask"}, - {292, "Shedinja"}, - {293, "Whismur"}, - {294, "Loudred"}, - {295, "Exploud"}, - {296, "Makuhita"}, - {297, "Hariyama"}, - {298, "Azurill"}, - {299, "Nosepass"}, - {300, "Skitty"}, - {301, "Delcatty"}, - {302, "Sableye"}, - {303, "Mawile"}, - {304, "Aron"}, - {305, "Lairon"}, - {306, "Aggron"}, - {307, "Meditite"}, - {308, "Medicham"}, - {309, "Electrike"}, - {310, "Manectric"}, - {311, "Plusle"}, - {312, "Minun"}, - {313, "Volbeat"}, - {314, "Illumise"}, - {315, "Roselia"}, - {316, "Gulpin"}, - {317, "Swalot"}, - {318, "Carvanha"}, - {319, "Sharpedo"}, - {320, "Wailmer"}, - {321, "Wailord"}, - {322, "Numel"}, - {323, "Camerupt"}, - {324, "Torkoal"}, - {325, "Spoink"}, - {326, "Grumpig"}, - {327, "Spinda"}, - {328, "Trapinch"}, - {329, "Vibrava"}, - {330, "Flygon"}, - {331, "Cacnea"}, - {332, "Cacturne"}, - {333, "Swablu"}, - {334, "Altaria"}, - {335, "Zangoose"}, - {336, "Seviper"}, - {337, "Lunatone"}, - {338, "Solrock"}, - {339, "Barboach"}, - {340, "Whiscash"}, - {341, "Corphish"}, - {342, "Crawdaunt"}, - {343, "Baltoy"}, - {344, "Claydol"}, - {345, "Lileep"}, - {346, "Cradily"}, - {347, "Anorith"}, - {348, "Armaldo"}, - {349, "Feebas"}, - {350, "Milotic"}, - {351, "Castform"}, - {352, "Kecleon"}, - {353, "Shuppet"}, - {354, "Banette"}, - {355, "Duskull"}, - {356, "Dusclops"}, - {357, "Tropius"}, - {358, "Chimecho"}, - {359, "Absol"}, - {360, "Wynaut"}, - {361, "Snorunt"}, - {362, "Glalie"}, - {363, "Spheal"}, - {364, "Sealeo"}, - {365, "Walrein"}, - {366, "Clamperl"}, - {367, "Huntail"}, - {368, "Gorebyss"}, - {369, "Relicanth"}, - {370, "Luvdisc"}, - {371, "Bagon"}, - {372, "Shelgon"}, - {373, "Salamence"}, - {374, "Beldum"}, - {375, "Metang"}, - {376, "Metagross"}, - {377, "Regirock"}, - {378, "Regice"}, - {379, "Registeel"}, - {380, "Latias"}, - {381, "Latios"}, - {382, "Kyogre"}, - {383, "Groudon"}, - {384, "Rayquaza"}, - {385, "Jirachi"}, - {386, "Deoxys"}, - {387, "Turtwig"}, - {388, "Grotle"}, - {389, "Torterra"}, - {390, "Chimchar"}, - {391, "Monferno"}, - {392, "Infernape"}, - {393, "Piplup"}, - {394, "Prinplup"}, - {395, "Empoleon"}, - {396, "Starly"}, - {397, "Staravia"}, - {398, "Staraptor"}, - {399, "Bidoof"}, - {400, "Bibarel"}, - {401, "Kricketot"}, - {402, "Kricketune"}, - {403, "Shinx"}, - {404, "Luxio"}, - {405, "Luxray"}, - {406, "Budew"}, - {407, "Roserade"}, - {408, "Cranidos"}, - {409, "Rampardos"}, - {410, "Shieldon"}, - {411, "Bastiodon"}, - {412, "Burmy"}, - {413, "Wormadam"}, - {414, "Mothim"}, - {415, "Combee"}, - {416, "Vespiquen"}, - {417, "Pachirisu"}, - {418, "Buizel"}, - {419, "Floatzel"}, - {420, "Cherubi"}, - {421, "Cherrim"}, - {422, "Shellos"}, - {423, "Gastrodon"}, - {424, "Ambipom"}, - {425, "Drifloon"}, - {426, "Drifblim"}, - {427, "Buneary"}, - {428, "Lopunny"}, - {429, "Mismagius"}, - {430, "Honchkrow"}, - {431, "Glameow"}, - {432, "Purugly"}, - {433, "Chingling"}, - {434, "Stunky"}, - {435, "Skuntank"}, - {436, "Bronzor"}, - {437, "Bronzong"}, - {438, "Bonsly"}, - {439, "Mime Jr."}, - {440, "Happiny"}, - {441, "Chatot"}, - {442, "Spiritomb"}, - {443, "Gible"}, - {444, "Gabite"}, - {445, "Garchomp"}, - {446, "Munchlax"}, - {447, "Riolu"}, - {448, "Lucario"}, - {449, "Hippopotas"}, - {450, "Hippowdon"}, - {451, "Skorupi"}, - {452, "Drapion"}, - {453, "Croagunk"}, - {454, "Toxicroak"}, - {455, "Carnivine"}, - {456, "Finneon"}, - {457, "Lumineon"}, - {458, "Mantyke"}, - {459, "Snover"}, - {460, "Abomasnow"}, - {461, "Weavile"}, - {462, "Magnezone"}, - {463, "Lickilicky"}, - {464, "Rhyperior"}, - {465, "Tangrowth"}, - {466, "Electivire"}, - {467, "Magmortar"}, - {468, "Togekiss"}, - {469, "Yanmega"}, - {470, "Leafeon"}, - {471, "Glaceon"}, - {472, "Gliscor"}, - {473, "Mamoswine"}, - {474, "Porygon-Z"}, - {475, "Gallade"}, - {476, "Probopass"}, - {477, "Dusknoir"}, - {478, "Froslass"}, - {479, "Rotom"}, - {480, "Uxie"}, - {481, "Mesprit"}, - {482, "Azelf"}, - {483, "Dialga"}, - {484, "Palkia"}, - {485, "Heatran"}, - {486, "Regigigas"}, - {487, "Giratina"}, - {488, "Cresselia"}, - {489, "Phione"}, - {490, "Manaphy"}, - {491, "Darkrai"}, - {492, "Shaymin"}, - {493, "Arceus"}, - {494, "Victini"}, - {495, "Snivy"}, - {496, "Servine"}, - {497, "Serperior"}, - {498, "Tepig"}, - {499, "Pignite"}, - {500, "Emboar"}, - {501, "Oshawott"}, - {502, "Dewott"}, - {503, "Samurott"}, - {504, "Patrat"}, - {505, "Watchog"}, - {506, "Lillipup"}, - {507, "Herdier"}, - {508, "Stoutland"}, - {509, "Purrloin"}, - {510, "Liepard"}, - {511, "Pansage"}, - {512, "Simisage"}, - {513, "Pansear"}, - {514, "Simisear"}, - {515, "Panpour"}, - {516, "Simipour"}, - {517, "Munna"}, - {518, "Musharna"}, - {519, "Pidove"}, - {520, "Tranquill"}, - {521, "Unfezant"}, - {522, "Blitzle"}, - {523, "Zebstrika"}, - {524, "Roggenrola"}, - {525, "Boldore"}, - {526, "Gigalith"}, - {527, "Woobat"}, - {528, "Swoobat"}, - {529, "Drilbur"}, - {530, "Excadrill"}, - {531, "Audino"}, - {532, "Timburr"}, - {533, "Gurdurr"}, - {534, "Conkeldurr"}, - {535, "Tympole"}, - {536, "Palpitoad"}, - {537, "Seismitoad"}, - {538, "Throh"}, - {539, "Sawk"}, - {540, "Sewaddle"}, - {541, "Swadloon"}, - {542, "Leavanny"}, - {543, "Venipede"}, - {544, "Whirlipede"}, - {545, "Scolipede"}, - {546, "Cottonee"}, - {547, "Whimsicott"}, - {548, "Petilil"}, - {549, "Lilligant"}, - {550, "Basculin"}, - {551, "Sandile"}, - {552, "Krokorok"}, - {553, "Krookodile"}, - {554, "Darumaka"}, - {555, "Darmanitan"}, - {556, "Maractus"}, - {557, "Dwebble"}, - {558, "Crustle"}, - {559, "Scraggy"}, - {560, "Scrafty"}, - {561, "Sigilyph"}, - {562, "Yamask"}, - {563, "Cofagrigus"}, - {564, "Tirtouga"}, - {565, "Carracosta"}, - {566, "Archen"}, - {567, "Archeops"}, - {568, "Trubbish"}, - {569, "Garbodor"}, - {570, "Zorua"}, - {571, "Zoroark"}, - {572, "Minccino"}, - {573, "Cinccino"}, - {574, "Gothita"}, - {575, "Gothorita"}, - {576, "Gothitelle"}, - {577, "Solosis"}, - {578, "Duosion"}, - {579, "Reuniclus"}, - {580, "Ducklett"}, - {581, "Swanna"}, - {582, "Vanillite"}, - {583, "Vanillish"}, - {584, "Vanilluxe"}, - {585, "Deerling"}, - {586, "Sawsbuck"}, - {587, "Emolga"}, - {588, "Karrablast"}, - {589, "Escavalier"}, - {590, "Foongus"}, - {591, "Amoonguss"}, - {592, "Frillish"}, - {593, "Jellicent"}, - {594, "Alomomola"}, - {595, "Joltik"}, - {596, "Galvantula"}, - {597, "Ferroseed"}, - {598, "Ferrothorn"}, - {599, "Klink"}, - {600, "Klang"}, - {601, "Klinklang"}, - {602, "Tynamo"}, - {603, "Eelektrik"}, - {604, "Eelektross"}, - {605, "Elgyem"}, - {606, "Beheeyem"}, - {607, "Litwick"}, - {608, "Lampent"}, - {609, "Chandelure"}, - {610, "Axew"}, - {611, "Fraxure"}, - {612, "Haxorus"}, - {613, "Cubchoo"}, - {614, "Beartic"}, - {615, "Cryogonal"}, - {616, "Shelmet"}, - {617, "Accelgor"}, - {618, "Stunfisk"}, - {619, "Mienfoo"}, - {620, "Mienshao"}, - {621, "Druddigon"}, - {622, "Golett"}, - {623, "Golurk"}, - {624, "Pawniard"}, - {625, "Bisharp"}, - {626, "Bouffalant"}, - {627, "Rufflet"}, - {628, "Braviary"}, - {629, "Vullaby"}, - {630, "Mandibuzz"}, - {631, "Heatmor"}, - {632, "Durant"}, - {633, "Deino"}, - {634, "Zweilous"}, - {635, "Hydreigon"}, - {636, "Larvesta"}, - {637, "Volcarona"}, - {638, "Cobalion"}, - {639, "Terrakion"}, - {640, "Virizion"}, - {641, "Tornadus"}, - {642, "Thundurus"}, - {643, "Reshiram"}, - {644, "Zekrom"}, - {645, "Landorus"}, - {646, "Kyurem"}, - {647, "Keldeo"}, - {648, "Meloetta"}, - {649, "Genesect"}, - {650, "Chespin"}, - {651, "Quilladin"}, - {652, "Chesnaught"}, - {653, "Fennekin"}, - {654, "Braixen"}, - {655, "Delphox"}, - {656, "Froakie"}, - {657, "Frogadier"}, - {658, "Greninja"}, - {659, "Bunnelby"}, - {660, "Diggersby"}, - {661, "Fletchling"}, - {662, "Fletchinder"}, - {663, "Talonflame"}, - {664, "Scatterbug"}, - {665, "Spewpa"}, - {666, "Vivillon"}, - {667, "Litleo"}, - {668, "Pyroar"}, - {669, "Flabebe"}, - {670, "Floette"}, - {671, "Florges"}, - {672, "Skiddo"}, - {673, "Gogoat"}, - {674, "Pancham"}, - {675, "Pangoro"}, - {676, "Furfrou"}, - {677, "Espurr"}, - {678, "Meowstic"}, - {679, "Honedge"}, - {680, "Doublade"}, - {681, "Aegislash"}, - {682, "Spritzee"}, - {683, "Aromatisse"}, - {684, "Swirlix"}, - {685, "Slurpuff"}, - {686, "Inkay"}, - {687, "Malamar"}, - {688, "Binacle"}, - {689, "Barbaracle"}, - {690, "Skrelp"}, - {691, "Dragalge"}, - {692, "Clauncher"}, - {693, "Clawitzer"}, - {694, "Helioptile"}, - {695, "Heliolisk"}, - {696, "Tyrunt"}, - {697, "Tyrantrum"}, - {698, "Amaura"}, - {699, "Aurorus"}, - {700, "Sylveon"}, - {701, "Hawlucha"}, - {702, "Dedenne"}, - {703, "Carbink"}, - {704, "Goomy"}, - {705, "Sliggoo"}, - {706, "Goodra"}, - {707, "Klefki"}, - {708, "Phantump"}, - {709, "Trevenant"}, - {710, "Pumpkaboo"}, - {711, "Gourgeist"}, - {712, "Bergmite"}, - {713, "Avalugg"}, - {714, "Noibat"}, - {715, "Noivern"}, - {716, "Xerneas"}, - {717, "Yveltal"}, - {718, "Zygarde"}, - {719, "Diancie"}, - {720, "Hoopa"}, - {721, "Volcanion"}, - {722, "Rowlet"}, - {723, "Dartrix"}, - {724, "Decidueye"}, - {725, "Litten"}, - {726, "Torracat"}, - {727, "Incineroar"}, - {728, "Popplio"}, - {729, "Brionne"}, - {730, "Primarina"}, - {731, "Pikipek"}, - {732, "Trumbeak"}, - {733, "Toucannon"}, - {734, "Yungoos"}, - {735, "Gumshoos"}, - {736, "Grubbin"}, - {737, "Charjabug"}, - {738, "Vikavolt"}, - {739, "Crabrawler"}, - {740, "Crabominable"}, - {741, "Oricorio"}, - {742, "Cutiefly"}, - {743, "Ribombee"}, - {744, "Rockruff"}, - {745, "Lycanroc"}, - {746, "Wishiwashi"}, - {747, "Mareanie"}, - {748, "Toxapex"}, - {749, "Mudbray"}, - {750, "Mudsdale"}, - {751, "Dewpider"}, - {752, "Araquanid"}, - {753, "Fomantis"}, - {754, "Lurantis"}, - {755, "Morelull"}, - {756, "Shiinotic"}, - {757, "Salandit"}, - {758, "Salazzle"}, - {759, "Stufful"}, - {760, "Bewear"}, - {761, "Bounsweet"}, - {762, "Steenee"}, - {763, "Tsareena"}, - {764, "Comfey"}, - {765, "Oranguru"}, - {766, "Passimian"}, - {767, "Wimpod"}, - {768, "Golisopod"}, - {769, "Sandygast"}, - {770, "Palossand"}, - {771, "Pykumuku"}, - {772, "Type: Null"}, - {773, "Silvally"}, - {774, "Minior"}, - {775, "Komala"}, - {776, "Turtonator"}, - {777, "Togedemaru"}, - {778, "Mimikyu"}, - {779, "Bruxish"}, - {780, "Drampa"}, - {781, "Dhelmise"}, - {782, "Jangmo-o"}, - {783, "Hakamo-o"}, - {784, "Kommo-o"}, - {785, "Tapu Koko"}, - {786, "Tapu Lele"}, - {787, "Tapu Bulu"}, - {788, "Tapu Fini"}, - {789, "Cosmog"}, - {790, "Cosmoen"}, - {791, "Solgaleo"}, - {792, "Lunala"}, - {793, "Nihilego"}, - {794, "Buzzwole"}, - {795, "Pheromosa"}, - {796, "Xurkitree"}, - {797, "Celestela"}, - {798, "Kartana"}, - {799, "Guzzlord"}, - {800, "Necrozma"}, - {801, "Magearna"}, - {802, "Marshadow"} -}; - - -// Array of forms -typedef struct arrayForms { - char *name; -} spawnForms; - -spawnForms formID[30] = {0}; - - -#endif diff --git a/Sources/pokeutil/lookup.h b/Sources/pokeutil/lookup.h deleted file mode 100644 index 6418827..0000000 --- a/Sources/pokeutil/lookup.h +++ /dev/null @@ -1,385 +0,0 @@ - -typedef enum LOOKUP_SIZE { - ITEM_COUNT = 921, - ABILITY_COUNT = 233, - NATURE_COUNT = 25, - MOVE_COUNT = 720 -} LOOKUP_SIZE; - -static const char *ITEM_LOOKUP[] = { - "[No Item]", "Master Ball", "Ultra Ball", "Great Ball", "Poké Ball", - "Safari Ball", "Net Ball", "Dive Ball", "Nest Ball", "Repeat Ball", - "Timer Ball", "Luxury Ball", "Premier Ball", "Dusk Ball", "Heal Ball", - "Quick Ball", "Cherish Ball", "Potion", "Antidote", "Burn Heal", "Ice Heal", - "Awakening", "Paralyze Heal", "Full Restore", "Max Potion", "Hyper Potion", - "Super Potion", "Full Heal", "Revive", "Max Revive", "Fresh Water", - "Soda Pop", "Lemonade", "Moomoo Milk", "Energy Powder", "Energy Root", - "Heal Powder", "Revival Herb", "Ether", "Max Ether", "Elixir", "Max Elixir", - "Lava Cookie", "Berry Juice", "Sacred Ash", "HP Up", "Protein", "Iron", - "Carbos", "Calcium", "Rare Candy", "PP Up", "Zinc", "PP Max", "Old Gateau", - "Guard Spec.", "Dire Hit", "X Attack", "X Defense", "X Speed", "X Accuracy", - "X Sp. Atk", "X Sp. Def", "Poké Doll", "Fluffy Tail", "Blue Flute", - "Yellow Flute", "Red Flute", "Black Flute", "White Flute", "Shoal Salt", - "Shoal Shell", "Red Shard", "Blue Shard", "Yellow Shard", "Green Shard", - "Super Repel", "Max Repel", "Escape Rope", "Repel", "Sun Stone", - "Moon Stone", "Fire Stone", "Thunder Stone", "Water Stone", "Leaf Stone", - "Tiny Mushroom", "Big Mushroom", "Pearl", "Big Pearl", "Stardust", - "Star Piece", "Nugget", "Heart Scale", "Honey", "Growth Mulch", - "Damp Mulch", "Stable Mulch", "Gooey Mulch", "Root Fossil", "Claw Fossil", - "Helix Fossil", "Dome Fossil", "Old Amber", "Armor Fossil", "Skull Fossil", - "Rare Bone", "Shiny Stone", "Dusk Stone", "Dawn Stone", "Oval Stone", - "Odd Keystone", "Griseous Orb", "???", "???", "???", "Douse Drive", - "Shock Drive", "Burn Drive", "Chill Drive", "???", "???", "???", "???", - "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", - "Sweet Heart", "Adamant Orb", "Lustrous Orb", "Greet Mail", "Favored Mail", - "RSVP Mail", "Thanks Mail", "Inquiry Mail", "Like Mail", "Reply Mail", - "Bridge Mail S", "Bridge Mail D", "Bridge Mail T", "Bridge Mail V", - "Bridge Mail M", "Cheri Berry", "Chesto Berry", "Pecha Berry", - "Rawst Berry", "Aspear Berry", "Leppa Berry", "Oran Berry", "Persim Berry", - "Lum Berry", "Sitrus Berry", "Figy Berry", "Wiki Berry", "Mago Berry", - "Aguav Berry", "Iapapa Berry", "Razz Berry", "Bluk Berry", "Nanab Berry", - "Wepear Berry", "Pinap Berry", "Pomeg Berry", "Kelpsy Berry", - "Qualot Berry", "Hondew Berry", "Grepa Berry", "Tamato Berry", - "Cornn Berry", "Magost Berry", "Rabuta Berry", "Nomel Berry", - "Spelon Berry", "Pamtre Berry", "Watmel Berry", "Durin Berry", - "Belue Berry", "Occa Berry", "Passho Berry", "Wacan Berry", "Rindo Berry", - "Yache Berry", "Chople Berry", "Kebia Berry", "Shuca Berry", "Coba Berry", - "Payapa Berry", "Tanga Berry", "Charti Berry", "Kasib Berry", "Haban Berry", - "Colbur Berry", "Babiri Berry", "Chilan Berry", "Liechi Berry", - "Ganlon Berry", "Salac Berry", "Petaya Berry", "Apicot Berry", - "Lansat Berry", "Starf Berry", "Enigma Berry", "Micle Berry", - "Custap Berry", "Jaboca Berry", "Rowap Berry", "Bright Powder", - "White Herb", "Macho Brace", "Exp. Share", "Quick Claw", "Soothe Bell", - "Mental Herb", "Choice Band", "King’s Rock", "Silver Powder", "Amulet Coin", - "Cleanse Tag", "Soul Dew", "Deep Sea Tooth", "Deep Sea Scale", "Smoke Ball", - "Everstone", "Focus Band", "Lucky Egg", "Scope Lens", "Metal Coat", - "Leftovers", "Dragon Scale", "Light Ball", "Soft Sand", "Hard Stone", - "Miracle Seed", "Black Glasses", "Black Belt", "Magnet", "Mystic Water", - "Sharp Beak", "Poison Barb", "Never-Melt Ice", "Spell Tag", "Twisted Spoon", - "Charcoal", "Dragon Fang", "Silk Scarf", "Up-Grade", "Shell Bell", - "Sea Incense", "Lax Incense", "Lucky Punch", "Metal Powder", "Thick Club", - "Stick", "Red Scarf", "Blue Scarf", "Pink Scarf", "Green Scarf", - "Yellow Scarf", "Wide Lens", "Muscle Band", "Wise Glasses", "Expert Belt", - "Light Clay", "Life Orb", "Power Herb", "Toxic Orb", "Flame Orb", - "Quick Powder", "Focus Sash", "Zoom Lens", "Metronome", "Iron Ball", - "Lagging Tail", "Destiny Knot", "Black Sludge", "Icy Rock", "Smooth Rock", - "Heat Rock", "Damp Rock", "Grip Claw", "Choice Scarf", "Sticky Barb", - "Power Bracer", "Power Belt", "Power Lens", "Power Band", "Power Anklet", - "Power Weight", "Shed Shell", "Big Root", "Choice Specs", "Flame Plate", - "Splash Plate", "Zap Plate", "Meadow Plate", "Icicle Plate", "Fist Plate", - "Toxic Plate", "Earth Plate", "Sky Plate", "Mind Plate", "Insect Plate", - "Stone Plate", "Spooky Plate", "Draco Plate", "Dread Plate", "Iron Plate", - "Odd Incense", "Rock Incense", "Full Incense", "Wave Incense", - "Rose Incense", "Luck Incense", "Pure Incense", "Protector", "Electirizer", - "Magmarizer", "Dubious Disc", "Reaper Cloth", "Razor Claw", "Razor Fang", - "TM01", "TM02", "TM03", "TM04", "TM05", "TM06", "TM07", "TM08", "TM09", - "TM10", "TM11", "TM12", "TM13", "TM14", "TM15", "TM16", "TM17", "TM18", - "TM19", "TM20", "TM21", "TM22", "TM23", "TM24", "TM25", "TM26", "TM27", - "TM28", "TM29", "TM30", "TM31", "TM32", "TM33", "TM34", "TM35", "TM36", - "TM37", "TM38", "TM39", "TM40", "TM41", "TM42", "TM43", "TM44", "TM45", - "TM46", "TM47", "TM48", "TM49", "TM50", "TM51", "TM52", "TM53", "TM54", - "TM55", "TM56", "TM57", "TM58", "TM59", "TM60", "TM61", "TM62", "TM63", - "TM64", "TM65", "TM66", "TM67", "TM68", "TM69", "TM70", "TM71", "TM72", - "TM73", "TM74", "TM75", "TM76", "TM77", "TM78", "TM79", "TM80", "TM81", - "TM82", "TM83", "TM84", "TM85", "TM86", "TM87", "TM88", "TM89", "TM90", - "TM91", "TM92", "HM01", "HM02", "HM03", "HM04", "HM05", "HM06", "???", - "???", "Explorer Kit", "Loot Sack", "Rule Book", "Poké Radar", "Point Card", - "Journal", "Seal Case", "Fashion Case", "Seal Bag", "Pal Pad", "Works Key", - "Old Charm", "Galactic Key", "Red Chain", "Town Map", "Vs. Seeker", - "Coin Case", "Old Rod", "Good Rod", "Super Rod", "Sprayduck", "Poffin Case", - "Bike", "Suite Key", "Oak’s Letter", "Lunar Wing", "Member Card", - "Azure Flute", "S.S. Ticket", "Contest Pass", "Magma Stone", "Parcel", - "Coupon 1", "Coupon 2", "Coupon 3", "Storage Key", "Secret Potion", - "Vs. Recorder", "Gracidea", "Secret Key", "Apricorn Box", "Unown Report", - "Berry Pots", "Dowsing Machine", "Blue Card", "Slowpoke Tail", "Clear Bell", - "Card Key", "Basement Key", "Squirt Bottle", "Red Scale", "Lost Item", - "Pass", "Machine Part", "Silver Wing", "Rainbow Wing", "Mystery Egg", - "Red Apricorn", "Blue Apricorn", "Yellow Apricorn", "Green Apricorn", - "Pink Apricorn", "White Apricorn", "Black Apricorn", "Fast Ball", - "Level Ball", "Lure Ball", "Heavy Ball", "Love Ball", "Friend Ball", - "Moon Ball", "Sport Ball", "Park Ball", "Photo Album", "GB Sounds", - "Tidal Bell", "Rage Candy Bar", "Data Card 01", "Data Card 02", - "Data Card 03", "Data Card 04", "Data Card 05", "Data Card 06", - "Data Card 07", "Data Card 08", "Data Card 09", "Data Card 10", - "Data Card 11", "Data Card 12", "Data Card 13", "Data Card 14", - "Data Card 15", "Data Card 16", "Data Card 17", "Data Card 18", - "Data Card 19", "Data Card 20", "Data Card 21", "Data Card 22", - "Data Card 23", "Data Card 24", "Data Card 25", "Data Card 26", - "Data Card 27", "Jade Orb", "Lock Capsule", "Red Orb", "Blue Orb", - "Enigma Stone", "Prism Scale", "Eviolite", "Float Stone", "Rocky Helmet", - "Air Balloon", "Red Card", "Ring Target", "Binding Band", "Absorb Bulb", - "Cell Battery", "Eject Button", "Fire Gem", "Water Gem", "Electric Gem", - "Grass Gem", "Ice Gem", "Fighting Gem", "Poison Gem", "Ground Gem", - "Flying Gem", "Psychic Gem", "Bug Gem", "Rock Gem", "Ghost Gem", - "Dragon Gem", "Dark Gem", "Steel Gem", "Normal Gem", "Health Wing", - "Muscle Wing", "Resist Wing", "Genius Wing", "Clever Wing", "Swift Wing", - "Pretty Wing", "Cover Fossil", "Plume Fossil", "Liberty Pass", "Pass Orb", - "Dream Ball", "Poké Toy", "Prop Case", "Dragon Skull", "Balm Mushroom", - "Big Nugget", "Pearl String", "Comet Shard", "Relic Copper", "Relic Silver", - "Relic Gold", "Relic Vase", "Relic Band", "Relic Statue", "Relic Crown", - "Casteliacone", "Dire Hit 2", "X Speed 2", "X Sp. Atk 2", "X Sp. Def 2", - "X Defense 2", "X Attack 2", "X Accuracy 2", "X Speed 3", "X Sp. Atk 3", - "X Sp. Def 3", "X Defense 3", "X Attack 3", "X Accuracy 3", "X Speed 6", - "X Sp. Atk 6", "X Sp. Def 6", "X Defense 6", "X Attack 6", "X Accuracy 6", - "Ability Urge", "Item Drop", "Item Urge", "Reset Urge", "Dire Hit 3", - "Light Stone", "Dark Stone", "TM93", "TM94", "TM95", "Xtransceiver", "???", - "Gram 1", "Gram 2", "Gram 3", "Xtransceiver", "Medal Box", "DNA Splicers", - "DNA Splicers", "Permit", "Oval Charm", "Shiny Charm", "Plasma Card", - "Grubby Hanky", "Colress Machine", "Dropped Item", "Dropped Item", - "Reveal Glass", "Weakness Policy", "Assault Vest", "Holo Caster", - "Prof’s Letter", "Roller Skates", "Pixie Plate", "Ability Capsule", - "Whipped Dream", "Sachet", "Luminous Moss", "Snowball", "Safety Goggles", - "Poké Flute", "Rich Mulch", "Surprise Mulch", "Boost Mulch", "Amaze Mulch", - "Gengarite", "Gardevoirite", "Ampharosite", "Venusaurite", "Charizardite X", - "Blastoisinite", "Mewtwonite X", "Mewtwonite Y", "Blazikenite", - "Medichamite", "Houndoominite", "Aggronite", "Banettite", "Tyranitarite", - "Scizorite", "Pinsirite", "Aerodactylite", "Lucarionite", "Abomasite", - "Kangaskhanite", "Gyaradosite", "Absolite", "Charizardite Y", "Alakazite", - "Heracronite", "Mawilite", "Manectite", "Garchompite", "Latiasite", - "Latiosite", "Roseli Berry", "Kee Berry", "Maranga Berry", "Sprinklotad", - "TM96", "TM97", "TM98", "TM99", "TM100", "Power Plant Pass", "Mega Ring", - "Intriguing Stone", "Common Stone", "Discount Coupon", "Elevator Key", - "TMV Pass", "Honor of Kalos", "Adventure Rules", "Strange Souvenir", - "Lens Case", "Makeup Bag", "Travel Trunk", "Lumiose Galette", - "Shalour Sable", "Jaw Fossil", "Sail Fossil", "Looker Ticket", "Bike", - "Holo Caster", "Fairy Gem", "Mega Charm", "Mega Glove", "Mach Bike", - "Acro Bike", "Wailmer Pail", "Devon Parts", "Soot Sack", "Basement Key", - "Pokéblock Kit", "Letter", "Eon Ticket", "Scanner", "Go-Goggles", - "Meteorite", "Key to Room 1", "Key to Room 2", "Key to Room 4", - "Key to Room 6", "Storage Key", "Devon Scope", "S.S. Ticket", - "HM07", "Devon Scuba Gear", "Contest Costume", "Contest Costume", - "Magma Suit", "Aqua Suit", "Pair of Tickets", "Mega Bracelet", - "Mega Pendant", "Mega Glasses", "Mega Anchor", "Mega Stickpin", - "Mega Tiara", "Mega Anklet", "Meteorite", "Swampertite", "Sceptilite", - "Sablenite", "Altarianite", "Galladite", "Audinite", "Metagrossite", - "Sharpedonite", "Slowbronite", "Steelixite", "Pidgeotite", "Glalitite", - "Diancite", "Prison Bottle", "Mega Cuff", "Cameruptite", "Lopunnite", - "Salamencite", "Beedrillite", "Meteorite", "Meteorite", "Key Stone", - "Meteorite Shard", "Eon Flute", "Normalium Z", "Firium Z", "Waterium Z", - "Electrium Z", "Grassium Z", "Icium Z", "Fightinium Z", "Poisonium Z", - "Groundium Z", "Flyinium Z", "Psychium Z", "Buginium Z", "Rockium Z", - "Ghostium Z", "Dragonium Z", "Darkinium Z", "Steelium Z", "Fairium Z", - "Pikanium Z", "Bottle Cap", "Gold Bottle Cap", "Z-Ring", "Decidium Z", - "Incinium Z", "Primarium Z", "Tapunium Z", "Marshadium Z", "Aloraichium Z", - "Snorlium Z", "Eevium Z", "Mewnium Z", "Normalium Z", "Firium Z", - "Waterium Z", "Electrium Z", "Grassium Z", "Icium Z", "Fightinium Z", - "Poisonium Z", "Groundium Z", "Flyinium Z", "Psychium Z", "Buginium Z", - "Rockium Z", "Ghostium Z", "Dragonium Z", "Darkinium Z", "Steelium Z", - "Fairium Z", "Pikanium Z", "Decidium Z", "Incinium Z", "Primarium Z", - "Tapunium Z", "Marshadium Z", "Aloraichium Z", "Snorlium Z", "Eevium Z", - "Mewnium Z", "Pikashunium Z", "Pikashunium Z", "???", "???", "???", "???", - "Forage Bag", "Fishing Rod", "Professor’s Mask", "Festival Ticket", - "Sparkling Stone", "Adrenaline Orb", "Zygarde Cube", "???", "Ice Stone", - "Ride Pager", "Beast Ball", "Big Malasada", "Red Nectar", "Yellow Nectar", - "Pink Nectar", "Purple Nectar", "Sun Flute", "Moon Flute", "???", - "Enigmatic Card", "???", "???", "???", "???", "???", "???", "???", "???", - "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", - "Terrain Extender", "Protective Pads", "Electric Seed", "Psychic Seed", - "Misty Seed", "Grassy Seed", "???", "???", "???", "???", "???", "???", - "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", - "???", "???", "Fighting Memory", "Flying Memory", "Poison Memory", - "Ground Memory", "Rock Memory", "Bug Memory", "Ghost Memory", - "Steel Memory", "Fire Memory", "Water Memory", "Grass Memory", - "Electric Memory", "Psychic Memory", "Ice Memory", "Dragon Memory", - "Dark Memory", "Fairy Memory" -}; -static const char *ABILITY_LOOKUP[] = { - "[Unknown]", "Stench", "Drizzle", "Speed Boost", "Battle Armor", "Sturdy", - "Damp", "Limber", "Sand Veil", "Static", "Volt Absorb", "Water Absorb", - "Oblivious", "Cloud Nine", "Compound Eyes", "Insomnia", "Color Change", - "Immunity", "Flash Fire", "Shield Dust", "Own Tempo", "Suction Cups", - "Intimidate", "Shadow Tag", "Rough Skin", "Wonder Guard", "Levitate", - "Effect Spore", "Synchronize", "Clear Body", "Natural Cure", - "Lightning Rod", "Serene Grace", "Swift Swim", "Chlorophyll", - "Illuminate", "Trace", "Huge Power", "Poison Point", "Inner Focus", - "Magma Armor", "Water Veil", "Magnet Pull", "Soundproof", "Rain Dish", - "Sand Stream", "Pressure", "Thick Fat", "Early Bird", "Flame Body", - "Run Away", "Keen Eye", "Hyper Cutter", "Pickup", "Truant", "Hustle", - "Cute Charm", "Plus", "Minus", "Forecast", "Sticky Hold", "Shed Skin", - "Guts", "Marvel Scale", "Liquid Ooze", "Overgrow", "Blaze", "Torrent", - "Swarm", "Rock Head", "Drought", "Arena Trap", "Vital Spirit", - "White Smoke", "Pure Power", "Shell Armor", "Air Lock", "Tangled Feet", - "Motor Drive", "Rivalry", "Steadfast", "Snow Cloak", "Gluttony", - "Anger Point", "Unburden", "Heatproof", "Simple", "Dry Skin", "Download", - "Iron Fist", "Poison Heal", "Adaptability", "Skill Link", "Hydration", - "Solar Power", "Quick Feet", "Normalize", "Sniper", "Magic Guard", - "No Guard", "Stall", "Technician", "Leaf Guard", "Klutz", "Mold Breaker", - "Super Luck", "Aftermath", "Anticipation", "Forewarn", "Unaware", - "Tinted Lens", "Filter", "Slow Start", "Scrappy", "Storm Drain", "Ice Body", - "Solid Rock", "Snow Warning", "Honey Gather", "Frisk", "Reckless", - "Multitype", "Flower Gift", "Bad Dreams", "Pickpocket", "Sheer Force", - "Contrary", "Unnerve", "Defiant", "Defeatist", "Cursed Body", "Healer", - "Friend Guard", "Weak Armor", "Heavy Metal", "Light Metal", "Multiscale", - "Toxic Boost", "Flare Boost", "Harvest", "Telepathy", "Moody", "Overcoat", - "Poison Touch", "Regenerator", "Big Pecks", "Sand Rush", "Wonder Skin", - "Analytic", "Illusion", "Imposter", "Infiltrator", "Mummy", "Moxie", - "Justified", "Rattled", "Magic Bounce", "Sap Sipper", "Prankster", - "Sand Force", "Iron Barbs", "Zen Mode", "Victory Star", "Turboblaze", - "Teravolt", "Aroma Veil", "Flower Veil", "Cheek Pouch", "Protean", - "Fur Coat", "Magician", "Bulletproof", "Competitive", "Strong Jaw", - "Refrigerate", "Sweet Veil", "Stance Change", "Gale Wings", "Mega Launcher", - "Grass Pelt", "Symbiosis", "Tough Claws", "Pixilate", "Gooey", "Aerilate", - "Parental Bond", "Dark Aura", "Fairy Aura", "Aura Break", "Primordial Sea", - "Desolate Land", "Delta Stream", "Stamina", "Wimp Out", "Emergency Exit", - "Water Compaction", "Merciless", "Shields Down", "Stakeout", "Water Bubble", - "Steelworker", "Berserk", "Slush Rush", "Long Reach", "Liquid Voice", - "Triage", "Galvanize", "Surge Surfer", "Schooling", "Disguise", "Battle Bond", - "Power Construct", "Corrosion", "Comatose", "Queenly Majesty", "Innards Out", - "Dancer", "Battery", "Fluffy", "Dazzling", "Soul-Heart", "Tangling Hair", - "Receiver", "Power of Alchemy", "Beast Boost", "RKS System", - "Electric Surge", "Psychic Surge", "Misty Surge", "Grassy Surge", - "Full Metal Body", "Shadow Shield", "Prism Armor" - }; -static const char *NATURE_LOOKUP[] = { - "Hardy", "Lonely", "Brave", "Adamant", "Naughty", "Bold", "Docile", - "Relaxed", "Impish", "Lax", "Timid", "Hasty", "Serious", "Jolly", "Naive", - "Modest", "Mild", "Quiet", "Bashful", "Rash", "Calm", "Gentle", "Sassy", - "Careful", "Quirky" -}; -static const char *MOVE_LOOKUP[] = { - "[None]", "Pound", "Karate Chop", "Double Slap", "Comet Punch", - "Mega Punch", "Pay Day", "Fire Punch", "Ice Punch", "Thunder Punch", - "Scratch", "Vice Grip", "Guillotine", "Razor Wind", "Swords Dance", "Cut", - "Gust", "Wing Attack", "Whirlwind", "Fly", "Bind", "Slam", "Vine Whip", - "Stomp", "Double Kick", "Mega Kick", "Jump Kick", "Rolling Kick", - "Sand Attack", "Headbutt", "Horn Attack", "Fury Attack", "Horn Drill", - "Tackle", "Body Slam", "Wrap", "Take Down", "Thrash", "Double-Edge", - "Tail Whip", "Poison Sting", "Twineedle", "Pin Missile", "Leer", "Bite", - "Growl", "Roar", "Sing", "Supersonic", "Sonic Boom", "Disable", "Acid", - "Ember", "Flamethrower", "Mist", "Water Gun", "Hydro Pump", "Surf", - "Ice Beam", "Blizzard", "Psybeam", "Bubble Beam", "Aurora Beam", - "Hyper Beam", "Peck", "Drill Peck", "Submission", "Low Kick", "Counter", - "Seismic Toss", "Strength", "Absorb", "Mega Drain", "Leech Seed", "Growth", - "Razor Leaf", "Solar Beam", "Poison Powder", "Stun Spore", "Sleep Powder", - "Petal Dance", "String Shot", "Dragon Rage", "Fire Spin", "Thunder Shock", - "Thunderbolt", "Thunder Wave", "Thunder", "Rock Throw", "Earthquake", - "Fissure", "Dig", "Toxic", "Confusion", "Psychic", "Hypnosis", "Meditate", - "Agility", "Quick Attack", "Rage", "Teleport", "Night Shade", "Mimic", - "Screech", "Double Team", "Recover", "Harden", "Minimize", "Smokescreen", - "Confuse Ray", "Withdraw", "Defense Curl", "Barrier", "Light Screen", - "Haze", "Reflect", "Focus Energy", "Bide", "Metronome", "Mirror Move", - "Self-Destruct", "Egg Bomb", "Lick", "Smog", "Sludge", "Bone Club", - "Fire Blast", "Waterfall", "Clamp", "Swift", "Skull Bash", "Spike Cannon", - "Constrict", "Amnesia", "Kinesis", "Soft-Boiled", "High Jump Kick", "Glare", - "Dream Eater", "Poison Gas", "Barrage", "Leech Life", "Lovely Kiss", - "Sky Attack", "Transform", "Bubble", "Dizzy Punch", "Spore", "Flash", - "Psywave", "Splash", "Acid Armor", "Crabhammer", "Explosion", "Fury Swipes", - "Bonemerang", "Rest", "Rock Slide", "Hyper Fang", "Sharpen", "Conversion", - "Tri Attack", "Super Fang", "Slash", "Substitute", "Struggle", "Sketch", - "Triple Kick", "Thief", "Spider Web", "Mind Reader", "Nightmare", - "Flame Wheel", "Snore", "Curse", "Flail", "Conversion 2", "Aeroblast", - "Cotton Spore", "Reversal", "Spite", "Powder Snow", "Protect", "Mach Punch", - "Scary Face", "Feint Attack", "Sweet Kiss", "Belly Drum", "Sludge Bomb", - "Mud-Slap", "Octazooka", "Spikes", "Zap Cannon", "Foresight", - "Destiny Bond", "Perish Song", "Icy Wind", "Detect", "Bone Rush", - "Lock-On", "Outrage", "Sandstorm", "Giga Drain", "Endure", "Charm", - "Rollout", "False Swipe", "Swagger", "Milk Drink", "Spark", "Fury Cutter", - "Steel Wing", "Mean Look", "Attract", "Sleep Talk", "Heal Bell", "Return", - "Present", "Frustration", "Safeguard", "Pain Split", "Sacred Fire", - "Magnitude", "Dynamic Punch", "Megahorn", "Dragon Breath", "Baton Pass", - "Encore", "Pursuit", "Rapid Spin", "Sweet Scent", "Iron Tail", "Metal Claw", - "Vital Throw", "Morning Sun", "Synthesis", "Moonlight", "Hidden Power", - "Cross Chop", "Twister", "Rain Dance", "Sunny Day", "Crunch", "Mirror Coat", - "Psych Up", "Extreme Speed", "Ancient Power", "Shadow Ball", "Future Sight", - "Rock Smash", "Whirlpool", "Beat Up", "Fake Out", "Uproar", "Stockpile", - "Spit Up", "Swallow", "Heat Wave", "Hail", "Torment", "Flatter", - "Will-O-Wisp", "Memento", "Facade", "Focus Punch", "Smelling Salts", - "Follow Me", "Nature Power", "Charge", "Taunt", "Helping Hand", "Trick", - "Role Play", "Wish", "Assist", "Ingrain", "Superpower", "Magic Coat", - "Recycle", "Revenge", "Brick Break", "Yawn", "Knock Off", "Endeavor", - "Eruption", "Skill Swap", "Imprison", "Refresh", "Grudge", "Snatch", - "Secret Power", "Dive", "Arm Thrust", "Camouflage", "Tail Glow", - "Luster Purge", "Mist Ball", "Feather Dance", "Teeter Dance", "Blaze Kick", - "Mud Sport", "Ice Ball", "Needle Arm", "Slack Off", "Hyper Voice", - "Poison Fang", "Crush Claw", "Blast Burn", "Hydro Cannon", "Meteor Mash", - "Astonish", "Weather Ball", "Aromatherapy", "Fake Tears", "Air Cutter", - "Overheat", "Odor Sleuth", "Rock Tomb", "Silver Wind", "Metal Sound", - "Grass Whistle", "Tickle", "Cosmic Power", "Water Spout", "Signal Beam", - "Shadow Punch", "Extrasensory", "Sky Uppercut", "Sand Tomb", "Sheer Cold", - "Muddy Water", "Bullet Seed", "Aerial Ace", "Icicle Spear", "Iron Defense", - "Block", "Howl", "Dragon Claw", "Frenzy Plant", "Bulk Up", "Bounce", - "Mud Shot", "Poison Tail", "Covet", "Volt Tackle", "Magical Leaf", - "Water Sport", "Calm Mind", "Leaf Blade", "Dragon Dance", "Rock Blast", - "Shock Wave", "Water Pulse", "Doom Desire", "Psycho Boost", "Roost", - "Gravity", "Miracle Eye", "Wake-Up Slap", "Hammer Arm", "Gyro Ball", - "Healing Wish", "Brine", "Natural Gift", "Feint", "Pluck", "Tailwind", - "Acupressure", "Metal Burst", "U-turn", "Close Combat", "Payback", - "Assurance", "Embargo", "Fling", "Psycho Shift", "Trump Card", "Heal Block", - "Wring Out", "Power Trick", "Gastro Acid", "Lucky Chant", "Me First", - "Copycat", "Power Swap", "Guard Swap", "Punishment", "Last Resort", - "Worry Seed", "Sucker Punch", "Toxic Spikes", "Heart Swap", "Aqua Ring", - "Magnet Rise", "Flare Blitz", "Force Palm", "Aura Sphere", "Rock Polish", - "Poison Jab", "Dark Pulse", "Night Slash", "Aqua Tail", "Seed Bomb", - "Air Slash", "X-Scissor", "Bug Buzz", "Dragon Pulse", "Dragon Rush", - "Power Gem", "Drain Punch", "Vacuum Wave", "Focus Blast", "Energy Ball", - "Brave Bird", "Earth Power", "Switcheroo", "Giga Impact", "Nasty Plot", - "Bullet Punch", "Avalanche", "Ice Shard", "Shadow Claw", "Thunder Fang", - "Ice Fang", "Fire Fang", "Shadow Sneak", "Mud Bomb", "Psycho Cut", - "Zen Headbutt", "Mirror Shot", "Flash Cannon", "Rock Climb", "Defog", - "Trick Room", "Draco Meteor", "Discharge", "Lava Plume", "Leaf Storm", - "Power Whip", "Rock Wrecker", "Cross Poison", "Gunk Shot", "Iron Head", - "Magnet Bomb", "Stone Edge", "Captivate", "Stealth Rock", "Grass Knot", - "Chatter", "Judgment", "Bug Bite", "Charge Beam", "Wood Hammer", "Aqua Jet", - "Attack Order", "Defend Order", "Heal Order", "Head Smash", "Double Hit", - "Roar of Time", "Spacial Rend", "Lunar Dance", "Crush Grip", "Magma Storm", - "Dark Void", "Seed Flare", "Ominous Wind", "Shadow Force", "Hone Claws", - "Wide Guard", "Guard Split", "Power Split", "Wonder Room", "Psyshock", - "Venoshock", "Autotomize", "Rage Powder", "Telekinesis", "Magic Room", - "Smack Down", "Storm Throw", "Flame Burst", "Sludge Wave", "Quiver Dance", - "Heavy Slam", "Synchronoise", "Electro Ball", "Soak", "Flame Charge", - "Coil", "Low Sweep", "Acid Spray", "Foul Play", "Simple Beam", - "Entrainment", "After You", "Round", "Echoed Voice", "Chip Away", - "Clear Smog", "Stored Power", "Quick Guard", "Ally Switch", "Scald", - "Shell Smash", "Heal Pulse", "Hex", "Sky Drop", "Shift Gear", - "Circle Throw", "Incinerate", "Quash", "Acrobatics", "Reflect Type", - "Retaliate", "Final Gambit", "Bestow", "Inferno", "Water Pledge", - "Fire Pledge", "Grass Pledge", "Volt Switch", "Struggle Bug", "Bulldoze", - "Frost Breath", "Dragon Tail", "Work Up", "Electroweb", "Wild Charge", - "Drill Run", "Dual Chop", "Heart Stamp", "Horn Leech", "Sacred Sword", - "Razor Shell", "Heat Crash", "Leaf Tornado", "Steamroller", "Cotton Guard", - "Night Daze", "Psystrike", "Tail Slap", "Hurricane", "Head Charge", - "Gear Grind", "Searing Shot", "Techno Blast", "Relic Song", "Secret Sword", - "Glaciate", "Bolt Strike", "Blue Flare", "Fiery Dance", "Freeze Shock", - "Ice Burn", "Snarl", "Icicle Crash", "V-create", "Fusion Flare", - "Fusion Bolt", "Flying Press", "Mat Block", "Belch", "Rototiller", - "Sticky Web", "Fell Stinger", "Phantom Force", "Trick-or-Treat", - "Noble Roar", "Ion Deluge", "Parabolic Charge", "Forest’s Curse", - "Petal Blizzard", "Freeze-Dry", "Disarming Voice", "Parting Shot", - "Topsy-Turvy", "Draining Kiss", "Crafty Shield", "Flower Shield", - "Grassy Terrain", "Misty Terrain", "Electrify", "Play Rough", "Fairy Wind", - "Moonblast", "Boomburst", "Fairy Lock", "King’s Shield", "Play Nice", - "Confide", "Diamond Storm", "Steam Eruption", "Hyperspace Hole", - "Water Shuriken", "Mystical Fire", "Spiky Shield", "Aromatic Mist", - "Eerie Impulse", "Venom Drench", "Powder", "Geomancy", "Magnetic Flux", - "Happy Hour", "Electric Terrain", "Dazzling Gleam", "Celebrate", - "Hold Hands", "Baby-Doll Eyes", "Nuzzle", "Hold Back", "Infestation", - "Power-Up Punch", "Oblivion Wing", "Thousand Arrows", "Thousand Waves", - "Land’s Wrath", "Light of Ruin", "Origin Pulse", "Precipice Blades", - "Dragon Ascent", "Hyperspace Fury", "Breakneck Blitz", "Breakneck Blitz", - "All-Out Pummeling", "All-Out Pummeling", "Supersonic Skystrike", - "Supersonic Skystrike", "Acid Downpour", "Acid Downpour", "Tectonic Rage", - "Tectonic Rage", "Continental Crush", "Continental Crush", - "Savage Spin-Out", "Savage Spin-Out", "Never-Ending Nightmare", - "Never-Ending Nightmare", "Corkscrew Crash", "Corkscrew Crash", - "Inferno Overdrive", "Inferno Overdrive", "Hydro Vortex", "Hydro Vortex", - "Bloom Doom", "Bloom Doom", "Gigavolt Havoc", "Gigavolt Havoc", - "Shattered Psyche", "Shattered Psyche", "Subzero Slammer", - "Subzero Slammer", "Devastating Drake", "Devastating Drake", - "Black Hole Eclipse", "Black Hole Eclipse", "Twinkle Tackle", - "Twinkle Tackle", "Catastropika", "Shore Up", "First Impression", - "Baneful Bunker", "Spirit Shackle", "Darkest Lariat", "Sparkling Aria", - "Ice Hammer", "Floral Healing", "High Horsepower", "Strength Sap", - "Solar Blade", "Leafage", "Spotlight", "Toxic Thread", "Laser Focus", - "Gear Up", "Throat Chop", "Pollen Puff", "Anchor Shot", "Psychic Terrain", - "Lunge", "Fire Lash", "Power Trip", "Burn Up", "Speed Swap", "Smart Strike", - "Purify", "Revelation Dance", "Core Enforcer", "Trop Kick", "Instruct", - "Beak Blast", "Clanging Scales", "Dragon Hammer", "Brutal Swing", - "Aurora Veil", "Sinister Arrow Raid", "Malicious Moonsault", - "Oceanic Operetta", "Guardian of Alola", "Soul-Stealing 7-Star Strike", - "Stoked Sparksurfer", "Pulverizing Pancake", "Extreme Evoboost", - "Genesis Supernova", "Shell Trap", "Fleur Cannon", "Psychic Fangs", - "Stomping Tantrum", "Shadow Bone", "Accelerock", "Liquidation", - "Prismatic Laser", "Spectral Thief", "Sunsteel Strike", "Moongeist Beam", - "Tearful Look", "Zing Zap", "Nature’s Madness", "Multi-Attack", - "10,000,000 Volt Thunderbolt" -}; diff --git a/Sources/pokeutil/pokemon.c b/Sources/pokeutil/pokemon.c deleted file mode 100644 index b91355c..0000000 --- a/Sources/pokeutil/pokemon.c +++ /dev/null @@ -1,82 +0,0 @@ -#include "pokemon.h" -#include -#include -u8 blockPosition[4][24] = { - {0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 2, 3, 1, 1, 2, 3, 2, 3, 1, 1, 2, 3, 2, 3}, - {1, 1, 2, 3, 2, 3, 0, 0, 0, 0, 0, 0, 2, 3, 1, 1, 3, 2, 2, 3, 1, 1, 3, 2}, - {2, 3, 1, 1, 3, 2, 2, 3, 1, 1, 3, 2, 0, 0, 0, 0, 0, 0, 3, 2, 3, 2, 1, 1}, - {3, 2, 3, 2, 1, 1, 3, 2, 3, 2, 1, 1, 3, 2, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0} -}; - -u32 lcrng(u32 seed) { - return (seed * 0x41C64E6D + 0x00006073); -} - - -void unshuffle(u8* shuffled, u8* pkm, u32 sv) { - memcpy(pkm, shuffled, 232); - for(short block = 0; block < 4; block++){ - for(short b = 0; b < 56; b++) { - *(pkm + b + 8 + 56 * block) = *(shuffled + b + 8 + 56 * blockPosition[block][sv]); - } - } -} - -void decryptPokemon(Opponent slot, Pokemon* poke) { - if(poke == 0) return; - const u8* ekm = OPPONENT_POINTERS[slot]; - u8 shuffled[232]; - - u32 pkval = *(u32*)ekm; - u32 shval = (((pkval >> 0xD) & 0x1F) % 24); - u32 seed = *(u32*)ekm; - - memcpy(shuffled, ekm, 232); - - u16 a; - u16 b; - for(int i = 4; i < 116; i ++) { - seed = lcrng(seed); - a = (seed >> 16); - b = *((u16*)ekm + i) ^ a; - *(((u16*)shuffled) + i) = b; - } - unshuffle(shuffled, (u8*)poke, shval); -} - -u8 getIV(Pokemon* poke, Stat stat) { - return (poke->ivData >> (5 * stat)) & 0x1F; -} - -void asciiNick(Pokemon* poke, char* buf) { - for(char i = 0; i < 13; i++) { - u16 a = *(poke->nickname + i); - char b; - if(a == 0x0000) b = '\0'; - else if(a == 0x2019) b = '\''; - else if(a == 0xE08E || a == 0xE08F || a > 0xFF) b = ' '; - else b = a & 0xFF; - - *(buf + i) = b; - if(b == '\0') return; - } - *(buf + 13) = '\0'; -} - -int isValid(Pokemon* poke) { - // 1. Ensure sanity check - if(!poke || poke->sanity) - return 0; - - // 2. Calculate checksum - u16 chksum = 0; - for(u8 i = 4; i < 116; i++) { - chksum += *((u16*)(poke) + i); - } - - if(chksum != poke->checksum) - return 0; - - // 3. Ensure species is in a valid range. - return (poke->species >= 1 && poke->species <= 802); -} diff --git a/Sources/pokeutil/pokemon.h b/Sources/pokeutil/pokemon.h deleted file mode 100644 index b8f2e9e..0000000 --- a/Sources/pokeutil/pokemon.h +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef POKEMON_H -#define POKEMON_H -#include "3dstypes.h" - -// https://github.com/drgoku282/PKMN-NTR - -#define NUM_OPPONENTS 7 - -typedef enum Stat { - HP=0, ATK, DEF, SPE, SPA, SPD -} Stat; - -typedef enum Opponent { - PRIMARY = 0, - SECONDARY, - SOS0, SOS1, SOS2, SOS3, SOS4 -} Opponent; - -static const u8* OPPONENT_POINTERS[NUM_OPPONENTS] = { - (u8*)0x3254F4AC, (u8*)0x32550284, (u8*)0x3003969C, (u8*)0x3002FD64, - (u8*)0x3002FF48, (u8*)0x3003012C, (u8*)0x30030310 -}; - -static const char *OPPONENT_NAMES[NUM_OPPONENTS] = { - "1st", "2nd", "SOS0", "SOS1", "SOS2", "SOS3", "SOS4" -}; - -static const char *STAT_NAME[] = { - "HP", "ATK", "DEF", "SPE", "SpA", "SpD" -}; - -typedef struct Pokemon { - u32 encConstant; // 0x00 - u16 sanity; // 0x04 - Should be 0 - u16 checksum; // 0x06 - u16 species; // 0x08 - u16 heldItem; // 0x0A - u16 tid; // 0x0C - u16 sid; // 0x0E - u32 exp; // 0x10 - u8 ability; // 0x14 - u8 abilityNum; // 0x15 - u8 trainingBagHits; // 0x16 - u8 trainingBag; // 0x17 - u32 pid; // 0x18 - u8 nature; // 0x1C - u8 miscData; // 0x1D - Fateful encounter, gender, form flags - u8 evs[6]; // 0x1E - HP, ATK, DEF, SPE, SPA, SPD - u8 contest[6]; // 0x24 - Cool, Beauty, Cute, Smart, Tough, Sheen - u8 markByte; // 0x2A - u8 pkrsData; // 0x2B - Duration and strain - u8 stData[4]; // 0x2C - Super training data - u8 ribbons[6]; // 0x30 - Misc ribbon flags - u8 _unknown1[4]; // 0x38 - u8 distByte; // 0x3A - u8 _unknown2[5]; // 0x3B - u16 nickname[13]; // 0x40 - Unicode + null terminator - u16 moves[4]; // 0x5A - u8 movePP[4]; // 0x62 - u8 movePPUp[4]; // 0x66 - u16 relearnMoves[4]; // 0x6A - u8 superSecretTrain; // 0x72 - & 1 = unlocked, & 2 = complete - u8 _unknown3; // 0x73 - u32 ivData; // 0x74 - Also stores egg and nickname flags - u8 htData[56]; // 0x78 - HT Data block - u8 otData[56]; // 0xB0 - OT data block -} Pokemon; - -void decryptPokemon(Opponent slot, Pokemon* poke); -u8 getIV(Pokemon* poke, Stat stat); -void asciiNick(Pokemon* poke, char* buf); - -int isValid(Pokemon* poke); -#endif diff --git a/Sources/qr_codes.c b/Sources/qr_codes.c deleted file mode 100644 index c051650..0000000 --- a/Sources/qr_codes.c +++ /dev/null @@ -1,38 +0,0 @@ -// Filename: qr_codes.c - -#include "cheats.h" -#include "hid.h" - -/******************************** - * * - * QR Codes * - * * - ********************************/ - -// QR Codes menu entry -void qrMenu(void) { - - new_spoiler("QR Codes"); - new_entry("Remove Island Scan Wait", removeIslandScanWait); - new_entry("QR Scan Point 100", qrScan100); - new_line(); - exit_spoiler(); -} - - -// Remove 24 hour wait time for island scanning -void removeIslandScanWait(void) { - u32 offset[] = - { - 0x0043DAA8, - 0x0043F6B4, - 0x0043F6D8 - }; - WRITEU32(offset[gameVer], 0xE3A00000); -} - - -// Sets QR Scan points to 100 allowing you to Island Scan -void qrScan100(void) { - WRITEU8(0x3313EF33, 0x64); -} diff --git a/Sources/time_modifiers.c b/Sources/time_modifiers.c deleted file mode 100644 index 070983b..0000000 --- a/Sources/time_modifiers.c +++ /dev/null @@ -1,77 +0,0 @@ -// Filename: time_modifiers.c - -#include "cheats.h" -#include "hid.h" - -/******************************** - * * - * Time Modifiers * - * * - ********************************/ - -char currentTime[40] = "Undefined"; - - -// Time menu entry -void timeMenu(void) { - updateTime(); - new_spoiler("Time"); - new_unselectable_entry(currentTime); - new_separator(); - new_entry_managed("Increase Hour +1", increaseTime, INCREASETIME, AUTO_DISABLE); - new_entry_managed("Decrease Hour -1", decreaseTime, DECREASETIME, AUTO_DISABLE); - new_line(); - exit_spoiler(); -} - - - // Reads current time offset and prints it to the menu - void updateTime(void) { - u32 timeOffset = READU32(0x330D9238); - char timeType[4] = "NULL"; - int timeHours = 0; - - timeOffset = timeOffset / 3600; - - if (timeOffset == 24) { - xsprintf(timeType, "Sun"); - timeHours = 0; - } else if (timeOffset < 12) { - xsprintf(timeType, "Sun"); - timeHours = timeOffset; - } else if (timeOffset >= 12) { - xsprintf(timeType, "Moon"); - timeHours = timeOffset - 12; - } - xsprintf(currentTime, "Current: %4s Time +%-2d hours", timeType, timeHours); - } - - -// Increases time offset by one hour and rolls over if at max - void increaseTime(void) { - u32 timeOffset = READU32(0x330D9238); - timeOffset = timeOffset / 3600; - - if (timeOffset == 24) - timeOffset = 1; - else - timeOffset += 1; - - WRITEU32(0x330D9238, timeOffset * 3600); - updateTime(); - } - - -// Decreases time offset by one hour and rolls over if at min - void decreaseTime(void) { - u32 timeOffset = READU32(0x330D9238); - timeOffset = timeOffset / 3600; - - if (timeOffset == 1) - timeOffset = 24; - else - timeOffset -= 1; - - WRITEU32(0x330D9238, timeOffset * 3600); - updateTime(); - } diff --git a/build-mac.py b/build-mac.py deleted file mode 100755 index 4c1e56a..0000000 --- a/build-mac.py +++ /dev/null @@ -1,144 +0,0 @@ -#!/usr/bin/python -import sys -import os -import ftplib -import glob -import datetime -import shutil -from ftplib import FTP - -def allFile(pattern): - s = ""; - for file in glob.glob(pattern): - s += file + " "; - return s; - -def allFolderFile(pattern, ext): - s = ""; - for dirpath, dirnames, filenames in os.walk(pattern): - for filename in [f for f in filenames if f.endswith(ext)]: - s+= os.path.join(dirpath, filename) + ' ' - return s; - -SUN_TID = "0004000000164800" -MOON_TID = "0004000000175E00" -NAME = "SUMO" -FTP_FOLDER = "/plugin/" -HOST = "192.168.1.133" -PORT = "5000" -COPYTOPATH = NAME + ".plg" -CC = "arm-none-eabi-gcc" -CP = "arm-none-eabi-g++" -OC = "arm-none-eabi-objcopy" -LD = "arm-none-eabi-ld" -CTRULIB = '../libctru' -DEVKITARM = 'opt/devkitPro/devkitARM' -LIBPATH = '-L ./lib ' -ARCH = ' -march=armv6k -mlittle-endian -mtune=mpcore -mfloat-abi=hard ' -CFLAGS = ' -Os -c ' + ARCH -ASFLAGS = ' -Os -c -s ' + ARCH -LIBFLAGS = " -lntr -lShark2NTR_dev -lctr -lg -lsysbase -lc -lgcc " -LDFLAGS = ' -pie --gc-sections -T 3ds.ld -Map=' + NAME +'.map ' -INCLUDES = " -I Includes -I Sources -I Includes/libntrplg -I Sources/helpers " -CFILES = allFolderFile("./Sources/", ".c") -ASFILES = allFolderFile("./Sources/", ".s") -OFILES = allFolderFile("./ofiles/", ".o") -ftp = FTP() -FILE = COPYTOPATH - -def connect(host, port): - ftp.connect(host, port); - -def disconnect(): - ftp.quit(); - -def ls(): - ftp.dir(); - -def send(path, FILE2): - file = open(FILE, 'rb'); - try: - ftp.mkd(path); - except Exception as e: - pass - ftp.cwd(path); - ftp.storbinary('STOR '+ FILE2, file); - file.close(); - -def printf(string): - print(datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S') + " : " + string); - -def run(cmd): - #print(cmd); - return (os.system(cmd)); - -def error(): - print("\n\n"); - printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); - printf("There's some errors on your code."); - printf("Correct them and try again, for now I'm exiting the compilation.\n"); - printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n"); - sys.exit(); - -cwd = os.getcwd() -print("\n\n"); -printf("Hello AnalogMan!\n"); -printf("How are you?\n"); -printf("I'm preparing to compile your " + COPYTOPATH + " plugin.\n"); -printf("Please just wait a second...\n"); -if (os.path.isfile("obj/cheats.o")): - run("rm obj/*.o") -if (os.path.isfile(COPYTOPATH)): - run("rm *.plg") -printf("Compiling C files"); -result = run(CC + CFLAGS + INCLUDES + CFILES); -if (result != 0): - error(); - -printf("Compiling S files"); -result = run(CC + ASFLAGS + ASFILES); -if (result != 0): - error(); - -OFILES += allFile("*.o") + " " + allFile("lib/*.o") -printf("Linking all files into " + COPYTOPATH); -result = run(LD + LDFLAGS + ' ' + LIBPATH + OFILES + LIBFLAGS ) -if (result != 0): - error(); - -if (os.path.isfile("config.o")): - run("cp -r *.o obj/ ") - run("rm *.o") -if (os.path.isfile("a.out")): - run(OC +" -O binary a.out payload.bin -S") -if (os.path.isfile("a.out")): - run("rm *.out") -if (os.path.isfile("payload.bin")): - shutil.copy2("payload.bin", COPYTOPATH); - run("rm payload.bin"); -if (os.path.isfile(NAME + ".map")): - run("rm *.map"); - -printf("Copying the plugin in each folder..."); -shutil.copy2(COPYTOPATH, "./" + FTP_FOLDER + SUN_TID + "/Sun.plg"); -shutil.copy2(COPYTOPATH, "./" + FTP_FOLDER + MOON_TID + "/Moon.plg"); -if (os.path.isfile("./" + FTP_FOLDER + "/.DS_Store")): - run("rm ./" + FTP_FOLDER + "/.DS_Store") -printf("Creating the zip folder..."); -shutil.make_archive(NAME, 'zip', "./plugin"); -printf("Should I send the plugin on your console? (y/N)"); -user = raw_input(); -if (user == "yes" or user == "y"): - print(""); - printf("You got it!"); - printf("What is the IP address?"); - HOST = raw_input(); - printf("Sending the plugin right now...\n"); - connect(HOST, PORT); - send(FTP_FOLDER + SUN_TID, "Sun.plg"); - send(FTP_FOLDER + MOON_TID, "Moon.plg"); - disconnect(); -else: - printf("As you want sir.\n"); -print("\n\n"); -printf("Done, enjoy your plugin!\n\n"); diff --git a/build-win.py b/build-win.py deleted file mode 100644 index d8c3eb7..0000000 --- a/build-win.py +++ /dev/null @@ -1,142 +0,0 @@ -#!/usr/bin/python -import sys -import os -import ftplib -import glob -import datetime -import shutil -from ftplib import FTP - -def allFile(pattern): - s = ""; - for file in glob.glob(pattern): - s += file + " "; - return s; - -def allFolderFile(pattern, ext): - s = ""; - for dirpath, dirnames, filenames in os.walk(pattern): - for filename in [f for f in filenames if f.endswith(ext)]: - s+= os.path.join(dirpath, filename) + ' ' - return s; - -SUN_TID = "0004000000164800" -MOON_TID = "0004000000175E00" -NAME = "SUMO" -FTP_FOLDER = "/plugin/" -HOST = "192.168.1.133" -PORT = "5000" -COPYTOPATH = NAME + ".plg" -CC = "arm-none-eabi-gcc" -CP = "arm-none-eabi-g++" -OC = "arm-none-eabi-objcopy" -LD = "arm-none-eabi-ld" -CTRULIB = '../libctru' -DEVKITARM = 'c:/devkitPro/devkitARM' -LIBPATH = '-L ./lib ' -ARCH = ' -march=armv6k -mlittle-endian -mtune=mpcore -mfloat-abi=hard ' -CFLAGS = ' -Os -c ' + ARCH -ASFLAGS = ' -Os -c -s ' + ARCH -LIBFLAGS = " -lntr -lShark2NTR_dev -lctr -lg -lsysbase -lc -lgcc " -LDFLAGS = ' -pie --gc-sections -T 3ds.ld -Map=' + NAME +'.map ' -INCLUDES = " -I Includes -I Sources -I Includes/libntrplg -I Sources/helpers " -CFILES = allFolderFile(".\\Sources\\", ".c") -ASFILES = allFolderFile(".\\Sources\\", ".s") -OFILES = allFolderFile(".\\ofiles\\", ".o") -ftp = FTP() -FILE = COPYTOPATH - -def connect(host, port): - ftp.connect(host, port); - -def disconnect(): - ftp.quit(); - -def ls(): - ftp.dir(); - -def send(path, FILE2): - file = open(FILE, 'rb'); - try: - ftp.mkd(path); - except Exception as e: - pass - ftp.cwd(path); - ftp.storbinary('STOR '+ FILE2, file); - file.close(); - -def printf(string): - print(datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S') + " : " + string); - -def run(cmd): - #print(cmd); - return (os.system(cmd)); - -def error(): - print("\n\n"); - printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); - printf("There's some errors on your code."); - printf("Correct them and try again, for now I'm exiting the compilation.\n"); - printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n"); - sys.exit(); - -cwd = os.getcwd() -print("\n\n"); -printf("Hello AnalogMan!\n"); -printf("How are you?\n"); -printf("I'm preparing to compile your " + COPYTOPATH + " plugin.\n"); -printf("Please just wait a second...\n"); -if (os.path.isfile("obj/cheats.o")): - run("rm obj/*.o") -if (os.path.isfile(COPYTOPATH)): - run("rm *.plg") -printf("Compiling C files"); -result = run(CC + CFLAGS + INCLUDES + CFILES); -if (result != 0): - error(); - -printf("Compiling S files"); -result = run(CC + ASFLAGS + ASFILES); -if (result != 0): - error(); - -OFILES += allFile("*.o") + " " + allFile("lib/*.o") -printf("Linking all files into " + COPYTOPATH); -result = run(LD + LDFLAGS + ' ' + LIBPATH + OFILES + LIBFLAGS ) -if (result != 0): - error(); - -if (os.path.isfile("config.o")): - run("cp -r *.o obj/ ") - run("rm *.o") -if (os.path.isfile("a.out")): - run(OC +" -O binary a.out payload.bin -S") -if (os.path.isfile("a.out")): - run("rm *.out") -if (os.path.isfile("payload.bin")): - shutil.copy2("payload.bin", COPYTOPATH); - run("rm payload.bin"); -if (os.path.isfile(NAME + ".map")): - run("rm *.map"); - -printf("Copying the plugin in each folder..."); -shutil.copy2(COPYTOPATH, "./" + FTP_FOLDER + SUN_TID + "/Sun.plg"); -shutil.copy2(COPYTOPATH, "./" + FTP_FOLDER + MOON_TID + "/Moon.plg"); -printf("Creating the zip folder..."); -shutil.make_archive(NAME, 'zip', "./plugin"); -printf("Should I send the plugin on your console? (y/N)"); -user = raw_input(); -if (user == "yes" or user == "y"): - print(""); - printf("You got it!"); - printf("What is the IP address?"); - HOST = raw_input(); - printf("Sending the plugin right now...\n"); - connect(HOST, PORT); - send(FTP_FOLDER + SUN_TID, "Sun.plg"); - send(FTP_FOLDER + MOON_TID, "Moon.plg"); - disconnect(); -else: - printf("As you want sir.\n"); -print("\n\n"); -printf("Done, enjoy your plugin!\n\n"); diff --git a/build.bat b/build.bat deleted file mode 100644 index 76c681c..0000000 --- a/build.bat +++ /dev/null @@ -1,5 +0,0 @@ -set PATH=%PATH%;C:\devkitPro\devkitARM\bin;C:\devkitPro\msys\bin -build-win.py - - -pause diff --git a/index.html b/index.html new file mode 100644 index 0000000..476950e --- /dev/null +++ b/index.html @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + diff --git a/lib/libShark2NTR_dev.a b/lib/libShark2NTR_dev.a deleted file mode 100644 index 9cb0400..0000000 Binary files a/lib/libShark2NTR_dev.a and /dev/null differ diff --git a/lib/libc.a b/lib/libc.a deleted file mode 100644 index 2887e5f..0000000 Binary files a/lib/libc.a and /dev/null differ diff --git a/lib/libctr.a b/lib/libctr.a deleted file mode 100644 index a437d0b..0000000 Binary files a/lib/libctr.a and /dev/null differ diff --git a/lib/libg.a b/lib/libg.a deleted file mode 100644 index 2887e5f..0000000 Binary files a/lib/libg.a and /dev/null differ diff --git a/lib/libgcc.a b/lib/libgcc.a deleted file mode 100644 index 34a7475..0000000 Binary files a/lib/libgcc.a and /dev/null differ diff --git a/lib/libntr.a b/lib/libntr.a deleted file mode 100644 index 38b1279..0000000 Binary files a/lib/libntr.a and /dev/null differ diff --git a/lib/libsysbase.a b/lib/libsysbase.a deleted file mode 100644 index d52519e..0000000 Binary files a/lib/libsysbase.a and /dev/null differ diff --git a/new/Moon.plg b/new/Moon.plg new file mode 100755 index 0000000..3c1517e Binary files /dev/null and b/new/Moon.plg differ diff --git a/new/Sun.plg b/new/Sun.plg new file mode 100755 index 0000000..3c1517e Binary files /dev/null and b/new/Sun.plg differ diff --git a/obj/.gitignore b/obj/.gitignore deleted file mode 100644 index 5e7d273..0000000 --- a/obj/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore diff --git a/ofiles/cheats_logo.o b/ofiles/cheats_logo.o deleted file mode 100644 index 50c1c68..0000000 Binary files a/ofiles/cheats_logo.o and /dev/null differ diff --git a/ofiles/credit_logo.o b/ofiles/credit_logo.o deleted file mode 100644 index a444456..0000000 Binary files a/ofiles/credit_logo.o and /dev/null differ diff --git a/ofiles/hotkeys_logo.o b/ofiles/hotkeys_logo.o deleted file mode 100644 index 76a50b8..0000000 Binary files a/ofiles/hotkeys_logo.o and /dev/null differ diff --git a/ofiles/main.o b/ofiles/main.o deleted file mode 100644 index 2d8187e..0000000 Binary files a/ofiles/main.o and /dev/null differ diff --git a/ofiles/note.o b/ofiles/note.o deleted file mode 100644 index d030a06..0000000 Binary files a/ofiles/note.o and /dev/null differ diff --git a/ofiles/speed_logo.o b/ofiles/speed_logo.o deleted file mode 100644 index 0356deb..0000000 Binary files a/ofiles/speed_logo.o and /dev/null differ diff --git a/ofiles/sumo_bg.o b/ofiles/sumo_bg.o deleted file mode 100644 index 43e555b..0000000 Binary files a/ofiles/sumo_bg.o and /dev/null differ diff --git a/old/Moon.plg b/old/Moon.plg new file mode 100755 index 0000000..0d4e46a Binary files /dev/null and b/old/Moon.plg differ diff --git a/old/Sun.plg b/old/Sun.plg new file mode 100755 index 0000000..0d4e46a Binary files /dev/null and b/old/Sun.plg differ diff --git a/plugin/0004000000164800/.gitignore b/plugin/0004000000164800/.gitignore deleted file mode 100644 index 5e7d273..0000000 --- a/plugin/0004000000164800/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore diff --git a/plugin/0004000000175E00/.gitignore b/plugin/0004000000175E00/.gitignore deleted file mode 100644 index 5e7d273..0000000 --- a/plugin/0004000000175E00/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore