Update wardrobe mod to v1.2...

https://github.com/AntumMT/mod-wardrobe/releases/tag/v1.2
This commit is contained in:
Jordan Irwin 2021-04-20 18:45:23 -07:00
parent a49922df91
commit 1680557d39
69 changed files with 551 additions and 1659 deletions

View File

@ -93,7 +93,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m
* [hbsprint][] ([LGPL][lic.lgpl2.1]) -- version: [f566d0f Git][ver.hbsprint] *2021-02-18* ([patched][patch.hbsprint]) * [hbsprint][] ([LGPL][lic.lgpl2.1]) -- version: [f566d0f Git][ver.hbsprint] *2021-02-18* ([patched][patch.hbsprint])
* player/visuals/ * player/visuals/
* [invisibility][] ([MIT][lic.invisibility]) -- version: [65c0823 Git][ver.invisibility] *2021-01-21* ([patched][patch.invisibility]) * [invisibility][] ([MIT][lic.invisibility]) -- version: [65c0823 Git][ver.invisibility] *2021-01-21* ([patched][patch.invisibility])
* [wardrobe][] ([WTFPL][lic.wtfpl]) -- version: [1.1-2-c48b011 Git][ver.wardrobe] *2015-05-21* * [wardrobe][] ([MIT][lic.wardrobe]) -- version: [1.2][ver.wardrobe] *2021-04-20*
* protection/ * protection/
* [pvp_areas][] ([LGPL][lic.lgpl2.1]) -- version: [6e4d66d Git][ver.pvp_areas] *2018-07-26* * [pvp_areas][] ([LGPL][lic.lgpl2.1]) -- version: [6e4d66d Git][ver.pvp_areas] *2018-07-26*
* [simple_protection][] ([CC0][lic.cc0]) -- version: [3630fe9 Git][ver.simple_protection] *2021-04-07* ([patched][patch.simple_protection]) * [simple_protection][] ([CC0][lic.cc0]) -- version: [3630fe9 Git][ver.simple_protection] *2021-04-07* ([patched][patch.simple_protection])
@ -333,7 +333,8 @@ The game includes the mods from the default [minetest_game](https://github.com/m
[vines]: https://forum.minetest.net/viewtopic.php?f=11&t=2344 [vines]: https://forum.minetest.net/viewtopic.php?f=11&t=2344
[waffles]: https://forum.minetest.net/viewtopic.php?t=16669 [waffles]: https://forum.minetest.net/viewtopic.php?t=16669
[walking_light]: https://github.com/petermaloney/walking_light [walking_light]: https://github.com/petermaloney/walking_light
[wardrobe]: https://forum.minetest.net/viewtopic.php?t=9680 [wardrobe]: https://github.com/AntumMT/mod-wardrobe
[wardrobe.old]: https://forum.minetest.net/viewtopic.php?t=9680
[weather]: https://forum.minetest.net/viewtopic.php?t=5245 [weather]: https://forum.minetest.net/viewtopic.php?t=5245
[whitelist]: https://forum.minetest.net/viewtopic.php?t=8434 [whitelist]: https://forum.minetest.net/viewtopic.php?t=8434
[windmill]: https://forum.minetest.net/viewtopic.php?id=7440 [windmill]: https://forum.minetest.net/viewtopic.php?id=7440
@ -397,6 +398,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m
[lic.trash_can]: mods/furniture/trash_can/LICENSE.txt [lic.trash_can]: mods/furniture/trash_can/LICENSE.txt
[lic.waffles]: mods/furniture/waffles/LICENSE.txt [lic.waffles]: mods/furniture/waffles/LICENSE.txt
[lic.walking_light]: mods/lighting/walking_light/README.md [lic.walking_light]: mods/lighting/walking_light/README.md
[lic.wardrobe]: mods/player/visuals/wardrobe/LICENSE.txt
[lic.windmill]: mods/buildings/windmill/README.md [lic.windmill]: mods/buildings/windmill/README.md
[lic.cc0]: doc/licenses/CC0.txt [lic.cc0]: doc/licenses/CC0.txt
@ -536,7 +538,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m
[ver.unifieddyes]: https://gitlab.com/VanessaE/unifieddyes/tags/2021-03-26-1 [ver.unifieddyes]: https://gitlab.com/VanessaE/unifieddyes/tags/2021-03-26-1
[ver.waffles]: https://github.com/GreenXenith/waffles/tree/15bcdce [ver.waffles]: https://github.com/GreenXenith/waffles/tree/15bcdce
[ver.walking_light]: https://github.com/petermaloney/walking_light/tree/766ef0f [ver.walking_light]: https://github.com/petermaloney/walking_light/tree/766ef0f
[ver.wardrobe]: https://github.com/prestidigitator/minetest-mod-wardrobe/tree/c48b011 [ver.wardrobe]: https://github.com/AntumMT/mod-wardrobe/releases/tag/v1.2
[ver.whitelist]: https://github.com/AntumMT/mod-whitelist/tree/b813b19 [ver.whitelist]: https://github.com/AntumMT/mod-whitelist/tree/b813b19
[ver.windmill]: https://github.com/Sokomine/windmill/tree/47b029d [ver.windmill]: https://github.com/Sokomine/windmill/tree/47b029d
[ver.workbench]: https://github.com/minetest-mods/workbench/tree/bd14f59 [ver.workbench]: https://github.com/minetest-mods/workbench/tree/bd14f59

View File

@ -2156,6 +2156,14 @@ mobs_animal:sheep_white = 0
#playeranim.animation_speed_sneak = 0.8 #playeranim.animation_speed_sneak = 0.8
# *** wardrobe ***
## Number of skins shown per page.
# type: int
# default: 8
#wardrobe.skins_per_page = 8
# *** wieldview *** # *** wieldview ***
# ??? # ???

74
mods/antum/skins/init.lua Normal file
View File

@ -0,0 +1,74 @@
local modname = core.get_current_modname()
local modpath = core.get_modpath(modname)
local texture_dir = modpath .. "/textures"
local function logit(lvl, msg)
core.log(lvl, "[" .. modname .. "] " .. msg)
end
local function texture_exists(fname)
local texture = texture_dir .. "/" .. fname
local f = io.open(texture, "r")
if f ~= nil then
io.close(f)
return true
end
return false
end
local skins = {
{"Ashley_by_loupicate.png", "Ashley",},
{"BlueZ_Sam_II_by_philipbenr.png", "BlueZ Sam II ",},
{"CaligoPL_by_CaligoPL.png", "CaligoPL",},
{"Charizard_by_Ferdi_Napoli.png", "Charizard",},
{"Charlotte_by_Sporax.png", "Charlotte",},
{"Chloé_by_nelly.png", "Chloé (by nelly) ",},
{"Chloé_by_Sporax.png", "Chloé (by Sporax)",},
{"Chop_by_Ferdi_Napoli.png", "Chop",},
{"Coralie_by_loupicate.png", "Coralie",},
{"Devil_by_viv100.png", "Devil",},
{"Emma_by_Cidney7760.png", "Emma",},
{"Female_angel_by_loupicate.png", "Angel (female)",},
{"Finn_The_Adventured_by_Ferdi_Napoli.png", "Finn",},
{"Fiona_by_loupicate.png", "Fiona",},
{"Fire_Mario_by_Ferdi_Napoli.png", "Fire Mario",},
{"Grégoire_by_Sporax.png", "Grégoire",},
{"Hobo_by_Minetestian.png", "Hobo",},
{"Infantry_man_by_philipbenr.png", "Infantry Man",},
{"Iris_by_loupicate.png", "Iris",},
{"Iron_Man_MK._7_by_Jordach.png", "Iron Man",},
{"Jake_by_Ferdi_Napoli.png", "Jake",},
{"Joker_by_Ferdi_Napoli.png", "Joker",},
{"Julia_by_nelly.png", "Julia",},
{"Ladyvioletkitty_by_lordphoenixmh.png", "LadyVioletKitty",},
{"Link_by_tux_peng.png", "Link",},
{"lisa_by_hansuke123.png", "Lisa",},
{"Male_angel_by_loupicate.png", "Angel (male)",},
{"Morgane_by_loupicate.png", "Morgane",},
{"Naruto_by_LuxAtheris.png", "Naruto",},
{"NERD_by_DJOZZY.png", "NERD",},
{"Older_Man_Sam_by_philipbenr.png", "Sam (older man)",},
{"philipbenr_by_philipbenr.png", "PhilipBenR",},
{"skin_minecraft_repris_by_Sporax.png", "Minecraft Repris",},
{"Space_Sam_by_philipbenr.png", "Sam (space)",},
{"Summer_by_lizzie.png", "Summer",},
{"SuperSam_by_AMMOnym.png", "Sam (super)",},
{"villiantest_III_by_marshrover.png", "VillianTest",},
{"War_Machine_by_Ferdi_Napoli.png", "War Machine",},
{"Witch_by_loupicate.png", "Witch",},
{"Zenohelds_by_sdzen.png", "Zenohelds",},
{"tessas_skin.png", "Tessa",},
}
for skin in pairs(skins) do
local key = skin[1]
local value = skin[2]
if not texture_exists(key) then
logit("warning", "texture " .. key .. " not found in " .. texture_dir)
end
wardrobe.registerSkin(skin[1], skin[2])
end

View File

@ -0,0 +1,3 @@
name = antum_skins
description =
depends = wardrobe

View File

Before

Width:  |  Height:  |  Size: 855 B

After

Width:  |  Height:  |  Size: 855 B

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 992 B

After

Width:  |  Height:  |  Size: 992 B

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 716 B

After

Width:  |  Height:  |  Size: 716 B

View File

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

Before

Width:  |  Height:  |  Size: 521 B

After

Width:  |  Height:  |  Size: 521 B

View File

Before

Width:  |  Height:  |  Size: 739 B

After

Width:  |  Height:  |  Size: 739 B

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

Before

Width:  |  Height:  |  Size: 517 B

After

Width:  |  Height:  |  Size: 517 B

View File

Before

Width:  |  Height:  |  Size: 753 B

After

Width:  |  Height:  |  Size: 753 B

View File

Before

Width:  |  Height:  |  Size: 972 B

After

Width:  |  Height:  |  Size: 972 B

View File

@ -0,0 +1,41 @@
- [Ashley_by_loupicate.png](http://minetest.fensta.bplaced.net/#id=885): CC BY-SA
- [BlueZ_Sam_II_by_philipbenr.png](http://minetest.fensta.bplaced.net/#id=143): CC BY-SA
- [CaligoPL_by_CaligoPL.png](http://minetest.fensta.bplaced.net/#id=99): CC BY-SA
- [Charizard_by_Ferdi_Napoli.png](http://minetest.fensta.bplaced.net/#id=172): CC BY-NC-SA
- [Charlotte_by_Sporax.png](http://minetest.fensta.bplaced.net/#id=852): CC BY-SA
- [Chloé_by_nelly.png](http://minetest.fensta.bplaced.net/#id=847): CC BY-SA
- [Chloé_by_Sporax.png](http://minetest.fensta.bplaced.net/#id=851): CC BY-SA
- [Chop_by_Ferdi_Napoli.png](http://minetest.fensta.bplaced.net/#id=164): CC BY-NC-SA
- [Coralie_by_loupicate.png](http://minetest.fensta.bplaced.net/#id=894): CC BY-SA
- [Devil_by_viv100.png](http://minetest.fensta.bplaced.net/#id=93): CC BY-SA
- [Emma_by_Cidney7760.png](http://minetest.fensta.bplaced.net/#id=101): CC BY-SA
- [Female_angel_by_loupicate.png](http://minetest.fensta.bplaced.net/#id=890): CC BY-SA
- [Finn_The_Adventured_by_Ferdi_Napoli.png](http://minetest.fensta.bplaced.net/#id=175): CC BY-NC-SA
- [Fiona_by_loupicate.png](http://minetest.fensta.bplaced.net/#id=860): CC BY-SA
- [Fire_Mario_by_Ferdi_Napoli.png](http://minetest.fensta.bplaced.net/#id=198): CC BY-NC-SA
- [Grégoire_by_Sporax.png](http://minetest.fensta.bplaced.net/#id=850): CC BY-SA
- [Hobo_by_Minetestian.png](http://minetest.fensta.bplaced.net/#id=112): CC BY-SA
- [Infantry_man_by_philipbenr.png](http://minetest.fensta.bplaced.net/#id=82): CC BY-SA
- [Iris_by_loupicate.png](http://minetest.fensta.bplaced.net/#id=862): CC BY-SA
- [Iron_Man_MK._7_by_Jordach.png](http://minetest.fensta.bplaced.net/#id=6): CC BY-NC-SA
- [Jake_by_Ferdi_Napoli.png](http://minetest.fensta.bplaced.net/#id=176): CC BY-NC-SA
- [Joker_by_Ferdi_Napoli.png](http://minetest.fensta.bplaced.net/#id=178): CC BY-NC-SA
- [Julia_by_nelly.png](http://minetest.fensta.bplaced.net/#id=859): CC BY-SA
- [Ladyvioletkitty_by_lordphoenixmh.png](http://minetest.fensta.bplaced.net/#id=162): CC BY
- [Link_by_tux_peng.png](http://minetest.fensta.bplaced.net/#id=126): CC BY-NC-SA
- [lisa_by_hansuke123.png](http://minetest.fensta.bplaced.net/#id=88): CC BY-SA
- [Male_angel_by_loupicate.png](http://minetest.fensta.bplaced.net/#id=895): CC BY-SA
- [Morgane_by_loupicate.png](http://minetest.fensta.bplaced.net/#id=864): CC BY-SA
- [Naruto_by_LuxAtheris.png](http://minetest.fensta.bplaced.net/#id=136): CC BY-SA
- [NERD_by_DJOZZY.png](http://minetest.fensta.bplaced.net/#id=): CC BY-SA
- [Older_Man_Sam_by_philipbenr.png](http://minetest.fensta.bplaced.net/#id=21): CC BY-SA
- [philipbenr_by_philipbenr.png](http://minetest.fensta.bplaced.net/#id=54): CC BY-SA
- [skin_minecraft_repris_by_Sporax.png](http://minetest.fensta.bplaced.net/#id=856): CC BY-SA
- [Space_Sam_by_philipbenr.png](http://minetest.fensta.bplaced.net/#id=37): CC BY-SA
- [Summer_by_lizzie.png](http://minetest.fensta.bplaced.net/#id=): CC BY-NC-SA
- [SuperSam_by_AMMOnym.png](http://minetest.fensta.bplaced.net/#id=): CC BY-SA
- [villiantest_III_by_marshrover.png](http://minetest.fensta.bplaced.net/#id=): CC BY-SA
- [War_Machine_by_Ferdi_Napoli.png](http://minetest.fensta.bplaced.net/#id=169): CC BY-NC-SA
- [Witch_by_loupicate.png](http://minetest.fensta.bplaced.net/#id=884): CC BY-SA
- [Zenohelds_by_sdzen.png](http://minetest.fensta.bplaced.net/#id=): CC BY-SA

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 723 B

After

Width:  |  Height:  |  Size: 723 B

View File

Before

Width:  |  Height:  |  Size: 453 B

After

Width:  |  Height:  |  Size: 453 B

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 737 B

After

Width:  |  Height:  |  Size: 737 B

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

Before

Width:  |  Height:  |  Size: 1006 B

After

Width:  |  Height:  |  Size: 1006 B

View File

Before

Width:  |  Height:  |  Size: 909 B

After

Width:  |  Height:  |  Size: 909 B

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,24 @@
Original code by prestidigitator (WTFPL)
The MIT License (MIT)
Copyright © 2021 Jordan Irwin <antumdeluge@gmail.com>
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,5 +1,7 @@
Wardrobe Minetest Mod # Wardrobe Minetest Mod
=====================
Originally by [prestidigitator](https://forum.minetest.net/viewtopic.php?t=9680).
This mod provides a very simple way to change the skin on the default character This mod provides a very simple way to change the skin on the default character
mesh. Unlike other skin-changing mods out there, it does not attempt to change mesh. Unlike other skin-changing mods out there, it does not attempt to change
@ -31,8 +33,9 @@ higher resolution as long as they have an aspect ratio of 2:1. The author of
this mod created a very high resolution version of the default character and it this mod created a very high resolution version of the default character and it
works well (but has not been included to simplify mod licensing). works well (but has not been included to simplify mod licensing).
Skins File Syntax
----------------- ---
## Skins File Syntax
A comment line starts with two dashes (like in Lua), but must be the only thing A comment line starts with two dashes (like in Lua), but must be the only thing
on the line: on the line:
@ -67,12 +70,13 @@ particular world), prepend a minus sign (-) to the line. For example:
would remove the "skin_other_texture_file_name.png" skin no matter where it was would remove the "skin_other_texture_file_name.png" skin no matter where it was
specified or what name it was given. specified or what name it was given.
Mod Details
-----------
Required Minetest Version: >=0.4.9 (not tested in earlier versions) ---
### Mod Details
Dependencies: default, wool (both included in minetest_game) Required Minetest Version: >=0.5.0
Dependencies: default, player_api, wool (included in minetest_game)
Recipies: Recipies:
@ -80,24 +84,27 @@ Recipies:
* S - any stick * S - any stick
* L - any wool * L - any wool
```
wardrobe: wardrobe:
W S W W S W
W L W W L W
W L W W L W
```
Git Repo: https://github.com/prestidigitator/minetest-mod-wardrobe Git Repo: https://github.com/AntumMT/mod-wardrobe
Copyright and Licensing
----------------------- ---
## Copyright and Licensing
All contents, including source code, documentation, and images, are the All contents, including source code, documentation, and images, are the
original creations of the mod author. original creations of the mod author.
Author: prestidigitator (as registered on forum.minetest.net) License: [MIT](LICENSE.txt)
License: WTFPL (all content)
Change History
-------------- ---
## Change History
Version 1.0 Version 1.0
@ -111,3 +118,12 @@ Version 1.1
* Auto-detection of player mesh name (thank you indriApollo). * Auto-detection of player mesh name (thank you indriApollo).
* Removed warning caused by access of uninitialized global variale (even though * Removed warning caused by access of uninitialized global variale (even though
it was just a check for nil). it was just a check for nil).
Version 1.2
* Released 2021-04-20
* License changed to MIT.
* Added player_api as dependency.
* External mods can register skins.
* Skins can be registered individually from within mod code.
* Number of displayed skins can be set in server configuration file.

View File

@ -1,2 +0,0 @@
default
wool

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

View File

@ -1,621 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="32"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="skinTemplate.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="22.203125"
inkscape:cx="32"
inkscape:cy="16"
inkscape:document-units="px"
inkscape:current-layer="layer3"
showgrid="true"
inkscape:window-width="1920"
inkscape:window-height="1025"
inkscape:window-x="1918"
inkscape:window-y="-3"
inkscape:window-maximized="1">
<inkscape:grid
type="xygrid"
id="grid4860"
units="px"
empspacing="4"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
spacingx="1px"
spacingy="1px" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="template"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1020.3622)"
sodipodi:insensitive="true">
<flowRoot
xml:space="preserve"
id="flowRoot4001"
style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
transform="translate(0,1020.3622)"><flowRegion
id="flowRegion4003"><rect
id="rect4005"
width="36.178391"
height="16.751614"
x="23.821686"
y="17.3503" /></flowRegion><flowPara
id="flowPara4007"></flowPara></flowRoot> <g
style="display:inline"
id="g4689"
transform="translate(-20,0)">
<path
style="fill:#ff00ff;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 20,1052.3622 16,0 0,-12 -4,0 0,-4 -8,0 0,4 -4,0 z"
id="path4691"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc" />
<path
id="path4693"
style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 0.25;stroke-dashoffset:0"
d="m 24,1040.3622 4,0 m 0,0 0,12 m 4,0 0,-12 m -8,0 0,12"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<path
id="path4818-8"
style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="m 32,1040.3622 -4,0 m 0,-4 0,4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<g
id="g4695">
<text
sodipodi:linespacing="125%"
id="text4697"
y="1045.1437"
x="27.926758"
style="font-size:1px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:3px;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1"
y="1045.1437"
x="27.926758"
id="tspan4699"
sodipodi:role="line">Legs</tspan></text>
<text
sodipodi:linespacing="125%"
id="text4701"
y="1039.4557"
x="26.000732"
style="font-size:1px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:3px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
y="1039.4557"
x="26.000732"
id="tspan4703"
sodipodi:role="line">T</tspan></text>
<text
sodipodi:linespacing="125%"
id="text4705"
y="1039.4557"
x="29.958252"
style="font-size:1px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:3px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
y="1039.4557"
x="29.958252"
id="tspan4707"
sodipodi:role="line">B</tspan></text>
<text
sodipodi:linespacing="125%"
id="text4709"
y="1049.4557"
x="25.941406"
style="font-size:1px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:3px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
y="1049.4557"
x="25.941406"
id="tspan4711"
sodipodi:role="line">F</tspan></text>
<text
sodipodi:linespacing="125%"
id="text4713"
y="1049.4557"
x="34"
style="font-size:1px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:3px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
y="1049.4557"
x="34"
id="tspan4715"
sodipodi:role="line">H</tspan></text>
<text
sodipodi:linespacing="125%"
id="text4717"
y="1049.4542"
x="22"
style="font-size:1px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:3px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
y="1049.4542"
x="22"
id="tspan4719"
sodipodi:role="line">O</tspan></text>
<text
sodipodi:linespacing="125%"
id="text4721"
y="1049.4557"
x="30"
style="font-size:1px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:3px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
y="1049.4557"
x="30"
id="tspan4723"
sodipodi:role="line">I</tspan></text>
</g>
</g>
<g
style="display:inline"
id="g4128">
<path
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0"
id="path3925"
d="m 64,1036.3622 0,-8 -8,0 0,-8 -16,0 0,8 -8,0 0,8 z"
style="fill:#8181ff;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
id="path3964"
style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.5, 0.5;stroke-dashoffset:0"
d="m 40,1028.3622 8,0 m 8,0 0,8 m -8,-8 0,8 m -8,-8 0,8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<path
id="path4818-6"
style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="m 56,1028.3622 -8,0 m 0,-8 0,8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<g
id="g4180">
<text
xml:space="preserve"
style="font-size:1px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans"
x="47.980957"
y="1029.4806"
id="text3973"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3975"
x="47.980957"
y="1029.4806"
style="font-size:3px;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1">Helm</tspan></text>
<text
xml:space="preserve"
style="font-size:3px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="44.000732"
y="1025.4557"
id="text3977"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3979"
x="44.000732"
y="1025.4557">T</tspan></text>
<text
xml:space="preserve"
style="font-size:3px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="51.958252"
y="1025.4557"
id="text3981"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3983"
x="51.958252"
y="1025.4557">B</tspan></text>
<text
xml:space="preserve"
style="font-size:3px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="35.896729"
y="1033.4557"
id="text3985"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3987"
x="35.896729"
y="1033.4557">R</tspan></text>
<text
xml:space="preserve"
style="font-size:3px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="43.941406"
y="1033.4557"
id="text3989"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3991"
x="43.941406"
y="1033.4557">F</tspan></text>
<text
xml:space="preserve"
style="font-size:3px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="51.860107"
y="1033.4557"
id="text3993"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3995"
x="51.860107"
y="1033.4557">L</tspan></text>
<text
xml:space="preserve"
style="font-size:3px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="60"
y="1033.4557"
id="text3997"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3999"
x="60"
y="1033.4557">H</tspan></text>
</g>
</g>
<g
style="display:inline"
id="g4196"
transform="translate(-32,0)">
<path
style="fill:#90ff81;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 64,1036.3622 0,-8 -8,0 0,-8 -16,0 0,8 -8,0 0,8 z"
id="path4198"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc" />
<path
d="m 40,1028.3622 8,0 m 8,0 0,8 m -8,-8 0,8 m -8,-8 0,8"
style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.5, 0.5;stroke-dashoffset:0"
id="path4200"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<path
id="path4818"
transform="translate(32,1020.3622)"
style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 24,8 -8,0 m 0,-8 0,8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<g
id="g4202">
<text
sodipodi:linespacing="125%"
id="text4204"
y="1029.4806"
x="47.989014"
style="font-size:1px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:3px;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1"
y="1029.4806"
x="47.989014"
id="tspan4206"
sodipodi:role="line">Head</tspan></text>
<text
sodipodi:linespacing="125%"
id="text4208"
y="1025.4557"
x="44.000732"
style="font-size:3px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
y="1025.4557"
x="44.000732"
id="tspan4210"
sodipodi:role="line">T</tspan></text>
<text
sodipodi:linespacing="125%"
id="text4212"
y="1025.4557"
x="51.958252"
style="font-size:3px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
y="1025.4557"
x="51.958252"
id="tspan4214"
sodipodi:role="line">B</tspan></text>
<text
sodipodi:linespacing="125%"
id="text4216"
y="1033.4557"
x="35.896729"
style="font-size:3px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
y="1033.4557"
x="35.896729"
id="tspan4218"
sodipodi:role="line">R</tspan></text>
<text
sodipodi:linespacing="125%"
id="text4220"
y="1033.4557"
x="43.941406"
style="font-size:3px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
y="1033.4557"
x="43.941406"
id="tspan4222"
sodipodi:role="line">F</tspan></text>
<text
sodipodi:linespacing="125%"
id="text4224"
y="1033.4557"
x="51.860107"
style="font-size:3px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
y="1033.4557"
x="51.860107"
id="tspan4226"
sodipodi:role="line">L</tspan></text>
<text
sodipodi:linespacing="125%"
id="text4228"
y="1033.4557"
x="60"
style="font-size:3px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
y="1033.4557"
x="60"
id="tspan4230"
sodipodi:role="line">H</tspan></text>
</g>
</g>
<g
style="display:inline"
transform="translate(20,0)"
id="g4496">
<path
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0"
id="path4232"
d="m 20,1052.3622 16,0 0,-12 -4,0 0,-4 -8,0 0,4 -4,0 z"
style="fill:#ff00ff;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
d="m 24,1040.3622 4,0 m 0,0 0,12 m 4,0 0,-12 m -8,0 0,12"
style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 0.25;stroke-dashoffset:0"
id="path4277" />
<path
id="path4818-1"
style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="m 32,1040.3622 -4,0 m 0,-4 0,4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<g
id="g4480">
<text
xml:space="preserve"
style="font-size:1px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans"
x="28.062256"
y="1045.4344"
id="text4280"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4282"
x="28.062256"
y="1045.4344"
style="font-size:3px;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1">Arms</tspan></text>
<text
xml:space="preserve"
style="font-size:1px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="26.000732"
y="1039.4557"
id="text4280-6"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4282-3"
x="26.000732"
y="1039.4557"
style="font-size:3px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1">T</tspan></text>
<text
xml:space="preserve"
style="font-size:1px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="29.958252"
y="1039.4557"
id="text4280-6-3"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4282-3-4"
x="29.958252"
y="1039.4557"
style="font-size:3px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1">B</tspan></text>
<text
xml:space="preserve"
style="font-size:1px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="25.941406"
y="1049.4557"
id="text4280-6-3-8"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4282-3-4-1"
x="25.941406"
y="1049.4557"
style="font-size:3px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1">F</tspan></text>
<text
xml:space="preserve"
style="font-size:1px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="34"
y="1049.4557"
id="text4280-6-3-0"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4282-3-4-2"
x="34"
y="1049.4557"
style="font-size:3px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1">H</tspan></text>
<text
xml:space="preserve"
style="font-size:1px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="22"
y="1049.4542"
id="text4280-6-3-88"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4282-3-4-23"
x="22"
y="1049.4542"
style="font-size:3px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1">O</tspan></text>
<text
xml:space="preserve"
style="font-size:1px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="30"
y="1049.4557"
id="text4280-6-3-6"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4282-3-4-16"
x="30"
y="1049.4557"
style="font-size:3px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1">I</tspan></text>
</g>
</g>
<g
style="display:inline"
id="g4670"
transform="translate(0,1000.3622)">
<path
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0"
id="path4533"
d="m 16,52 24,0 0,-12 -4,0 0,-4 -16,0 0,4 -4,0 z"
style="fill:#00bdc0;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
d="m 32,40 0,12 m -4,-12 0,12 m -8,-12 8,0 m -8,0 0,12"
style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 0.5;stroke-dashoffset:0"
id="path4541" />
<path
id="path4818-2"
style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="m 36,40 -8,0 m 0,-4 0,4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<g
id="g4654">
<text
xml:space="preserve"
style="font-size:1px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans"
x="27.897461"
y="44.827637"
id="text4544"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4546"
x="27.897461"
y="44.827637"
style="font-size:3px;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1">Body</tspan></text>
<text
xml:space="preserve"
style="font-size:1px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Sans"
x="24.000732"
y="39.093506"
id="text4544-0"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4546-8"
x="24.000732"
y="39.093506"
style="font-size:3px;text-align:center;text-anchor:middle">T</tspan></text>
<text
xml:space="preserve"
style="font-size:1px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Sans"
x="31.958252"
y="39.093506"
id="text4544-0-7"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4546-8-7"
x="31.958252"
y="39.093506"
style="font-size:3px;text-align:center;text-anchor:middle">B</tspan></text>
<text
xml:space="preserve"
style="font-size:1px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Sans"
x="17.896729"
y="49.093506"
id="text4544-0-1"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4546-8-3"
x="17.896729"
y="49.093506"
style="font-size:3px;text-align:center;text-anchor:middle">R</tspan></text>
<text
xml:space="preserve"
style="font-size:1px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Sans"
x="23.941406"
y="49.093506"
id="text4544-0-16"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4546-8-1"
x="23.941406"
y="49.093506"
style="font-size:3px;text-align:center;text-anchor:middle">F</tspan></text>
<text
xml:space="preserve"
style="font-size:1px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Sans"
x="29.860107"
y="49.093506"
id="text4544-0-6"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4546-8-9"
x="29.860107"
y="49.093506"
style="font-size:3px;text-align:center;text-anchor:middle">L</tspan></text>
<text
xml:space="preserve"
style="font-size:1px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Sans"
x="36"
y="49.093506"
id="text4544-0-60"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4546-8-19"
x="36"
y="49.093506"
style="font-size:3px;text-align:center;text-anchor:middle">H</tspan></text>
</g>
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="drawing" />
</svg>

Before

Width:  |  Height:  |  Size: 28 KiB

View File

@ -1,343 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="New document 1">
<defs
id="defs4">
<linearGradient
id="linearGradient5302"
osb:paint="solid">
<stop
style="stop-color:#46341e;stop-opacity:1;"
offset="0"
id="stop5304" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="50.75"
inkscape:cx="8"
inkscape:cy="8"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="990"
inkscape:window-x="-2"
inkscape:window-y="32"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1036.3622)">
<g
id="g5525-0"
transform="translate(6,0)" />
<g
id="g5783">
<g
id="g5762">
<rect
style="fill:#b48b5b;fill-opacity:1;stroke:none"
id="rect3753"
width="16"
height="16"
x="0"
y="1036.3622" />
<rect
style="fill:#46341e;fill-opacity:1;stroke:none"
id="rect3753-0"
width="14"
height="14"
x="1"
y="1037.3622" />
<rect
style="fill:#d7d7d7;fill-opacity:1;stroke:none"
id="rect3753-0-9"
width="14"
height="1"
x="1"
y="1039.3622" />
</g>
<g
id="g5775">
<rect
style="fill:#cdc0b2;fill-opacity:1;stroke:none"
id="rect3753-0-9-0"
width="1"
height="3"
x="2"
y="1038.3622" />
<rect
style="fill:#cdc0b2;fill-opacity:1;stroke:none"
id="rect3753-0-9-0-4"
width="1"
height="3"
x="4"
y="1038.3622" />
<rect
y="1038.3622"
x="6"
height="3"
width="1"
id="rect5362"
style="fill:#cdc0b2;fill-opacity:1;stroke:none" />
<rect
style="fill:#cdc0b2;fill-opacity:1;stroke:none"
id="rect5364"
width="1"
height="3"
x="8"
y="1038.3622" />
<rect
y="1038.3622"
x="10"
height="3"
width="1"
id="rect5366"
style="fill:#cdc0b2;fill-opacity:1;stroke:none" />
<rect
style="fill:#cdc0b2;fill-opacity:1;stroke:none"
id="rect5368"
width="1"
height="3"
x="13"
y="1038.3622" />
</g>
<g
id="g5767">
<g
id="g5432">
<path
style="fill:#3c58c8;fill-opacity:1;stroke:none"
d="m 14,15 0,-3 -1,0 0,2 -1,0 0,1 z"
id="path5434"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
transform="translate(0,1036.3622)" />
<rect
style="fill:#c8c8c8;fill-opacity:1;stroke:none"
id="rect5436"
width="1"
height="1"
x="13"
y="1048.3622" />
</g>
<g
id="g5428"
transform="translate(1,0)">
<path
sodipodi:nodetypes="ccccccc"
transform="translate(0,1036.3622)"
inkscape:connector-curvature="0"
id="path5424"
d="m 14,15 0,-3 -1,0 0,2 -1,0 0,1 z"
style="fill:#5577ff;fill-opacity:1;stroke:none" />
<rect
y="1048.3622"
x="13"
height="1"
width="1"
id="rect5426"
style="fill:#e6e6e6;fill-opacity:1;stroke:none" />
</g>
</g>
<g
id="g5499">
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none"
id="rect3753-0-9-0-47"
width="1"
height="5"
x="2"
y="1040.3622" />
<rect
style="fill:#ffff00;fill-opacity:1;stroke:none"
id="rect3753-0-9-0-47-8"
width="1"
height="1"
x="2"
y="1043.3622" />
<rect
style="fill:#c80000;fill-opacity:1;stroke:none"
id="rect3753-0-9-0-47-0-9"
width="1"
height="3"
x="2"
y="1045.3622" />
</g>
<g
transform="translate(2,0)"
id="g5525">
<rect
style="fill:#213c94;fill-opacity:1;stroke:none"
id="rect5505"
width="1"
height="8"
x="4"
y="1041.3622" />
<rect
style="fill:#293765;fill-opacity:1;stroke:none"
id="rect5505-9"
width="1"
height="8"
x="3"
y="1041.3622" />
</g>
<g
id="g5499-8"
transform="translate(2,0)">
<rect
style="fill:#5aff00;fill-opacity:1;stroke:none"
id="rect3753-0-9-0-47-1"
width="1"
height="5"
x="2"
y="1040.3622" />
<rect
style="fill:#47c800;fill-opacity:1;stroke:none"
id="rect3753-0-9-0-47-0-9-2"
width="1"
height="3"
x="2"
y="1045.3622" />
</g>
<g
id="g5499-85"
transform="translate(6,0)">
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none"
id="rect3753-0-9-0-47-3"
width="1"
height="5"
x="2"
y="1040.3622" />
<rect
style="fill:#3141d3;fill-opacity:1;stroke:none"
id="rect3753-0-9-0-47-8-5"
width="1"
height="1"
x="2"
y="1043.3622" />
<rect
style="fill:#394184;fill-opacity:1;stroke:none"
id="rect3753-0-9-0-47-0-9-8"
width="1"
height="3"
x="2"
y="1045.3622" />
<rect
style="fill:#3141d3;fill-opacity:1;stroke:none"
id="rect3753-0-9-0-47-8-5-0"
width="1"
height="1"
x="2"
y="1041.3622" />
</g>
<g
transform="matrix(-1,0,0,1,15,-4)"
id="g5525-8">
<rect
style="fill:#213c94;fill-opacity:1;stroke:none"
id="rect5505-1"
width="1"
height="4"
x="4"
y="1045.3622" />
<rect
style="fill:#293765;fill-opacity:1;stroke:none"
id="rect5505-9-1"
width="1"
height="4"
x="3"
y="1045.3622" />
</g>
<g
id="g5499-8-1"
transform="translate(11,0)">
<rect
style="fill:#f000ff;fill-opacity:1;stroke:none"
id="rect3753-0-9-0-47-1-0"
width="1"
height="5"
x="2"
y="1040.3622" />
<rect
style="fill:#bc00c8;fill-opacity:1;stroke:none"
id="rect3753-0-9-0-47-0-9-2-3"
width="1"
height="3"
x="2"
y="1045.3622" />
</g>
<g
transform="translate(0.13374519,0.09950469)"
id="g5734">
<rect
style="fill:#bc00c8;fill-opacity:1;stroke:none"
id="rect3753-0-9-0-47-0-9-2-3-4"
width="1"
height="1"
x="9.8662548"
y="1050.2627" />
<rect
y="1049.2627"
x="9.8662548"
height="1"
width="1"
id="rect5426-7"
style="fill:#b1b1b1;fill-opacity:1;stroke:none" />
</g>
<g
transform="translate(-1.8662548,0.09950469)"
id="g5734-5">
<rect
style="fill:#bc00c8;fill-opacity:1;stroke:none"
id="rect3753-0-9-0-47-0-9-2-3-4-1"
width="1"
height="1"
x="9.8662548"
y="1050.2627" />
<rect
y="1050.2627"
x="8.8662548"
height="1"
width="1"
id="rect5426-7-9"
style="fill:#979797;fill-opacity:1;stroke:none" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 9.1 KiB

View File

@ -1,236 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="wardrobe_wardrobeFront.svg"
inkscape:export-filename="/home/merlin/dev/mt/wardrobe/wardrobe_wardrobeFront.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<defs
id="defs4">
<linearGradient
id="linearGradient5302"
osb:paint="solid">
<stop
style="stop-color:#46341e;stop-opacity:1;"
offset="0"
id="stop5304" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="35.885669"
inkscape:cx="7.7796302"
inkscape:cy="7.6898499"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="990"
inkscape:window-x="-2"
inkscape:window-y="32"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1036.3622)">
<g
id="g5525-0"
transform="translate(6,0)" />
<g
id="g6128">
<rect
y="1036.3622"
x="0"
height="16"
width="16"
id="rect3753"
style="fill:#b48b5b;fill-opacity:1;stroke:none" />
<rect
style="fill:#9a764c;fill-opacity:1;stroke:none"
id="rect5926"
width="1"
height="16"
x="3"
y="1036.3622" />
<rect
y="1036.3622"
x="5"
height="16"
width="1"
id="rect5928"
style="fill:#9a764c;fill-opacity:1;stroke:none" />
<rect
style="fill:#9a764c;fill-opacity:1;stroke:none"
id="rect5930"
width="1"
height="16"
x="7"
y="1036.3622" />
<rect
y="1036.3622"
x="10"
height="16"
width="1"
id="rect5932"
style="fill:#9a764c;fill-opacity:1;stroke:none" />
<rect
y="1036.3622"
x="14"
height="16"
width="1"
id="rect5936"
style="fill:#9a764c;fill-opacity:1;stroke:none" />
<g
id="g5975">
<rect
style="fill:#9a764c;fill-opacity:1;stroke:none"
id="rect5951"
width="1"
height="3"
x="8"
y="1047.3622" />
<rect
y="1043.3622"
x="8"
height="2"
width="1"
id="rect5971"
style="fill:#9a764c;fill-opacity:1;stroke:none" />
<rect
style="fill:#9a764c;fill-opacity:1;stroke:none"
id="rect5973"
width="1"
height="3"
x="8"
y="1037.3622" />
</g>
<g
transform="matrix(1,0,0,-1,-5.9901478,2088.7244)"
id="g5980">
<rect
y="1047.3622"
x="8"
height="3"
width="1"
id="rect5982"
style="fill:#9a764c;fill-opacity:1;stroke:none" />
<rect
style="fill:#9a764c;fill-opacity:1;stroke:none"
id="rect5984"
width="1"
height="2"
x="8"
y="1043.3622" />
<rect
y="1037.3622"
x="8"
height="3"
width="1"
id="rect5986"
style="fill:#9a764c;fill-opacity:1;stroke:none" />
</g>
<g
id="g5975-9"
transform="translate(4,1.0000174)">
<rect
style="fill:#9a764c;fill-opacity:1;stroke:none"
id="rect5951-3"
width="1"
height="3"
x="8"
y="1047.3622" />
<rect
y="1041.3622"
x="8"
height="3"
width="1"
id="rect5971-2"
style="fill:#9a764c;fill-opacity:1;stroke:none" />
<rect
style="fill:#9a764c;fill-opacity:1;stroke:none"
id="rect5973-2"
width="1"
height="2"
x="8"
y="1037.3622" />
</g>
<rect
y="1042.3622"
x="5"
height="4"
width="1"
id="rect5928-7"
style="fill:#aa7b45;fill-opacity:1;stroke:none" />
<g
id="g6087">
<rect
style="fill:#aa7b45;fill-opacity:1;stroke:none"
id="rect5928-7-4"
width="1"
height="3"
x="10"
y="1047.3622" />
<rect
style="fill:#aa7b45;fill-opacity:1;stroke:none"
id="rect5928-7-4-0"
width="1"
height="3"
x="10"
y="1041.3622" />
<rect
style="fill:#aa7b45;fill-opacity:1;stroke:none"
id="rect5928-7-4-0-3"
width="1"
height="1"
x="10"
y="1037.3622" />
</g>
<rect
y="1036.3622"
x="1"
height="16"
width="1"
id="rect5936-9"
style="fill:#ba9973;fill-opacity:1;stroke:none" />
<rect
y="1036.3622"
x="13"
height="16"
width="1"
id="rect5936-9-3"
style="fill:#ba9973;fill-opacity:1;stroke:none" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -1,79 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="wardrobe_wardrobe_sides.svg"
inkscape:export-filename="/home/merlin/dev/mt/wardrobe/wardrobe_wardrobeFront.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<defs
id="defs4">
<linearGradient
id="linearGradient5302"
osb:paint="solid">
<stop
style="stop-color:#46341e;stop-opacity:1;"
offset="0"
id="stop5304" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="35.885669"
inkscape:cx="7.7796302"
inkscape:cy="7.6898499"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="990"
inkscape:window-x="-2"
inkscape:window-y="32"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1036.3622)">
<g
id="g5525-0"
transform="translate(6,0)" />
<rect
style="fill:#b48b5b;fill-opacity:1;stroke:none"
id="rect3753"
width="16"
height="16"
x="0"
y="1036.3622" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -1,15 +1,17 @@
local MOD_NAME = minetest.get_current_modname();
local MOD_PATH = minetest.get_modpath(MOD_NAME);
local WORLD_PATH = minetest.get_worldpath();
if MOD_NAME ~= "wardrobe" then local world_path = core.get_worldpath();
error("mod directory must be named 'wardrobe'");
end
wardrobe = {}; wardrobe = {};
wardrobe.name = core.get_current_modname();
wardrobe.path = core.get_modpath(wardrobe.name)
wardrobe.player_skin_db = world_path.."/playerSkins.txt"
wardrobe.skin_files = {wardrobe.path.."/skins.txt", world_path.."/skins.txt"};
wardrobe.playerSkins = {}
local initSkin, changeSkin, updateSkin = dofile(MOD_PATH.."/skinMethods.lua"); dofile(wardrobe.path.."/settings.lua")
dofile(MOD_PATH.."/storage.lua"); local initSkin, changeSkin, updateSkin = dofile(wardrobe.path.."/skinMethods.lua");
dofile(MOD_PATH.."/wardrobe.lua"); dofile(wardrobe.path.."/storage.lua");
dofile(wardrobe.path.."/wardrobe.lua");
-- API -- API
@ -39,27 +41,27 @@ wardrobe.setPlayerSkin = updateSkin;
-- Name of the skin. -- Name of the skin.
-- --
function wardrobe.changePlayerSkin(playerName, skin) function wardrobe.changePlayerSkin(playerName, skin)
changeSkin(playerName, skin); changeSkin(playerName, skin);
local player = minetest.get_player_by_name(playerName); local player = core.get_player_by_name(playerName);
if player then updateSkin(player); end; if player then updateSkin(player); end;
end end
wardrobe.storage.loadSkins(); wardrobe.loadSkins();
wardrobe.storage.loadPlayerSkins(); wardrobe.loadPlayerSkins();
if initSkin then if initSkin then
minetest.register_on_joinplayer( core.register_on_joinplayer(
function(player) function(player)
minetest.after(1, initSkin, player) core.after(1, initSkin, player)
end); end);
end; end;
if not changeSkin then if not changeSkin then
error("No wardrobe skin change method registered. Check skinMethods.lua."); error("No wardrobe skin change method registered. Check skinMethods.lua.");
end; end;
if not updateSkin then if not updateSkin then
error("No wardrobe skin update method registered. Check skinMethods.lua."); error("No wardrobe skin update method registered. Check skinMethods.lua.");
end; end;

View File

@ -0,0 +1,4 @@
name = wardrobe
description = A wardrobe that can be used to register & set new skins for players.
version = 1.2
depends = default, player_api, wool

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

View File

@ -0,0 +1,5 @@
--- Number of skins shown per page.
--
-- default: 8
wardrobe.skins_per_page = tonumber(core.settings:get("wardrobe.skins_per_page")) or 8

View File

@ -0,0 +1,5 @@
## Number of skins shown per page.
#
# default: 8
wardrobe.skins_per_page (Skins per page) int 8

View File

@ -12,92 +12,92 @@ local SKIN_CHANGE_METHOD = '3d_armor';
local playerMesh = "character.b3d"; local playerMesh = "character.b3d";
do -- autodetect version of player mesh used by default do -- autodetect version of player mesh used by default
if default and default.registered_player_models then if default and default.registered_player_models then
local haveCharName = false; -- 'character.*' has priority local haveCharName = false; -- 'character.*' has priority
local name = nil; local name = nil;
local nNames = 0; local nNames = 0;
for k in pairs(default.registered_player_models) do for k in pairs(default.registered_player_models) do
if string.find(k, "^character\\.[^\\.]+$") then if string.find(k, "^character\\.[^\\.]+$") then
if haveCharName then nNames = 2; break; end; if haveCharName then nNames = 2; break; end;
name = k; name = k;
nNames = 1; nNames = 1;
haveCharName = true; haveCharName = true;
elseif not haveCharName then elseif not haveCharName then
name = k; name = k;
nNames = nNames + 1; nNames = nNames + 1;
end; end;
end; end;
if nNames == 1 then playerMesh = name; end; if nNames == 1 then playerMesh = name; end;
end; end;
end; end;
local function changeWardrobeSkin(playerName, skin) local function changeWardrobeSkin(playerName, skin)
local player = minetest.get_player_by_name(playerName); local player = core.get_player_by_name(playerName);
if not player then if not player then
error("unknown player '"..playerName.."'"); error("unknown player '"..playerName.."'");
end; end;
if skin and not wardrobe.skinNames[skin] then if skin and not wardrobe.skinNames[skin] then
error("unknown skin '"..skin.."'"); error("unknown skin '"..skin.."'");
end; end;
wardrobe.playerSkins[playerName] = skin; wardrobe.playerSkins[playerName] = skin;
wardrobe.storage.savePlayerSkins(); wardrobe.savePlayerSkins();
end; end;
local function defaultUpdateSkin(player) local function defaultUpdateSkin(player)
local playerName = player:get_player_name(); local playerName = player:get_player_name();
if not playerName or playerName == "" then return; end; if not playerName or playerName == "" then return; end;
local skin = wardrobe.playerSkins[playerName]; local skin = wardrobe.playerSkins[playerName];
if not skin or not wardrobe.skinNames[skin] then return; end; if not skin or not wardrobe.skinNames[skin] then return; end;
player:set_properties( player:set_properties(
{ {
visual = "mesh", visual = "mesh",
visual_size = { x = 1, y = 1 }, visual_size = { x = 1, y = 1 },
mesh = playerMesh, mesh = playerMesh,
textures = { skin } textures = { skin }
}); });
end; end;
--- Method for updating the player skin, IF the dependent mod is enabled. --- Method for updating the player skin, IF the dependent mod is enabled.
local SKIN_CHANGE_METHODS = local SKIN_CHANGE_METHODS =
{ {
default = default =
{ {
required_mods = {}, required_mods = {},
initSkin = defaultUpdateSkin, initSkin = defaultUpdateSkin,
changeSkin = changeWardrobeSkin, changeSkin = changeWardrobeSkin,
updateSkin = defaultUpdateSkin updateSkin = defaultUpdateSkin
}, },
["3d_armor"] = ["3d_armor"] =
{ {
required_mods = { '3d_armor' }, required_mods = { '3d_armor' },
initSkin = nil, initSkin = nil,
changeSkin = function(playerName, skin) changeSkin = function(playerName, skin)
changeWardrobeSkin(playerName, skin); changeWardrobeSkin(playerName, skin);
armor.textures[playerName].skin = skin; armor.textures[playerName].skin = skin;
end, end,
updateSkin = function(player) updateSkin = function(player)
armor:update_player_visuals(player); armor:update_player_visuals(player);
end, end,
}, },
}; };
local methods = SKIN_CHANGE_METHODS[SKIN_CHANGE_METHOD]; local methods = SKIN_CHANGE_METHODS[SKIN_CHANGE_METHOD];
if methods then if methods then
for _, mod in ipairs(methods.required_mods) do for _, mod in ipairs(methods.required_mods) do
if not minetest.get_modpath(mod) then methods = nil; break; end; if not core.get_modpath(mod) then methods = nil; break; end;
end; end;
end; end;
if not methods then methods = SKIN_CHANGE_METHODS.default; end; if not methods then methods = SKIN_CHANGE_METHODS.default; end;

View File

@ -1,43 +1 @@
skin_character.png: Default Skin character.png: Default Skin
Ashley_by_loupicate.png: Ashley
BlueZ_Sam_II_by_philipbenr.png: BlueZ Sam II
CaligoPL_by_CaligoPL.png: CaligoPL
Charizard_by_Ferdi_Napoli.png: Charizard
Charlotte_by_Sporax.png: Charlotte
Chloé_by_nelly.png: Chloé (by nelly)
Chloé_by_Sporax.png: Chloé (by Sporax)
Chop_by_Ferdi_Napoli.png: Chop
Coralie_by_loupicate.png: Coralie
Devil_by_viv100.png: Devil
Emma_by_Cidney7760.png: Emma
Female_angel_by_loupicate.png: Angel (female)
Finn_The_Adventured_by_Ferdi_Napoli.png: Finn
Fiona_by_loupicate.png: Fiona
Fire_Mario_by_Ferdi_Napoli.png: Fire Mario
Grégoire_by_Sporax.png: Grégoire
Hobo_by_Minetestian.png: Hobo
Infantry_man_by_philipbenr.png: Infantry Man
Iris_by_loupicate.png: Iris
Iron_Man_MK._7_by_Jordach.png: Iron Man
Jake_by_Ferdi_Napoli.png: Jake
Joker_by_Ferdi_Napoli.png: Joker
Julia_by_nelly.png: Julia
Ladyvioletkitty_by_lordphoenixmh.png: LadyVioletKitty
Link_by_tux_peng.png: Link
lisa_by_hansuke123.png: Lisa
Male_angel_by_loupicate.png: Angel (male)
Morgane_by_loupicate.png: Morgane
Naruto_by_LuxAtheris.png: Naruto
NERD_by_DJOZZY.png: NERD
Older_Man_Sam_by_philipbenr.png: Sam (older man)
philipbenr_by_philipbenr.png: PhilipBenR
skin_minecraft_repris_by_Sporax.png: Minecraft Repris
Space_Sam_by_philipbenr.png: Sam (space)
Summer_by_lizzie.png: Summer
SuperSam_by_AMMOnym.png: Sam (super)
villiantest_III_by_marshrover.png: VillianTest
War_Machine_by_Ferdi_Napoli.png: War Machine
Witch_by_loupicate.png: Witch
Zenohelds_by_sdzen.png: Zenohelds
tessas_skin.png: Tessa

View File

@ -1,74 +1,67 @@
wardrobe = wardrobe or {};
wardrobe.storage = wardrobe.storage or {};
wardrobe.skins = {}
local MOD_NAME = minetest.get_current_modname(); wardrobe.skinNames = {}
local MOD_PATH = minetest.get_modpath(MOD_NAME);
local WORLD_PATH = minetest.get_worldpath();
local SKIN_FILES = { MOD_PATH.."/skins.txt", WORLD_PATH.."/skins.txt" };
local PLAYER_SKIN_DB = WORLD_PATH.."/playerSkins.txt";
local function removePrefix(str, prefix) local function removePrefix(str, prefix)
local n = #prefix; local n = #prefix;
if #str >= n and string.sub(str, 1, n) == prefix then if #str >= n and string.sub(str, 1, n) == prefix then
return string.sub(str, n+1); return string.sub(str, n+1);
else else
return str; return str;
end end
end end
local function removeSuffix(str, suffix) local function removeSuffix(str, suffix)
local n = #suffix; local n = #suffix;
if #str >= n and string.sub(str, -n, -1) == suffix then if #str >= n and string.sub(str, -n, -1) == suffix then
return string.sub(str, 1, -(n+1)); return string.sub(str, 1, -(n+1));
else else
return str; return str;
end end
end end
local function trimTail(str) local function trimTail(str)
local e = string.find(str, "%s+$"); local e = string.find(str, "%s+$");
return (e and string.sub(str, e-1)) or str; return (e and string.sub(str, e-1)) or str;
end end
local function parsePlayerSkinLine(line) local function parsePlayerSkinLine(line)
local k, v; local k, v;
local p = string.find(line, "%S"); local p = string.find(line, "%S");
if p and not string.find(line, "^%-%-", p) then if p and not string.find(line, "^%-%-", p) then
local ss, se = string.find(line, "%s*:%s*", p); local ss, se = string.find(line, "%s*:%s*", p);
if ss then if ss then
k = string.sub(line, p, ss-1); k = string.sub(line, p, ss-1);
v = trimTail(string.sub(line, se+1)); v = trimTail(string.sub(line, se+1));
if k == "" then k = nil; end if k == "" then k = nil; end
if v == "" then v = nil; end if v == "" then v = nil; end
end end
end end
return k, v; return k, v;
end end
local function parseSkinLine(line) local function parseSkinLine(line)
local k, v, n, e; local k, v, n, e;
local p = string.find(line, "%S"); local p = string.find(line, "%S");
if p then if p then
n, e = string.find(line, "^%-%-?", p); n, e = string.find(line, "^%-%-?", p);
if not n or n == e then if not n or n == e then
if n then p = n+1; end if n then p = n+1; end
local ss, se = string.find(line, "%s*:%s*", p); local ss, se = string.find(line, "%s*:%s*", p);
if ss then if ss then
k = string.sub(line, p, ss-1); k = string.sub(line, p, ss-1);
v = trimTail(string.sub(line, se+1)); v = trimTail(string.sub(line, se+1));
if v == "" then v = nil; end if v == "" then v = nil; end
else else
k = trimTail(string.sub(line, p)); k = trimTail(string.sub(line, p));
end end
if k == "" then k = nil; end if k == "" then k = nil; end
end end
end end
return k, v, n; return k, v, n;
end end
--- Parses the files with the given paths for key/value pairs. Once a key is --- Parses the files with the given paths for key/value pairs. Once a key is
@ -81,104 +74,175 @@ end
-- values. -- values.
-- --
local function loadSkinsFromFiles(filePaths) local function loadSkinsFromFiles(filePaths)
local normKeys, negKeys, values = {}, {}, {} local normKeys, values, negKeys = {}, {}, {}
for _, filePath in ipairs(filePaths) do for _, filePath in ipairs(filePaths) do
local file = io.open(filePath, "r"); local file = io.open(filePath, "r");
if file then if file then
for line in file:lines() do for line in file:lines() do
local k, v, n = parseSkinLine(line) local k, v, n = parseSkinLine(line)
if k then
if n then
normKeys[k] = nil;
values[k] = nil;
negKeys[k] = k;
elseif not negKeys[k] then
normKeys[k] = k;
if v then
values[k] = v;
end
end
end
end
file:close()
end
end
local keyList = {}; if k then
for k in pairs(normKeys) do if n then
table.insert(keyList, k); normKeys[k] = nil;
end values[k] = nil;
negKeys[k] = k;
elseif not negKeys[k] then
normKeys[k] = k;
if v then
values[k] = v;
end
end
end
end
file:close()
end
end
return keyList, values; local keyList = {};
for k in pairs(normKeys) do
table.insert(keyList, k);
end
return keyList, values;
end
--- Organizes outfit names alphabetically.
--
-- @function wardrobe.sortNames
function wardrobe.sortNames()
table.sort(wardrobe.skins, function(sL, sR)
return wardrobe.skinNames[sL] < wardrobe.skinNames[sR];
end);
end
--- Registers a single skin.
--
-- Does not sort automatically.
--
-- @function wardrobe.registerSkin
-- @param k Texture file name
-- @param v Name to display in wardrobe
function wardrobe.registerSkin(k, v)
table.insert(wardrobe.skins, k)
wardrobe.skinNames[k] = v
end end
--- Loads skin names from skin files, storing the result in wardrobe.skins and --- Loads skin names from skin files, storing the result in wardrobe.skins and
-- wardrobe.skinNames. -- wardrobe.skinNames.
-- --
function wardrobe.storage.loadSkins() -- Overwrites any previously registered skins.
local skins, skinNames = loadSkinsFromFiles(SKIN_FILES); function wardrobe.loadSkins(skin_files)
skin_files = skin_files or wardrobe.skin_files
for i, skin in ipairs(skins) do local skins, skinNames = loadSkinsFromFiles(skin_files);
local name = skinNames[skin];
if not name then for i, skin in ipairs(skins) do
local s, e; local name = skinNames[skin];
name = removeSuffix( if not name then
removePrefix( local s, e;
removePrefix(skin, MOD_NAME.."_"),
"skin_"),
".png");
if name == "" then name = removeSuffix(
name = skin; removePrefix(
else removePrefix(skin, wardrobe.name.."_"),
name = string.gsub(name, "_", " "); "skin_"),
end ".png");
end
skinNames[skin] = name; if name == "" then
end name = skin;
else
name = string.gsub(name, "_", " ");
end
end
table.sort(skins, skinNames[skin] = name;
function(sL, sR) end
return skinNames[sL] < skinNames[sR];
end);
wardrobe.skins = skins; -- overwrite registered skins
wardrobe.skinNames = skinNames; wardrobe.skins = skins;
wardrobe.skinNames = skinNames;
wardrobe.sortNames()
end
--- Loads additional skins from a file.
--
-- @function wardrobe.registerSkinFiles
-- @param skin_files
function wardrobe.registerSkinFiles(skin_files)
if type(skin_files) == "string" then
skin_files = {skin_files,}
end
local skins, skinNames = loadSkinsFromFiles(skin_files);
for i, skin in ipairs(skins) do
local name = skinNames[skin];
if not name then
local s, e;
name = removeSuffix(
removePrefix(
removePrefix(skin, wardrobe.name.."_"),
"skin_"),
".png");
if name == "" then
name = skin;
else
name = string.gsub(name, "_", " ");
end
end
skinNames[skin] = name;
end
-- add to registered skins
for _, sk in ipairs(skins) do
--[[
table.insert(wardrobe.skins, sk)
wardrobe.skinNames[sk] = skinNames[sk]
]]
wardrobe.registerSkin(sk, skinNames[sk])
end
wardrobe.sortNames()
end end
--- Parses the player skins database file and stores the result in --- Parses the player skins database file and stores the result in
-- wardrobe.playerSkins. -- wardrobe.playerSkins.
-- --
function wardrobe.storage.loadPlayerSkins() function wardrobe.loadPlayerSkins(player_skin_db)
local playerSkins = {}; player_skin_db = player_skin_db or wardrobe.player_skin_db
local playerSkins = {};
local file = io.open(PLAYER_SKIN_DB, "r"); local file = io.open(player_skin_db, "r");
if file then if file then
for line in file:lines() do for line in file:lines() do
local name, skin = parsePlayerSkinLine(line); local name, skin = parsePlayerSkinLine(line);
if name then if name then
playerSkins[name] = skin; playerSkins[name] = skin;
end end
end end
file:close(); file:close();
end end
wardrobe.playerSkins = playerSkins; wardrobe.playerSkins = playerSkins;
end end
--- Writes wardrobe.playerSkins to the player skins database file. --- Writes wardrobe.playerSkins to the player skins database file.
-- --
function wardrobe.storage.savePlayerSkins() function wardrobe.savePlayerSkins(player_skin_db)
local file = io.open(PLAYER_SKIN_DB, "w"); player_skin_db = player_skin_db or wardrobe.player_skin_db
if not file then error("Couldn't write file '"..filePath.."'"); end
for name, skin in pairs(wardrobe.playerSkins) do local file = io.open(player_skin_db, "w");
file:write(name, ":", skin, "\n"); if not file then error("Couldn't write file '"..filePath.."'"); end
end
file:close(); for name, skin in pairs(wardrobe.playerSkins) do
file:write(name, ":", skin, "\n");
end
file:close();
end end

View File

@ -1,40 +0,0 @@
[Ashley_by_loupicate.png](http://minetest.fensta.bplaced.net/#id=885): CC BY-SA
[BlueZ_Sam_II_by_philipbenr.png](http://minetest.fensta.bplaced.net/#id=143): CC BY-SA
[CaligoPL_by_CaligoPL.png](http://minetest.fensta.bplaced.net/#id=99): CC BY-SA
[Charizard_by_Ferdi_Napoli.png](http://minetest.fensta.bplaced.net/#id=172): CC BY-NC-SA
[Charlotte_by_Sporax.png](http://minetest.fensta.bplaced.net/#id=852): CC BY-SA
[Chloé_by_nelly.png](http://minetest.fensta.bplaced.net/#id=847): CC BY-SA
[Chloé_by_Sporax.png](http://minetest.fensta.bplaced.net/#id=851): CC BY-SA
[Chop_by_Ferdi_Napoli.png](http://minetest.fensta.bplaced.net/#id=164): CC BY-NC-SA
[Coralie_by_loupicate.png](http://minetest.fensta.bplaced.net/#id=894): CC BY-SA
[Devil_by_viv100.png](http://minetest.fensta.bplaced.net/#id=93): CC BY-SA
[Emma_by_Cidney7760.png](http://minetest.fensta.bplaced.net/#id=101): CC BY-SA
[Female_angel_by_loupicate.png](http://minetest.fensta.bplaced.net/#id=890): CC BY-SA
[Finn_The_Adventured_by_Ferdi_Napoli.png](http://minetest.fensta.bplaced.net/#id=175): CC BY-NC-SA
[Fiona_by_loupicate.png](http://minetest.fensta.bplaced.net/#id=860): CC BY-SA
[Fire_Mario_by_Ferdi_Napoli.png](http://minetest.fensta.bplaced.net/#id=198): CC BY-NC-SA
[Grégoire_by_Sporax.png](http://minetest.fensta.bplaced.net/#id=850): CC BY-SA
[Hobo_by_Minetestian.png](http://minetest.fensta.bplaced.net/#id=112): CC BY-SA
[Infantry_man_by_philipbenr.png](http://minetest.fensta.bplaced.net/#id=82): CC BY-SA
[Iris_by_loupicate.png](http://minetest.fensta.bplaced.net/#id=862): CC BY-SA
[Iron_Man_MK._7_by_Jordach.png](http://minetest.fensta.bplaced.net/#id=6): CC BY-NC-SA
[Jake_by_Ferdi_Napoli.png](http://minetest.fensta.bplaced.net/#id=176): CC BY-NC-SA
[Joker_by_Ferdi_Napoli.png](http://minetest.fensta.bplaced.net/#id=178): CC BY-NC-SA
[Julia_by_nelly.png](http://minetest.fensta.bplaced.net/#id=859): CC BY-SA
[Ladyvioletkitty_by_lordphoenixmh.png](http://minetest.fensta.bplaced.net/#id=162): CC BY
[Link_by_tux_peng.png](http://minetest.fensta.bplaced.net/#id=126): CC BY-NC-SA
[lisa_by_hansuke123.png](http://minetest.fensta.bplaced.net/#id=88): CC BY-SA
[Male_angel_by_loupicate.png](http://minetest.fensta.bplaced.net/#id=895): CC BY-SA
[Morgane_by_loupicate.png](http://minetest.fensta.bplaced.net/#id=864): CC BY-SA
[Naruto_by_LuxAtheris.png](http://minetest.fensta.bplaced.net/#id=136): CC BY-SA
[NERD_by_DJOZZY.png](http://minetest.fensta.bplaced.net/#id=): CC BY-SA
[Older_Man_Sam_by_philipbenr.png](http://minetest.fensta.bplaced.net/#id=21): CC BY-SA
[philipbenr_by_philipbenr.png](http://minetest.fensta.bplaced.net/#id=54): CC BY-SA
[skin_minecraft_repris_by_Sporax.png](http://minetest.fensta.bplaced.net/#id=856): CC BY-SA
[Space_Sam_by_philipbenr.png](http://minetest.fensta.bplaced.net/#id=37): CC BY-SA
[Summer_by_lizzie.png](http://minetest.fensta.bplaced.net/#id=): CC BY-NC-SA
[SuperSam_by_AMMOnym.png](http://minetest.fensta.bplaced.net/#id=): CC BY-SA
[villiantest_III_by_marshrover.png](http://minetest.fensta.bplaced.net/#id=): CC BY-SA
[War_Machine_by_Ferdi_Napoli.png](http://minetest.fensta.bplaced.net/#id=169): CC BY-NC-SA
[Witch_by_loupicate.png](http://minetest.fensta.bplaced.net/#id=884): CC BY-SA
[Zenohelds_by_sdzen.png](http://minetest.fensta.bplaced.net/#id=): CC BY-SA

View File

@ -1,88 +1,87 @@
local FORM_NAME = "wardrobe_wardrobeSkinForm"; local FORM_NAME = "wardrobe_wardrobeSkinForm";
local SKINS_PER_PAGE = 8;
local function showForm(player, page) local function showForm(player, page)
local playerName = player:get_player_name(); local playerName = player:get_player_name();
if not playerName or playerName == "" then return; end if not playerName or playerName == "" then return; end
local n = #wardrobe.skins; local n = #wardrobe.skins;
if n <= 0 then return; end if n <= 0 then return; end
local nPages = math.ceil(n/SKINS_PER_PAGE); local nPages = math.ceil(n/wardrobe.skins_per_page);
if not page or page > nPages then page = 1; end if not page or page > nPages then page = 1; end
local s = 1 + SKINS_PER_PAGE*(page-1); local s = 1 + wardrobe.skins_per_page*(page-1);
local e = math.min(s+SKINS_PER_PAGE-1, n); local e = math.min(s+wardrobe.skins_per_page-1, n);
local fs = "size[5,10]"; local fs = "size[5,10]";
fs = fs.."label[0,0;Change Into:]"; fs = fs.."label[0,0;Change Into:]";
for i = s, e do for i = s, e do
local slot = i-s+1; local slot = i-s+1;
local skin = wardrobe.skins[i]; local skin = wardrobe.skins[i];
local skinName = minetest.formspec_escape(wardrobe.skinNames[skin]); local skinName = core.formspec_escape(wardrobe.skinNames[skin]);
fs = fs.."button_exit[0,"..slot..";5,1;s:"..skin..";"..skinName.."]"; fs = fs.."button_exit[0,"..slot..";5,1;s:"..skin..";"..skinName.."]";
end end
fs = fs.."label[2,9;Page "..page.."/"..nPages.."]"; fs = fs.."label[2,9;Page "..page.."/"..nPages.."]";
if page > 1 then if page > 1 then
fs = fs.."button_exit[0,9;1,1;n:p"..(page-1)..";prev]"; fs = fs.."button_exit[0,9;1,1;n:p"..(page-1)..";prev]";
end end
if page < nPages then if page < nPages then
fs = fs.."button_exit[4,9;1,1;n:p"..(page+1)..";next]"; fs = fs.."button_exit[4,9;1,1;n:p"..(page+1)..";next]";
end end
minetest.show_formspec(playerName, FORM_NAME, fs); core.show_formspec(playerName, FORM_NAME, fs);
end end
minetest.register_on_player_receive_fields( core.register_on_player_receive_fields(
function(player, formName, fields) function(player, formName, fields)
if formName ~= FORM_NAME then return; end if formName ~= FORM_NAME then return; end
local playerName = player:get_player_name(); local playerName = player:get_player_name();
if not playerName or playerName == "" then return; end if not playerName or playerName == "" then return; end
for fieldName in pairs(fields) do for fieldName in pairs(fields) do
if #fieldName > 2 then if #fieldName > 2 then
local action = string.sub(fieldName, 1, 1); local action = string.sub(fieldName, 1, 1);
local value = string.sub(fieldName, 3); local value = string.sub(fieldName, 3);
if action == "n" then if action == "n" then
showForm(player, tonumber(string.sub(value, 2))); showForm(player, tonumber(string.sub(value, 2)));
return; return;
elseif action == "s" then elseif action == "s" then
wardrobe.changePlayerSkin(playerName, value); wardrobe.changePlayerSkin(playerName, value);
return; return;
end end
end end
end end
end); end);
minetest.register_node( core.register_node(
"wardrobe:wardrobe", "wardrobe:wardrobe",
{ {
description = "Wardrobe", description = "Wardrobe",
paramtype2 = "facedir", paramtype2 = "facedir",
tiles = { tiles = {
"wardrobe_wardrobe_topbottom.png", "wardrobe_wardrobe_topbottom.png",
"wardrobe_wardrobe_topbottom.png", "wardrobe_wardrobe_topbottom.png",
"wardrobe_wardrobe_sides.png", "wardrobe_wardrobe_sides.png",
"wardrobe_wardrobe_sides.png", "wardrobe_wardrobe_sides.png",
"wardrobe_wardrobe_sides.png", "wardrobe_wardrobe_sides.png",
"wardrobe_wardrobe_front.png" "wardrobe_wardrobe_front.png"
}, },
inventory_image = "wardrobe_wardrobe_front.png", inventory_image = "wardrobe_wardrobe_front.png",
sounds = default.node_sound_wood_defaults(), sounds = default.node_sound_wood_defaults(),
groups = { choppy = 3, oddly_breakable_by_hand = 2, flammable = 3 }, groups = { choppy = 3, oddly_breakable_by_hand = 2, flammable = 3 },
on_rightclick = function(pos, node, player, itemstack, pointedThing) on_rightclick = function(pos, node, player, itemstack, pointedThing)
showForm(player, 1); showForm(player, 1);
end end
}); });
minetest.register_craft( core.register_craft(
{ {
output = "wardrobe:wardrobe", output = "wardrobe:wardrobe",
recipe = { { "group:wood", "group:stick", "group:wood" }, recipe = { { "group:wood", "group:stick", "group:wood" },
{ "group:wood", "group:wool", "group:wood" }, { "group:wood", "group:wool", "group:wood" },
{ "group:wood", "group:wool", "group:wood" } } { "group:wood", "group:wool", "group:wood" } }
}); });

View File

@ -607,6 +607,14 @@ spawneggs.enable_node_spawn (Enable node spawn) bool true
trampoline.damage_absorb (Trampoline damage absorption) int 100 0 100 trampoline.damage_absorb (Trampoline damage absorption) int 100 0 100
[*wardrobe]
## Number of skins shown per page.
#
# default: 8
wardrobe.skins_per_page (Skins per page) int 8
[*whitelist] [*whitelist]
# Enables/Disables whitelist feature. # Enables/Disables whitelist feature.