diff --git a/naturalist-lite-addon/naturalist_lite_RP/manifest.json b/naturalist-lite-addon/naturalist_lite_RP/manifest.json index b79b7ca..cd342c7 100644 --- a/naturalist-lite-addon/naturalist_lite_RP/manifest.json +++ b/naturalist-lite-addon/naturalist_lite_RP/manifest.json @@ -4,14 +4,26 @@ "name": "Naturalist Lite Resources", "description": "Textures, models, and animations for Naturalist Lite mobs.", "uuid": "de1b016a-3cf3-4f75-8076-5a5508ab8b74", - "version": [1, 0, 2], - "min_engine_version": [1, 21, 0] + "version": [ + 1, + 0, + 3 + ], + "min_engine_version": [ + 1, + 21, + 0 + ] }, "modules": [ { "type": "resources", "uuid": "29da80f3-cffc-4c3b-997d-34f0820cc65b", - "version": [1, 0, 2] + "version": [ + 1, + 0, + 3 + ] } ] } diff --git a/naturalist-lite-addon/naturalist_lite_RP/textures/sf/nba/items/cooked_frog_leg.png b/naturalist-lite-addon/naturalist_lite_RP/textures/sf/nba/items/cooked_frog_leg.png new file mode 100644 index 0000000..0706df8 Binary files /dev/null and b/naturalist-lite-addon/naturalist_lite_RP/textures/sf/nba/items/cooked_frog_leg.png differ diff --git a/naturalist-lite-addon/naturalist_lite_RP/textures/sf/nba/items/frog_leg.png b/naturalist-lite-addon/naturalist_lite_RP/textures/sf/nba/items/frog_leg.png new file mode 100644 index 0000000..30cbd47 Binary files /dev/null and b/naturalist-lite-addon/naturalist_lite_RP/textures/sf/nba/items/frog_leg.png differ diff --git a/naturalist-lite-addon/naturalist_lite_RP/textures/sf/nba/items/snake_egg_block.png b/naturalist-lite-addon/naturalist_lite_RP/textures/sf/nba/items/snake_egg_block.png new file mode 100644 index 0000000..d3a0a64 Binary files /dev/null and b/naturalist-lite-addon/naturalist_lite_RP/textures/sf/nba/items/snake_egg_block.png differ diff --git a/scripts/build-textures.py b/scripts/build-textures.py index 37397b8..2be101d 100644 --- a/scripts/build-textures.py +++ b/scripts/build-textures.py @@ -534,6 +534,77 @@ def portal_frame(): return img +# ── Naturalist Lite: three items shipped without icons ───── +# frog_leg, cooked_frog_leg and snake_egg_block are declared in the BP and +# mapped in item_texture.json, but the PNGs were never present, so they +# rendered as missing-texture. Drawn to match the pack's existing style: +# small sprite on transparency, muted natural palette, single highlight. + +FROG_RAW = (176, 122, 128) +FROG_RAW_HI = (214, 164, 168) +FROG_RAW_SH = (126, 82, 92) +FROG_SKIN = (122, 148, 96) +FROG_COOK = (156, 104, 56) +FROG_COOK_HI = (198, 146, 88) +FROG_COOK_SH = (104, 64, 32) +BONE = (232, 226, 206) +BONE_SH = (176, 170, 152) + +EGG_SHELL = (222, 214, 196) +EGG_SHELL_HI = (244, 240, 228) +EGG_SHELL_SH = (170, 162, 144) +EGG_SPOT = (150, 138, 112) + +def _frog_leg(meat, hi, sh, skin=None): + """Drumstick: meat mass upper-left, bone stub lower-right.""" + img = Image.new("RGBA", (16, 16), (0, 0, 0, 0)) + # meat mass + rect(img, 4, 2, 10, 8, meat) + rect(img, 3, 3, 3, 7, meat) + rect(img, 11, 3, 11, 7, meat) + rect(img, 5, 1, 9, 1, meat) + rect(img, 5, 9, 9, 9, meat) + # shading + rect(img, 4, 8, 10, 9, sh) + rect(img, 11, 4, 11, 7, sh) + # highlight + rect(img, 5, 2, 7, 3, hi) + px(img, 5, 4, hi) + # raw frog keeps a green tinge along the top contour rather than a patch, + # so it reads as skin on the meat instead of a floating square + if skin: + for sx, sy in ((6, 1), (7, 1), (8, 1), (9, 2), (10, 3), (5, 2)): + px(img, sx, sy, skin) + px(img, 8, 2, (140, 166, 112)) + # bone stub running to lower-right + rect(img, 9, 10, 10, 11, BONE) + rect(img, 11, 12, 12, 13, BONE) + px(img, 12, 14, BONE) + px(img, 10, 11, BONE_SH) + px(img, 12, 13, BONE_SH) + px(img, 13, 14, BONE_SH) + return img + +def frog_leg(): return _frog_leg(FROG_RAW, FROG_RAW_HI, FROG_RAW_SH, FROG_SKIN) +def cooked_frog_leg(): return _frog_leg(FROG_COOK, FROG_COOK_HI, FROG_COOK_SH) + +def snake_egg_block(): + """A clutch of eggs, so it reads as the block form of the single egg item.""" + img = Image.new("RGBA", (16, 16), (0, 0, 0, 0)) + def egg(cx, cy, w, h): + rect(img, cx, cy, cx + w, cy + h, EGG_SHELL) + rect(img, cx, cy + h, cx + w, cy + h, EGG_SHELL_SH) + rect(img, cx + w, cy + 1, cx + w, cy + h, EGG_SHELL_SH) + px(img, cx + 1, cy + 1, EGG_SHELL_HI) + egg(2, 6, 4, 6) + egg(9, 5, 4, 6) + egg(5, 8, 4, 5) + # speckles + for sx, sy in ((3, 9), (11, 8), (6, 11), (4, 7), (12, 10)): + px(img, sx, sy, EGG_SPOT) + return img + + def main() -> None: save(smart_crafting_table(), "smart-crafting-addon/smart_crafting_RP/textures/blocks/smart_crafting_table.png") save(post_office_block(), "postal-service-addon/postal_service_RP/textures/blocks/post_office.png") @@ -546,6 +617,10 @@ def main() -> None: save(portal_mya(), "lobby-addon/lobby_transfer_RP/textures/blocks/portal_mya.png") save(redstone_link_tx(), "redstone-link-addon/redstone_link_RP/textures/blocks/redstone_link_tx.png") save(redstone_link_rx(), "redstone-link-addon/redstone_link_RP/textures/blocks/redstone_link_rx.png") + NAT = "naturalist-lite-addon/naturalist_lite_RP/textures/sf/nba/items/" + save(frog_leg(), NAT + "frog_leg.png") + save(cooked_frog_leg(), NAT + "cooked_frog_leg.png") + save(snake_egg_block(), NAT + "snake_egg_block.png") if __name__ == "__main__":