# Art and Visuals NeroAgriculture ships a cohesive **"hydroponics lab"** look: bright white/light-grey composite housing with a bio-green accent (keyed to the mod logo), soil and foliage organics for beds and crops, and the five essence tiers coloured from the material catalog. Every block, item and crop has a hand-tuned procedural texture — no vanilla placeholders remain. ## Texture pipeline All textures **and** their model/blockstate/item-model JSON are produced by a single deterministic generator, so the art and the models can never drift apart: - `tools/gen_textures.py` — 32×32 pixel-art painters in the shared Neroland family style (cf. `../nerotech/tools/gen_textures.py`): a lab-white composite base with a 2px bevel and corner rivets, recessed screens, green status LEDs, and a per-name deterministic seed so a re-run is byte-stable. - Run `python3 tools/gen_textures.py` to fill in any missing assets, or `--force` to repaint the whole set. The tool is **additive by default** and never clobbers an existing PNG without `--force`. - It writes `textures/block/*`, `textures/item/*`, `textures/gui/*` and the matching `models/block/*`, `models/item/*`, `blockstates/*` under `common/src/main/resources/assets/neroagriculture`. ## Essence tier colours The five essence tiers (Terran, Industrial, Orbital, Colonial, Deepvoid) are coloured straight from `catalog/BuiltinMaterials.java`: each tier's colour is the mean of its materials' catalog colours, so changing a catalog colour and re-running the generator repaints the tier's essence item, compacted block and grow bed to match. The current derived colours are: | Tier | Colour | Source materials (catalog) | | ---- | ------ | -------------------------- | | Terran | `#343434` | coal | | Industrial | `#AB897E` | copper, iron, gold, redstone, lapis, quartz, nero alloy | | Orbital | `#53D6B8` | diamond, emerald, plasma glass | | Colonial | `#DDEEFF` | nether star | | Deepvoid | `#6D7394` | echo shard, void crystal, starsteel | ## Crop growth Resource, engineered-food and alien crops each have **eight distinct growth sprites** (age 0–7) drawn as cross models, so growth reads at a glance: resource crops sprout crystalline nodes near maturity, food crops raise golden grain heads, and alien crops swell into glowing purple pods. The blockstate maps each `age` to its stage model. ## Machine GUI The four foundation machines (Essence Extractor, Essence Infuser, Seed Synthesizer, Seed Research Bench) share one container menu, and the screen renders a light lab hull entirely with fills (no GUI texture asset, matching NeroTech's screen recipe). It dispatches a **bespoke per-machine layout** from the synced machine kind — each gets its own accent colour, header rule and a small input → process → output diagram (extractor funnel, infuser rings, synthesizer capsule, research-bench magnifier). Slot wells are drawn from the live menu slot list, and the energy gauge, work-progress bar and blocked-state readout are shared. The Research Bench keeps its clickable "discover" action. ## Block models — layered, occlusion-safe Machines, grow beds and the pollination beacon use **multi-element models** (not flat cubes), in the same style as NeroTech/NeroSpace: a machine is a plinth + inset body + raised console + four corner posts; a grow bed is a plinth + four raised walls + a recessed soil tray; the beacon is a plinth + tapered column + glowing lens. These are regenerated by `tools/gen_models_layered.py` (textures are unchanged). Because they are not full cubes, the corresponding blocks are registered `noOcclusion` so they never cull neighbours as if solid. Essence blocks, greenhouse/tower frames and decor stay full `cube_all` blocks. Greenhouse glass is a dedicated `GreenhouseGlassBlock` that is `noOcclusion` and skips the shared faces between adjacent glass (like vanilla glass), fixing the "transparent model on a solid block" render artefact so a glazed wall reads as one clean surface. ## Demonstration farm `/neroagriculture gallery` builds a working farm: a 3×2 grid of tier grow beds, each powered (Creative Battery) and nutrient-filled, with a fully grown ore crop on top (Coal on Terran; Iron, Copper, Gold on Industrial; Diamond, Emerald on Orbital), flanked by a Planter and Harvester. Every crop is at max age, so **right-clicking a grown crop harvests its essence and leaves the crop planted** (age resets to 0). Higher-tier ores still need their Core progression gate open to harvest — intended behaviour. Note: a freshly placed crop block with no material variant (e.g. from the block-grid showcase) is not harvestable; plant a seed or use the farm. ## Regenerating art The generator is safe to re-run at any time. To add art for a new block or item, add a painter and a catalogue entry in `tools/gen_textures.py`, then run it; the coverage summary at the end reports the block/item/GUI texture counts. Keep this page and the generator in step when the visual language changes.