diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/enemy/vaatiArm.c | 21 | ||||
| -rw-r--r-- | src/message.c | 18 | ||||
| -rw-r--r-- | src/object/cutsceneMiscObject.c | 20 | ||||
| -rw-r--r-- | src/scroll.c | 94 | ||||
| -rw-r--r-- | src/ui.c | 44 |
5 files changed, 117 insertions, 80 deletions
diff --git a/src/enemy/vaatiArm.c b/src/enemy/vaatiArm.c index 569a6bbf..4ed717de 100644 --- a/src/enemy/vaatiArm.c +++ b/src/enemy/vaatiArm.c @@ -900,10 +900,9 @@ void sub_080432A8(Entity* this) { } } -static NONMATCH("asm/non_matching/vaati/sub_0804334C.inc", void sub_0804334C(Entity* this)) { - int bVar1; +void sub_0804334C(Entity* this) { + u32 bVar1; Entity* entity; - VaatiArm_HeapStruct1* s; u32 i; VaatiArm_HeapStruct1* ptr; @@ -913,13 +912,13 @@ static NONMATCH("asm/non_matching/vaati/sub_0804334C.inc", void sub_0804334C(Ent } for (i = 0; i < 5; i++) { entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; - entity->flags = entity->flags | ENT_COLLIDE; + COLLISION_ON(entity); entity->spriteSettings.draw = 1; } } - s = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; - if ((gUnk_080D131C[this->type2] - s->unk00.HALF.HI) + 1 > 2u) { - s->unk00.HWORD += s->unk08; + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if (gUnk_080D131C[this->type2] - ptr->unk00.HALF.HI + 1 > 2u) { + ptr->unk00.HWORD += ptr->unk08; bVar1 = 0; } else { bVar1 = 1; @@ -927,12 +926,11 @@ static NONMATCH("asm/non_matching/vaati/sub_0804334C.inc", void sub_0804334C(Ent sub_08043B9C(this); for (i = 0; i < 5; i++) { ptr = &(((VaatiArm_HeapStruct*)this->myHeap)->s1)[i]; + if (gUnk_080D1414[i] > ptr->unk0c) { - ptr->unk0c++; - if (gUnk_080D1414[i] != ptr->unk0c) { - return; + if (gUnk_080D1414[i] == ++ptr->unk0c) { + SoundReq(SFX_15E); } - SoundReq(SFX_15E); return; } if ((bVar1) && (i == 4)) { @@ -945,7 +943,6 @@ static NONMATCH("asm/non_matching/vaati/sub_0804334C.inc", void sub_0804334C(Ent } } } -END_NONMATCH static void sub_08043420(Entity* this) { gUnk_080D1320[this->subAction](this); diff --git a/src/message.c b/src/message.c index 01305823..165c58d1 100644 --- a/src/message.c +++ b/src/message.c @@ -505,11 +505,7 @@ u16 RunTextCommand(TextRender* this) { const u8 gUnk_08107C0F[] = { 0x8, 0x1e, 0x4, 0x12, 0x0 }; const u8 gUnk_08107C14[] = { 0x8, 0x1e, 0x8, 0xFE, 0x0 }; -#ifdef EU -ASM_FUNC("asm/non_matching/eu/TextDispEnquiry.inc", /*static*/ void TextDispEnquiry(TextRender* ctb)) -#else - -/*static*/ void TextDispEnquiry(TextRender* this) { +void TextDispEnquiry(TextRender* this) { s32 nextTextIdx, choiceIdx, lastChoice; u32 doSwitch; const u8* src; @@ -556,10 +552,22 @@ ASM_FUNC("asm/non_matching/eu/TextDispEnquiry.inc", /*static*/ void TextDispEnqu doSwitch = 1; } if (doSwitch) { +#ifdef EU + u32 previousUnk6 = gTextRender._50.unk6; + gTextRender._50.unk6 = gMessageChoices.unk_08[lastChoice]; + sub_0805F8E4(0, &this->_50); + gTextRender._50.unk6 = gMessageChoices.unk_08[choiceIdx]; + sub_0805F8E4(1, &this->_50); + gTextRender._50.unk6 = previousUnk6; + gTextRender.updateDraw = 1; +#else SwitchChoice(choiceIdx, lastChoice); +#endif } } +#ifndef EU + static void SwitchChoice(u32 to, u32 from) { u16 t; t = gTextRender._50.unk6; diff --git a/src/object/cutsceneMiscObject.c b/src/object/cutsceneMiscObject.c index 25a7107c..8d971ba2 100644 --- a/src/object/cutsceneMiscObject.c +++ b/src/object/cutsceneMiscObject.c @@ -1107,34 +1107,34 @@ void sub_08095E7C(CutsceneMiscObjectEntity* this, ScriptExecutionContext* ctx) { } } -NONMATCH("asm/non_matching/cutsceneMiscObject/sub_08095EAC.inc", - void sub_08095EAC(CutsceneMiscObjectEntity* this, ScriptExecutionContext* ctx)) { +void sub_08095EAC(Entity* this, ScriptExecutionContext* ctx) { Entity* e = CreateObject(CUTSCENE_MISC_OBJECT, 0x1E, 1); - s32 x, y; + s32 x; + s16 y; + s32 a, b, speed; + s32 vel; if (e != NULL) { - s32 a, b, vel, speed; if (ctx->intVariable == 0) { a = 0x10; b = 0x1F; - vel = 0x4000; + vel = Q_16_16(0.25); speed = 0; } else { a = 0x8; b = 0xF; - vel = 0x40000; + vel = Q_16_16(4); speed = gUnk_08122B0E[Random() & 7]; e->type2 = -1; } - x = a - (Random() & b); - y = a - (Random() & b); - PositionRelative(super, e, x << 16, y << 16); + x = (a - (Random() & b)); + y = (a - (Random() & b)); + PositionRelative(this, e, x << 16, y << 16); e->zVelocity = vel; e->speed = speed; } } -END_NONMATCH #define local ((Type1F*)this) void sub_08095F38(CutsceneMiscObjectEntity* this) { diff --git a/src/scroll.c b/src/scroll.c index 051ee4a4..8e4d4018 100644 --- a/src/scroll.c +++ b/src/scroll.c @@ -83,92 +83,83 @@ void sub_0807FC64(RoomControls* controls) { UpdateIsDiggingCave(); } -NONMATCH("asm/non_matching/scroll/sub_0807FC7C.inc", void sub_0807FC7C(RoomControls* controls)) { - u32 uVar1; - u32 uVar2; - u32 uVar3; - int iVar4; - u32 uVar5; - u32 temp; - u32 temp2; - u32 uVar6; +void sub_0807FC7C(RoomControls* controls) { + s32 uVar2; + s32 uVar3; + s32 iVar4; + s32 uVar5; + s32 temp; if (controls->camera_target != NULL) { - iVar4 = (int)controls->scroll_x; + iVar4 = controls->scroll_x; temp = controls->camera_target->x.HALF.HI - 0x78; - uVar3 = iVar4 - temp; + uVar3 = controls->scroll_x - temp; if (uVar3 != 0) { - uVar1 = (u16)controls->scroll_x; - uVar5 = uVar1 & 7; - uVar6 = uVar1; - if ((int)uVar3 >= 1) { - uVar2 = controls->origin_x; - if ((int)uVar2 < iVar4) { - if ((int)controls->unk5 <= (int)uVar3) { + uVar5 = controls->scroll_x & 7; + if (uVar3 >= 1) { + if (controls->origin_x < controls->scroll_x) { + if (controls->unk5 <= uVar3) { uVar3 = controls->unk5; - controls->scroll_flags = controls->scroll_flags | 4; + controls->scroll_flags |= 4; } - controls->scroll_x = uVar6 - uVar3; - if ((int)((uVar5)-uVar3) < 1) { + controls->scroll_x = controls->scroll_x - uVar3; + if (uVar5 - uVar3 < 1) { gUpdateVisibleTiles = 1; } - if ((int)uVar2 >= (int)controls->scroll_x) { - controls->scroll_x = (s16)uVar2; + if (controls->origin_x >= controls->scroll_x) { + controls->scroll_x = controls->origin_x; } } } else { - uVar2 = (controls->origin_x + controls->width) - 0xf0; - if (iVar4 < (int)uVar2) { - if ((int)-controls->unk5 >= (int)uVar3) { + uVar2 = controls->origin_x + controls->width - 0xf0; + if (controls->scroll_x < uVar2) { + if (-controls->unk5 >= uVar3) { uVar3 = -controls->unk5; controls->scroll_flags |= 4; } - controls->scroll_x = uVar1 - (short)uVar3; - if (7 < (int)((uVar5)-uVar3)) { + controls->scroll_x -= uVar3; + if (uVar5 - uVar3 > 7) { gUpdateVisibleTiles = 1; } - if ((int)controls->scroll_x >= (int)uVar2) { - controls->scroll_x = (s16)uVar2; + if (controls->scroll_x >= uVar2) { + controls->scroll_x = uVar2; } } } } - iVar4 = (int)controls->scroll_y; + iVar4 = controls->scroll_y; temp = controls->camera_target->y.HALF.HI - 0x50; - uVar3 = iVar4 - (temp); + uVar3 = controls->scroll_y - (temp); if (uVar3 != 0) { - uVar1 = (u16)controls->scroll_y; - uVar5 = uVar1 & 7; - uVar6 = uVar1; - if ((int)uVar3 >= 1) { - uVar2 = temp2 = (u16)controls->origin_y; - if ((int)uVar2 < iVar4) { - if ((int)controls->unk5 <= (int)uVar3) { + uVar5 = controls->scroll_y & 7; + if (uVar3 >= 1) { + if (controls->origin_y < controls->scroll_y) { + if (controls->unk5 <= uVar3) { uVar3 = controls->unk5; controls->scroll_flags |= 4; } - controls->scroll_y = uVar6 - uVar3; - if ((int)((uVar5)-uVar3) < 1) { + controls->scroll_y = controls->scroll_y - uVar3; + if (uVar5 - uVar3 < 1) { gUpdateVisibleTiles = 1; } - if ((int)uVar2 >= (int)controls->scroll_y) { - controls->scroll_y = (s16)uVar2; + if (controls->origin_y >= controls->scroll_y) { + controls->scroll_y = controls->origin_y; } } } else { - uVar2 = (controls->origin_y + controls->height) - DISPLAY_HEIGHT; - if (iVar4 < (int)uVar2) { - if ((int)-controls->unk5 >= (int)uVar3) { + uVar2 = controls->origin_y + controls->height - DISPLAY_HEIGHT; + if (controls->scroll_y < uVar2) { + if (-controls->unk5 >= uVar3) { uVar3 = -controls->unk5; - controls->scroll_flags = controls->scroll_flags | 4; + controls->scroll_flags |= 4; } - controls->scroll_y = uVar1 - (short)uVar3; - if (7 < (int)((uVar1 & 7) - uVar3)) { + controls->scroll_y -= uVar3; + if (uVar5 - uVar3 > 7) { gUpdateVisibleTiles = 1; } - if ((int)controls->scroll_y >= (int)uVar2) { - controls->scroll_y = (s16)uVar2; + if (controls->scroll_y >= uVar2) { + controls->scroll_y = uVar2; } } } @@ -176,7 +167,6 @@ NONMATCH("asm/non_matching/scroll/sub_0807FC7C.inc", void sub_0807FC7C(RoomContr } sub_08080BC4(); } -END_NONMATCH void sub_0807FDB0(RoomControls* controls) { static void (*const gUnk_0811E780[])(RoomControls*) = { @@ -11,6 +11,7 @@ extern void sub_0805ECEC(u32, u32, u32, u32); extern bool32 ItemIsBottle(u32); +extern u32 sub_08000E44(u32); typedef struct { u16 unk_0; @@ -669,7 +670,48 @@ void ButtonUIElement_Action0(UIElement* element) { sub_0801CAFC(element, element->type); } -ASM_FUNC("asm/non_matching/ui/ButtonUIElement_Action1.inc", void ButtonUIElement_Action1()) +void ButtonUIElement_Action1(UIElement* element) { + u32 MAX_MOVEMENT; + s32 y; + u32 y_diff; + s32 x; + u32 x_diff; + + MAX_MOVEMENT = (!element->type2) ? 4 : 8; + + if (element->type2 == 0 && (((gUnk_0200AF00.unk_1 >> element->type) & 1) || (gMessage.doTextBox & 0x7f) != 0)) { + y = (s16)gUnk_0200AF00.buttonY[element->type] - 0x28; + } else { + y = (s16)gUnk_0200AF00.buttonY[element->type]; + } + + y -= (s16)element->y; + y_diff = (y > 0) ? y : -y; + + if ((s32)MAX_MOVEMENT <= (s32)y_diff) { + y_diff = MAX_MOVEMENT; + } + + y_diff *= sub_08000E44(y); + + if (y_diff != 0) { + element->y += y_diff; + } + + x = (short)gUnk_0200AF00.buttonX[element->type]; + x -= (short)element->x; + x_diff = (x < 0) ? -x : x; + + if ((int)MAX_MOVEMENT <= (int)x_diff) { + x_diff = MAX_MOVEMENT; + } + + x_diff *= sub_08000E44(x); + + if (x_diff != 0) { + element->x += x_diff; + } +} u32 sub_0801CC80(UIElement* element) { u8 type = element->type; |
