diff --git a/assets/objects/object_link_boy/object_link_boy.c b/assets/objects/object_link_boy/object_link_boy.c index de35c03b67..276e6b2b34 100644 --- a/assets/objects/object_link_boy/object_link_boy.c +++ b/assets/objects/object_link_boy/object_link_boy.c @@ -19,14 +19,14 @@ u64 gLinkAdultEyesClosedfTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_ #include "assets/objects/object_link_boy/gLinkAdultEyesClosedfTex.ci8.tlut_gLinkAdultHeadTLUT.inc.c" }; -u64 gLinkAdultEyesLeftTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)] = { -#include "assets/objects/object_link_boy/gLinkAdultEyesLeftTex.ci8.tlut_gLinkAdultHeadTLUT.inc.c" -}; - u64 gLinkAdultEyesRightTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)] = { #include "assets/objects/object_link_boy/gLinkAdultEyesRightTex.ci8.tlut_gLinkAdultHeadTLUT.inc.c" }; +u64 gLinkAdultEyesLeftTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)] = { +#include "assets/objects/object_link_boy/gLinkAdultEyesLeftTex.ci8.tlut_gLinkAdultHeadTLUT.inc.c" +}; + u64 gLinkAdultEyesWideTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)] = { #include "assets/objects/object_link_boy/gLinkAdultEyesWideTex.ci8.tlut_gLinkAdultHeadTLUT.inc.c" }; diff --git a/assets/objects/object_link_boy/object_link_boy.h b/assets/objects/object_link_boy/object_link_boy.h index d8b77c1048..8fadf32923 100644 --- a/assets/objects/object_link_boy/object_link_boy.h +++ b/assets/objects/object_link_boy/object_link_boy.h @@ -10,8 +10,8 @@ extern u64 gLinkAdultEyesOpenTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)]; extern u64 gLinkAdultEyesHalfTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)]; extern u64 gLinkAdultEyesClosedfTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)]; -extern u64 gLinkAdultEyesLeftTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)]; extern u64 gLinkAdultEyesRightTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)]; +extern u64 gLinkAdultEyesLeftTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)]; extern u64 gLinkAdultEyesWideTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)]; extern u64 gLinkAdultEyesDownTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)]; extern u64 gLinkAdultEyesWincingTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)]; diff --git a/assets/xml/objects/object_link_boy.xml b/assets/xml/objects/object_link_boy.xml index 83dd1dfbcc..b51e779cc8 100644 --- a/assets/xml/objects/object_link_boy.xml +++ b/assets/xml/objects/object_link_boy.xml @@ -527,8 +527,8 @@ - - + + diff --git a/include/z64player.h b/include/z64player.h index 5093d97f8f..fdc8fa1354 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -278,8 +278,8 @@ typedef enum PlayerEyes { /* 0 */ PLAYER_EYES_OPEN, /* 1 */ PLAYER_EYES_HALF, /* 2 */ PLAYER_EYES_CLOSED, - /* 3 */ PLAYER_EYES_LEFT, - /* 4 */ PLAYER_EYES_RIGHT, + /* 3 */ PLAYER_EYES_RIGHT, + /* 4 */ PLAYER_EYES_LEFT, /* 5 */ PLAYER_EYES_WIDE, /* 6 */ PLAYER_EYES_DOWN, /* 7 */ PLAYER_EYES_WINCING, @@ -301,12 +301,12 @@ typedef enum PlayerFace { /* 3 */ PLAYER_FACE_NEUTRAL_2, // same as `PLAYER_FACE_NEUTRAL` /* 4 */ PLAYER_FACE_NEUTRAL_BLINKING_HALF_2, // same as `PLAYER_FACE_NEUTRAL_BLINKING_HALF` /* 5 */ PLAYER_FACE_NEUTRAL_BLINKING_CLOSED_2, // same as `PLAYER_FACE_NEUTRAL_BLINKING_CLOSED` - /* 6 */ PLAYER_FACE_LOOK_RIGHT, // eyes looking right and mouth closed + /* 6 */ PLAYER_FACE_LOOK_LEFT, // eyes looking left and mouth closed /* 7 */ PLAYER_FACE_SURPRISED, // wide eyes and grimacing mouth /* 8 */ PLAYER_FACE_HURT, // eyes wincing in pain and mouth open /* 9 */ PLAYER_FACE_GASP, // eyes and mouth open - /* 10 */ PLAYER_FACE_LOOK_LEFT, // eyes looking left and mouth closed - /* 11 */ PLAYER_FACE_LOOK_RIGHT_2, // duplicate of `PLAYER_FACE_LOOK_RIGHT` + /* 10 */ PLAYER_FACE_LOOK_RIGHT, // eyes looking right and mouth closed + /* 11 */ PLAYER_FACE_LOOK_LEFT_2, // duplicate of `PLAYER_FACE_LOOK_LEFT` /* 12 */ PLAYER_FACE_EYES_CLOSED_MOUTH_OPEN, // eyes closed and mouth open /* 13 */ PLAYER_FACE_OPENING, // eyes and mouth both halfway open /* 14 */ PLAYER_FACE_EYES_AND_MOUTH_OPEN, // eyes and mouth open diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index d0f04de1c0..6e18ae1ccd 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -984,12 +984,12 @@ PlayerFaceIndices sPlayerFaces[PLAYER_FACE_MAX] = { { PLAYER_EYES_CLOSED, PLAYER_MOUTH_CLOSED }, // PLAYER_FACE_NEUTRAL_BLINKING_CLOSED_2 // The rest of these faces go unused. Face data encoded within animations handles all other faces. - { PLAYER_EYES_RIGHT, PLAYER_MOUTH_CLOSED }, // PLAYER_FACE_LOOK_RIGHT + { PLAYER_EYES_LEFT, PLAYER_MOUTH_CLOSED }, // PLAYER_FACE_LOOK_LEFT { PLAYER_EYES_WIDE, PLAYER_MOUTH_HALF }, // PLAYER_FACE_SURPRISED { PLAYER_EYES_WINCING, PLAYER_MOUTH_OPEN }, // PLAYER_FACE_HURT { PLAYER_EYES_OPEN, PLAYER_MOUTH_OPEN }, // PLAYER_FACE_GASP - { PLAYER_EYES_LEFT, PLAYER_MOUTH_CLOSED }, // PLAYER_FACE_LOOK_LEFT - { PLAYER_EYES_RIGHT, PLAYER_MOUTH_CLOSED }, // PLAYER_FACE_LOOK_RIGHT_2 + { PLAYER_EYES_RIGHT, PLAYER_MOUTH_CLOSED }, // PLAYER_FACE_LOOK_RIGHT + { PLAYER_EYES_LEFT, PLAYER_MOUTH_CLOSED }, // PLAYER_FACE_LOOK_LEFT_2 { PLAYER_EYES_CLOSED, PLAYER_MOUTH_OPEN }, // PLAYER_FACE_EYES_CLOSED_MOUTH_OPEN { PLAYER_EYES_HALF, PLAYER_MOUTH_HALF }, // PLAYER_FACE_OPENING { PLAYER_EYES_OPEN, PLAYER_MOUTH_OPEN }, // PLAYER_FACE_EYES_AND_MOUTH_OPEN @@ -1007,8 +1007,8 @@ void* sEyeTextures[PLAYER_EYES_MAX] = { gLinkAdultEyesOpenTex, // PLAYER_EYES_OPEN gLinkAdultEyesHalfTex, // PLAYER_EYES_HALF gLinkAdultEyesClosedfTex, // PLAYER_EYES_CLOSED - gLinkAdultEyesLeftTex, // PLAYER_EYES_LEFT gLinkAdultEyesRightTex, // PLAYER_EYES_RIGHT + gLinkAdultEyesLeftTex, // PLAYER_EYES_LEFT gLinkAdultEyesWideTex, // PLAYER_EYES_WIDE gLinkAdultEyesDownTex, // PLAYER_EYES_DOWN gLinkAdultEyesWincingTex, // PLAYER_EYES_WINCING @@ -1027,8 +1027,8 @@ void* sEyeTextures[][PLAYER_EYES_MAX] = { gLinkAdultEyesOpenTex, // PLAYER_EYES_OPEN gLinkAdultEyesHalfTex, // PLAYER_EYES_HALF gLinkAdultEyesClosedfTex, // PLAYER_EYES_CLOSED - gLinkAdultEyesLeftTex, // PLAYER_EYES_LEFT gLinkAdultEyesRightTex, // PLAYER_EYES_RIGHT + gLinkAdultEyesLeftTex, // PLAYER_EYES_LEFT gLinkAdultEyesWideTex, // PLAYER_EYES_WIDE gLinkAdultEyesDownTex, // PLAYER_EYES_DOWN gLinkAdultEyesWincingTex, // PLAYER_EYES_WINCING @@ -1037,8 +1037,14 @@ void* sEyeTextures[][PLAYER_EYES_MAX] = { gLinkChildEyesOpenTex, // PLAYER_EYES_OPEN gLinkChildEyesHalfTex, // PLAYER_EYES_HALF gLinkChildEyesClosedfTex, // PLAYER_EYES_CLOSED - gLinkChildEyesLeftTex, // PLAYER_EYES_LEFT - gLinkChildEyesRightTex, // PLAYER_EYES_RIGHT + /* + Note `PLAYER_EYES_RIGHT` corresponds to the "left" eyes texture, and vice-versa with the "right" eyes textures. + This is because on the textures Link appears to look left/right as if facing outwards the screen, + but the image is mirrored by the child Link model's UVs, reversing the direction actually looked in, + which results in-game in the correct eyes direction. + */ + gLinkChildEyesLeftTex, // PLAYER_EYES_RIGHT + gLinkChildEyesRightTex, // PLAYER_EYES_LEFT gLinkChildEyesWideTex, // PLAYER_EYES_WIDE gLinkChildEyesDownTex, // PLAYER_EYES_DOWN gLinkChildEyesWincingTex, // PLAYER_EYES_WINCING