diff --git a/asm/code_0807CC3C.s b/asm/code_0807CC3C.s index 8a374b29..43b15025 100644 --- a/asm/code_0807CC3C.s +++ b/asm/code_0807CC3C.s @@ -1667,256 +1667,3 @@ sub_0807DB88: @ 0x0807DB88 bl _DmaZero str r5, [r4] pop {r4, r5, pc} - - thumb_func_start sub_0807DB98 -sub_0807DB98: @ 0x0807DB98 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - adds r6, r1, #0 - ldr r0, [r6, #8] - cmp r0, #0 - bne _0807DBA6 - b _0807DD48 -_0807DBA6: - movs r7, #0 - adds r4, r5, #0 - adds r4, #0x82 -_0807DBAC: - ldr r1, [r6, #8] - mvns r0, r1 - adds r2, r0, #1 - ands r2, r1 - eors r1, r2 - str r1, [r6, #8] - movs r0, #0x80 - lsls r0, r0, #2 - cmp r2, r0 - bne _0807DBC2 - b _0807DCC8 -_0807DBC2: - cmp r2, r0 - bhi _0807DC04 - cmp r2, #0x10 - beq _0807DC82 - cmp r2, #0x10 - bhi _0807DBE8 - cmp r2, #2 - beq _0807DC70 - cmp r2, #2 - bhi _0807DBDC - cmp r2, #1 - beq _0807DC68 - b _0807DD40 -_0807DBDC: - cmp r2, #4 - bne _0807DBE2 - b _0807DD40 -_0807DBE2: - cmp r2, #8 - beq _0807DC7A - b _0807DD40 -_0807DBE8: - cmp r2, #0x40 - beq _0807DC9E - cmp r2, #0x40 - bhi _0807DBF6 - cmp r2, #0x20 - beq _0807DC90 - b _0807DD40 -_0807DBF6: - cmp r2, #0x80 - beq _0807DCA8 - movs r0, #0x80 - lsls r0, r0, #1 - cmp r2, r0 - beq _0807DCBA - b _0807DD40 -_0807DC04: - movs r0, #0x80 - lsls r0, r0, #7 - cmp r2, r0 - beq _0807DCFC - cmp r2, r0 - bhi _0807DC38 - movs r0, #0x80 - lsls r0, r0, #4 - cmp r2, r0 - beq _0807DCDE - cmp r2, r0 - bhi _0807DC26 - movs r0, #0x80 - lsls r0, r0, #3 - cmp r2, r0 - beq _0807DCD6 - b _0807DD40 -_0807DC26: - movs r0, #0x80 - lsls r0, r0, #5 - cmp r2, r0 - beq _0807DCE8 - movs r0, #0x80 - lsls r0, r0, #6 - cmp r2, r0 - beq _0807DCF4 - b _0807DD40 -_0807DC38: - movs r0, #0x80 - lsls r0, r0, #0xa - cmp r2, r0 - beq _0807DD14 - cmp r2, r0 - bhi _0807DC56 - movs r0, #0x80 - lsls r0, r0, #8 - cmp r2, r0 - beq _0807DD04 - movs r0, #0x80 - lsls r0, r0, #9 - cmp r2, r0 - beq _0807DD0C - b _0807DD40 -_0807DC56: - movs r0, #0x80 - lsls r0, r0, #0xb - cmp r2, r0 - beq _0807DD2E - movs r0, #0x80 - lsls r0, r0, #0xc - cmp r2, r0 - beq _0807DD36 - b _0807DD40 -_0807DC68: - adds r0, r5, #0 - adds r0, #0x80 - strh r7, [r0] - b _0807DD40 -_0807DC70: - adds r1, r5, #0 - adds r1, #0x80 - movs r0, #4 - strh r0, [r1] - b _0807DD40 -_0807DC7A: - movs r0, #0xc0 - lsls r0, r0, #9 - str r0, [r5, #0x20] - b _0807DD40 -_0807DC82: - adds r0, r5, #0 - movs r1, #8 - movs r2, #0x18 - rsbs r2, r2, #0 - bl CreateSpeechBubbleExclamationMark - b _0807DD40 -_0807DC90: - adds r0, r5, #0 - movs r1, #8 - movs r2, #0x18 - rsbs r2, r2, #0 - bl CreateSpeechBubbleQuestionMark - b _0807DD40 -_0807DC9E: - adds r0, r6, #0 - bl sub_0807DAC4 - bl DeleteThisEntity -_0807DCA8: - ldrb r0, [r5, #0x18] - movs r2, #4 - rsbs r2, r2, #0 - adds r1, r2, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r5, #0x18] - b _0807DD40 -_0807DCBA: - ldrb r0, [r5, #0x18] - movs r3, #4 - rsbs r3, r3, #0 - adds r1, r3, #0 - ands r0, r1 - strb r0, [r5, #0x18] - b _0807DD40 -_0807DCC8: - adds r0, r5, #0 - adds r0, #0x63 - strb r7, [r0] - subs r0, #1 - strb r7, [r0] - strh r7, [r4] - b _0807DD40 -_0807DCD6: - ldrh r0, [r4] - movs r1, #2 - orrs r0, r1 - b _0807DD3E -_0807DCDE: - ldrh r0, [r4] - ldr r2, _0807DCE4 @ =0x0000FFFD - b _0807DD3A - .align 2, 0 -_0807DCE4: .4byte 0x0000FFFD -_0807DCE8: - ldrh r0, [r4] - ldr r3, _0807DCF0 @ =0x0000FFFE - adds r1, r3, #0 - b _0807DD3C - .align 2, 0 -_0807DCF0: .4byte 0x0000FFFE -_0807DCF4: - ldrh r0, [r4] - movs r1, #1 - orrs r0, r1 - b _0807DD3E -_0807DCFC: - ldrh r0, [r4] - movs r1, #8 - orrs r0, r1 - b _0807DD3E -_0807DD04: - ldrh r0, [r4] - movs r1, #4 - eors r0, r1 - b _0807DD3E -_0807DD0C: - ldrh r0, [r4] - movs r1, #0x10 - eors r0, r1 - b _0807DD3E -_0807DD14: - ldrb r2, [r5, #0x18] - lsls r0, r2, #0x19 - lsrs r0, r0, #0x1f - movs r1, #1 - eors r0, r1 - lsls r0, r0, #6 - movs r3, #0x41 - rsbs r3, r3, #0 - adds r1, r3, #0 - ands r2, r1 - orrs r2, r0 - strb r2, [r5, #0x18] - b _0807DD40 -_0807DD2E: - ldrh r0, [r4] - movs r1, #0x20 - orrs r0, r1 - b _0807DD3E -_0807DD36: - ldrh r0, [r4] - ldr r2, _0807DD4C @ =0x0000FFDF -_0807DD3A: - adds r1, r2, #0 -_0807DD3C: - ands r0, r1 -_0807DD3E: - strh r0, [r4] -_0807DD40: - ldr r0, [r6, #8] - cmp r0, #0 - beq _0807DD48 - b _0807DBAC -_0807DD48: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0807DD4C: .4byte 0x0000FFDF diff --git a/src/code_0807CC3C.c b/src/code_0807CC3C.c index d7e48487..5cef7e15 100644 --- a/src/code_0807CC3C.c +++ b/src/code_0807CC3C.c @@ -7,11 +7,89 @@ extern u8 gUnk_0811E514[]; extern u8 gUnk_0811E510[]; +extern void CreateSpeechBubbleExclamationMark(Entity*, u32, u32); +extern void CreateSpeechBubbleQuestionMark(Entity*, u32, u32); +extern void sub_0807DAC4(ScriptExecutionContext*); +extern void DeleteThisEntity(void); extern void sub_0807DB88(Entity*); extern void sub_0801C4A0(u32); extern void sub_0807DB98(Entity*, ScriptExecutionContext*); extern void _call_via_r6(Entity*, ScriptExecutionContext*); +void sub_0807DB98(Entity* entity, ScriptExecutionContext* context) { + u32 switchVar; + + while (context->unk_08) { + switchVar = (~context->unk_08 + 1) & context->unk_08; + context->unk_08 ^= switchVar; + switch (switchVar) { + case 1: + entity->field_0x80.HWORD = 0; + break; + case 2: + entity->field_0x80.HWORD = 4; + break; + case 4: + break; + case 8: + entity->field_0x20 = 0x18000; + break; + case 0x10: + CreateSpeechBubbleExclamationMark(entity, 8, -0x18); + break; + case 0x20: + CreateSpeechBubbleQuestionMark(entity, 8, -0x18); + break; + case 0x40: + sub_0807DAC4(context); + DeleteThisEntity(); + case 0x80: + entity->spriteSettings.b.draw = 1; + break; + case 0x100: + entity->spriteSettings.b.draw = 0; + break; + case 0x200: + entity->spriteOffsetY = 0; + entity->spriteOffsetX = 0; + entity->field_0x82.HWORD = 0; + break; + case 0x400: + entity->field_0x82.HWORD |= 2; + break; + case 0x800: + entity->field_0x82.HWORD &= 0xfffd; + break; + case 0x1000: + entity->field_0x82.HWORD &= 0xfffe; + break; + case 0x2000: + entity->field_0x82.HWORD |= 1; + break; + case 0x4000: + entity->field_0x82.HWORD |= 8; + break; + case 0x8000: + entity->field_0x82.HWORD ^= 4; + break; + case 0x10000: + entity->field_0x82.HWORD ^= 0x10; + break; + case 0x20000: + entity->spriteSettings.b.flipX ^= 1; + break; + case 0x40000: + entity->field_0x82.HWORD |= 0x20; + break; + case 0x80000: + entity->field_0x82.HWORD &= 0xffdf; + break; + default: + break; + } + } +} + void sub_0807DF38(void); void sub_0807DE80(Entity* entity);