Type Effectiveness Indicators when selecting moves (#6559)
@@ -1064,6 +1064,7 @@ ROUND_RIGHT_PAREN = F9 14
|
||||
CIRCLE_DOT = F9 15
|
||||
TRIANGLE = F9 16
|
||||
BIG_MULT_X = F9 17
|
||||
CIRCLE_HOLLOW = F9 18
|
||||
|
||||
EMOJI_UNDERSCORE = F9 D0
|
||||
EMOJI_PIPE = F9 D1
|
||||
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.3 KiB |
@@ -323,6 +323,12 @@
|
||||
#define SHOW_TYPES_SEEN 3 // Only show types if you've seen a species of the mon.
|
||||
#define B_SHOW_TYPES SHOW_TYPES_NEVER // When to show type indicators next to Pokémon health bars in battle, while choosing a move after selecting a target Pokémon.
|
||||
|
||||
#define SHOW_EFFECTIVENESS_NEVER 0 // Never show effectiveness when selecting moves.
|
||||
#define SHOW_EFFECTIVENESS_ALWAYS 1 // Always show effectiveness when selecting moves.
|
||||
#define SHOW_EFFECTIVENESS_CAUGHT 2 // Only show effectiveness if you've caught a species of the mon.
|
||||
#define SHOW_EFFECTIVENESS_SEEN 3 // Only show effectiveness if you've seen a species of the mon.
|
||||
#define B_SHOW_EFFECTIVENESS SHOW_EFFECTIVENESS_SEEN // If not SHOW_EFFECTIVENESS_NEVER, the PP string is replaced by a type effectiveness indicator based off the moves and the opposing side.
|
||||
|
||||
// Pokémon battle sprite settings
|
||||
#define B_ENEMY_MON_SHADOW_STYLE GEN_LATEST // In Gen4+, all enemy Pokemon will have a shadow drawn beneath them.
|
||||
|
||||
|
@@ -46,6 +46,7 @@
|
||||
#include "menu.h"
|
||||
#include "pokemon_summary_screen.h"
|
||||
#include "type_icons.h"
|
||||
#include "pokedex.h"
|
||||
|
||||
static void PlayerBufferExecCompleted(u32 battler);
|
||||
static void PlayerHandleLoadMonSprite(u32 battler);
|
||||
@@ -99,6 +100,9 @@ static void Task_UpdateLvlInHealthbox(u8);
|
||||
static void PrintLinkStandbyMsg(void);
|
||||
|
||||
static void ReloadMoveNames(u32 battler);
|
||||
static u32 CheckTypeEffectiveness(u32 targetId, u32 battler);
|
||||
static u32 CheckTargetTypeEffectiveness(u32 battler);
|
||||
static void MoveSelectionDisplayMoveEffectiveness(u32 foeEffectiveness, u32 battler);
|
||||
|
||||
static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) =
|
||||
{
|
||||
@@ -502,6 +506,8 @@ void HandleInputChooseTarget(u32 battler)
|
||||
i++;
|
||||
break;
|
||||
}
|
||||
if (B_SHOW_EFFECTIVENESS)
|
||||
MoveSelectionDisplayMoveEffectiveness(CheckTypeEffectiveness(GetBattlerPosition(gMultiUsePlayerCursor), battler), battler);
|
||||
|
||||
if (gAbsentBattlerFlags & (1u << gMultiUsePlayerCursor)
|
||||
|| !CanTargetBattler(battler, gMultiUsePlayerCursor, move)
|
||||
@@ -551,6 +557,8 @@ void HandleInputChooseTarget(u32 battler)
|
||||
i++;
|
||||
break;
|
||||
}
|
||||
if (B_SHOW_EFFECTIVENESS)
|
||||
MoveSelectionDisplayMoveEffectiveness(CheckTypeEffectiveness(GetBattlerPosition(gMultiUsePlayerCursor), battler), battler);
|
||||
|
||||
if (gAbsentBattlerFlags & (1u << gMultiUsePlayerCursor)
|
||||
|| !CanTargetBattler(battler, gMultiUsePlayerCursor, move)
|
||||
@@ -749,6 +757,8 @@ void HandleInputChooseMove(u32 battler)
|
||||
gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
|
||||
else
|
||||
gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
|
||||
if (B_SHOW_EFFECTIVENESS)
|
||||
MoveSelectionDisplayMoveEffectiveness(CheckTypeEffectiveness(GetBattlerPosition(gMultiUsePlayerCursor), battler), battler);
|
||||
|
||||
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_ShowAsMoveTarget;
|
||||
break;
|
||||
@@ -785,6 +795,8 @@ void HandleInputChooseMove(u32 battler)
|
||||
gMoveSelectionCursor[battler] ^= 1;
|
||||
PlaySE(SE_SELECT);
|
||||
MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0);
|
||||
if (B_SHOW_EFFECTIVENESS)
|
||||
MoveSelectionDisplayMoveEffectiveness(CheckTargetTypeEffectiveness(battler), battler);
|
||||
MoveSelectionDisplayPpNumber(battler);
|
||||
MoveSelectionDisplayMoveType(battler);
|
||||
TryMoveSelectionDisplayMoveDescription(battler);
|
||||
@@ -800,6 +812,8 @@ void HandleInputChooseMove(u32 battler)
|
||||
gMoveSelectionCursor[battler] ^= 1;
|
||||
PlaySE(SE_SELECT);
|
||||
MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0);
|
||||
if (B_SHOW_EFFECTIVENESS)
|
||||
MoveSelectionDisplayMoveEffectiveness(CheckTargetTypeEffectiveness(battler), battler);
|
||||
MoveSelectionDisplayPpNumber(battler);
|
||||
MoveSelectionDisplayMoveType(battler);
|
||||
TryMoveSelectionDisplayMoveDescription(battler);
|
||||
@@ -814,6 +828,8 @@ void HandleInputChooseMove(u32 battler)
|
||||
gMoveSelectionCursor[battler] ^= 2;
|
||||
PlaySE(SE_SELECT);
|
||||
MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0);
|
||||
if (B_SHOW_EFFECTIVENESS)
|
||||
MoveSelectionDisplayMoveEffectiveness(CheckTargetTypeEffectiveness(battler), battler);
|
||||
MoveSelectionDisplayPpNumber(battler);
|
||||
MoveSelectionDisplayMoveType(battler);
|
||||
TryMoveSelectionDisplayMoveDescription(battler);
|
||||
@@ -829,6 +845,8 @@ void HandleInputChooseMove(u32 battler)
|
||||
gMoveSelectionCursor[battler] ^= 2;
|
||||
PlaySE(SE_SELECT);
|
||||
MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0);
|
||||
if (B_SHOW_EFFECTIVENESS)
|
||||
MoveSelectionDisplayMoveEffectiveness(CheckTargetTypeEffectiveness(battler), battler);
|
||||
MoveSelectionDisplayPpNumber(battler);
|
||||
MoveSelectionDisplayMoveType(battler);
|
||||
TryMoveSelectionDisplayMoveDescription(battler);
|
||||
@@ -866,6 +884,8 @@ void HandleInputChooseMove(u32 battler)
|
||||
ClearStdWindowAndFrame(B_WIN_MOVE_DESCRIPTION, FALSE);
|
||||
CopyWindowToVram(B_WIN_MOVE_DESCRIPTION, COPYWIN_GFX);
|
||||
PlaySE(SE_SELECT);
|
||||
if (B_SHOW_EFFECTIVENESS)
|
||||
MoveSelectionDisplayMoveEffectiveness(CheckTargetTypeEffectiveness(battler), battler);
|
||||
MoveSelectionDisplayPpNumber(battler);
|
||||
MoveSelectionDisplayMoveType(battler);
|
||||
}
|
||||
@@ -900,6 +920,8 @@ static void ReloadMoveNames(u32 battler)
|
||||
MoveSelectionDestroyCursorAt(battler);
|
||||
MoveSelectionDisplayMoveNames(battler);
|
||||
MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0);
|
||||
if (B_SHOW_EFFECTIVENESS)
|
||||
MoveSelectionDisplayMoveEffectiveness(CheckTargetTypeEffectiveness(battler), battler);
|
||||
MoveSelectionDisplayPpNumber(battler);
|
||||
MoveSelectionDisplayMoveType(battler);
|
||||
}
|
||||
@@ -1052,7 +1074,10 @@ void HandleMoveSwitching(u32 battler)
|
||||
gBattlerControllerFuncs[battler] = HandleInputChooseMove;
|
||||
gMoveSelectionCursor[battler] = gMultiUsePlayerCursor;
|
||||
MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0);
|
||||
MoveSelectionDisplayPpString(battler);
|
||||
if (B_SHOW_EFFECTIVENESS)
|
||||
MoveSelectionDisplayMoveEffectiveness(CheckTargetTypeEffectiveness(battler), battler);
|
||||
else
|
||||
MoveSelectionDisplayPpString(battler);
|
||||
MoveSelectionDisplayPpNumber(battler);
|
||||
MoveSelectionDisplayMoveType(battler);
|
||||
AssignUsableZMoves(battler, moveInfo->moves);
|
||||
@@ -1063,7 +1088,10 @@ void HandleMoveSwitching(u32 battler)
|
||||
MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor);
|
||||
MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0);
|
||||
gBattlerControllerFuncs[battler] = HandleInputChooseMove;
|
||||
MoveSelectionDisplayPpString(battler);
|
||||
if (B_SHOW_EFFECTIVENESS)
|
||||
MoveSelectionDisplayMoveEffectiveness(CheckTargetTypeEffectiveness(battler), battler);
|
||||
else
|
||||
MoveSelectionDisplayPpString(battler);
|
||||
MoveSelectionDisplayPpNumber(battler);
|
||||
MoveSelectionDisplayMoveType(battler);
|
||||
}
|
||||
@@ -2152,7 +2180,10 @@ void InitMoveSelectionsVarsAndStrings(u32 battler)
|
||||
MoveSelectionDisplayMoveNames(battler);
|
||||
gMultiUsePlayerCursor = 0xFF;
|
||||
MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0);
|
||||
MoveSelectionDisplayPpString(battler);
|
||||
if (B_SHOW_EFFECTIVENESS)
|
||||
MoveSelectionDisplayMoveEffectiveness(CheckTargetTypeEffectiveness(battler), battler);
|
||||
else
|
||||
MoveSelectionDisplayPpString(battler);
|
||||
MoveSelectionDisplayPpNumber(battler);
|
||||
MoveSelectionDisplayMoveType(battler);
|
||||
}
|
||||
@@ -2386,3 +2417,100 @@ static void PlayerHandleBattleDebug(u32 battler)
|
||||
SetMainCallback2(CB2_BattleDebugMenu);
|
||||
gBattlerControllerFuncs[battler] = Controller_WaitForDebug;
|
||||
}
|
||||
|
||||
// Order based numerically, with EFFECTIVENESS_CANNOT_VIEW at 0 to always prioritize any other effectiveness during comparison
|
||||
enum
|
||||
{
|
||||
EFFECTIVENESS_CANNOT_VIEW,
|
||||
EFFECTIVENESS_NO_EFFECT,
|
||||
EFFECTIVENESS_NOT_VERY_EFFECTIVE,
|
||||
EFFECTIVENESS_NORMAL,
|
||||
EFFECTIVENESS_SUPER_EFFECTIVE,
|
||||
};
|
||||
|
||||
static bool32 ShouldShowTypeEffectiveness(u32 targetId)
|
||||
{
|
||||
if (B_SHOW_EFFECTIVENESS == SHOW_EFFECTIVENESS_CAUGHT)
|
||||
return GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[targetId].species), FLAG_GET_CAUGHT);
|
||||
|
||||
if (B_SHOW_EFFECTIVENESS == SHOW_EFFECTIVENESS_SEEN)
|
||||
return GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[targetId].species), FLAG_GET_SEEN);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static u32 CheckTypeEffectiveness(u32 targetId, u32 battler)
|
||||
{
|
||||
struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]);
|
||||
struct Pokemon *mon = &gPlayerParty[gBattlerPartyIndexes[battler]];
|
||||
u32 move = moveInfo->moves[gMoveSelectionCursor[battler]];
|
||||
u32 moveType = CheckDynamicMoveType(mon, move, battler);
|
||||
uq4_12_t modifier = CalcTypeEffectivenessMultiplier(move, moveType, battler, targetId, GetBattlerAbility(targetId), FALSE);
|
||||
|
||||
if (!ShouldShowTypeEffectiveness(targetId))
|
||||
return EFFECTIVENESS_CANNOT_VIEW;
|
||||
|
||||
if (modifier == UQ_4_12(0.0))
|
||||
return EFFECTIVENESS_NO_EFFECT; // No effect
|
||||
else if (modifier <= UQ_4_12(0.5))
|
||||
return EFFECTIVENESS_NOT_VERY_EFFECTIVE; // Not very effective
|
||||
else if (modifier >= UQ_4_12(2.0))
|
||||
return EFFECTIVENESS_SUPER_EFFECTIVE; // Super effective
|
||||
return EFFECTIVENESS_NORMAL; // Normal effectiveness
|
||||
}
|
||||
|
||||
static u32 CheckTargetTypeEffectiveness(u32 battler)
|
||||
{
|
||||
u32 battlerFoe = BATTLE_OPPOSITE(GetBattlerPosition(battler));
|
||||
u32 foeEffectiveness = CheckTypeEffectiveness(battlerFoe, battler);
|
||||
|
||||
if (IsDoubleBattle())
|
||||
{
|
||||
u32 partnerFoe = BATTLE_PARTNER(battlerFoe);
|
||||
u32 partnerFoeEffectiveness = CheckTypeEffectiveness(partnerFoe, battler);
|
||||
if (!IsBattlerAlive(battlerFoe))
|
||||
return partnerFoeEffectiveness;
|
||||
if (IsBattlerAlive(battlerFoe) && IsBattlerAlive(partnerFoe)
|
||||
&& partnerFoeEffectiveness > foeEffectiveness)
|
||||
return partnerFoeEffectiveness;
|
||||
}
|
||||
return foeEffectiveness; // fallthrough for any other circumstance
|
||||
}
|
||||
|
||||
static void MoveSelectionDisplayMoveEffectiveness(u32 foeEffectiveness, u32 battler)
|
||||
{
|
||||
static const u8 noIcon[] = _("");
|
||||
static const u8 effectiveIcon[] = _("{CIRCLE_HOLLOW}");
|
||||
static const u8 superEffectiveIcon[] = _("{CIRCLE_DOT}");
|
||||
static const u8 notVeryEffectiveIcon[] = _("{TRIANGLE}");
|
||||
static const u8 immuneIcon[] = _("{BIG_MULT_X}");
|
||||
struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]);
|
||||
u8 *txtPtr;
|
||||
|
||||
txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfacePP);
|
||||
|
||||
if (!IsBattleMoveStatus(moveInfo->moves[gMoveSelectionCursor[battler]]))
|
||||
{
|
||||
switch (foeEffectiveness)
|
||||
{
|
||||
case EFFECTIVENESS_SUPER_EFFECTIVE:
|
||||
StringCopy(txtPtr, superEffectiveIcon);
|
||||
break;
|
||||
case EFFECTIVENESS_NOT_VERY_EFFECTIVE:
|
||||
StringCopy(txtPtr, notVeryEffectiveIcon);
|
||||
break;
|
||||
case EFFECTIVENESS_NO_EFFECT:
|
||||
StringCopy(txtPtr, immuneIcon);
|
||||
break;
|
||||
case EFFECTIVENESS_NORMAL:
|
||||
StringCopy(txtPtr, effectiveIcon);
|
||||
break;
|
||||
default:
|
||||
case EFFECTIVENESS_CANNOT_VIEW:
|
||||
StringCopy(txtPtr, noIcon);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_PP);
|
||||
}
|
||||
|
@@ -1635,9 +1635,9 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] =
|
||||
.x = 0,
|
||||
.y = 1,
|
||||
.speed = 0,
|
||||
.fgColor = 12,
|
||||
.fgColor = B_SHOW_EFFECTIVENESS != SHOW_EFFECTIVENESS_NEVER ? 13 : 12,
|
||||
.bgColor = 14,
|
||||
.shadowColor = 11,
|
||||
.shadowColor = B_SHOW_EFFECTIVENESS != SHOW_EFFECTIVENESS_NEVER ? 15 : 11,
|
||||
},
|
||||
[B_WIN_DUMMY] = {
|
||||
.fillValue = PIXEL_FILL(0xE),
|
||||
@@ -1887,9 +1887,9 @@ static const struct BattleWindowText sTextOnWindowsInfo_Arena[] =
|
||||
.x = 0,
|
||||
.y = 1,
|
||||
.speed = 0,
|
||||
.fgColor = 12,
|
||||
.fgColor = B_SHOW_EFFECTIVENESS != SHOW_EFFECTIVENESS_NEVER ? 13 : 12,
|
||||
.bgColor = 14,
|
||||
.shadowColor = 11,
|
||||
.shadowColor = B_SHOW_EFFECTIVENESS != SHOW_EFFECTIVENESS_NEVER ? 15 : 11,
|
||||
},
|
||||
[B_WIN_DUMMY] = {
|
||||
.fillValue = PIXEL_FILL(0xE),
|
||||
|
18
src/fonts.c
@@ -19,7 +19,7 @@ ALIGNED(4) const u8 gFontSmallNarrowLatinGlyphWidths[] = {
|
||||
4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7,
|
||||
3, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 8, 3, 3, 3, 3,
|
||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
||||
8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
@@ -55,7 +55,7 @@ ALIGNED(4) const u8 gFontSmallLatinGlyphWidths[] = {
|
||||
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8,
|
||||
7, 5, 5, 5, 5, 5, 5, 9, 3, 3, 3, 8, 3, 3, 3, 3,
|
||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
||||
8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
@@ -91,7 +91,7 @@ ALIGNED(4) const u8 gFontNarrowLatinGlyphWidths[] = {
|
||||
4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8,
|
||||
3, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 8, 3, 3, 3, 3,
|
||||
10, 10, 10, 10, 8, 8, 10, 8, 10, 10, 10, 10, 10, 10, 10, 10,
|
||||
10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
@@ -127,7 +127,7 @@ ALIGNED(4) const u8 gFontShortLatinGlyphWidths[] = {
|
||||
5, 6, 5, 6, 6, 6, 5, 5, 5, 6, 6, 6, 6, 6, 6, 8,
|
||||
5, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 8, 3, 3, 3, 3,
|
||||
12, 12, 12, 12, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
|
||||
10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
@@ -163,7 +163,7 @@ ALIGNED(4) const u8 gFontNormalLatinGlyphWidths[] = {
|
||||
4, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 6, 6, 6, 8,
|
||||
3, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 8, 3, 3, 3, 3,
|
||||
10, 10, 10, 10, 8, 10, 10, 8, 10, 10, 10, 10, 10, 10, 10, 10,
|
||||
10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
@@ -199,7 +199,7 @@ ALIGNED(4) const u8 gFontNarrowerLatinGlyphWidths[] = {
|
||||
2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8,
|
||||
2, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 8, 3, 3, 3, 3,
|
||||
10, 10, 10, 10, 8, 8, 10, 8, 10, 10, 10, 10, 10, 10, 10, 10,
|
||||
10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
@@ -235,7 +235,7 @@ ALIGNED(4) const u8 gFontSmallNarrowerLatinGlyphWidths[] = {
|
||||
2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7,
|
||||
2, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 8, 3, 3, 3, 3,
|
||||
8, 8, 8, 8, 8, 7, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8,
|
||||
8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
@@ -271,7 +271,7 @@ ALIGNED(4) const u8 gFontShortNarrowLatinGlyphWidths[] = {
|
||||
4, 6, 5, 5, 5, 5, 5, 5, 4, 5, 5, 6, 4, 5, 5, 8,
|
||||
5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 8, 3, 3, 3, 3,
|
||||
12, 12, 12, 12, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
|
||||
10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
@@ -307,7 +307,7 @@ ALIGNED(4) const u8 gFontShortNarrowerLatinGlyphWidths[] = {
|
||||
2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8,
|
||||
5, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
10, 10, 10, 10, 8, 8, 10, 8, 10, 10, 10, 10, 10, 10, 10, 10,
|
||||
10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
|