// SPDX-FileCopyrightText: 2024 Lizzy Fleckenstein // // SPDX-License-Identifier: AGPL-3.0-or-later #ifndef CONTENT_H #define CONTENT_H #include #include typedef enum { N_VALLEY_FLOWER, N_MOUNTAIN_FLOWER, N_BIG_TREE, N_NEEDLE_TREE, N_ROCK, N_WATER, N_PLANK, N_PATH, N_GRASS, N_SAND, } node_type; typedef struct { uint8_t r, g, b; } color; static inline uint32_t color_u32(color c) { return ((uint32_t) c.b) | (((uint32_t) c.g) << 8) | (((uint32_t) c.r) << 16); } static inline color u32_color(uint32_t u) { return (color) { (u >> 16) & 0xFF, (u >> 8) & 0xFF, u & 0xFF }; } typedef struct { bool present; node_type type; int8_t z; // for rocks, indicates rock level color col; } node; typedef enum { MOVE_UP = 0, MOVE_DOWN, MOVE_LEFT, MOVE_RIGHT, } move_dir; typedef uint8_t fail_reason; #define ser_fail_reason ser_u8 #define deser_fail_reason deser_u8 enum { FAIL_WRONG_PASS = 0, FAIL_ALREADY_ONLINE, }; typedef uint16_t pkt_type; #define ser_pkt_type ser_u16 #define deser_pkt_type deser_u16 enum { CPKT_HI = 0, // len motd CPKT_FAIL, // fail_reason CPKT_PLAYERS, // len [len name id] CPKT_MOVE, // player_id remove x y z CPKT_NODES, // z x y w h [node] }; enum { SPKT_HI = 0, // len name len password SPKT_MOVE, // move_dir }; #endif