mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
429 lines
17 KiB
C
429 lines
17 KiB
C
#include "m_needlework.h"
|
|
|
|
#include "m_string.h"
|
|
#include "m_private.h"
|
|
#include "m_common_data.h"
|
|
#include "libjsys/jsyswrapper.h"
|
|
#include "libultra/libultra.h"
|
|
#include "m_lib.h"
|
|
|
|
/**
|
|
* @brief Initializes all designs' palette indexes for a player.
|
|
*
|
|
* @param player_no The index of the player whose designs will be updated
|
|
**/
|
|
static void mNW_InitMyOriginalPallet(int player_no) {
|
|
static u8 pal_table[mPr_ORIGINAL_DESIGN_COUNT] = {
|
|
0, 8, 7, 7,
|
|
0, 0, 0, 0
|
|
};
|
|
|
|
int i;
|
|
|
|
for (i = 0; i < mPr_ORIGINAL_DESIGN_COUNT; i++) {
|
|
Save_Set(private[player_no & 3].my_org[i & 7].palette, pal_table[i]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Initializes all designs' names for a player.
|
|
*
|
|
* @param player_no The index of the player whose designs will be renamed
|
|
**/
|
|
static void mNW_InitMyOriginalName(int player_no) {
|
|
int i;
|
|
|
|
player_no &= 3;
|
|
for (i = 0; i < mPr_ORIGINAL_DESIGN_COUNT; i++) {
|
|
/* TODO: define for the string index? */
|
|
mString_Load_StringFromRom(
|
|
Save_Get(private[player_no].my_org[i & 7].name),
|
|
mNW_ORIGINAL_DESIGN_NAME_LEN,
|
|
0x6DF + i
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Initializes all designs' textures for a player.
|
|
*
|
|
* @param player_no The index of the player whose designs will be updated
|
|
**/
|
|
static void mNW_InitMyOriginalTexture(int player_no) {
|
|
int i;
|
|
|
|
player_no &= 3;
|
|
for (i = 0; i < mNW_DEFAULT_ORIGINAL_TEX_NUM; i++) {
|
|
_JW_GetResourceAram(
|
|
JW_GetAramAddress(27) + i * mNW_DESIGN_TEX_SIZE,
|
|
Save_Get(private[player_no].my_org[i & 7].design),
|
|
mNW_DESIGN_TEX_SIZE
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Initializes all designs for all players.
|
|
**/
|
|
extern void mNW_InitMyOriginal() {
|
|
int i;
|
|
|
|
for (i = 0; i < PLAYER_NUM; i++) {
|
|
mNW_InitOneMyOriginal(i);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Initializes a single player's designs.
|
|
*
|
|
* @param player_no The index of the player whose designs will be initialized.
|
|
**/
|
|
extern void mNW_InitOneMyOriginal(int player_no) {
|
|
int i;
|
|
|
|
mNW_InitMyOriginalPallet(player_no & 3);
|
|
mNW_InitMyOriginalName(player_no & 3);
|
|
mNW_InitMyOriginalTexture(player_no & 3);
|
|
|
|
for (i = mNW_DEFAULT_ORIGINAL_TEX_NUM; i < mPr_ORIGINAL_DESIGN_COUNT; i++) {
|
|
mNW_InitOriginalData(Save_Get(private[player_no].my_org + (i & 7)));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Copies a default design texture into the supplied buffer.
|
|
*
|
|
* @param dst The destination design texture buffer
|
|
* @param tex_no The index of the texture to retrieve (0-7)
|
|
**/
|
|
static void mNW_CopyNeedleworkDefaultTexture(u8* dst, int tex_no) {
|
|
u32 addr = JW_GetAramAddress(28);
|
|
_JW_GetResourceAram(
|
|
addr + (tex_no & 7) * mNW_DESIGN_TEX_SIZE,
|
|
dst,
|
|
mNW_DESIGN_TEX_SIZE
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @brief Initializes all Able Sisters' designs to their default textures.
|
|
**/
|
|
static void mNW_InitNeedleworkTexture() {
|
|
int i;
|
|
|
|
for (i = 0; i < mNW_TOTAL_DESIGN_NUM; i++) {
|
|
mNW_CopyNeedleworkDefaultTexture(Save_Get(needlework.original_design[i & 7].design), i);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Initializes all Able Sisters' designs to their default palettes.
|
|
**/
|
|
static void mNW_InitNeedleworkPelatteNo() {
|
|
static u8 pal_table[mNW_TOTAL_DESIGN_NUM] = {
|
|
7, 1, 10, 3,
|
|
6, 0, 6, 7
|
|
};
|
|
|
|
int i;
|
|
|
|
for (i = 0; i < mNW_TOTAL_DESIGN_NUM; i++) {
|
|
Save_Set(needlework.original_design[i & 7].palette, pal_table[i]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Initializes all Able Sisters' designs to their default names.
|
|
**/
|
|
static void mNW_InitNeedleworkTextureName() {
|
|
int i;
|
|
|
|
for (i = 0; i < mNW_TOTAL_DESIGN_NUM; i++) {
|
|
mString_Load_StringFromRom(
|
|
Save_Get(needlework.original_design[i & 7].name),
|
|
mNW_ORIGINAL_DESIGN_NAME_LEN,
|
|
0x6E7 + i
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Initializes all Able Sisters' designs to their default data.
|
|
**/
|
|
extern void mNW_InitNeedleworkData() {
|
|
mNW_InitNeedleworkTexture();
|
|
mNW_InitNeedleworkPelatteNo();
|
|
mNW_InitNeedleworkTextureName();
|
|
}
|
|
|
|
/**
|
|
* @brief Converts a design texture from GBA format to GC format.
|
|
*
|
|
* @param agb Pointer to the source GBA texture
|
|
* @param gc Pointer to the destination GC texture
|
|
**/
|
|
extern void mNW_AGB_to_GC_texture(u8* agb, u8* gc) {
|
|
int i;
|
|
|
|
for (i = 0; i < mNW_DESIGN_TEX_SIZE; i++) {
|
|
u8 src = *agb++;
|
|
*gc++ = (((src >> 4) & 0xF) | ((src & 0xF) << 4));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Converts a design texture from GC format to GBA format.
|
|
*
|
|
* @param gc Pointer to the source GC texture
|
|
* @param agb Pointer to the destination GBA texture
|
|
**/
|
|
extern void mNW_GC_to_Agb_texture(u8* gc, u8* agb) {
|
|
mNW_AGB_to_GC_texture(gc, agb);
|
|
}
|
|
|
|
/* RGB5A3 color palettes for each pattern palette aligned to 32 bytes */
|
|
/* These are aligned to 32 bytes for transfering to-and-from ARAM */
|
|
|
|
static u16 needlework0_pal[16] ATTRIBUTE_ALIGN(32) = {
|
|
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFCE4A4A), ARGB8_to_RGB5A3(0xFFDE8442), ARGB8_to_RGB5A3(0xFFE7AD18),
|
|
ARGB8_to_RGB5A3(0xFFE7C621), ARGB8_to_RGB5A3(0xFFD6DE18), ARGB8_to_RGB5A3(0xFFB5E718), ARGB8_to_RGB5A3(0xFF84D652),
|
|
ARGB8_to_RGB5A3(0xFF39C66B), ARGB8_to_RGB5A3(0xFF29ADC6), ARGB8_to_RGB5A3(0xFF427BEF), ARGB8_to_RGB5A3(0xFF6B4AE7),
|
|
ARGB8_to_RGB5A3(0xFF945ACE), ARGB8_to_RGB5A3(0xFFBD42B5), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
|
|
};
|
|
|
|
static u16 needlework1_pal[16] ATTRIBUTE_ALIGN(32) = {
|
|
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFFF8C8C), ARGB8_to_RGB5A3(0xFFFFCE84), ARGB8_to_RGB5A3(0xFFFFE75A),
|
|
ARGB8_to_RGB5A3(0xFFFFF763), ARGB8_to_RGB5A3(0xFFFFFF84), ARGB8_to_RGB5A3(0xFFDEFF52), ARGB8_to_RGB5A3(0xFFB5FF84),
|
|
ARGB8_to_RGB5A3(0xFF7BF7AD), ARGB8_to_RGB5A3(0xFF63E7F7), ARGB8_to_RGB5A3(0xFF84C6FF), ARGB8_to_RGB5A3(0xFFA59CFF),
|
|
ARGB8_to_RGB5A3(0xFFD69CFF), ARGB8_to_RGB5A3(0xFFFF9CF7), ARGB8_to_RGB5A3(0xFF8C8C8C), ARGB8_to_RGB5A3(0xFFFFFFFF),
|
|
};
|
|
|
|
static u16 needlework2_pal[16] ATTRIBUTE_ALIGN(32) = {
|
|
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF9C1818), ARGB8_to_RGB5A3(0xFFAD5208), ARGB8_to_RGB5A3(0xFFB57B00),
|
|
ARGB8_to_RGB5A3(0xFFB59400), ARGB8_to_RGB5A3(0xFFA5AD00), ARGB8_to_RGB5A3(0xFF84B500), ARGB8_to_RGB5A3(0xFF52A531),
|
|
ARGB8_to_RGB5A3(0xFF089439), ARGB8_to_RGB5A3(0xFF007B94), ARGB8_to_RGB5A3(0xFF104ABD), ARGB8_to_RGB5A3(0xFF3918AD),
|
|
ARGB8_to_RGB5A3(0xFF5A2994), ARGB8_to_RGB5A3(0xFF8C087B), ARGB8_to_RGB5A3(0xFF080808), ARGB8_to_RGB5A3(0xFFFFFFFF),
|
|
};
|
|
|
|
static u16 needlework3_pal[16] ATTRIBUTE_ALIGN(32) = {
|
|
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF42945A), ARGB8_to_RGB5A3(0xFF73C68C), ARGB8_to_RGB5A3(0xFF94E7AD),
|
|
ARGB8_to_RGB5A3(0xFF008C7B), ARGB8_to_RGB5A3(0xFF5AB5AD), ARGB8_to_RGB5A3(0xFF84C6C6), ARGB8_to_RGB5A3(0xFF2173A5),
|
|
ARGB8_to_RGB5A3(0xFF4A9CCE), ARGB8_to_RGB5A3(0xFF6BADDE), ARGB8_to_RGB5A3(0xFF7384BD), ARGB8_to_RGB5A3(0xFF6B73AD),
|
|
ARGB8_to_RGB5A3(0xFF525294), ARGB8_to_RGB5A3(0xFF39397B), ARGB8_to_RGB5A3(0xFF181863), ARGB8_to_RGB5A3(0xFFFFFFFF),
|
|
};
|
|
|
|
static u16 needlework4_pal[16] ATTRIBUTE_ALIGN(32) = {
|
|
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF9C8452), ARGB8_to_RGB5A3(0xFFBD945A), ARGB8_to_RGB5A3(0xFFD6BD84),
|
|
ARGB8_to_RGB5A3(0xFF9C5252), ARGB8_to_RGB5A3(0xFFCE7363), ARGB8_to_RGB5A3(0xFFEF9C8C), ARGB8_to_RGB5A3(0xFF8C6384),
|
|
ARGB8_to_RGB5A3(0xFFA584B5), ARGB8_to_RGB5A3(0xFFDEB5DE), ARGB8_to_RGB5A3(0xFFBD8484), ARGB8_to_RGB5A3(0xFFAD736B),
|
|
ARGB8_to_RGB5A3(0xFF945252), ARGB8_to_RGB5A3(0xFF7B3939), ARGB8_to_RGB5A3(0xFF631810), ARGB8_to_RGB5A3(0xFFFFFFFF),
|
|
};
|
|
|
|
static u16 needlework5_pal[16] ATTRIBUTE_ALIGN(32) = {
|
|
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFEF5A00), ARGB8_to_RGB5A3(0xFFFF9C42), ARGB8_to_RGB5A3(0xFFFFCE84),
|
|
ARGB8_to_RGB5A3(0xFFFFEFA5), ARGB8_to_RGB5A3(0xFF8C4A29), ARGB8_to_RGB5A3(0xFFB57B5A), ARGB8_to_RGB5A3(0xFFE7AD8C),
|
|
ARGB8_to_RGB5A3(0xFFFFDEBD), ARGB8_to_RGB5A3(0xFF318CFF), ARGB8_to_RGB5A3(0xFF63B5FF), ARGB8_to_RGB5A3(0xFF9CDEFF),
|
|
ARGB8_to_RGB5A3(0xFFC6E7FF), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
|
|
};
|
|
|
|
static u16 needlework6_pal[16] ATTRIBUTE_ALIGN(32) = {
|
|
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF39B542), ARGB8_to_RGB5A3(0xFF63DE5A), ARGB8_to_RGB5A3(0xFF8CEF84),
|
|
ARGB8_to_RGB5A3(0xFFB5FFAD), ARGB8_to_RGB5A3(0xFF2121C6), ARGB8_to_RGB5A3(0xFF5252F7), ARGB8_to_RGB5A3(0xFF8484FF),
|
|
ARGB8_to_RGB5A3(0xFFB5B5FF), ARGB8_to_RGB5A3(0xFFCE3939), ARGB8_to_RGB5A3(0xFFDE6B6B), ARGB8_to_RGB5A3(0xFFE78C9C),
|
|
ARGB8_to_RGB5A3(0xFFEFBDBD), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
|
|
};
|
|
|
|
static u16 needlework7_pal[16] ATTRIBUTE_ALIGN(32) = {
|
|
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF082100), ARGB8_to_RGB5A3(0xFF425A39), ARGB8_to_RGB5A3(0xFF6B8463),
|
|
ARGB8_to_RGB5A3(0xFF9CB594), ARGB8_to_RGB5A3(0xFF5A2900), ARGB8_to_RGB5A3(0xFF7B4A21), ARGB8_to_RGB5A3(0xFFA5734A),
|
|
ARGB8_to_RGB5A3(0xFFD6A57B), ARGB8_to_RGB5A3(0xFF947B00), ARGB8_to_RGB5A3(0xFFB59439), ARGB8_to_RGB5A3(0xFFCEB56B),
|
|
ARGB8_to_RGB5A3(0xFFDED69C), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
|
|
};
|
|
|
|
static u16 needlework8_pal[16] ATTRIBUTE_ALIGN(32) = {
|
|
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF2121FF), ARGB8_to_RGB5A3(0xFFFF2121), ARGB8_to_RGB5A3(0xFFD6D600),
|
|
ARGB8_to_RGB5A3(0xFF6363FF), ARGB8_to_RGB5A3(0xFFFF6363), ARGB8_to_RGB5A3(0xFFD6D663), ARGB8_to_RGB5A3(0xFF9494FF),
|
|
ARGB8_to_RGB5A3(0xFFFF9494), ARGB8_to_RGB5A3(0xFFD6D694), ARGB8_to_RGB5A3(0xFFADADFF), ARGB8_to_RGB5A3(0xFFFFADAD),
|
|
ARGB8_to_RGB5A3(0xFFE7E7AD), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
|
|
};
|
|
|
|
static u16 needlework9_pal[16] ATTRIBUTE_ALIGN(32) = {
|
|
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF21A521), ARGB8_to_RGB5A3(0xFF39ADFF), ARGB8_to_RGB5A3(0xFF9C52EF),
|
|
ARGB8_to_RGB5A3(0xFF52BD52), ARGB8_to_RGB5A3(0xFF5AC6FF), ARGB8_to_RGB5A3(0xFFB59CFF), ARGB8_to_RGB5A3(0xFF6BD673),
|
|
ARGB8_to_RGB5A3(0xFF8CE7FF), ARGB8_to_RGB5A3(0xFFCEB5FF), ARGB8_to_RGB5A3(0xFF94DEAD), ARGB8_to_RGB5A3(0xFFBDF7FF),
|
|
ARGB8_to_RGB5A3(0xFFD6CEFF), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
|
|
};
|
|
|
|
static u16 needlework10_pal[16] ATTRIBUTE_ALIGN(32) = {
|
|
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFD60000), ARGB8_to_RGB5A3(0xFFFFBD00), ARGB8_to_RGB5A3(0xFFEFF731),
|
|
ARGB8_to_RGB5A3(0xFF4ACE42), ARGB8_to_RGB5A3(0xFF299C29), ARGB8_to_RGB5A3(0xFF528CBD), ARGB8_to_RGB5A3(0xFF424AAD),
|
|
ARGB8_to_RGB5A3(0xFF9452D6), ARGB8_to_RGB5A3(0xFFF77BDE), ARGB8_to_RGB5A3(0xFFA59439), ARGB8_to_RGB5A3(0xFF9C4242),
|
|
ARGB8_to_RGB5A3(0xFF5A3139), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
|
|
};
|
|
|
|
static u16 needlework11_pal[16] ATTRIBUTE_ALIGN(32) = {
|
|
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFE7CE18), ARGB8_to_RGB5A3(0xFF21C618), ARGB8_to_RGB5A3(0xFFFF6B00),
|
|
ARGB8_to_RGB5A3(0xFF0000FF), ARGB8_to_RGB5A3(0xFF9400BD), ARGB8_to_RGB5A3(0xFFE7CE18), ARGB8_to_RGB5A3(0xFF00A500),
|
|
ARGB8_to_RGB5A3(0xFFCE4200), ARGB8_to_RGB5A3(0xFF0000D6), ARGB8_to_RGB5A3(0xFF5A008C), ARGB8_to_RGB5A3(0xFF9C8C18),
|
|
ARGB8_to_RGB5A3(0xFF008400), ARGB8_to_RGB5A3(0xFFA52100), ARGB8_to_RGB5A3(0xFF0000A5), ARGB8_to_RGB5A3(0xFF4A005A),
|
|
};
|
|
|
|
static u16 needlework12_pal[16] ATTRIBUTE_ALIGN(32) = {
|
|
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFFF2121), ARGB8_to_RGB5A3(0xFFE7D600), ARGB8_to_RGB5A3(0xFFF739BD),
|
|
ARGB8_to_RGB5A3(0xFF00D69C), ARGB8_to_RGB5A3(0xFF107310), ARGB8_to_RGB5A3(0xFFC62121), ARGB8_to_RGB5A3(0xFFBDA500),
|
|
ARGB8_to_RGB5A3(0xFFCE3994), ARGB8_to_RGB5A3(0xFF009C6B), ARGB8_to_RGB5A3(0xFF214A21), ARGB8_to_RGB5A3(0xFF8C2121),
|
|
ARGB8_to_RGB5A3(0xFF846B00), ARGB8_to_RGB5A3(0xFF941863), ARGB8_to_RGB5A3(0xFF00734A), ARGB8_to_RGB5A3(0xFF183918),
|
|
};
|
|
|
|
static u16 needlework13_pal[16] ATTRIBUTE_ALIGN(32) = {
|
|
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFEFD6D6), ARGB8_to_RGB5A3(0xFFDEC6C6), ARGB8_to_RGB5A3(0xFFCEB5B5),
|
|
ARGB8_to_RGB5A3(0xFFBDA5A5), ARGB8_to_RGB5A3(0xFFAD9494), ARGB8_to_RGB5A3(0xFF9C8484), ARGB8_to_RGB5A3(0xFF8C7373),
|
|
ARGB8_to_RGB5A3(0xFF7B6363), ARGB8_to_RGB5A3(0xFF6B5252), ARGB8_to_RGB5A3(0xFF5A4242), ARGB8_to_RGB5A3(0xFF4A3131),
|
|
ARGB8_to_RGB5A3(0xFF392121), ARGB8_to_RGB5A3(0xFF291010), ARGB8_to_RGB5A3(0xFF180000), ARGB8_to_RGB5A3(0xFF100000),
|
|
};
|
|
|
|
static u16 needlework14_pal[16] ATTRIBUTE_ALIGN(32) = {
|
|
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFEFEFEF), ARGB8_to_RGB5A3(0xFFDEDEDE), ARGB8_to_RGB5A3(0xFFCECECE),
|
|
ARGB8_to_RGB5A3(0xFFBDBDBD), ARGB8_to_RGB5A3(0xFFADADAD), ARGB8_to_RGB5A3(0xFF9C9C9C), ARGB8_to_RGB5A3(0xFF8C8C8C),
|
|
ARGB8_to_RGB5A3(0xFF7B7B7B), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF5A5A5A), ARGB8_to_RGB5A3(0xFF4A4A4A),
|
|
ARGB8_to_RGB5A3(0xFF393939), ARGB8_to_RGB5A3(0xFF292929), ARGB8_to_RGB5A3(0xFF181818), ARGB8_to_RGB5A3(0xFF101010),
|
|
};
|
|
|
|
static u16 needlework15_pal[16] ATTRIBUTE_ALIGN(32) = {
|
|
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFEF7B7B), ARGB8_to_RGB5A3(0xFFD61818), ARGB8_to_RGB5A3(0xFFF79418),
|
|
ARGB8_to_RGB5A3(0xFFE7E752), ARGB8_to_RGB5A3(0xFF006B00), ARGB8_to_RGB5A3(0xFF39B539), ARGB8_to_RGB5A3(0xFF0039B5),
|
|
ARGB8_to_RGB5A3(0xFF399CFF), ARGB8_to_RGB5A3(0xFF940094), ARGB8_to_RGB5A3(0xFFFF6BFF), ARGB8_to_RGB5A3(0xFF944208),
|
|
ARGB8_to_RGB5A3(0xFFEF9C5A), ARGB8_to_RGB5A3(0xFFFFC694), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
|
|
};
|
|
|
|
static u16* mNW_needlework_pallet_table[mNW_PALETTE_COUNT] = {
|
|
needlework0_pal, needlework1_pal, needlework2_pal, needlework3_pal,
|
|
needlework4_pal, needlework5_pal, needlework6_pal, needlework7_pal,
|
|
needlework8_pal, needlework9_pal, needlework10_pal, needlework11_pal,
|
|
needlework12_pal, needlework13_pal, needlework14_pal, needlework15_pal
|
|
};
|
|
|
|
/**
|
|
* @brief Gets a pointer to the requested palette color data.
|
|
*
|
|
* @param palette_idx Index of the palette to retrieve (0-15)
|
|
* @return Palette color data pointer
|
|
**/
|
|
extern u16* mNW_PaletteIdx2Palette(int palette_idx) {
|
|
return mNW_needlework_pallet_table[palette_idx & 15];
|
|
}
|
|
|
|
/**
|
|
* @brief Copies one design class to another and updates data cache.
|
|
*
|
|
* @param dst Destination design class
|
|
* @param src Source design class
|
|
**/
|
|
extern void mNW_CopyOriginalTextureClass(mNW_original_design_c* dst, mNW_original_design_c* src) {
|
|
bcopy(src, dst, sizeof(mNW_original_design_c));
|
|
DCStoreRangeNoSync(dst->design, mNW_DESIGN_TEX_SIZE);
|
|
}
|
|
|
|
/**
|
|
* @brief Copies a design's texture data to a block of memory and updates data cache.
|
|
*
|
|
* @param dst Destination pointer
|
|
* @param src Source design class
|
|
**/
|
|
extern void mNW_CopyOriginalTexture(void* dst, mNW_original_design_c* src) {
|
|
if (dst != NULL) {
|
|
bcopy(src->design, dst, mNW_DESIGN_TEX_SIZE);
|
|
DCStoreRangeNoSync(dst, mNW_DESIGN_TEX_SIZE);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Copies a design's palette colors to a block of memory and updates data cache.
|
|
*
|
|
* @param dst Destination pointer
|
|
* @param src Source design class
|
|
**/
|
|
extern void mNW_CopyOriginalPalette(void* dst, mNW_original_design_c* src) {
|
|
if (dst != NULL) {
|
|
bcopy(mNW_PaletteIdx2Palette(src->palette), dst, 16 * sizeof(u16));
|
|
DCStoreRangeNoSync(dst, 16 * sizeof(u16));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Copies a block of memory to a design's texture data and updates data cache.
|
|
*
|
|
* @param dst The destination design class
|
|
* @param src Source data pointer
|
|
**/
|
|
extern void mNW_OverWriteOriginalTexture(mNW_original_design_c* dst, u8* src) {
|
|
if (src != NULL) {
|
|
u8* tex = dst->design;
|
|
bcopy(src, tex, mNW_DESIGN_TEX_SIZE);
|
|
DCStoreRangeNoSync(tex, mNW_DESIGN_TEX_SIZE);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Copies a block of memory to a design's name.
|
|
*
|
|
* @param dst The destination design class
|
|
* @param src Source name pointer
|
|
**/
|
|
extern void mNW_OverWriteOriginalName(mNW_original_design_c* dst, u8* src) {
|
|
if (src != NULL) {
|
|
bcopy(src, dst->name, mNW_ORIGINAL_DESIGN_NAME_LEN);
|
|
}
|
|
}
|
|
|
|
/* swap buffer for original design */
|
|
static mNW_original_design_c mNW_swap_work;
|
|
|
|
/**
|
|
* @brief Swaps two design classes' data in memory and updates data cache.
|
|
*
|
|
* @param org0 First design class
|
|
* @param org1 Second design class
|
|
**/
|
|
extern void mNW_SwapOriginalData(mNW_original_design_c* org0, mNW_original_design_c* org1) {
|
|
bcopy(org0, &mNW_swap_work, sizeof(mNW_original_design_c));
|
|
bcopy(org1, org0, sizeof(mNW_original_design_c));
|
|
bcopy(&mNW_swap_work, org1, sizeof(mNW_original_design_c));
|
|
DCStoreRangeNoSync(org0->design, mNW_DESIGN_TEX_SIZE);
|
|
DCStoreRangeNoSync(org1->design, mNW_DESIGN_TEX_SIZE);
|
|
}
|
|
|
|
/**
|
|
* @brief Initializes a design class to 'blank' data.
|
|
*
|
|
* @param design The design which will be initialized
|
|
**/
|
|
extern void mNW_InitOriginalData(mNW_original_design_c* design) {
|
|
static u8 name[mNW_ORIGINAL_DESIGN_NAME_LEN] = "blank ";
|
|
|
|
u8* tex;
|
|
mNW_OverWriteOriginalName(design, name);
|
|
tex = design->design;
|
|
mem_clear(tex, mNW_DESIGN_TEX_SIZE, 0xFF);
|
|
DCStoreRangeNoSync(tex, mNW_DESIGN_TEX_SIZE);
|
|
design->palette = 0;
|
|
}
|
|
|
|
/**
|
|
* @brief Initializes a player's design related data to the default state.
|
|
*
|
|
* @param player_no The index of the player whose design data will be initialized
|
|
**/
|
|
extern void mNW_InitPrivateOriginalData(int player_no) {
|
|
int i;
|
|
Private_c* private = Save_Get(private + player_no);
|
|
|
|
for (i = 0; i < mPr_ORIGINAL_DESIGN_COUNT; i++) {
|
|
private->my_org_no_table[i] = i;
|
|
}
|
|
|
|
for (i = 0; i < mPr_ORIGINAL_DESIGN_COUNT; i++) {
|
|
mNW_InitOriginalData(private->my_org + i);
|
|
}
|
|
}
|