Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Special pages
Search
Search
Appearance
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
Talk:Body
(section)
Add topic
Page
Discussion
English
Read
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit source
Add topic
View history
General
What links here
Related changes
Page information
Appearance
move to sidebar
hide
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== Body icon implementations in FFL and nn::mii == "The Mii body is usually not provided by the Face Library" WEEELLLL AAAACKTUALLYYYYYYYYYYYY π€π€π€π€π€ Yes, for the most part this is true. But, FFL and nn::mii both contain icon implementations that draw the Mii body. Granted, these are not for general usage and drawing of the body model, but need to be put somewhere. Perhaps in the dedicated FFL/nn::mii pages, like in my schematic note thing. <big>FFL</big> For FFL's icon body implementation, I've only seen it in the following places: '''Mario Kart 8, amiibo Settings, Splatoon, Super Mario Maker, Nintendo Web Framework''' None of those have debug symbols (UUUUUGHHHHHHHFUCKYOUUUUUUUUUUUUU), but there's a build of MK8 for kiosks with a symbol map. So, here are its symbols: '''lib_gsys.a - private library shared between Nintendo games''' <code>static gsys::FFLResource::calcTextureBufferSizeIconWithBody_(FFLIconSetting const &)</code> <code>static gsys::FFLResource::setupDefaultShaderForIconWithBody_(void *)</code> <code>gsys::FFLResource::sIconWithBodyDesc</code> <code>gsys::FFLResource::sIconWithBodyInitBuffer</code> '''lib_ffl.a(FFLIconWithBody.o) - public C exports''' <code>FFLIconWithBodyGetInitBufferSize</code> <code>FFLIconWithBodyInit</code> <code>FFLIconWithBodyMake</code> <code>FFLIconWithBodyGetMatrix</code> <code>FFLIconWithBodyGetLightDir</code> '''lib_ffl.a(FFLiIconWithBody.o)''' <code>FFLiIconWithBody::FFLiIconWithBody(FFLiResourceHeader const &)</code> <code>FFLiIconWithBody::~FFLiIconWithBody(void)</code> <code>static FFLiIconWithBody::Create(FFLIconWithBody *, FFLIconWithBodyDesc const &, FFLIconWithBodyInitBuffer &)</code> <code>static FFLiIconWithBody::Destroy(FFLIconWithBody *)</code> <code>static FFLiIconWithBody::GetBufferSize(FFLIconWithBodyDesc const &)</code> <code>static FFLiIconWithBody::GetFaceMatrix(_Mat44 &, _Mat34 &)</code> <code>static FFLiIconWithBody::ValidDesc(FFLIconWithBodyDesc const *)</code> <code>static FFLiIconWithBody::ValidRecipe(_GX2Texture *, FFLIconWithBodyRecipe const *)</code> '''(Note that I have also seen the wording "recipe" when it comes to rendering icons in Mii Maker.)''' <code>FFLiIconWithBody::Make(_GX2Texture &, FFLIconWithBodyRecipe &)</code> <code>FFLiIconWithBody::SetupDrawParam(FFLiBufferAllocator &, void const *)</code> <code>FFLiIconWithBody::SetupUniform(void)</code> <code>FFLiIconWithBody::SetupCPU(FFLiBufferAllocator &, FFLIconWithBodyDesc const &)</code> <code>FFLiIconWithBody::SetupDrawParamGPU(void)</code> <code>FFLiIconWithBody::SetupGPU(void)</code> <code>FFLiIconWithBody::FACE_LIGHT_DIR</code> '''(Below are in an anonymous namespace.)''' <code>__N_20_FFLiIconWithBody_cpp_2cdd2193::ValidHeader(FFLiResourceHeader const *)</code> <code>__N_20_FFLiIconWithBody_cpp_2cdd2193::GetDrawParamBufferSize(FFLIconWithBodyDesc const &)</code> <code>__N_20_FFLiIconWithBody_cpp_2cdd2193::SetDefault(FFLiIconWithBody::DrawParam &)</code> <code>__N_20_FFLiIconWithBody_cpp_2cdd2193::TypeToStride(FFLiResourceShapeElementType)</code> <code>__N_20_FFLiIconWithBody_cpp_2cdd2193::AllocateAndCopy(FFLAttributeBufferParam &, void const *, FFLiShapePartsType, FFLiResourceShapeElementType, FFLiBufferAllocator &)</code> <code>__N_20_FFLiIconWithBody_cpp_2cdd2193::AllocateAndCopy(FFLPrimitiveParam &, void const *, FFLiShapePartsType, FFLiResourceShapeElementType, FFLiBufferAllocator &)</code> <code>__N_20_FFLiIconWithBody_cpp_2cdd2193::LookAt(_Mat44 &, Vec const &, Vec const &, Vec const &)</code> <code>__N_20_FFLiIconWithBody_cpp_2cdd2193::ToColorBuffer(_GX2Texture const &)</code> <code>__N_20_FFLiIconWithBody_cpp_2cdd2193::GetGender(FFLCharModel const &)</code> <code>__N_20_FFLiIconWithBody_cpp_2cdd2193::GetFavoriteColor(FFLCharModel const &)</code> <code>__sti___20_FFLiIconWithBody_cpp_2cdd2193</code> <big>Notable things about FFLIconWithBody</big> * The body models do not have any scaling and are always at a constant size. It's not the base 1.0 scale (82 build/82 height), but some other weird taller height - it's pre-scaled. * The shader for the Mii body looks the same, and is using a "FFLBodyShader.gsh", despite how you can replicate the look of the body 1:1 with the default shader meant for the face. Presumably, this is because the body model was originally a bfres, which you need to extract the shader into. They looked at the bfres, and extracted its shader (that already got extracted from the face shader) back to another gsh. * The shader for the face is also same but uniforms are different. This leads to a "brighter" look. Namely, there is less ambient, and more diffuse and specular. See: https://discord.com/channels/360173962862395392/485919503369371648/1314101463953182770 (archive before discord burns). Those ambient/diffuse/specular parameters do NOT apply to the body (mii-unsecure and mii.nxw.pw both miss this detail) * The icon has a different camera compared to FFLMakeIcon (same as RFLMakeIcon, shared with nn::mii face only icon impl). It's somewhat similar to the Mii Maker one, but not exactly the same - that one does some... special calculations. * The body model comes from FFLBodyRes.dat, which seemingly has to be provided by the caller (NWF is using some webkit support?? functions for this). This resource file has the same header format as FFLResMiddle/High/etc, and thus can be extracted by FFLResource.py. When you do, you'll find it has no textures, and the only shapes are Nose_3.glb and Nose_4.glb, which are your body models. * The body models have UVs to support clothing (oh god we need a separate page on FCL), which are also in MiiBodySpecial.bfres, but not in MiiBodyMiddle.bfres. * I don't actually know how much flexibility this has, I didn't decompile the whole thing. (so do the MK8 Wii U Mii icons actually use this? idk) <big>nn::mii (NintendoSDK)</big> It has an "IconBody" class, which is mostly ported directly from FFLIconWithBody. The camera is the same, the models are the same, it's just using the Switch shader. They also created their own resource format for this. I don't think anything is actually using this. The more interesting one is "VariableIconBody". It has proper hierarchical body scaling backed by bone indices and matrices, and a slightly different more zoomed camera view. The camera view is specifically made to hide the pants, because it doesn't render them. Despite this, the (again custom) resource file has pants models for both genders. There definitely needs to be a separate article just on how body scaling works, because it's pretty obtuse to understand. However, because of this, the VariableIconBody is used in the MiiEdit and amiibo Settings applets. [[User:Arian|Arian]] ([[User talk:Arian|talk]]) 02:55, 10 August 2025 (UTC)
Summary:
Please note that all contributions to Mii Technical Wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Mii Wiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Search
Search
Editing
Talk:Body
(section)
Add topic