mirror of
https://github.com/pret/pokeruby.git
synced 2026-04-26 08:17:48 -05:00
Fix rotating_gate nonmatching function
This commit is contained in:
parent
ed3367f9f6
commit
244f1af570
|
|
@ -1,52 +1,27 @@
|
|||
#include "global.h"
|
||||
#include "decompress.h"
|
||||
#include "palette.h"
|
||||
#include "event_data.h"
|
||||
#include "main.h"
|
||||
#include "text_window.h"
|
||||
#include "menu.h"
|
||||
#include "strings2.h"
|
||||
#include "sound.h"
|
||||
#include "constants/songs.h"
|
||||
#include "berry.h"
|
||||
#include "string_util.h"
|
||||
#include "link.h"
|
||||
#include "task.h"
|
||||
#include "overworld.h"
|
||||
#include "decompress.h"
|
||||
#include "event_data.h"
|
||||
#include "ewram.h"
|
||||
#include "item.h"
|
||||
#include "constants/items.h"
|
||||
#include "link.h"
|
||||
#include "m4a.h"
|
||||
#include "main.h"
|
||||
#include "menu.h"
|
||||
#include "menu_cursor.h"
|
||||
#include "overworld.h"
|
||||
#include "palette.h"
|
||||
#include "pokeblock.h"
|
||||
#include "random.h"
|
||||
#include "save.h"
|
||||
#include "menu_cursor.h"
|
||||
#include "sound.h"
|
||||
#include "string_util.h"
|
||||
#include "strings2.h"
|
||||
#include "task.h"
|
||||
#include "text_window.h"
|
||||
#include "trig.h"
|
||||
#include "pokeblock.h"
|
||||
#include "ewram.h"
|
||||
|
||||
//needed to match Blender_ControlHitPitch
|
||||
struct MusicPlayerInfo
|
||||
{
|
||||
struct SongHeader *songHeader;
|
||||
u32 status;
|
||||
u8 trackCount;
|
||||
u8 priority;
|
||||
u8 cmd;
|
||||
u8 unk_B;
|
||||
u32 clock;
|
||||
u8 gap[8];
|
||||
u8 *memAccArea;
|
||||
u16 tempoD;
|
||||
u16 tempoU;
|
||||
u16 tempoI;
|
||||
u16 tempoC;
|
||||
u16 fadeOI;
|
||||
u16 fadeOC;
|
||||
u16 fadeOV;
|
||||
struct MusicPlayerTrack *tracks;
|
||||
struct ToneData *tone;
|
||||
u32 ident;
|
||||
u32 func;
|
||||
u32 intp;
|
||||
};
|
||||
#include "constants/songs.h"
|
||||
#include "constants/items.h"
|
||||
|
||||
#define BLENDER_SCORE_BEST 0
|
||||
#define BLENDER_SCORE_GOOD 1
|
||||
|
|
|
|||
|
|
@ -1,14 +1,6 @@
|
|||
#include "global.h"
|
||||
#include "cable_car_util.h"
|
||||
|
||||
// static types
|
||||
|
||||
// static declarations
|
||||
|
||||
// rodata
|
||||
|
||||
// text
|
||||
|
||||
void CableCarUtil_FillWrapped(void *dest, u16 value, u8 left, u8 top, u8 width, u8 height)
|
||||
{
|
||||
u8 i;
|
||||
|
|
|
|||
|
|
@ -872,18 +872,14 @@ static void RotatingGate_DestroyGatesOutsideViewport(void)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
static int RotatingGate_CanRotate(u8 gateId, int rotationDirection)
|
||||
int RotatingGate_CanRotate(u8 gateId, int rotationDirection)
|
||||
{
|
||||
const struct Coords8 *armPos;
|
||||
u8 orientation;
|
||||
s16 x;
|
||||
s16 y;
|
||||
int shape;
|
||||
int i;
|
||||
int j;
|
||||
s16 x, y;
|
||||
u8 shape;
|
||||
int i, j;
|
||||
int armOrientation;
|
||||
const u8 *gateArmCollisionData;
|
||||
u8 armIndex;
|
||||
|
||||
if (rotationDirection == ROTATE_ANTICLOCKWISE)
|
||||
|
|
@ -902,146 +898,22 @@ static int RotatingGate_CanRotate(u8 gateId, int rotationDirection)
|
|||
// Loop through the gate's "arms" clockwise (north, south, east, west)
|
||||
for (i = GATE_ARM_NORTH; i <= GATE_ARM_WEST; i++)
|
||||
{
|
||||
armOrientation = orientation + i;
|
||||
gateArmCollisionData = sRotatingGate_ArmLayout[shape][i];
|
||||
|
||||
// Ensure that no part of the arm collides with the map
|
||||
for (j = 0; j < GATE_ARM_MAX_LENGTH; j++)
|
||||
{
|
||||
armOrientation = orientation + i;
|
||||
armIndex = 2 * (armOrientation % 4) + j;
|
||||
|
||||
if (*gateArmCollisionData)
|
||||
if (sRotatingGate_ArmLayout[shape][i * 2 + j])
|
||||
{
|
||||
if (MapGridIsImpassableAt(
|
||||
armPos[armIndex].deltaX + x, armPos[armIndex].deltaY + y) == 1)
|
||||
if (MapGridIsImpassableAt(x + armPos[armIndex].deltaX, y + armPos[armIndex].deltaY) == 1)
|
||||
return 0;
|
||||
}
|
||||
gateArmCollisionData++;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
static int RotatingGate_CanRotate(u8 a, int puzzleType)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
push {r4-r7,lr}\n\
|
||||
mov r7, r10\n\
|
||||
mov r6, r9\n\
|
||||
mov r5, r8\n\
|
||||
push {r5-r7}\n\
|
||||
sub sp, 0xC\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r4, r0, 24\n\
|
||||
cmp r1, 0x1\n\
|
||||
bne _080C7EAC\n\
|
||||
ldr r0, _080C7EA8 @ =sRotatingGate_ArmPositionsAntiClockwiseRotation\n\
|
||||
mov r10, r0\n\
|
||||
b _080C7EB8\n\
|
||||
.align 2, 0\n\
|
||||
_080C7EA8: .4byte sRotatingGate_ArmPositionsAntiClockwiseRotation\n\
|
||||
_080C7EAC:\n\
|
||||
cmp r1, 0x2\n\
|
||||
beq _080C7EB4\n\
|
||||
_080C7EB0:\n\
|
||||
movs r0, 0\n\
|
||||
b _080C7F48\n\
|
||||
_080C7EB4:\n\
|
||||
ldr r1, _080C7F58 @ =sRotatingGate_ArmPositionsClockwiseRotation\n\
|
||||
mov r10, r1\n\
|
||||
_080C7EB8:\n\
|
||||
adds r0, r4, 0\n\
|
||||
bl RotatingGate_GetGateOrientation\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
str r0, [sp]\n\
|
||||
ldr r0, _080C7F5C @ =gRotatingGate_PuzzleConfig\n\
|
||||
ldr r1, [r0]\n\
|
||||
lsls r0, r4, 3\n\
|
||||
adds r0, r1\n\
|
||||
ldrb r2, [r0, 0x4]\n\
|
||||
ldrh r1, [r0]\n\
|
||||
adds r1, 0x7\n\
|
||||
ldrh r0, [r0, 0x2]\n\
|
||||
adds r0, 0x7\n\
|
||||
movs r3, 0\n\
|
||||
lsls r2, 3\n\
|
||||
str r2, [sp, 0x4]\n\
|
||||
lsls r1, 16\n\
|
||||
asrs r1, 16\n\
|
||||
mov r9, r1\n\
|
||||
lsls r0, 16\n\
|
||||
asrs r0, 16\n\
|
||||
mov r8, r0\n\
|
||||
_080C7EE8:\n\
|
||||
movs r6, 0\n\
|
||||
ldr r2, [sp]\n\
|
||||
adds r7, r2, r3\n\
|
||||
lsls r0, r3, 1\n\
|
||||
adds r5, r7, 0\n\
|
||||
ldr r1, [sp, 0x4]\n\
|
||||
adds r0, r1\n\
|
||||
ldr r2, _080C7F60 @ =sRotatingGate_ArmLayout\n\
|
||||
adds r4, r0, r2\n\
|
||||
_080C7EFA:\n\
|
||||
adds r0, r5, 0\n\
|
||||
cmp r5, 0\n\
|
||||
bge _080C7F02\n\
|
||||
adds r0, r7, 0x3\n\
|
||||
_080C7F02:\n\
|
||||
asrs r0, 2\n\
|
||||
lsls r0, 2\n\
|
||||
subs r0, r5, r0\n\
|
||||
lsls r0, 1\n\
|
||||
adds r0, r6\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r1, r0, 24\n\
|
||||
ldrb r0, [r4]\n\
|
||||
cmp r0, 0\n\
|
||||
beq _080C7F38\n\
|
||||
lsls r1, 2\n\
|
||||
add r1, r10\n\
|
||||
movs r0, 0\n\
|
||||
ldrsb r0, [r1, r0]\n\
|
||||
add r0, r9\n\
|
||||
ldrb r1, [r1, 0x1]\n\
|
||||
lsls r1, 24\n\
|
||||
asrs r1, 24\n\
|
||||
add r1, r8\n\
|
||||
str r3, [sp, 0x8]\n\
|
||||
bl MapGridIsImpassableAt\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
ldr r3, [sp, 0x8]\n\
|
||||
cmp r0, 0x1\n\
|
||||
beq _080C7EB0\n\
|
||||
_080C7F38:\n\
|
||||
adds r4, 0x1\n\
|
||||
adds r6, 0x1\n\
|
||||
cmp r6, 0x1\n\
|
||||
ble _080C7EFA\n\
|
||||
adds r3, 0x1\n\
|
||||
cmp r3, 0x3\n\
|
||||
ble _080C7EE8\n\
|
||||
movs r0, 0x1\n\
|
||||
_080C7F48:\n\
|
||||
add sp, 0xC\n\
|
||||
pop {r3-r5}\n\
|
||||
mov r8, r3\n\
|
||||
mov r9, r4\n\
|
||||
mov r10, r5\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r1}\n\
|
||||
bx r1\n\
|
||||
.align 2, 0\n\
|
||||
_080C7F58: .4byte sRotatingGate_ArmPositionsClockwiseRotation\n\
|
||||
_080C7F5C: .4byte gRotatingGate_PuzzleConfig\n\
|
||||
_080C7F60: .4byte sRotatingGate_ArmLayout\n\
|
||||
.syntax divided\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
static int RotatingGate_HasArm(u8 gateId, u8 armInfo)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user