1 #pragma once 2 #include <stdbool.h> 3 4 #include "audio.h" 5 #include "common.h" 6 #include "vswap.h" 7 8 #define CW_LEVELS 100 9 #pragma pack(push, 1) 10 typedef struct 11 { 12 uint16_t magic; 13 int32_t ptr[CW_LEVELS]; 14 } CWMapHead; 15 typedef struct 16 { 17 uint32_t offPlane0; 18 uint32_t offPlane1; 19 uint32_t offPlane2; 20 uint16_t lenPlane0; 21 uint16_t lenPlane1; 22 uint16_t lenPlane2; 23 uint16_t width; 24 uint16_t height; 25 char name[16]; 26 char signature[4]; 27 } CWLevelHead; 28 #pragma pack(pop) 29 30 #define NUM_PLANES 3 31 typedef struct 32 { 33 int len; 34 uint16_t *plane; 35 } CWPlane; 36 typedef struct 37 { 38 CWLevelHead header; 39 CWPlane planes[NUM_PLANES]; 40 } CWLevel; 41 42 typedef struct 43 { 44 CWMapHead mapHead; 45 CWLevel *levels; 46 int nLevels; 47 CWAudio audio; 48 CWVSwap vswap; 49 CWMapType type; 50 } CWolfMap; 51 52 bool CWIsMap(const char *path); 53 int CWLoad(CWolfMap *map, const char *path); 54 void CWFree(CWolfMap *map); 55 56 typedef enum 57 { 58 CWTILE_WALL, 59 CWTILE_DOOR_V, 60 CWTILE_DOOR_H, 61 CWTILE_DOOR_GOLD_V, 62 CWTILE_DOOR_GOLD_H, 63 CWTILE_DOOR_SILVER_V, 64 CWTILE_DOOR_SILVER_H, 65 CWTILE_ELEVATOR_V, 66 CWTILE_ELEVATOR_H, 67 CWTILE_SECRET_EXIT, 68 CWTILE_AREA, 69 CWTILE_UNKNOWN, 70 } CWTile; 71 72 typedef enum 73 { 74 CWENT_NONE, 75 CWENT_PLAYER_SPAWN_N, 76 CWENT_PLAYER_SPAWN_E, 77 CWENT_PLAYER_SPAWN_S, 78 CWENT_PLAYER_SPAWN_W, 79 CWENT_WATER, 80 CWENT_OIL_DRUM, 81 CWENT_TABLE_WITH_CHAIRS, 82 CWENT_FLOOR_LAMP, 83 CWENT_CHANDELIER, 84 CWENT_HANGING_SKELETON, 85 CWENT_DOG_FOOD, 86 CWENT_WHITE_COLUMN, 87 CWENT_GREEN_PLANT, 88 CWENT_SKELETON, 89 CWENT_SINK_SKULLS_ON_STICK, 90 CWENT_BROWN_PLANT, 91 CWENT_VASE, 92 CWENT_TABLE, 93 CWENT_CEILING_LIGHT_GREEN, 94 CWENT_UTENSILS_BROWN_CAGE_BLOODY_BONES, 95 CWENT_ARMOR, 96 CWENT_CAGE, 97 CWENT_CAGE_SKELETON, 98 CWENT_BONES1, 99 CWENT_KEY_GOLD, 100 CWENT_KEY_SILVER, 101 CWENT_BED_CAGE_SKULLS, 102 CWENT_BASKET, 103 CWENT_FOOD, 104 CWENT_MEDKIT, 105 CWENT_AMMO, 106 CWENT_MACHINE_GUN, 107 CWENT_CHAIN_GUN, 108 CWENT_CROSS, 109 CWENT_CHALICE, 110 CWENT_CHEST, 111 CWENT_CROWN, 112 CWENT_LIFE, 113 CWENT_BONES_BLOOD, 114 CWENT_BARREL, 115 CWENT_WELL_WATER, 116 CWENT_WELL, 117 CWENT_POOL_OF_BLOOD, 118 CWENT_FLAG, 119 CWENT_CEILING_LIGHT_RED_AARDWOLF, 120 CWENT_BONES2, 121 CWENT_BONES3, 122 CWENT_BONES4, 123 CWENT_UTENSILS_BLUE_COW_SKULL, 124 CWENT_STOVE_WELL_BLOOD, 125 CWENT_RACK_ANGEL_STATUE, 126 CWENT_VINES, 127 CWENT_BROWN_COLUMN, 128 CWENT_AMMO_BOX, 129 CWENT_TRUCK_REAR, 130 CWENT_SPEAR, 131 CWENT_PUSHWALL, 132 CWENT_ENDGAME, 133 CWENT_GHOST, 134 CWENT_ANGEL, 135 CWENT_DEAD_GUARD, 136 137 CWENT_GUARD_E, 138 CWENT_GUARD_N, 139 CWENT_GUARD_W, 140 CWENT_GUARD_S, 141 CWENT_OFFICER_E, 142 CWENT_OFFICER_N, 143 CWENT_OFFICER_W, 144 CWENT_OFFICER_S, 145 CWENT_SS_E, 146 CWENT_SS_N, 147 CWENT_SS_W, 148 CWENT_SS_S, 149 CWENT_DOG_E, 150 CWENT_DOG_N, 151 CWENT_DOG_W, 152 CWENT_DOG_S, 153 CWENT_MUTANT_E, 154 CWENT_MUTANT_N, 155 CWENT_MUTANT_W, 156 CWENT_MUTANT_S, 157 158 CWENT_TURN_E, 159 CWENT_TURN_NE, 160 CWENT_TURN_N, 161 CWENT_TURN_NW, 162 CWENT_TURN_W, 163 CWENT_TURN_SW, 164 CWENT_TURN_S, 165 CWENT_TURN_SE, 166 167 CWENT_TRANS, 168 CWENT_UBER_MUTANT, 169 CWENT_BARNACLE_WILHELM, 170 CWENT_ROBED_HITLER, 171 CWENT_DEATH_KNIGHT, 172 CWENT_HITLER, 173 CWENT_FETTGESICHT, 174 CWENT_SCHABBS, 175 CWENT_GRETEL, 176 CWENT_HANS, 177 CWENT_OTTO, 178 179 CWENT_PACMAN_GHOST_RED, 180 CWENT_PACMAN_GHOST_YELLOW, 181 CWENT_PACMAN_GHOST_ROSE, 182 CWENT_PACMAN_GHOST_BLUE, 183 184 CWENT_UNKNOWN, 185 } CWEntity; 186 187 typedef enum 188 { 189 CWWALL_GREY_BRICK_1, 190 CWWALL_GREY_BRICK_2, 191 CWWALL_GREY_BRICK_FLAG, 192 CWWALL_GREY_BRICK_HITLER, 193 CWWALL_CELL, 194 CWWALL_GREY_BRICK_EAGLE, 195 CWWALL_CELL_SKELETON, 196 CWWALL_BLUE_BRICK_1, 197 CWWALL_BLUE_BRICK_2, 198 CWWALL_WOOD_EAGLE, 199 CWWALL_WOOD_HITLER, 200 CWWALL_WOOD, 201 CWWALL_ENTRANCE, 202 CWWALL_STEEL_SIGN, 203 CWWALL_STEEL, 204 CWWALL_LANDSCAPE, 205 CWWALL_RED_BRICK, 206 CWWALL_RED_BRICK_SWASTIKA, 207 CWWALL_PURPLE, 208 CWWALL_RED_BRICK_FLAG, 209 CWWALL_ELEVATOR, 210 CWWALL_DEAD_ELEVATOR, 211 CWWALL_WOOD_IRON_CROSS, 212 CWWALL_DIRTY_BRICK_1, 213 CWWALL_PURPLE_BLOOD, 214 CWWALL_DIRTY_BRICK_2, 215 CWWALL_GREY_BRICK_3, 216 CWWALL_GREY_BRICK_SIGN, 217 CWWALL_BROWN_WEAVE, 218 CWWALL_BROWN_WEAVE_BLOOD_2, 219 CWWALL_BROWN_WEAVE_BLOOD_3, 220 CWWALL_BROWN_WEAVE_BLOOD_1, 221 CWWALL_STAINED_GLASS, 222 CWWALL_BLUE_WALL_SKULL, 223 CWWALL_GREY_WALL_1, 224 CWWALL_BLUE_WALL_SWASTIKA, 225 CWWALL_GREY_WALL_VENT, 226 CWWALL_MULTICOLOR_BRICK, 227 CWWALL_GREY_WALL_2, 228 CWWALL_BLUE_WALL, 229 CWWALL_BLUE_BRICK_SIGN, 230 CWWALL_BROWN_MARBLE_1, 231 CWWALL_GREY_WALL_MAP, 232 CWWALL_BROWN_STONE_1, 233 CWWALL_BROWN_STONE_2, 234 CWWALL_BROWN_MARBLE_2, 235 CWWALL_BROWN_MARBLE_FLAG, 236 CWWALL_WOOD_PANEL, 237 CWWALL_GREY_WALL_HITLER, 238 CWWALL_STONE_WALL_1, 239 CWWALL_STONE_WALL_2, 240 CWWALL_STONE_WALL_FLAG, 241 CWWALL_STONE_WALL_WREATH, 242 CWWALL_GREY_CONCRETE_LIGHT, 243 CWWALL_GREY_CONCRETE_DARK, 244 CWWALL_BLOOD_WALL, 245 CWWALL_CONCRETE, 246 CWWALL_RAMPART_STONE_1, 247 CWWALL_RAMPART_STONE_2, 248 CWWALL_ELEVATOR_WALL, 249 CWWALL_BROWN_CONCRETE, 250 CWWALL_PURPLE_BRICK, 251 CWWALL_UNKNOWN 252 } CWWall; 253 254 uint16_t CWLevelGetCh( 255 const CWLevel *level, const int planeIndex, const int x, const int y); 256 CWTile CWChToTile(const uint16_t ch); 257 CWWall CWChToWall(const uint16_t ch); 258 CWEntity CWChToEntity(const uint16_t ch); 259