.include "asm/macros.inc" .include "global.inc" .section .rodata .global UNK_020ED734 UNK_020ED734: ; 0x020ED734 .short 0x0001, 0x01DE, 0x0003, 0x0003, 0x0005, 0x0005, 0x0007, 0x0007 .short 0x0009, 0x0009, 0x000B, 0x000B, 0x000C, 0x000C, 0x000E, 0x000E .short 0x0010, 0x0010, 0x0012, 0x0012, 0x0014, 0x0014, 0x0016, 0x0016 .short 0x0018, 0x0018, 0x001A, 0x001A, 0x001C, 0x001C, 0x001E, 0x001E .short 0x0020, 0x0020, 0x0022, 0x0022, 0x0025, 0x0025, 0x0027, 0x0027 .short 0x0029, 0x0029, 0x002B, 0x002B, 0x002C, 0x002C, 0x002D, 0x002D .short 0x002E, 0x002E, 0x002F, 0x002F, 0x0030, 0x0030, 0x0033, 0x0033 .short 0x0036, 0x0036, 0x0039, 0x0039, 0x003C, 0x003C, 0x003F, 0x003F .short 0x0040, 0x0040, 0x0041, 0x0041, 0x0042, 0x0042, 0x0043, 0x0043 .short 0x0045, 0x0045, 0x0047, 0x0047, 0x0049, 0x0049, 0x004A, 0x004A .short 0x004B, 0x004B, 0x004C, 0x004C, 0x004D, 0x004D, 0x004E, 0x004E .short 0x004F, 0x004F, 0x0050, 0x0050, 0x0051, 0x0051, 0x0002, 0x0002 .short 0x0004, 0x0004, 0x0006, 0x0006, 0x0008, 0x0008, 0x000A, 0x000A .short 0x0044, 0x0044, 0x0046, 0x0046, 0x0048, 0x0048, 0x000D, 0x000D .short 0x000F, 0x000F, 0x0011, 0x0011, 0x0013, 0x0013, 0x0015, 0x0015 .short 0x0017, 0x0017, 0x0019, 0x0019, 0x001B, 0x001B, 0x001D, 0x001D .short 0x001F, 0x001F, 0x0021, 0x0021, 0x0023, 0x0023, 0x0026, 0x0026 .short 0x0028, 0x0028, 0x002A, 0x002A, 0x0031, 0x0031, 0x0034, 0x0034 .short 0x0037, 0x0037, 0x003A, 0x003A, 0x003D, 0x003D, 0x0032, 0x0032 .short 0x0035, 0x0035, 0x0038, 0x0038, 0x003B, 0x003B, 0x003E, 0x003E .short 0x0024, 0x0024, 0x0053, 0x0053, 0x0055, 0x0055, 0x0057, 0x0057 .short 0x0059, 0x0059, 0x005B, 0x005B, 0x005C, 0x005C, 0x005E, 0x005E .short 0x0060, 0x0060, 0x0062, 0x0062, 0x0064, 0x0064, 0x0066, 0x0066 .short 0x0068, 0x0068, 0x006A, 0x006A, 0x006C, 0x006C, 0x006E, 0x006E .short 0x0070, 0x0070, 0x0072, 0x0072, 0x0075, 0x0075, 0x0077, 0x0077 .short 0x0079, 0x0079, 0x007B, 0x007B, 0x007C, 0x007C, 0x007D, 0x007D .short 0x007E, 0x007E, 0x007F, 0x007F, 0x0080, 0x0080, 0x0083, 0x0083 .short 0x0086, 0x0086, 0x0089, 0x0089, 0x008C, 0x008C, 0x008F, 0x008F .short 0x0090, 0x0090, 0x0091, 0x0091, 0x0092, 0x0092, 0x0093, 0x0093 .short 0x0095, 0x0095, 0x0097, 0x0097, 0x0099, 0x0099, 0x009A, 0x009A .short 0x009B, 0x009B, 0x009C, 0x009C, 0x009D, 0x009D, 0x009E, 0x009E .short 0x009F, 0x009F, 0x00A0, 0x00A0, 0x00A1, 0x00A1, 0x0052, 0x0052 .short 0x0054, 0x0054, 0x0056, 0x0056, 0x0058, 0x0058, 0x005A, 0x005A .short 0x0094, 0x0094, 0x0096, 0x0096, 0x0098, 0x0098, 0x005D, 0x005D .short 0x005F, 0x005F, 0x0061, 0x0061, 0x0063, 0x0063, 0x0065, 0x0065 .short 0x0067, 0x0067, 0x0069, 0x0069, 0x006B, 0x006B, 0x006D, 0x006D .short 0x006F, 0x006F, 0x0071, 0x0071, 0x0073, 0x0073, 0x0076, 0x0076 .short 0x0078, 0x0078, 0x007A, 0x007A, 0x0081, 0x0081, 0x0084, 0x0084 .short 0x0087, 0x0087, 0x008A, 0x008A, 0x008D, 0x008D, 0x0082, 0x0082 .short 0x0085, 0x0085, 0x0088, 0x0088, 0x008B, 0x008B, 0x008E, 0x008E .short 0x0074, 0x0074, 0x00A2, 0x0121, 0x00A3, 0x0122, 0x00A4, 0x0123 .short 0x00A5, 0x0124, 0x00A6, 0x0125, 0x00A7, 0x0126, 0x00A8, 0x0127 .short 0x00A9, 0x0128, 0x00AA, 0x0129, 0x00AB, 0x012A, 0x00E1, 0x01AB .short 0x00E2, 0x01AC, 0x00E4, 0x01AE, 0x00F1, 0x01BE, 0x00E6, 0x01B0 .short 0x00E5, 0x01AF, 0x00EA, 0x00EA, 0x00EB, 0x00EB, 0x00E8, 0x01B2 .short 0x00E9, 0x01B3, 0x00EE, 0x01BB, 0x00EF, 0x01BC, 0x0112, 0x0112 .short 0x00E3, 0x01AD, 0x00F2, 0x0176, 0x00E7, 0x01B1, 0x00AC, 0x012B .short 0x00AD, 0x012C, 0x00AE, 0x012D, 0x00AF, 0x012E, 0x00B0, 0x012F .short 0x00B1, 0x0130, 0x00B2, 0x0131, 0x00B3, 0x0132, 0x00B4, 0x0133 .short 0x00B5, 0x0134, 0x00B6, 0x0135, 0x00B7, 0x0136, 0x00B8, 0x0137 .short 0x00B9, 0x0138, 0x00BA, 0x0139, 0x00BB, 0x013A, 0x00BC, 0x013B .short 0x00BD, 0x013C, 0x00BE, 0x013D, 0x00BF, 0x013E, 0x00C0, 0x013F .short 0x00C1, 0x0140, 0x00C2, 0x0141, 0x00C3, 0x0142, 0x00C4, 0x0143 .short 0x00C5, 0x0144, 0x00C6, 0x0145, 0x00C7, 0x0146, 0x00C8, 0x0147 .short 0x00C9, 0x0148, 0x00CA, 0x0149, 0x00CB, 0x014A, 0x00CC, 0x014B .short 0x00CD, 0x014C, 0x00CE, 0x014D, 0x00CF, 0x014E, 0x00D0, 0x014F .short 0x00D1, 0x0150, 0x00D2, 0x0151, 0x00D3, 0x0152, 0x00D4, 0x0153 .short 0x00D5, 0x0154, 0x00D6, 0x0155, 0x00D7, 0x0156, 0x00D8, 0x0157 .short 0x00D9, 0x0158, 0x00DA, 0x0159, 0x00DB, 0x015A, 0x00DC, 0x015B .short 0x00DD, 0x015C, 0x00DE, 0x015D, 0x00DF, 0x015E, 0x011F, 0x011F .short 0x00F6, 0x01C4, 0x0163, 0x0163, 0x0175, 0x0175, 0x017B, 0x017B .short 0x0183, 0x0183, 0x0195, 0x0195, 0x019B, 0x019B .text thumb_func_start FUN_02015D14 FUN_02015D14: ; 0x02015D14 cmp r0, #0x7 bhi _02015D34 add r0, r0, r0 add r0, pc ldrh r0, [r0, #0x6] lsl r0, r0, #0x10 asr r0, r0, #0x10 add pc, r0 _02015D24: ; jump table (using 16-bit offset) .short _02015D34 - _02015D24 - 2; case 0 .short _02015D34 - _02015D24 - 2; case 1 .short _02015D38 - _02015D24 - 2; case 2 .short _02015D3E - _02015D24 - 2; case 3 .short _02015D38 - _02015D24 - 2; case 4 .short _02015D42 - _02015D24 - 2; case 5 .short _02015D34 - _02015D24 - 2; case 6 .short _02015D38 - _02015D24 - 2; case 7 _02015D34: mov r0, #0xea bx lr _02015D38: mov r0, #0x6d lsl r0, r0, #0x2 bx lr _02015D3E: ldr r0, _02015D48 ; =0x000001B7 bx lr _02015D42: ldr r0, _02015D4C ; =0x000001B6 bx lr nop _02015D48: .word 0x000001B7 _02015D4C: .word 0x000001B6 thumb_func_start FUN_02015D50 FUN_02015D50: ; 0x02015D50 cmp r0, #0x7 bhi _02015D70 add r0, r0, r0 add r0, pc ldrh r0, [r0, #0x6] lsl r0, r0, #0x10 asr r0, r0, #0x10 add pc, r0 _02015D60: ; jump table (using 16-bit offset) .short _02015D70 - _02015D60 - 2; case 0 .short _02015D70 - _02015D60 - 2; case 1 .short _02015D74 - _02015D60 - 2; case 2 .short _02015D78 - _02015D60 - 2; case 3 .short _02015D74 - _02015D60 - 2; case 4 .short _02015D7E - _02015D60 - 2; case 5 .short _02015D70 - _02015D60 - 2; case 6 .short _02015D74 - _02015D60 - 2; case 7 _02015D70: mov r0, #0xeb bx lr _02015D74: ldr r0, _02015D84 ; =0x000001B5 bx lr _02015D78: mov r0, #0x6e lsl r0, r0, #0x2 bx lr _02015D7E: mov r0, #0x6d lsl r0, r0, #0x2 bx lr .balign 4 _02015D84: .word 0x000001B5 thumb_func_start FUN_02015D88 FUN_02015D88: ; 0x02015D88 push {r3-r7, lr} sub sp, #0x10 add r6, r3, #0x0 str r0, [sp, #0x0] str r1, [sp, #0x4] str r2, [sp, #0x8] cmp r6, #0x1 beq _02015D9C mov r2, #0x1 b _02015D9E _02015D9C: mov r2, #0x0 _02015D9E: ldr r0, [sp, #0x8] mov r4, #0x0 sub r0, r0, #0x1 str r0, [sp, #0xc] beq _02015E18 ldr r1, _02015E28 ; =UNK_020ED734 lsl r0, r2, #0x1 ldr r5, [sp, #0x4] add r7, r1, r0 _02015DB0: ldr r0, [sp, #0x0] ldrb r0, [r0, r4] cmp r0, #0xff beq _02015E18 cmp r0, #0xf7 blo _02015DEA ldr r0, [sp, #0x8] sub r3, r0, #0x1 cmp r3, #0xa blo _02015DC6 mov r3, #0xa _02015DC6: mov r1, #0x0 cmp r3, #0x0 ble _02015DDC mov r0, #0x6b ldr r2, [sp, #0x4] lsl r0, r0, #0x2 _02015DD2: add r1, r1, #0x1 strh r0, [r2, #0x0] add r2, r2, #0x2 cmp r1, r3 blt _02015DD2 _02015DDC: ldr r0, [sp, #0x4] ldr r2, _02015E2C ; =0x0000FFFF lsl r1, r1, #0x1 strh r2, [r0, r1] add sp, #0x10 mov r0, #0x0 pop {r3-r7, pc} _02015DEA: lsl r0, r0, #0x2 ldrh r0, [r7, r0] cmp r0, #0xea beq _02015DF8 cmp r0, #0xeb beq _02015E02 b _02015E0C _02015DF8: add r0, r6, #0x0 bl FUN_02015D14 strh r0, [r5, #0x0] b _02015E0E _02015E02: add r0, r6, #0x0 bl FUN_02015D50 strh r0, [r5, #0x0] b _02015E0E _02015E0C: strh r0, [r5, #0x0] _02015E0E: ldr r0, [sp, #0xc] add r4, r4, #0x1 add r5, r5, #0x2 cmp r4, r0 blo _02015DB0 _02015E18: ldr r2, _02015E2C ; =0x0000FFFF ldr r0, [sp, #0x4] lsl r1, r4, #0x1 strh r2, [r0, r1] mov r0, #0x1 add sp, #0x10 pop {r3-r7, pc} nop _02015E28: .word UNK_020ED734 _02015E2C: .word 0x0000FFFF