Merge branch 'develop'
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -15,5 +15,6 @@ obj/
|
||||
*.app
|
||||
bin/
|
||||
|
||||
# Emacs backups
|
||||
# Assorted files
|
||||
*~
|
||||
Cyberpunk-Jam
|
||||
|
28
Makefile
28
Makefile
@@ -1,10 +1,9 @@
|
||||
CC = gcc
|
||||
SOURCES = src/main.c
|
||||
OBJECTS = obj/main.o
|
||||
OBJECTS = obj/main.o obj/game_state.o obj/in_game.o obj/main_menu.o obj/map.o obj/intro.o obj/game_over.o
|
||||
TARGET = bin/cyjam
|
||||
CFLAGS = -Wall -I./include
|
||||
CFLAGS = -Wall -I./include -std=c99
|
||||
LDFLAGS = -L./lib
|
||||
LDLIBS = -lm -lisland -lfov -lncurses
|
||||
LDLIBS = -lfov -lncursesw -lm
|
||||
|
||||
all: CFLAGS += -O3
|
||||
all: $(TARGET)
|
||||
@@ -15,9 +14,26 @@ debug: $(TARGET)
|
||||
$(TARGET): $(OBJECTS)
|
||||
$(CC) -o $(TARGET) $(OBJECTS) $(CLFAGS) $(LDFLAGS) $(LDLIBS)
|
||||
|
||||
obj/main.o: src/main.c
|
||||
obj/main.o: src/main.c include/constants.h include/game_state.h
|
||||
$(CC) -c -o $@ $< $(CFLAGS)
|
||||
|
||||
obj/game_state.o: src/game_state.c include/game_state.h include/in_game.h
|
||||
$(CC) -c -o $@ $< $(CFLAGS)
|
||||
|
||||
obj/in_game.o: src/in_game.c include/in_game.h include/game_state.h include/map.h
|
||||
$(CC) -c -o $@ $< $(CFLAGS)
|
||||
|
||||
obj/main_menu.o: src/main_menu.c include/main_menu.h include/game_state.h
|
||||
$(CC) -c -o $@ $< $(CFLAGS)
|
||||
|
||||
obj/intro.o: src/intro.c include/intro.h include/intro_img.h include/game_state.h
|
||||
$(CC) -c -o $@ $< $(CFLAGS)
|
||||
|
||||
obj/game_over.o: src/game_over.c include/game_over.h include/game_state.h
|
||||
$(CC) -c -o $@ $< $(CFLAGS)
|
||||
|
||||
obj/map.o: src/map.c include/map.h
|
||||
$(CC) -c -o $@ $< $(CFLAGS)
|
||||
|
||||
clean:
|
||||
$(RM) $(TARGET) $(OBJECTS)
|
||||
|
||||
|
410
editor/editor.py
Executable file
410
editor/editor.py
Executable file
@@ -0,0 +1,410 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# Copyright (c) 2014, Miguel Angel Astor Romero. All rights reserved.
|
||||
# See the file LICENSE for more details.
|
||||
|
||||
"""
|
||||
The map editor for TITLE PENDING, a game for the Cyberpunk Jam 2014.
|
||||
|
||||
Usage:
|
||||
*) Click on a game_map cell to set it's type.
|
||||
Use the keypad numbers to change the type of cell a cell will turn into
|
||||
when clicked. The active cell type is displayed on the title bar.
|
||||
|
||||
*) Left click to place an object on the game_map.
|
||||
Objects have to be edited by hand once the game_map has been saved. Use
|
||||
the keys 'd', 'k', 'p', 'n' and 'e' to set the active object type. The
|
||||
active object type is displayed on the title bar.
|
||||
|
||||
*) Press 'q' to set the player's starting position.
|
||||
|
||||
*) Press 's' to save the map to the text file 'map_file.map'. This will
|
||||
replace any previous map with the same name!
|
||||
|
||||
Press escape to quit.
|
||||
"""
|
||||
|
||||
import pygame
|
||||
|
||||
CELL_SIZE = 10
|
||||
MAP_SIZE = (64, 64)
|
||||
SCREEN_SIZE = ((MAP_SIZE[1] * CELL_SIZE) + 1, (MAP_SIZE[0] * CELL_SIZE) + 1)
|
||||
SCREEN_FLAGS = pygame.HWSURFACE | pygame.DOUBLEBUF
|
||||
TITLE = "CyJam :: "
|
||||
FPS = 60
|
||||
|
||||
# Cell types
|
||||
VOID = 0
|
||||
SOLID_WALL = 1
|
||||
SECRET_WALL = 2
|
||||
CLEAR_WALL = 3
|
||||
NEON_WALL = 4
|
||||
WINDOW_WALL = 5
|
||||
EMPTY_FLOOR = 6
|
||||
RUG = 7
|
||||
WATER = 8
|
||||
BAR = 9
|
||||
|
||||
# Object types
|
||||
DOOR = 0
|
||||
KEY = 1
|
||||
PERSON = 2
|
||||
PLAYER = 3
|
||||
EXIT = 4
|
||||
|
||||
def get_object_type_name(game_object):
|
||||
""" Return a string name for an object type. """
|
||||
name = ""
|
||||
if game_object == DOOR:
|
||||
name = "DOOR"
|
||||
elif game_object == KEY:
|
||||
name = "KEY"
|
||||
elif game_object == PERSON:
|
||||
name = "PERSON"
|
||||
elif game_object == PLAYER:
|
||||
name = "PLAYER"
|
||||
elif game_object == EXIT:
|
||||
name = "EXIT"
|
||||
elif game_object == None:
|
||||
name = "NONE"
|
||||
else:
|
||||
raise ValueError("Invalid object type.")
|
||||
|
||||
return name
|
||||
|
||||
def get_object_type_color(game_object):
|
||||
""" Return a string name for an object type. """
|
||||
color = (0, 0, 0)
|
||||
if game_object == DOOR:
|
||||
color = (255, 0, 255)
|
||||
elif game_object == KEY:
|
||||
color = (255, 255, 0)
|
||||
elif game_object == PERSON:
|
||||
color = (0, 255, 255)
|
||||
elif game_object == PLAYER:
|
||||
color = (128, 255, 0)
|
||||
elif game_object == EXIT:
|
||||
color = (255, 0, 255)
|
||||
else:
|
||||
raise ValueError("Invalid object type.")
|
||||
|
||||
return color
|
||||
|
||||
def get_floor_type_name(floor_type):
|
||||
""" Return a string name for a floor type. """
|
||||
name = ""
|
||||
|
||||
if floor_type == VOID:
|
||||
name = "VOID"
|
||||
elif floor_type == SOLID_WALL:
|
||||
name = "SOLID WALL"
|
||||
elif floor_type == SECRET_WALL:
|
||||
name = "SECRET WALL"
|
||||
elif floor_type == CLEAR_WALL:
|
||||
name = "CLEAR WALL"
|
||||
elif floor_type == NEON_WALL:
|
||||
name = "NEON WALL"
|
||||
elif floor_type == WINDOW_WALL:
|
||||
name = "WINDOW"
|
||||
elif floor_type == EMPTY_FLOOR:
|
||||
name = "EMPTY FLOOR"
|
||||
elif floor_type == RUG:
|
||||
name = "RUG"
|
||||
elif floor_type == WATER:
|
||||
name = "WATER"
|
||||
elif floor_type == BAR:
|
||||
name = "BAR"
|
||||
else:
|
||||
raise ValueError("Invalid floor type.")
|
||||
|
||||
return name
|
||||
|
||||
def get_floor_type_color(floor_type):
|
||||
""" Return a string name for a floor type. """
|
||||
color = (0, 0, 0)
|
||||
|
||||
if floor_type == VOID:
|
||||
color = (0, 0, 0)
|
||||
elif floor_type == SOLID_WALL:
|
||||
color = (255, 255, 255)
|
||||
elif floor_type == SECRET_WALL:
|
||||
color = (128, 128, 128)
|
||||
elif floor_type == CLEAR_WALL:
|
||||
color = (50, 50, 50)
|
||||
elif floor_type == NEON_WALL:
|
||||
color = (255, 0, 0)
|
||||
elif floor_type == WINDOW_WALL:
|
||||
color = (128, 128, 255)
|
||||
elif floor_type == EMPTY_FLOOR:
|
||||
color = (128, 128, 0)
|
||||
elif floor_type == RUG:
|
||||
color = (128, 0, 128)
|
||||
elif floor_type == WATER:
|
||||
color = (64, 64, 255)
|
||||
elif floor_type == BAR:
|
||||
color = (255, 255, 0)
|
||||
else:
|
||||
raise ValueError("Invalid floor type.")
|
||||
|
||||
return color
|
||||
|
||||
def save_map(game_map):
|
||||
p_id = 0
|
||||
dialogs = list()
|
||||
f = open("map_file.map", "w")
|
||||
|
||||
f.write("[MAP]\n")
|
||||
f.write(str(MAP_SIZE [0]) + " " + str(MAP_SIZE[1]) + "\n")
|
||||
for i in range(0, MAP_SIZE[0]):
|
||||
for j in range(0, MAP_SIZE[1]):
|
||||
f_t = game_map[i][j].get_type();
|
||||
f.write(str(f_t))
|
||||
f.write("\n")
|
||||
|
||||
f.write("[PLAYER]\n")
|
||||
f.write("%player = X Y\n")
|
||||
for i in range(0, MAP_SIZE[0]):
|
||||
for j in range(0, MAP_SIZE[1]):
|
||||
o_t = game_map[i][j].get_object();
|
||||
if o_t is not None and o_t == PLAYER:
|
||||
f.write("player = " + str(i) + " " + str(j) + "\n")
|
||||
|
||||
f.write("[EXITS]\n")
|
||||
f.write("%exit = X Y MAP_NAME MAP_X MAP_Y\n")
|
||||
for i in range(0, MAP_SIZE[0]):
|
||||
for j in range(0, MAP_SIZE[1]):
|
||||
o_t = game_map[i][j].get_object();
|
||||
if o_t is not None and o_t == EXIT:
|
||||
f.write("exit = " + str(i) + " " + str(j))
|
||||
f.write(" map_file.map 0 0\n")
|
||||
|
||||
f.write("[DOORS]\n")
|
||||
f.write("%door = X Y ID UNLOCKED\n")
|
||||
for i in range(0, MAP_SIZE[0]):
|
||||
for j in range(0, MAP_SIZE[1]):
|
||||
o_t = game_map[i][j].get_object();
|
||||
if o_t is not None and o_t == DOOR:
|
||||
f.write("door = " + str(i) + " " + str(j) + " 0" + " 0\n")
|
||||
|
||||
f.write("[KEYS]\n")
|
||||
f.write("%key = X Y ID\n")
|
||||
for i in range(0, MAP_SIZE[0]):
|
||||
for j in range(0, MAP_SIZE[1]):
|
||||
o_t = game_map[i][j].get_object();
|
||||
if o_t is not None and o_t == KEY:
|
||||
f.write("key = " + str(i) + " " + str(j) + " 0\n")
|
||||
|
||||
f.write("[PERSONS]\n")
|
||||
f.write("%person = X Y NAME DIALOG_ID\n")
|
||||
for i in range(0, MAP_SIZE[0]):
|
||||
for j in range(0, MAP_SIZE[1]):
|
||||
o_t = game_map[i][j].get_object();
|
||||
if o_t is not None and o_t == PERSON:
|
||||
f.write("person = " + str(i) + " " + str(j))
|
||||
f.write(" SOMEONE " + str(p_id) + "\n")
|
||||
dialogs.append(p_id)
|
||||
p_id += 1
|
||||
|
||||
f.write("[DIALOGS]\n")
|
||||
f.write("%dialog = ID TEXT\n")
|
||||
for id in dialogs:
|
||||
text = " Heavy boxes perform quick waltzes and jigs.\n"
|
||||
f.write("dialog = " + str(id) + text)
|
||||
|
||||
f.close()
|
||||
|
||||
class Cell:
|
||||
""" A game_map cell. """
|
||||
def __init__(self, x_size, y_size):
|
||||
""" Create a new cell. """
|
||||
self.x_size = x_size
|
||||
self.y_size = y_size
|
||||
|
||||
self.floor_type = VOID
|
||||
self.game_object = None
|
||||
|
||||
# Create the drawing rectangles.
|
||||
self.border = pygame.Rect((0, 0), (CELL_SIZE, CELL_SIZE))
|
||||
self.cell = pygame.Rect((0, 0), (CELL_SIZE - 2, CELL_SIZE - 2))
|
||||
|
||||
def set_type(self, floor_type):
|
||||
""" Set this cell floor type. Raises a value error if the type is
|
||||
not valid. """
|
||||
if floor_type < VOID or floor_type > BAR:
|
||||
raise ValueError("Floor type must be a number between 0 and 9.")
|
||||
else:
|
||||
self.floor_type = floor_type
|
||||
|
||||
def get_type(self):
|
||||
""" Returns this cell's type. """
|
||||
return self.floor_type
|
||||
|
||||
def set_object(self, game_object):
|
||||
""" Set this cells object. """
|
||||
if game_object is not None and game_object < DOOR or game_object > EXIT:
|
||||
raise ValueError("Object type must be a number between 0 and 2.")
|
||||
else:
|
||||
self.game_object = game_object
|
||||
|
||||
def get_object(self):
|
||||
""" Return this cell's object. """
|
||||
return self.game_object
|
||||
|
||||
def draw(self, canvas, x_pos, y_pos):
|
||||
""" Render this cell at the given position on the given screen. """
|
||||
self.border.center = (x_pos, y_pos)
|
||||
self.cell.center = (x_pos, y_pos)
|
||||
pygame.draw.rect(canvas, (0, 0, 255), self.border)
|
||||
|
||||
color = get_floor_type_color(self.floor_type)
|
||||
pygame.draw.rect(canvas, color, self.cell)
|
||||
|
||||
if self.game_object is not None and self.game_object < PLAYER:
|
||||
r = (CELL_SIZE - 2) // 2
|
||||
color = get_object_type_color(self.game_object)
|
||||
pygame.draw.circle(canvas, color, (x_pos, y_pos), r, 1)
|
||||
elif self.game_object is not None and self.game_object >= PLAYER:
|
||||
r = (CELL_SIZE - 3) // 2
|
||||
color = get_object_type_color(self.game_object)
|
||||
pygame.draw.circle(canvas, color, (x_pos, y_pos), r, 0)
|
||||
|
||||
def main():
|
||||
""" Application entry point. """
|
||||
# Local variables
|
||||
done = False
|
||||
game_map = list()
|
||||
curr_obj = None
|
||||
curr_fl = VOID
|
||||
obj_str = ""
|
||||
fl_str = ""
|
||||
mouse_pos = (0, 0)
|
||||
mouse_cell = (0, 0)
|
||||
mouse_r_click = False
|
||||
mouse_l_click = False
|
||||
|
||||
# Initialize Pygame.
|
||||
pygame.init()
|
||||
clock = pygame.time.Clock()
|
||||
screen = pygame.display.set_mode(SCREEN_SIZE, SCREEN_FLAGS)
|
||||
pygame.mouse.set_visible(True)
|
||||
|
||||
for i in range(0, MAP_SIZE[0]):
|
||||
game_map.append([Cell(10, 10) for j in range(0, MAP_SIZE[1])])
|
||||
|
||||
# Main game loop.
|
||||
while(not done):
|
||||
try:
|
||||
fps = clock.get_fps() + 0.001
|
||||
|
||||
# Set title bar.
|
||||
obj_str = get_object_type_name(curr_obj)
|
||||
fl_str = get_floor_type_name(curr_fl)
|
||||
title = TITLE + str(mouse_cell) + " :: FPS: " + str(int(fps))
|
||||
title += " :: " + obj_str + " :: " + fl_str
|
||||
pygame.display.set_caption(title)
|
||||
|
||||
# Input capture.
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
done = True
|
||||
|
||||
if event.type == pygame.MOUSEBUTTONDOWN:
|
||||
mouse_pos = event.pos
|
||||
if event.button == 1:
|
||||
mouse_r_click = True
|
||||
elif event.button == 3:
|
||||
mouse_l_click = True
|
||||
|
||||
if event.type == pygame.MOUSEMOTION:
|
||||
i = mouse_pos[1] // CELL_SIZE
|
||||
j = mouse_pos[0] // CELL_SIZE
|
||||
mouse_cell = (i, j)
|
||||
if mouse_r_click:
|
||||
mouse_pos = event.pos
|
||||
|
||||
if event.type == pygame.MOUSEBUTTONUP:
|
||||
mouse_pos = event.pos
|
||||
if event.button == 1:
|
||||
mouse_r_click = False
|
||||
elif event.button == 3:
|
||||
mouse_l_click = False
|
||||
|
||||
if event.type == pygame.KEYDOWN:
|
||||
if event.key == pygame.K_ESCAPE:
|
||||
done = True
|
||||
|
||||
if event.key == pygame.K_d:
|
||||
curr_obj = DOOR
|
||||
if event.key == pygame.K_k:
|
||||
curr_obj = KEY
|
||||
if event.key == pygame.K_p:
|
||||
curr_obj = PERSON
|
||||
if event.key == pygame.K_q:
|
||||
curr_obj = PLAYER
|
||||
if event.key == pygame.K_e:
|
||||
curr_obj = EXIT
|
||||
if event.key == pygame.K_n:
|
||||
curr_obj = None
|
||||
|
||||
if event.key == pygame.K_0:
|
||||
curr_fl = VOID
|
||||
if event.key == pygame.K_1:
|
||||
curr_fl = SOLID_WALL
|
||||
if event.key == pygame.K_2:
|
||||
curr_fl = SECRET_WALL
|
||||
if event.key == pygame.K_3:
|
||||
curr_fl = CLEAR_WALL
|
||||
if event.key == pygame.K_4:
|
||||
curr_fl = NEON_WALL
|
||||
if event.key == pygame.K_5:
|
||||
curr_fl = WINDOW_WALL
|
||||
if event.key == pygame.K_6:
|
||||
curr_fl = EMPTY_FLOOR
|
||||
if event.key == pygame.K_7:
|
||||
curr_fl = RUG
|
||||
if event.key == pygame.K_8:
|
||||
curr_fl = WATER
|
||||
if event.key == pygame.K_9:
|
||||
curr_fl = BAR
|
||||
|
||||
if event.key == pygame.K_s:
|
||||
save_map(game_map)
|
||||
|
||||
# Update cycle.
|
||||
if mouse_r_click:
|
||||
i = mouse_pos[1] // CELL_SIZE
|
||||
j = mouse_pos[0] // CELL_SIZE
|
||||
if i >= MAP_SIZE[0]:
|
||||
i = MAP_SIZE[0] - 1
|
||||
if j >= MAP_SIZE[1]:
|
||||
j = MAP_SIZE[1] - 1
|
||||
game_map[i][j].set_type(curr_fl)
|
||||
|
||||
if mouse_l_click:
|
||||
i = mouse_pos[1] // CELL_SIZE
|
||||
j = mouse_pos[0] // CELL_SIZE
|
||||
if i >= MAP_SIZE[0]:
|
||||
i = MAP_SIZE[0] - 1
|
||||
if j >= MAP_SIZE[1]:
|
||||
j = MAP_SIZE[1] - 1
|
||||
game_map[i][j].set_object(curr_obj)
|
||||
|
||||
# Render cycle.
|
||||
screen.fill((0, 0, 0))
|
||||
|
||||
for i in range(0, MAP_SIZE[0]):
|
||||
for j in range(0, MAP_SIZE[1]):
|
||||
x = (j * CELL_SIZE) + (CELL_SIZE // 2)
|
||||
y = (i * CELL_SIZE) + (CELL_SIZE // 2)
|
||||
game_map[i][j].draw(screen, x, y)
|
||||
|
||||
pygame.display.update()
|
||||
clock.tick(FPS)
|
||||
|
||||
except KeyboardInterrupt:
|
||||
done = True
|
||||
|
||||
pygame.quit()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
@@ -1,22 +1,32 @@
|
||||
#pragma once
|
||||
/**
|
||||
* Copyright (c) 2014, Miguel Angel Astor Romero. All rights reserved.
|
||||
* See the file LICENSE for more details.
|
||||
*/
|
||||
|
||||
#ifndef STATE_CONSTS_H
|
||||
#define STATE_CONSTS_H
|
||||
|
||||
static const int BAR_COLOR = 1;
|
||||
static const int BSC_COLOR = 2;
|
||||
static const int HLT_COLOR = 3;
|
||||
static const int OFF_COLOR = 4;
|
||||
static const int DIM_COLOR = 5;
|
||||
static const int LIT_COLOR = 6;
|
||||
static const int GUI_COLOR = 7;
|
||||
static const int EMP_COLOR = 8;
|
||||
static const int DEBUG = 0;
|
||||
#define F_SEP "/"
|
||||
|
||||
static const int INTRO_STATE = 0;
|
||||
static const int MENU_STATE = 1;
|
||||
static const int LOAD_STATE = 2;
|
||||
static const int SCORE_STATE = 3;
|
||||
static const int GAME_STATE = 4;
|
||||
|
||||
static const int QUIT_STATE = -1;
|
||||
enum COLORS {
|
||||
BAR_COLOR = 1,
|
||||
BSC_COLOR,
|
||||
HLT_COLOR,
|
||||
OFF_COLOR,
|
||||
DIM_COLOR,
|
||||
LIT_COLOR,
|
||||
GUI_COLOR,
|
||||
EMP_COLOR,
|
||||
DW_COLOR,
|
||||
SW_COLOR,
|
||||
SN_COLOR,
|
||||
GR_COLOR,
|
||||
FR_COLOR,
|
||||
HL_COLOR,
|
||||
MN_COLOR,
|
||||
VOID_COLOR,
|
||||
IND_COLOR
|
||||
};
|
||||
|
||||
#endif
|
||||
|
13
include/game_over.h
Normal file
13
include/game_over.h
Normal file
@@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Copyright (c) 2014, Miguel Angel Astor Romero. All rights reserved.
|
||||
* See the file LICENSE for more details.
|
||||
*/
|
||||
|
||||
#ifndef GAME_OVER_H
|
||||
#define GAME_OVER_H
|
||||
|
||||
#include "game_state.h"
|
||||
|
||||
void initGOState(gs_t *);
|
||||
|
||||
#endif
|
23
include/game_state.h
Normal file
23
include/game_state.h
Normal file
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
* Copyright (c) 2014, Miguel Angel Astor Romero. All rights reserved.
|
||||
* See the file LICENSE for more details.
|
||||
*/
|
||||
|
||||
#ifndef GAME_STATE_H
|
||||
#define GAME_STATE_H
|
||||
|
||||
static const int NUM_STATES = 4;
|
||||
|
||||
typedef enum GAME_STATE_NAMES { INTRO = 0, MENU = 1, IN_GAME = 2, GAME_OVER = 3 } gsname_t;
|
||||
|
||||
typedef struct GAME_STATE {
|
||||
gsname_t name;
|
||||
void (*input)();
|
||||
gsname_t (*update)();
|
||||
void (*render)(int, int);
|
||||
} gs_t;
|
||||
|
||||
extern void initStateArray(gs_t **);
|
||||
void clear_screen(int, int);
|
||||
|
||||
#endif
|
13
include/in_game.h
Normal file
13
include/in_game.h
Normal file
@@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Copyright (c) 2014, Miguel Angel Astor Romero. All rights reserved.
|
||||
* See the file LICENSE for more details.
|
||||
*/
|
||||
|
||||
#ifndef IN_GAME_H
|
||||
#define IN_GAME_H
|
||||
|
||||
#include "game_state.h"
|
||||
|
||||
extern void initInGameState(gs_t *);
|
||||
|
||||
#endif
|
13
include/intro.h
Normal file
13
include/intro.h
Normal file
@@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Copyright (c) 2014, Miguel Angel Astor Romero. All rights reserved.
|
||||
* See the file LICENSE for more details.
|
||||
*/
|
||||
|
||||
#ifndef INTRO_H
|
||||
#define INTRO_H
|
||||
|
||||
#include "game_state.h"
|
||||
|
||||
void initIntroState(gs_t *);
|
||||
|
||||
#endif
|
92
include/intro_img.h
Normal file
92
include/intro_img.h
Normal file
@@ -0,0 +1,92 @@
|
||||
/**
|
||||
* Copyright (c) 2014, Miguel Angel Astor Romero. All rights reserved.
|
||||
* See the file LICENSE for more details.
|
||||
*/
|
||||
|
||||
#ifndef INTRO_IMG_H
|
||||
#define INTRO_IMG_H
|
||||
|
||||
static int INTRO_IMG[80][80] = {
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, GR_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, DW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, DW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, DW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, SW_COLOR, DW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, DW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, DW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, DW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, DW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, DW_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, DW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, GR_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, SN_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, GR_COLOR, SN_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, SN_COLOR, SN_COLOR, SN_COLOR, SN_COLOR, SN_COLOR, SN_COLOR, GR_COLOR, SN_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, SN_COLOR, SN_COLOR, SN_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, GR_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, SN_COLOR, GR_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, SN_COLOR, SN_COLOR, SN_COLOR, SN_COLOR, SN_COLOR, SN_COLOR, GR_COLOR, GR_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SN_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SN_COLOR, DW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, DW_COLOR, SN_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, DW_COLOR, SN_COLOR, SN_COLOR, DW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, VOID_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SN_COLOR, DW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, DW_COLOR, SN_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, SW_COLOR, DW_COLOR, VOID_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, GR_COLOR, SN_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, GR_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, SN_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, DW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, VOID_COLOR, DW_COLOR, DW_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, GR_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, DW_COLOR, VOID_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, DW_COLOR, DW_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, DW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, GR_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, GR_COLOR, SW_COLOR, GR_COLOR, SW_COLOR, SW_COLOR, SW_COLOR, SN_COLOR, SW_COLOR, DW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, SW_COLOR, SW_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR},
|
||||
{VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR, VOID_COLOR}
|
||||
};
|
||||
|
||||
#endif
|
@@ -1,63 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2014, Miguel Angel Astor Romero. All rights reserved.
|
||||
* See the file LICENSE for more details.
|
||||
*/
|
||||
|
||||
#ifndef ISLAND_H
|
||||
#define ISLAND_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef enum TERRAIN_TYPE { DEEP_WATER,
|
||||
SHALLOW_WATER,
|
||||
SAND,
|
||||
GRASS,
|
||||
FOREST,
|
||||
HILL,
|
||||
MOUNTAIN
|
||||
} terrain_t;
|
||||
|
||||
/**
|
||||
* Generate a diamond-square fractal map.
|
||||
*/
|
||||
extern void ds ( float ***, const unsigned int );
|
||||
|
||||
/**
|
||||
* Generate a mask using particle deposition.
|
||||
*/
|
||||
extern void island ( int ***, unsigned int );
|
||||
|
||||
/**
|
||||
* Normalize a float matrix between 0 and 1.
|
||||
*/
|
||||
extern void norm ( float ***, unsigned int );
|
||||
|
||||
/**
|
||||
* Normalize an int matrix between 0 and 255.
|
||||
*/
|
||||
extern void normInt ( int ***, unsigned int );
|
||||
|
||||
/**
|
||||
* Perform a 3x3 average blur.
|
||||
*/
|
||||
extern void smooth ( int ***, unsigned int );
|
||||
|
||||
/**
|
||||
* Multiply the diamond square map with the island mask.
|
||||
* Both matrices must have been normalized before.
|
||||
*/
|
||||
extern void mult ( float ***, int ***, unsigned int );
|
||||
|
||||
/**
|
||||
* Given a sample from a heightmap, return the terrain
|
||||
* type that correspond it.
|
||||
*/
|
||||
terrain_t terrainType( int );
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
13
include/main_menu.h
Normal file
13
include/main_menu.h
Normal file
@@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Copyright (c) 2014, Miguel Angel Astor Romero. All rights reserved.
|
||||
* See the file LICENSE for more details.
|
||||
*/
|
||||
|
||||
#ifndef MAIN_MENU_H
|
||||
#define MAIN_MENU_H
|
||||
|
||||
#include "game_state.h"
|
||||
|
||||
extern void initMMState(gs_t *);
|
||||
|
||||
#endif
|
63
include/map.h
Normal file
63
include/map.h
Normal file
@@ -0,0 +1,63 @@
|
||||
/**
|
||||
* Copyright (c) 2014, Miguel Angel Astor Romero. All rights reserved.
|
||||
* See the file LICENSE for more details.
|
||||
*/
|
||||
|
||||
#ifndef MAP_H
|
||||
#define MAP_H
|
||||
|
||||
#define MAX_MAP_SIZE 64
|
||||
#define MAX_OBJECTS 512
|
||||
#define MAX_STR 128
|
||||
|
||||
typedef enum FLOOR_TYPES {
|
||||
VOID = 0,
|
||||
SOLID_WALL,
|
||||
SECRET_WALL,
|
||||
CLEAR_WALL,
|
||||
NEON_WALL,
|
||||
WINDOW_WALL,
|
||||
EMPTY_FLOOR,
|
||||
RUG,
|
||||
WATER,
|
||||
BAR
|
||||
} floor_t;
|
||||
|
||||
typedef enum OBJECT_TYPES {
|
||||
DOOR = 0,
|
||||
KEY,
|
||||
PERSON,
|
||||
PLAYER_START,
|
||||
EXIT,
|
||||
DIALOG,
|
||||
NONE = 9989
|
||||
} obj_t;
|
||||
|
||||
typedef enum ERROR_CODES {
|
||||
NO_ERROR = 0,
|
||||
FILE_NOT_FOUND,
|
||||
OUT_OF_MEMORY,
|
||||
PREMATURE_EOF,
|
||||
MAP_TOO_LARGE,
|
||||
INVALID_KEY
|
||||
} errcode_t;
|
||||
|
||||
typedef struct MAP_CELL{
|
||||
floor_t f;
|
||||
} map_cell_t;
|
||||
|
||||
typedef struct OBJECT {
|
||||
obj_t type;
|
||||
short x, y, eX, eY, sX, sY;
|
||||
short id;
|
||||
short dId;
|
||||
char name[MAX_STR];
|
||||
char target[MAX_STR];
|
||||
char dialog[MAX_STR];
|
||||
unsigned char unlocked;
|
||||
} game_obj_t;
|
||||
|
||||
extern errcode_t readMapData(const char *, map_cell_t ***, int *, int *);
|
||||
extern errcode_t readMapObjects(const char *, game_obj_t **, int *);
|
||||
|
||||
#endif
|
BIN
lib/libfov.a
BIN
lib/libfov.a
Binary file not shown.
BIN
lib/libisland.a
BIN
lib/libisland.a
Binary file not shown.
80
maps/aquarium.map
Normal file
80
maps/aquarium.map
Normal file
@@ -0,0 +1,80 @@
|
||||
[MAP]
|
||||
32 32
|
||||
00000000000000166100000000000000
|
||||
01155111551101166110111111111110
|
||||
01666666666111777711166666666610
|
||||
05666666666261777716266666666650
|
||||
05664444466111777711166444446650
|
||||
01664818466101777710166481846610
|
||||
01664888466111122111166488846610
|
||||
05664181466266666666266418146650
|
||||
05664181466111155111166418146650
|
||||
01664181466105777750166418146610
|
||||
01664888466105777750166488846610
|
||||
05664818466111177111166481846650
|
||||
05664444466266277266266444446650
|
||||
01666666666111177111166666666610
|
||||
01166666666111999911166666666110
|
||||
00116666666116666661166666661100
|
||||
00011666666666666666666666611000
|
||||
00001166666666666666666666110000
|
||||
00000155155116666661155155100000
|
||||
00000000000016666661000000000000
|
||||
00000000000011666611000000000000
|
||||
00000000000001666610000000000000
|
||||
00000000000001166110000000000000
|
||||
00000000000000166100000000000000
|
||||
11555111555111166111155511155511
|
||||
13333614464417766771446441699991
|
||||
18883614666417666671466641667791
|
||||
18883666666666666666666666697791
|
||||
18883666666666666666666666697791
|
||||
18883614666417666671466641697791
|
||||
13333614464417766771446441699991
|
||||
11555111555111166111155511155511
|
||||
[PLAYER]
|
||||
%player = X Y
|
||||
player = 30 16
|
||||
[EXITS]
|
||||
%exit = X Y MAP_NAME MAP_X MAP_Y
|
||||
exit = 0 15 END 0 0
|
||||
exit = 0 16 END 0 0
|
||||
[DOORS]
|
||||
%door = X Y ID UNLOCKED
|
||||
door = 1 15 1 0
|
||||
door = 1 16 1 0
|
||||
door = 24 15 0 1
|
||||
door = 24 16 0 1
|
||||
door = 27 6 0 1
|
||||
door = 27 12 0 1
|
||||
door = 27 19 0 1
|
||||
door = 27 25 0 1
|
||||
door = 28 6 0 1
|
||||
door = 28 12 0 1
|
||||
door = 28 19 0 1
|
||||
door = 28 25 0 1
|
||||
door = 31 15 2 0
|
||||
door = 31 16 2 0
|
||||
[KEYS]
|
||||
%key = X Y ID
|
||||
key = 3 12 1
|
||||
[PERSONS]
|
||||
%person = X Y NAME DIALOG_ID
|
||||
person = 3 19 Cyd 0
|
||||
person = 9 6 Godot 1
|
||||
person = 9 15 Juan 2
|
||||
person = 9 16 Salvo 3
|
||||
person = 15 5 Jade 4
|
||||
person = 15 26 Wilco 5
|
||||
person = 26 5 Mildagrad 6
|
||||
person = 28 28 Bartender 7
|
||||
[DIALOGS]
|
||||
%dialog = ID TEXT
|
||||
dialog = 0 Hello!
|
||||
dialog = 1 How did you get in here?!
|
||||
dialog = 2 Bonjour! I cannot give you the key. I misplaced it.
|
||||
dialog = 3 Bonjour.
|
||||
dialog = 4 I think there is someone in that aquarium over there.
|
||||
dialog = 5 I heard some noises coming from inside the wall!
|
||||
dialog = 6 This aquarium would be better with some fish in it!
|
||||
dialog = 7 Welcome to the bar. Would you like something to drink?
|
96
maps/maze.map
Normal file
96
maps/maze.map
Normal file
@@ -0,0 +1,96 @@
|
||||
[MAP]
|
||||
64 64
|
||||
1111111111111111111111111111111111111111111111111111111111111110
|
||||
1727172727272717272727172717172717272717271727172727271727272710
|
||||
1212121212121211121212121212121212111112111212121211111211111210
|
||||
1717172727172727271717172727271727271727172717171717271727172710
|
||||
1212111112121112111112121212121111121211111212111212121112111210
|
||||
1727271717172717271717272717172717272727272717272717172717271710
|
||||
1211121212111112111222111111111211121112111111111112111211111210
|
||||
1727172727172727172717272727172717271717272717172727172717272710
|
||||
1212121211121211121111111212121111121211121112121111111212111210
|
||||
1717172717271717271727171717272727272727171727271727171727171710
|
||||
1212111111121111121211121212121111121211121112121212121112121110
|
||||
1727272727271727271717272717171727171717271727171717272717272710
|
||||
1211111112111211111211121212121211121112111112111112111211121110
|
||||
1727271727172727272727171717171727271717272727271727172717271710
|
||||
1112111212111212111111121212121111111211111111111112111212111210
|
||||
1717172717271727171727271717172727171717171717171727172727272710
|
||||
1212121111121112121212121212121112121212121212121211111111121110
|
||||
1727171727272727271717272717171717271727272727272717272717271710
|
||||
1211121211121211121211111111121211121211121211121112111212111210
|
||||
1727271727171717172717171727272717272717271727172727172727271710
|
||||
1111111112111212121112121212121111111112121112121111111211111210
|
||||
1717272727172717171727272717171717171727171727171727272717172710
|
||||
1212121111121112121111121112111212121211121111121212111112121110
|
||||
1727171727171727271727271717172717272717272727271717272727171710
|
||||
1111121211121112111211111212121212121112111111121211121112121210
|
||||
1727271727172717272717272727171727171727172727271727171727272710
|
||||
1212121211111212111211121111111211121112111112111211121111111210
|
||||
1717172717272717271717271727171717271727271727272727172727271710
|
||||
1212121211111211121211121112121611111111121112121111111211121210
|
||||
1717171717271727271727171727276667172727171727171727272727171710
|
||||
1212111212121111111112121112111611121211121111121112111111121110
|
||||
1717271727172727172717271727172717171727172777171727172727272710
|
||||
1111111111121211121211111112111212121211111112121212121111111210
|
||||
1727172727171717271727272727271727271727272727271717171727272710
|
||||
1112111212121211121212111112111211111111111112111212121111121210
|
||||
1727271717271727271717171717172717172717272727272717172717271710
|
||||
1111121212121211111112121211121212121212111111111112111211121110
|
||||
1727172717172727171717271727272717271717172727172727272727271710
|
||||
1112112112111112121211121211111111121212121112111111121212111210
|
||||
1727172727172717272717271727171727271727171717272727171717272710
|
||||
1112121111121211111112111112121211121211121211121112111211111210
|
||||
1727271727271717172727171727272717272717171727172717271727172710
|
||||
1211111111111212121111121211121211111112121211111211121212121210
|
||||
1727272727272717271727171727171727271717272727271717171717171710
|
||||
1111111112111212111212121112111111121212111211121212121212121110
|
||||
1727272717171717172717271717272727172717171717171717271717272710
|
||||
1211111212121112121211111212111211111212121212121112111111121210
|
||||
1727271727172727271727271727171717271727171717172727271727271710
|
||||
1112111111121111111212111211121212121111121212111211121211111210
|
||||
1727172727271717271717171717271717172717172727172717271717172710
|
||||
1111121112111212121211121211121111121211111111111212111212121210
|
||||
1727171727172727171727272717272727171717272717171717271727271710
|
||||
1212111212111211121112111111111112121112111212121211121112121110
|
||||
1717271717271727171717172727272727172727171717272717172727272710
|
||||
1211121212121111121212111211111211111111121211121212121111111210
|
||||
1717171717172717271717272717271717272727271727272717271717272710
|
||||
1112121112111212111211121112121211111211121112121111111211121210
|
||||
1727272717271717272717171717171727271717272727171727272717271710
|
||||
1112111211111212111212111212121111121112121211111211111212111210
|
||||
1727171717272717272727272727171727172727171717172717171717172710
|
||||
1112121212111112111212111212121212121111121212121212121112121210
|
||||
1727172727272727172717172717172717271727271727271717272727271710
|
||||
1111111111111111111111111111111111111111111111111111111111111110
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
[PLAYER]
|
||||
%player = X Y
|
||||
player = 1 1
|
||||
[EXITS]
|
||||
%exit = X Y MAP_NAME MAP_X MAP_Y
|
||||
exit = 29 31 END 0 0
|
||||
[DOORS]
|
||||
%door = X Y ID UNLOCKED
|
||||
door = 28 31 1 0
|
||||
door = 29 30 2 0
|
||||
door = 29 32 3 0
|
||||
door = 30 31 4 0
|
||||
[KEYS]
|
||||
%key = X Y ID
|
||||
key = 17 37 4
|
||||
key = 31 43 3
|
||||
key = 53 23 2
|
||||
key = 57 57 1
|
||||
[PERSONS]
|
||||
%person = X Y NAME DIALOG_ID
|
||||
person = 1 3 Steven 0
|
||||
person = 1 61 Amethyst 1
|
||||
person = 61 1 Pearl 2
|
||||
person = 61 61 Garnet 3
|
||||
[DIALOGS]
|
||||
%dialog = ID TEXT
|
||||
dialog = 0 You need any of the four keys to exit this maze.
|
||||
dialog = 1 GET ME OUT OF HERE!
|
||||
dialog = 2 Now where is Steven? I told him this place was dangerous!
|
||||
dialog = 3 Each key works on one door only.
|
173
maps/start.map
Normal file
173
maps/start.map
Normal file
@@ -0,0 +1,173 @@
|
||||
[MAP]
|
||||
64 64
|
||||
0000000000000000000000000000017710000000000000000000000000000000
|
||||
0111111111111100000000000000117711000011111111111111111111111110
|
||||
0161626162616110000000000001137731100014441666666666666666666610
|
||||
0161616161626611000000000011837738110014771699999999999999999610
|
||||
0121112111112111100000000018837738810014776666666666666666669610
|
||||
0162616262626161110000000013337733310014991696999999999999999910
|
||||
0111212121211121610000000013337733310014991696666666666666666910
|
||||
0162616161616261610000000018837738810014776699999999999999996910
|
||||
0111211121212111611111111111837738110014771696666666666666696910
|
||||
0162616261626261626666666661137731100014441111111111111111116110
|
||||
0121112121211121611111111161626611000011111000166666666666666610
|
||||
0162626161626162610000000161616610000000000000166666666666666610
|
||||
0111111111111111111115511121116611111111111111166633333333336610
|
||||
0000040000004000001777777166666666661666666666666638888888836610
|
||||
4444444444444444441797777667777777766666666133166638888888836610
|
||||
0000040000004000005797777167777777761666666388366638888888836610
|
||||
0011111115111111105797777167777777761666666388366638888888836610
|
||||
0018166177716618101797777667777777766666666133166633333333336610
|
||||
0016166177716616101777777167777777761666666666666666666666666610
|
||||
0016161199911616101115511166666666661111111111166666666666666610
|
||||
0016666166616666100000000111116611111000000000111111111111111110
|
||||
0056666166616666500000440000016610000044000000000000000000000000
|
||||
0056666666666666500000440000016610000044000000000000000000000001
|
||||
0016666166616666100000440000016610000044000000000000000000000011
|
||||
0011111166611111100000440000016610000044000000000000000000000111
|
||||
0018177166616618104444444444036630444444444400000000000000000181
|
||||
0016177166616616104444444444036630444444444400000000000000000181
|
||||
0016161166611616100000440000016610000044000000000000000000100181
|
||||
0017777166616666100000440000016610000044000000000000000001100181
|
||||
0057777166616776504000440000016610000044000000000000000011100181
|
||||
0059977666666776504000440000016610000044000000000000000118100161
|
||||
0017977166616666104000000000116611000000000000000000000188100161
|
||||
0011111166611111104000000001166661100000000000000000000188100161
|
||||
0018166166616618104000000011667766110000000000000000100188100161
|
||||
0016166166616616100000000116677776611000000000000001100188100181
|
||||
0016161166611616104000001166777777661100000000000011100133100181
|
||||
0016666166616666104000001667777777766100000000000118100166100181
|
||||
0056666166616666504000011677777777776110000000000188100166100181
|
||||
0056666666666666504000116677777777776611000000000188100166100181
|
||||
0016666166616666104001166777777777777661100000100188100166100181
|
||||
0011111166111111100011667777777777777766110001100133100166100161
|
||||
0000000166100000000011677777777777777776110011100166100166100161
|
||||
0000000166100000000011677777777777777776110118100166100166100161
|
||||
0000000166101111110011677777777777777776110188100166100166100161
|
||||
0000000166101388310011667777777777777766110188100166100166100161
|
||||
0115151166101888810001166777777777777661100133100166100166100181
|
||||
0166666666101888811111226677777777776611000166100166100166100161
|
||||
0166666666101388826666611667777777766110000166100166100166100161
|
||||
0566111111101111111111111696777777696100000166100166100166100181
|
||||
0566100000000000000000001696777777696100000166100166100166100181
|
||||
0566111111111111111111111996777777699111111166111166111166111121
|
||||
0166666666666666666666666666777777666666666666666666666666662661
|
||||
0166666666666666666666666666666666666666666666666666666666662661
|
||||
0115511551111551155116611311661166113116611551155111155115511111
|
||||
0000000000000000000017777777741147777777710000000000000000000000
|
||||
0044444444444444444057777777741147777777750444444444444444440000
|
||||
0040004000400040004017799999741147999997710400040004000400040000
|
||||
0044444444444444444057777777741147777777750444444444444444440000
|
||||
0040004000400040004017799999741147999997710400040004000400040000
|
||||
0044444444444444444011777777711117777777110444444444444444440000
|
||||
0040004000400040004001177777110011777771100400040004000400040000
|
||||
0044444444444444444000111111100001111111000444444444444444440000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
[PLAYER]
|
||||
%player = X Y
|
||||
player = 26 30
|
||||
[EXITS]
|
||||
%exit = X Y MAP_NAME MAP_X MAP_Y
|
||||
exit = 2 30 maps/aquarium.map 0 0
|
||||
exit = 2 31 maps/aquarium.map 0 0
|
||||
exit = 11 28 maps/maze.map 0 0
|
||||
[DOORS]
|
||||
%door = X Y ID UNLOCKED
|
||||
door = 4 42 0 1
|
||||
door = 7 42 0 1
|
||||
door = 9 60 0 1
|
||||
door = 10 28 1 0
|
||||
door = 10 30 2 0
|
||||
door = 10 31 2 0
|
||||
door = 13 43 0 1
|
||||
door = 13 46 0 1
|
||||
door = 14 25 0 1
|
||||
door = 17 25 0 1
|
||||
door = 18 43 0 1
|
||||
door = 18 46 0 1
|
||||
door = 19 3 0 1
|
||||
door = 19 5 0 1
|
||||
door = 19 13 0 1
|
||||
door = 19 15 0 1
|
||||
door = 22 7 0 1
|
||||
door = 22 11 0 1
|
||||
door = 27 3 5 0
|
||||
door = 27 5 0 1
|
||||
door = 27 13 0 1
|
||||
door = 27 15 0 1
|
||||
door = 30 7 4 0
|
||||
door = 30 11 0 1
|
||||
door = 31 30 3 0
|
||||
door = 31 31 3 0
|
||||
door = 35 3 0 1
|
||||
door = 35 5 0 1
|
||||
door = 35 13 0 1
|
||||
door = 35 15 0 1
|
||||
door = 38 7 0 1
|
||||
door = 38 11 0 1
|
||||
[KEYS]
|
||||
%key = X Y ID
|
||||
key = 2 8 5
|
||||
key = 7 40 3
|
||||
key = 25 3 1
|
||||
key = 51 62 2
|
||||
key = 40 62 4
|
||||
[PERSONS]
|
||||
%person = X Y NAME DIALOG_ID
|
||||
person = 3 4 Stan 0
|
||||
person = 3 8 Dora 1
|
||||
person = 3 40 Bill 2
|
||||
person = 4 61 Jenny 3
|
||||
person = 5 14 Cilia 4
|
||||
person = 7 2 Herdier 5
|
||||
person = 8 31 Doorman 6
|
||||
person = 8 40 Soos 7
|
||||
person = 15 19 Barman 8
|
||||
person = 15 24 Haddock 9
|
||||
person = 16 39 Dipper 10
|
||||
person = 16 40 Mabel 11
|
||||
person = 17 12 Itan 12
|
||||
person = 17 22 Astro 13
|
||||
person = 19 61 Ittle 14
|
||||
person = 22 4 Malon 15
|
||||
person = 25 62 Error 16
|
||||
person = 30 15 Walter 17
|
||||
person = 34 6 Rosa 18
|
||||
person = 34 15 Calvin 19
|
||||
person = 39 3 Nate 20
|
||||
person = 40 27 Deckard 21
|
||||
person = 40 35 Lester 22
|
||||
person = 45 14 Misty 23
|
||||
person = 45 31 Hobbes 24
|
||||
person = 49 25 Juniper 25
|
||||
person = 49 36 Tipsie 26
|
||||
[DIALOGS]
|
||||
%dialog = ID TEXT
|
||||
dialog = 0 Finally, I have them all!
|
||||
dialog = 1 I wonder what this key is for.
|
||||
dialog = 2 I'll be watching you...
|
||||
dialog = 3 Hi, how you doin'?
|
||||
dialog = 4 Who designs buildings like this? I'm lost!
|
||||
dialog = 5 Woof!
|
||||
dialog = 6 Enjoyed your stay?
|
||||
dialog = 7 Now you can go to the apartment building.
|
||||
dialog = 8 Want a tip? Go to the very end of the largest hallway.
|
||||
dialog = 9 They serve the best drinks in here!
|
||||
dialog = 10 Have you seen our uncle?
|
||||
dialog = 11 Stan! Where are you?
|
||||
dialog = 12 ZZZZzzzzzz...
|
||||
dialog = 13 That man sure drinks a lot!
|
||||
dialog = 14 Keep an eye out for secret places!
|
||||
dialog = 15 What are you doing in my house?!
|
||||
dialog = 16 You never saw me here, OK?
|
||||
dialog = 17 Like the rug? It really ties the room together!
|
||||
dialog = 18 ZZZZzzzzzz...
|
||||
dialog = 19 Hey! Knock first!
|
||||
dialog = 20 Have you seen dog? It's name is Herdier and it ran away!
|
||||
dialog = 21 This is one fancy building, all right.
|
||||
dialog = 22 There seems to be an electrical storm coming this way.
|
||||
dialog = 23 I love swimming? Do you swim?
|
||||
dialog = 24 Why won't he hurry?! We are already late as it is!
|
||||
dialog = 25 May I help you?
|
||||
dialog = 26 May I help you?
|
61
maps/test.map
Normal file
61
maps/test.map
Normal file
@@ -0,0 +1,61 @@
|
||||
[MAP]
|
||||
32 32
|
||||
00000000000000000000000000000000
|
||||
00000000000044444440000000000000
|
||||
00000000000441111144000000000000
|
||||
00000000004411666114400000000000
|
||||
44444000044116777611440000000000
|
||||
41514400441167777761144000000000
|
||||
41771440411677737776114444444000
|
||||
41777144416777383777614115114000
|
||||
41997711116773888377611166614000
|
||||
41797726626738888837666666654000
|
||||
41997711116773888377611166614000
|
||||
41777144416777383777614115114000
|
||||
41771440411677737776114444444000
|
||||
41514400441167777761144000000000
|
||||
44444000044116777611440000000000
|
||||
00000000004411666114400000000000
|
||||
00000000000441161144000000000000
|
||||
00000000000044565440000000000000
|
||||
00000000000004161400000000000000
|
||||
00000000000004565400000000000000
|
||||
00000000444444161444444000000000
|
||||
00000000411551161155114000000000
|
||||
00000000416666666666614000000000
|
||||
00000000456666666666654000000000
|
||||
00000000456677777776654000000000
|
||||
00000000416677777776614000000000
|
||||
00000000416677777776614000000000
|
||||
00000000456677777776654000000000
|
||||
00000000456666666666654000000000
|
||||
00000000416666666666614000000000
|
||||
00000000411551151155114000000000
|
||||
00000000444444444444444000000000
|
||||
[PLAYER]
|
||||
%player = X Y
|
||||
player = 27 15
|
||||
[EXITS]
|
||||
%exit = X Y MAP_NAME MAP_X MAP_Y
|
||||
exit = 8 25 maps/start.map 0 0
|
||||
exit = 9 25 maps/start.map 0 0
|
||||
exit = 10 24 END 0 0
|
||||
exit = 10 25 maps/start.map 0 0
|
||||
[DOORS]
|
||||
%door = X Y ID UNLOCKED
|
||||
door = 9 22 0 0
|
||||
[KEYS]
|
||||
%key = X Y ID
|
||||
key = 7 2 0
|
||||
[PERSONS]
|
||||
%person = X Y NAME DIALOG_ID
|
||||
person = 8 24 Hugo 0
|
||||
person = 9 2 Paco 1
|
||||
person = 23 11 Luis 2
|
||||
person = 23 19 Donald 3
|
||||
[DIALOGS]
|
||||
%dialog = ID TEXT
|
||||
dialog = 0 Step into the elevator to retry.
|
||||
dialog = 1 I'm unreachable!
|
||||
dialog = 2 Welcome to Cyjam!
|
||||
dialog = 3 Have fun.
|
99
src/game_over.c
Normal file
99
src/game_over.c
Normal file
@@ -0,0 +1,99 @@
|
||||
/**
|
||||
* Copyright (c) 2014, Miguel Angel Astor Romero. All rights reserved.
|
||||
* See the file LICENSE for more details.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <ncursesw/ncurses.h>
|
||||
|
||||
#include "constants.h"
|
||||
#include "game_over.h"
|
||||
|
||||
static const char * title = "NOT SO ROGUE-LIKE";
|
||||
static const char * subtitle = "A game for the Cyberpunk Jam 2014";
|
||||
static const char * aWinnerIsYou = "You have completed the scenario!";
|
||||
static const char * thanks = "Thank you for playing.";
|
||||
static const char * goInfo = "Press enter to return to the main menu.";
|
||||
|
||||
static bool enter;
|
||||
|
||||
void goInput();
|
||||
gsname_t goUpdate();
|
||||
void goRender(int, int);
|
||||
|
||||
void initGOState(gs_t * gs){
|
||||
gs->name = GAME_OVER;
|
||||
gs->input = &goInput;
|
||||
gs->update = &goUpdate;
|
||||
gs->render = &goRender;
|
||||
}
|
||||
|
||||
void goInput(){
|
||||
int key = 0;
|
||||
|
||||
key = getch();
|
||||
|
||||
if(key != ERR){
|
||||
if(key == KEY_ENTER || key == '\n') enter = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
gsname_t goUpdate(){
|
||||
if(enter){
|
||||
enter = FALSE;
|
||||
return MENU;
|
||||
}
|
||||
|
||||
return GAME_OVER;
|
||||
}
|
||||
|
||||
void goRender(int w, int h){
|
||||
int sW;
|
||||
|
||||
clear_screen(w, h);
|
||||
|
||||
/* Print the title. */
|
||||
sW = strlen(title);
|
||||
sW /= 2;
|
||||
|
||||
attron(A_BOLD);
|
||||
|
||||
move(1, (w / 2) - sW);
|
||||
attron(COLOR_PAIR(SN_COLOR));
|
||||
printw(title);
|
||||
|
||||
/* Print the subtitle. */
|
||||
sW = strlen(subtitle);
|
||||
sW /= 2;
|
||||
|
||||
move(2, (w / 2) - sW);
|
||||
attron(COLOR_PAIR(SW_COLOR));
|
||||
printw(subtitle);
|
||||
|
||||
attroff(A_BOLD);
|
||||
|
||||
/* Print the game over message. */
|
||||
sW = strlen(aWinnerIsYou);
|
||||
sW /= 2;
|
||||
|
||||
move((h / 2) - 2, (w / 2) - sW);
|
||||
attron(COLOR_PAIR(GR_COLOR));
|
||||
printw(aWinnerIsYou);
|
||||
|
||||
sW = strlen(thanks);
|
||||
sW /= 2;
|
||||
|
||||
move((h / 2) - 1, (w / 2) - sW);
|
||||
attron(COLOR_PAIR(GR_COLOR));
|
||||
printw(thanks);
|
||||
|
||||
/* Print help. */
|
||||
sW = strlen(goInfo);
|
||||
sW /= 2;
|
||||
|
||||
move(h - 5, (w / 2) - sW);
|
||||
attron(COLOR_PAIR(MN_COLOR));
|
||||
printw(goInfo);
|
||||
}
|
||||
|
32
src/game_state.c
Normal file
32
src/game_state.c
Normal file
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
* Copyright (c) 2014, Miguel Angel Astor Romero. All rights reserved.
|
||||
* See the file LICENSE for more details.
|
||||
*/
|
||||
|
||||
#include <ncursesw/ncurses.h>
|
||||
|
||||
#include "constants.h"
|
||||
#include "game_state.h"
|
||||
#include "intro.h"
|
||||
#include "main_menu.h"
|
||||
#include "in_game.h"
|
||||
#include "game_over.h"
|
||||
|
||||
void initStateArray(gs_t ** s){
|
||||
initIntroState(&((*s)[INTRO]));
|
||||
initMMState(&((*s)[MENU]));
|
||||
initInGameState(&((*s)[IN_GAME]));
|
||||
initGOState(&((*s)[GAME_OVER]));
|
||||
}
|
||||
|
||||
void clear_screen(int w, int h){
|
||||
int i, j;
|
||||
move(0,0);
|
||||
attron(COLOR_PAIR(BSC_COLOR));
|
||||
for(i = 0; i < w; i++){
|
||||
for(j = 0; j < h; j++){
|
||||
move(j, i);
|
||||
printw(" ");
|
||||
}
|
||||
}
|
||||
}
|
649
src/in_game.c
Normal file
649
src/in_game.c
Normal file
@@ -0,0 +1,649 @@
|
||||
/**
|
||||
* Copyright (c) 2014, Miguel Angel Astor Romero. All rights reserved.
|
||||
* See the file LICENSE for more details.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
#include <ncursesw/ncurses.h>
|
||||
#include <fov.h>
|
||||
|
||||
#include "constants.h"
|
||||
#include "in_game.h"
|
||||
#include "map.h"
|
||||
|
||||
#define MAX_KEYS 15
|
||||
|
||||
static const char *keyMsg = "You picked up a key.";
|
||||
static const char *saysMsg = " says: ";
|
||||
static const char *openDoor = "The door opens.";
|
||||
static const char *doorLock = "This door is locked.";
|
||||
|
||||
typedef struct PLAYER {
|
||||
unsigned short x;
|
||||
unsigned short y;
|
||||
} player_t;
|
||||
|
||||
static bool ** vis;
|
||||
static bool ** seen;
|
||||
static bool ** wmap;
|
||||
static bool w_mov = FALSE;
|
||||
static bool uK, dK, lK, rK, esc;
|
||||
static clock_t then, msgThen;
|
||||
static player_t player;
|
||||
static map_cell_t ** map;
|
||||
static game_obj_t objs[MAX_OBJECTS];
|
||||
static int mW, mH, nO;
|
||||
static fov_settings_type fov_settings;
|
||||
static int keys[MAX_KEYS];
|
||||
static int freeKey;
|
||||
static char msg[128];
|
||||
static bool newMsg = FALSE;
|
||||
|
||||
void input();
|
||||
gsname_t update();
|
||||
void render(int, int);
|
||||
void drawGui(int, int);
|
||||
void setPlayerStart();
|
||||
void initObjects();
|
||||
void initKeys();
|
||||
void drawNeon(int, int, floor_t);
|
||||
void apply(void *, int, int, int, int, void *);
|
||||
bool opaque(void *, int, int);
|
||||
void loadMap(const char *);
|
||||
bool canMoveTo(int, int);
|
||||
|
||||
void initInGameState( gs_t * gs) {
|
||||
int i, j;
|
||||
|
||||
uK = dK = lK = rK = esc = FALSE;
|
||||
|
||||
gs->name = IN_GAME;
|
||||
gs->input = &input;
|
||||
gs->update = &update;
|
||||
gs->render = &render;
|
||||
|
||||
map = ( map_cell_t ** ) malloc ( sizeof ( map_cell_t * ) * MAX_MAP_SIZE);
|
||||
for ( i = 0; i < MAX_MAP_SIZE; ++i ) {
|
||||
map[ i ] = ( map_cell_t * ) calloc ( MAX_MAP_SIZE , sizeof ( map_cell_t ) );
|
||||
}
|
||||
|
||||
wmap = ( bool ** ) malloc ( sizeof ( bool * ) * MAX_MAP_SIZE);
|
||||
for ( i = 0; i < MAX_MAP_SIZE; ++i ) {
|
||||
wmap[ i ] = ( bool * ) calloc ( MAX_MAP_SIZE, sizeof ( bool ) );
|
||||
for(j = 0; j < MAX_MAP_SIZE; ++j){
|
||||
wmap[i][j] = rand() % 2;
|
||||
}
|
||||
}
|
||||
|
||||
vis = ( bool ** ) malloc ( sizeof ( bool * ) * MAX_MAP_SIZE);
|
||||
seen = ( bool ** ) malloc ( sizeof ( bool * ) * MAX_MAP_SIZE);
|
||||
for ( i = 0; i < MAX_MAP_SIZE; ++i ) {
|
||||
vis[ i ] = ( bool * ) calloc ( MAX_MAP_SIZE, sizeof ( bool ) );
|
||||
seen[ i ] = ( bool * ) calloc ( MAX_MAP_SIZE, sizeof ( bool ) );
|
||||
for(j = 0; j < MAX_MAP_SIZE; ++j){
|
||||
vis[i][j] = TRUE;
|
||||
seen[i][j] = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
initObjects();
|
||||
loadMap("maps/start.map");
|
||||
|
||||
fov_settings_init(&fov_settings);
|
||||
fov_settings_set_opacity_test_function(&fov_settings, opaque);
|
||||
fov_settings_set_apply_lighting_function(&fov_settings, apply);
|
||||
}
|
||||
|
||||
void input(){
|
||||
int key = 0;
|
||||
|
||||
key = getch();
|
||||
|
||||
if(key != ERR){
|
||||
if(key == KEY_UP) uK = TRUE;
|
||||
if(key == KEY_DOWN) dK = TRUE;
|
||||
if(key == KEY_LEFT) lK = TRUE;
|
||||
if(key == KEY_RIGHT) rK = TRUE;
|
||||
if(key == 27) esc = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
gsname_t update(){
|
||||
clock_t msgNow, delta;
|
||||
int i, j, k, d, iX, iY, nX, nY;
|
||||
|
||||
iX = player.x;
|
||||
iY = player.y;
|
||||
nX = iX;
|
||||
nY = iY;
|
||||
|
||||
if(uK) nY = iY - 1 < 0 ? mH - 1 : iY - 1;
|
||||
|
||||
if(dK) nY = (iY + 1) % mH;
|
||||
|
||||
if(lK) nX = iX - 1 < 0 ? mW - 1 : iX - 1;
|
||||
|
||||
if(rK) nX = (iX + 1) % mW;
|
||||
|
||||
if(esc){
|
||||
/* Reset the game and go to the main menu. */
|
||||
esc = FALSE;
|
||||
initObjects();
|
||||
loadMap("maps/start.map");
|
||||
return MENU;
|
||||
}
|
||||
|
||||
/* Find if the player is standing on an exit, then load the next map. */
|
||||
for(i = 0; i < nO; i++){
|
||||
if(objs[i].type == EXIT){
|
||||
if(objs[i].x == iY && objs[i].y == iX){
|
||||
player.x = objs[i].eX;
|
||||
player.y = objs[i].eY;
|
||||
if(strcmp(objs[i].target, "END") != 0){
|
||||
loadMap(objs[i].target);
|
||||
return IN_GAME;
|
||||
}else{
|
||||
initObjects();
|
||||
loadMap("maps/start.map");
|
||||
return GAME_OVER;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* If the player is standing on a key, pick it up. */
|
||||
for(i = 0; i < nO; i++){
|
||||
if(objs[i].type == KEY){
|
||||
if(objs[i].x == iY && objs[i].y == iX){
|
||||
keys[freeKey] = objs[i].id;
|
||||
objs[i].type = NONE;
|
||||
for(j = 0; j < 128; j++){
|
||||
msg[j] = '\0';
|
||||
}
|
||||
for(j = 0; keyMsg[j] && j < 128; j++){
|
||||
msg[j] = keyMsg[j];
|
||||
}
|
||||
newMsg = TRUE;
|
||||
msgThen = clock();
|
||||
freeKey++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* If the player bumps into a person, listen to what they have to say. */
|
||||
for(i = 0; i < nO; i++){
|
||||
if(objs[i].type == PERSON){
|
||||
if(objs[i].x == nY && objs[i].y == nX){
|
||||
for(k = 0; k < nO; k++)
|
||||
if(objs[k].type == DIALOG && objs[k].id == objs[i].dId) break;
|
||||
|
||||
for(j = 0; j < 128; j++){
|
||||
msg[j] = '\0';
|
||||
}
|
||||
|
||||
for(j = 0; objs[i].name[j] && j < 128; j++)
|
||||
msg[j] = objs[i].name[j];
|
||||
|
||||
for(d = 0; saysMsg[d] && j < 128; j++, d++)
|
||||
msg[j] = saysMsg[d];
|
||||
|
||||
for(d = 0; objs[k].dialog[d] && j < 128; j++, d++)
|
||||
msg[j] = objs[k].dialog[d];
|
||||
|
||||
newMsg = TRUE;
|
||||
msgThen = clock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* If the player bumps into a door, open it if the key is available. */
|
||||
for(i = 0; i < nO; i++){
|
||||
if(objs[i].type == DOOR){
|
||||
if(objs[i].x == nY && objs[i].y == nX){
|
||||
if(!objs[i].unlocked){
|
||||
for(j = 0; j < MAX_KEYS; j++){
|
||||
if(keys[j] == objs[i].id){
|
||||
objs[i].unlocked = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for(j = 0; j < 128; j++){
|
||||
msg[j] = '\0';
|
||||
}
|
||||
|
||||
if(objs[i].unlocked){
|
||||
for(j = 0; openDoor[j] && j < 128; j++){
|
||||
msg[j] = openDoor[j];
|
||||
}
|
||||
}else{
|
||||
for(j = 0; doorLock[j] && j < 128; j++){
|
||||
msg[j] = doorLock[j];
|
||||
}
|
||||
}
|
||||
|
||||
newMsg = TRUE;
|
||||
msgThen = clock();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Clear the message buffer after a timeout. */
|
||||
if(newMsg){
|
||||
msgNow = clock();
|
||||
delta = msgNow - msgThen;
|
||||
if((int)delta / (int)CLOCKS_PER_SEC >= 4){
|
||||
msgThen = msgNow;
|
||||
for(j = 0; j < 128; j++){
|
||||
msg[j] = '\0';
|
||||
}
|
||||
newMsg = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* Move the player. */
|
||||
if(uK){
|
||||
iY = iY - 1 < 0 ? mH - 1 : iY - 1;
|
||||
if(canMoveTo(iY, iX)) player.y = iY;
|
||||
uK = FALSE;
|
||||
}
|
||||
|
||||
if(dK){
|
||||
iY = (iY + 1) % mH;
|
||||
if(canMoveTo(iY, iX)) player.y = iY;
|
||||
dK = FALSE;
|
||||
}
|
||||
|
||||
if(lK){
|
||||
iX = iX - 1 < 0 ? mW - 1 : iX - 1;
|
||||
if(canMoveTo(iY, iX)) player.x = iX;
|
||||
lK = FALSE;
|
||||
}
|
||||
|
||||
if(rK){
|
||||
iX = (iX + 1) % mW;
|
||||
if(canMoveTo(iY, iX)) player.x = iX;
|
||||
rK = FALSE;
|
||||
}
|
||||
|
||||
return IN_GAME;
|
||||
}
|
||||
|
||||
void render(int w, int h){
|
||||
clock_t now, delta;
|
||||
int i, j, k, pi, pj, ioff, joff, di, dj;
|
||||
|
||||
now = clock();
|
||||
delta = now - then;
|
||||
if((float)delta / (float)CLOCKS_PER_SEC >= 0.25f){
|
||||
then = now;
|
||||
w_mov = TRUE;
|
||||
}
|
||||
|
||||
pi = (((w - 2) - 1) / 2) + 1;
|
||||
pj = (h - 3) / 2 + 1;
|
||||
|
||||
ioff = (w - 28 - 27) / 2;
|
||||
joff = (h - 3) / 2;
|
||||
|
||||
fov_circle(&fov_settings, &map, NULL, player.x, player.y, (MAX_MAP_SIZE / 2) - 1);
|
||||
|
||||
for(i = 1; i < w - 1; i++){
|
||||
for(j = 1; j < h - 3; j++){
|
||||
move(j, i);
|
||||
|
||||
di = i - 27 + player.x - ioff;
|
||||
dj = j - 1 + player.y - joff;
|
||||
|
||||
if( di < 0 || di >= mW || dj < 0 || dj >= mH ){
|
||||
printw(" ");
|
||||
}else{
|
||||
if(vis[dj][di] || seen[dj][di]){
|
||||
switch(map[dj][di].f){
|
||||
case WATER:
|
||||
attron(COLOR_PAIR(DW_COLOR));
|
||||
if(w_mov)
|
||||
wmap[dj][di] = !wmap[dj][di];
|
||||
if(wmap[dj][di])
|
||||
printw("\u2248");
|
||||
else
|
||||
printw("~");
|
||||
break;
|
||||
|
||||
case VOID:
|
||||
if(!vis[dj][di]) attron(COLOR_PAIR(DW_COLOR));
|
||||
else attron(COLOR_PAIR(MN_COLOR));
|
||||
printw(" ");
|
||||
break;
|
||||
|
||||
case EMPTY_FLOOR:
|
||||
if(!vis[dj][di]) attron(COLOR_PAIR(DW_COLOR));
|
||||
else attron(COLOR_PAIR(MN_COLOR));
|
||||
printw(" ");
|
||||
break;
|
||||
|
||||
case RUG:
|
||||
if(!vis[dj][di]) attron(COLOR_PAIR(DW_COLOR));
|
||||
else attron(COLOR_PAIR(SN_COLOR));
|
||||
printw("\u2592");
|
||||
break;
|
||||
|
||||
case WINDOW_WALL:
|
||||
if(!vis[dj][di]) attron(COLOR_PAIR(DW_COLOR));
|
||||
else attron(COLOR_PAIR(SW_COLOR));
|
||||
printw("\u2591");
|
||||
break;
|
||||
|
||||
case CLEAR_WALL:
|
||||
if(!vis[dj][di]) attron(COLOR_PAIR(DW_COLOR));
|
||||
else attron(COLOR_PAIR(SW_COLOR));
|
||||
printw("\u2588");
|
||||
break;
|
||||
|
||||
case SECRET_WALL:
|
||||
case SOLID_WALL:
|
||||
if(!vis[dj][di]) attron(COLOR_PAIR(DW_COLOR));
|
||||
else attron(COLOR_PAIR(MN_COLOR));
|
||||
printw("\u2588");
|
||||
break;
|
||||
|
||||
case NEON_WALL:
|
||||
drawNeon(dj, di, NEON_WALL);
|
||||
break;
|
||||
|
||||
case BAR:
|
||||
drawNeon(dj, di, BAR);
|
||||
break;
|
||||
}
|
||||
|
||||
move(j, i);
|
||||
for(k = 0; k < nO; k++){
|
||||
if(objs[k].x == dj && objs[k].y == di){
|
||||
if(!vis[dj][di]) attron(COLOR_PAIR(DW_COLOR));
|
||||
else attron(COLOR_PAIR(MN_COLOR));
|
||||
|
||||
if(objs[k].type == DOOR){
|
||||
printw("\u25D9");
|
||||
}else{
|
||||
if(vis[dj][di]){
|
||||
if(objs[k].type == KEY){
|
||||
printw("k");
|
||||
}else if(objs[k].type == PERSON){
|
||||
printw("\u263A");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}else{
|
||||
attron(COLOR_PAIR(MN_COLOR));
|
||||
printw(" ");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
w_mov = FALSE;
|
||||
|
||||
move(pj, pi);
|
||||
attron(COLOR_PAIR(BSC_COLOR));
|
||||
printw(/*"\u263A"*/ "@");
|
||||
|
||||
drawGui(w, h);
|
||||
|
||||
for ( i = 0; i < MAX_MAP_SIZE; ++i ) {
|
||||
for(j = 0; j < MAX_MAP_SIZE; ++j){
|
||||
vis[i][j] = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void drawNeon(int i, int j, floor_t floor){
|
||||
int r;
|
||||
bool n, s, e, w;
|
||||
|
||||
if(floor == NEON_WALL){
|
||||
if(!vis[i][j]) attron(COLOR_PAIR(DW_COLOR));
|
||||
else{
|
||||
r = rand() % 1000;
|
||||
if(r < 998)
|
||||
attron(COLOR_PAIR(FR_COLOR));
|
||||
else
|
||||
attron(COLOR_PAIR(MN_COLOR));
|
||||
}
|
||||
}else if(floor == BAR){
|
||||
if(!vis[i][j]) attron(COLOR_PAIR(DW_COLOR));
|
||||
else attron(COLOR_PAIR(SN_COLOR));
|
||||
}
|
||||
|
||||
w = map[i ][j - 1 < 0 ? mH - 1 : j - 1].f == floor;
|
||||
e = map[i ][(j + 1) % mH ].f == floor;
|
||||
s = map[i - 1 < 0 ? mW - 1 : i - 1][j ].f == floor;
|
||||
n = map[(i + 1) % mW ][j ].f == floor;
|
||||
|
||||
if((n && s && e) && (!w)){
|
||||
printw("\u2560");
|
||||
return;
|
||||
}
|
||||
|
||||
if((n && s && w) && (!e)){
|
||||
printw("\u2563");
|
||||
return;
|
||||
}
|
||||
|
||||
if((n || s) && (!e && !w)){
|
||||
printw("\u2551");
|
||||
return;
|
||||
}
|
||||
|
||||
if((e || w) && (!n && !s)){
|
||||
printw("\u2550");
|
||||
return;
|
||||
}
|
||||
|
||||
if((e && n) && (!s && !w)){
|
||||
printw("\u2554");
|
||||
return;
|
||||
}
|
||||
|
||||
if((w && n) && (!s && !e)){
|
||||
printw("\u2557");
|
||||
return;
|
||||
}
|
||||
|
||||
if((e && s) && (!n && !w)){
|
||||
printw("\u255A");
|
||||
return;
|
||||
}
|
||||
|
||||
if((w && s) && (!n && !e)){
|
||||
printw("\u255D");
|
||||
return;
|
||||
}
|
||||
|
||||
if((s && e && w) && (!n)){
|
||||
printw("\u2569");
|
||||
return;
|
||||
}
|
||||
|
||||
if((n && w && e) && (!s)){
|
||||
printw("\u2566");
|
||||
return;
|
||||
}
|
||||
|
||||
if(n && s && e && w){
|
||||
printw("\u256C");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void drawGui(int w, int h){
|
||||
int i;
|
||||
|
||||
attron(COLOR_PAIR(BSC_COLOR));
|
||||
|
||||
/* Clear the gui space. */
|
||||
for(i = 1; i < w - 1; i++){
|
||||
move(h - 2, i);
|
||||
printw(" ");
|
||||
}
|
||||
|
||||
/* Upper horizontal bar. */
|
||||
move(0, 0);
|
||||
printw("\u2554");
|
||||
for(i = 0; i < w - 2; i++){
|
||||
printw("\u2550");
|
||||
}
|
||||
printw("\u2557");
|
||||
|
||||
/* Lower horizontal bars. */
|
||||
move(h - 3, 0);
|
||||
printw("\u255A");
|
||||
for(i = 0; i < w - 2; i++){
|
||||
printw("\u2550");
|
||||
}
|
||||
printw("\u255D");
|
||||
|
||||
move(h - 1, 0);
|
||||
printw("\u255A");
|
||||
for(i = 0; i < w - 2; i++){
|
||||
printw("\u2550");
|
||||
}
|
||||
printw("\u255D");
|
||||
|
||||
/* Vertical bars. */
|
||||
for(i = 1; i < h - 1; i++){
|
||||
move(i, 0);
|
||||
if(i != h - 3) printw("\u2551");
|
||||
else printw("\u2560");
|
||||
move(i, w-1);
|
||||
if(i != h - 3) printw("\u2551");
|
||||
else printw("\u2563");
|
||||
}
|
||||
|
||||
move(h - 2, 1);
|
||||
for(i = 0; msg[i] && i < w - 2; i++){
|
||||
printw("%c", msg[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void setPlayerStart(){
|
||||
int i;
|
||||
|
||||
for(i = 0; i < nO; i++){
|
||||
if(objs[i].type == PLAYER_START){
|
||||
player.y = objs[i].sX;
|
||||
player.x = objs[i].sY;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void initObjects(){
|
||||
int i, j;
|
||||
|
||||
for(i = 0; i < MAX_OBJECTS; ++i){
|
||||
objs[i].type = NONE;
|
||||
objs[i].x = 0;
|
||||
objs[i].y = 0;
|
||||
objs[i].eX = 0;
|
||||
objs[i].eY = 0;
|
||||
objs[i].sX = 0;
|
||||
objs[i].sY = 0;
|
||||
objs[i].id = 0;
|
||||
objs[i].dId = 0;
|
||||
for(j = 0; j < MAX_STR; j++){
|
||||
objs[i].name[j] = '\0';
|
||||
objs[i].target[j] = '\0';
|
||||
objs[i].dialog[j] = '\0';
|
||||
}
|
||||
objs[i].unlocked = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void initKeys(){
|
||||
int i;
|
||||
|
||||
freeKey = 0;
|
||||
for(i = 0; i < MAX_KEYS; ++i){
|
||||
keys[i] = -1;
|
||||
}
|
||||
}
|
||||
|
||||
void apply(void *map, int x, int y, int dx, int dy, void *src){
|
||||
if(x < 0 || x >= MAX_MAP_SIZE) return;
|
||||
if(y < 0 || y >= MAX_MAP_SIZE) return;
|
||||
|
||||
vis[y][x] = TRUE;
|
||||
seen[y][x] = TRUE;
|
||||
}
|
||||
|
||||
bool opaque(void *m, int x, int y){
|
||||
int k;
|
||||
if(x < 0 || x >= MAX_MAP_SIZE) return FALSE;
|
||||
if(y < 0 || y >= MAX_MAP_SIZE) return FALSE;
|
||||
|
||||
if(map[y][x].f == SOLID_WALL || map[y][x].f == SECRET_WALL){
|
||||
return TRUE;
|
||||
}else{
|
||||
for(k = 0; k < nO; k++){
|
||||
if(objs[k].type == DOOR){
|
||||
if(objs[k].x == y && objs[k].y == x){
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
void loadMap(const char * file){
|
||||
int i, j;
|
||||
|
||||
errcode_t rc = readMapData(file, &map, &mW, &mH);
|
||||
if(rc != NO_ERROR){
|
||||
fprintf(stderr, "\t%s.loadMap(): readMapData() returned %d\n", __FILE__, rc);
|
||||
exit(rc);
|
||||
}
|
||||
|
||||
game_obj_t * objsP = objs;
|
||||
rc = readMapObjects(file, &objsP, &nO);
|
||||
if(rc != NO_ERROR){
|
||||
fprintf(stderr, "\t%s.loadMap(): readMapObjects() returned %d\n", __FILE__, rc);
|
||||
exit(rc);
|
||||
}
|
||||
|
||||
setPlayerStart();
|
||||
initKeys();
|
||||
|
||||
for ( i = 0; i < MAX_MAP_SIZE; ++i ) {
|
||||
for(j = 0; j < MAX_MAP_SIZE; ++j){
|
||||
vis[i][j] = FALSE;
|
||||
seen[i][j] = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool canMoveTo(int iY, int iX){
|
||||
int k;
|
||||
|
||||
for(k = 0; k < nO; k++){
|
||||
if(objs[k].x == iY && objs[k].y == iX){
|
||||
if(objs[k].type == DOOR){
|
||||
if(objs[k].unlocked) return TRUE;
|
||||
else return FALSE;
|
||||
}else if(objs[k].type == PERSON){
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if((map[iY][iX].f > WINDOW_WALL && map[iY][iX].f <= WATER) || map[iY][iX].f == SECRET_WALL)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
89
src/intro.c
Normal file
89
src/intro.c
Normal file
@@ -0,0 +1,89 @@
|
||||
/**
|
||||
* Copyright (c) 2014, Miguel Angel Astor Romero. All rights reserved.
|
||||
* See the file LICENSE for more details.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <ncursesw/ncurses.h>
|
||||
|
||||
#include "constants.h"
|
||||
#include "intro.h"
|
||||
#include "intro_img.h"
|
||||
|
||||
void inInput();
|
||||
gsname_t inUpdate();
|
||||
void inRender(int, int);
|
||||
|
||||
static bool anyKey;
|
||||
static clock_t then = 0, nThen = 0;
|
||||
static int mRows = 0, mH = 0;
|
||||
|
||||
void initIntroState(gs_t * gs){
|
||||
gs->name = INTRO;
|
||||
gs->input = &inInput;
|
||||
gs->update = &inUpdate;
|
||||
gs->render = &inRender;
|
||||
}
|
||||
|
||||
void inInput(){
|
||||
int key = 0;
|
||||
|
||||
key = getch();
|
||||
|
||||
if(key != ERR && key != KEY_RESIZE){
|
||||
anyKey = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
gsname_t inUpdate(){
|
||||
clock_t now, delta;
|
||||
|
||||
if(anyKey){
|
||||
anyKey = FALSE;
|
||||
mRows = 0;
|
||||
then = 0;
|
||||
nThen = 0;
|
||||
return MENU;
|
||||
}
|
||||
|
||||
now = clock();
|
||||
delta = now - then;
|
||||
if((float)delta / (float)CLOCKS_PER_SEC >= 0.15f){
|
||||
then = now;
|
||||
mRows = mRows + 1 <= mH ? mRows + 1 : mH;
|
||||
}
|
||||
|
||||
if(mRows >= mH){
|
||||
now = clock();
|
||||
delta = now - nThen;
|
||||
if((int)delta / (int)CLOCKS_PER_SEC >= 3){
|
||||
nThen = 0;
|
||||
mRows = 0;
|
||||
then = 0;
|
||||
return MENU;
|
||||
}
|
||||
}else{
|
||||
nThen = clock();
|
||||
}
|
||||
|
||||
return INTRO;
|
||||
}
|
||||
|
||||
void inRender(int w, int h){
|
||||
int i, j, jOff;
|
||||
|
||||
mH = h < 30 ? h : 30;
|
||||
jOff = mH < h ? (mH / 4) : 0;
|
||||
|
||||
clear_screen(w, h);
|
||||
|
||||
for(i = 0; i < w && i < 80; i++){
|
||||
for(j = 21; j < h + 21 && j < mRows + 21 && j < 80; j++){
|
||||
move((j - 21) + jOff, (w / 2) - 40 + i);
|
||||
attron(COLOR_PAIR(INTRO_IMG[i][j]));
|
||||
printw("\u2588");
|
||||
}
|
||||
}
|
||||
}
|
182
src/main.c
182
src/main.c
@@ -6,33 +6,37 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <time.h>
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <ncurses.h>
|
||||
#include <termios.h>
|
||||
#include <sys/types.h>
|
||||
#include <ncursesw/ncurses.h>
|
||||
#include <locale.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
#include "constants.h"
|
||||
#include "game_state.h"
|
||||
|
||||
void leave(void);
|
||||
void manage_signal(int signal);
|
||||
int start_ncurses(void);
|
||||
int start_ncurses(void);
|
||||
void set_colors(void);
|
||||
void clear_screen(void);
|
||||
void on_resize(int);
|
||||
|
||||
static int w = 0, h = 0;
|
||||
static int w = 0, h = 0;
|
||||
static bool resize = FALSE;
|
||||
|
||||
int main() {
|
||||
bool finished = false;
|
||||
char *home_dir = getenv("HOME");
|
||||
char *data_dir;
|
||||
char *log_file;
|
||||
time_t raw_date;
|
||||
struct tm *current_date;
|
||||
bool finished = FALSE;
|
||||
char * home_dir = getenv("HOME");
|
||||
FILE * f; /* To avoid a warning. */
|
||||
clock_t then, now, delta;
|
||||
unsigned int fps = 0, pfps = 0;
|
||||
char * data_dir;
|
||||
char * log_file;
|
||||
time_t raw_date;
|
||||
struct tm * current_date;
|
||||
gs_t * states;
|
||||
int c_state;
|
||||
|
||||
atexit(leave);
|
||||
signal(SIGINT, manage_signal);
|
||||
@@ -45,13 +49,13 @@ int main() {
|
||||
/* If we got the user's home directory, build the data directory path. */
|
||||
data_dir = (char*)malloc(strlen(home_dir) + 7);
|
||||
strcpy(data_dir, home_dir);
|
||||
strcat(data_dir, "/.tomb");
|
||||
strcat(data_dir, F_SEP ".cyjam");
|
||||
|
||||
/* Redirect stderr output to a file. */
|
||||
log_file = (char*)malloc(strlen(data_dir) + 8);
|
||||
strcpy(log_file, data_dir);
|
||||
strcat(log_file, "/stderr");
|
||||
freopen(log_file, "a", stderr);
|
||||
strcat(log_file, F_SEP "stderr");
|
||||
f = freopen(log_file, "a", stderr);
|
||||
|
||||
/* Log the current date and time. */
|
||||
time(&raw_date);
|
||||
@@ -59,38 +63,76 @@ int main() {
|
||||
fprintf(stderr, "%s", asctime(current_date));
|
||||
|
||||
/* Try to create the data directory with permissions 775. */
|
||||
if(mkdir(data_dir, S_IRWXU | S_IWGRP | S_IRGRP| S_IROTH | S_IXOTH) == 0){
|
||||
/* The data directory was sucessfully created. */
|
||||
//init_scores(data_dir);
|
||||
}else{
|
||||
if(mkdir(data_dir, S_IRWXU | S_IWGRP | S_IRGRP| S_IROTH | S_IXOTH) != 0){
|
||||
if(errno != EEXIST){
|
||||
/* The directory does not exists and could not be created. */
|
||||
perror("\tmain.c");
|
||||
perror("\t" __FILE__);
|
||||
fprintf(stderr, "\tdata_dir is: %s\n", data_dir);
|
||||
//init_scores(NULL);
|
||||
}else{
|
||||
/* The directory already exits. */
|
||||
//init_scores(data_dir);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
/* If there is no HOME environment variable, quit. */
|
||||
fprintf(stderr, "\tmain.c: Couldn't find the user's home directory\n");
|
||||
fprintf(stderr, "\t%s: Couldn't find the user's home directory\n", __FILE__);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
/* Start ncurses. */
|
||||
if(start_ncurses() != 0){
|
||||
fprintf(stderr, "\tmain.c: Ncurses could not be initialized.\n");
|
||||
fprintf(stderr, "\t%s: Ncurses could not be initialized.\n", __FILE__);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
set_colors();
|
||||
|
||||
do{
|
||||
clear_screen();
|
||||
/* Create the state data structures. */
|
||||
c_state = INTRO;
|
||||
states = (gs_t *)malloc(sizeof(gs_t) * NUM_STATES);
|
||||
initStateArray(&states);
|
||||
|
||||
refresh();
|
||||
}while(!finished);
|
||||
/* Start the game loop. */
|
||||
then = clock();
|
||||
do{
|
||||
/* Handle terminal resize. */
|
||||
if(resize){
|
||||
endwin();
|
||||
refresh();
|
||||
|
||||
getmaxyx(stdscr, h, w);
|
||||
|
||||
fprintf(stderr, "\tSIGWINCH caught. (W: %d, H: %d)\n", w, h);
|
||||
|
||||
resize = FALSE;
|
||||
signal(SIGWINCH, on_resize);
|
||||
}
|
||||
|
||||
states[c_state].input();
|
||||
c_state = states[c_state].update();
|
||||
|
||||
if(c_state == -1) finished = TRUE;
|
||||
|
||||
if(c_state >= INTRO && c_state <= GAME_OVER){
|
||||
states[c_state].render(w, h);
|
||||
}
|
||||
|
||||
if(DEBUG){
|
||||
fps++;
|
||||
|
||||
now = clock();
|
||||
delta = now - then;
|
||||
if((int)delta / (int)CLOCKS_PER_SEC == 1){
|
||||
then = now;
|
||||
pfps = fps;
|
||||
fps = 0;
|
||||
}
|
||||
|
||||
move(1, 1);
|
||||
attron(COLOR_PAIR(BSC_COLOR));
|
||||
printw("FPS: %u", pfps);
|
||||
}
|
||||
|
||||
refresh();
|
||||
}while(!finished);
|
||||
|
||||
fclose(f);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
@@ -101,8 +143,8 @@ void leave(void){
|
||||
|
||||
/* Finish ncurses. */
|
||||
endwin();
|
||||
/* Close the scores database and todays log. */
|
||||
// close_scores();
|
||||
|
||||
/* Mark the end of this run's log. */
|
||||
for(i = 0; i < 80; i++)
|
||||
fprintf(stderr, "-");
|
||||
fprintf(stderr, "\n");
|
||||
@@ -113,54 +155,65 @@ void manage_signal(int signal){
|
||||
switch(signal){
|
||||
case SIGINT:
|
||||
fprintf(stderr, "\tSIGINT caught.\n");
|
||||
exit(EXIT_SUCCESS);
|
||||
break;
|
||||
|
||||
case SIGSEGV:
|
||||
fprintf(stderr, "\tSegmentation fault.\n");
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
|
||||
case SIGTERM:
|
||||
fprintf(stderr, "\tSIGTERM caught.\n");
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void on_resize(int signal){
|
||||
struct winsize ws;
|
||||
|
||||
/* Request the new size of the terminal. */
|
||||
ioctl(1, TIOCGWINSZ, &ws);
|
||||
/* Resize ncurse's stdscr. */
|
||||
resizeterm(ws.ws_row, ws.ws_col);
|
||||
/* Get the new size of the window. */
|
||||
getmaxyx(stdscr, h, w);
|
||||
fprintf(stderr, "\tSIGWINCH caught. (W: %d, H: %d)\n", w, h);
|
||||
resize = TRUE;
|
||||
}
|
||||
|
||||
int start_ncurses(void){
|
||||
WINDOW *win_ptr;
|
||||
int ret_code;
|
||||
|
||||
setlocale(LC_ALL, "");
|
||||
|
||||
/* Prepare the terminal. */
|
||||
win_ptr = initscr();
|
||||
if(win_ptr == NULL)
|
||||
return -1;
|
||||
|
||||
/* Enable special characters. */
|
||||
ret_code = keypad(stdscr, TRUE);
|
||||
if(ret_code == ERR)
|
||||
return -1;
|
||||
|
||||
/* Disable line buffering. */
|
||||
ret_code = cbreak();
|
||||
if(ret_code == ERR)
|
||||
return -1;
|
||||
|
||||
/* Disable echo. */
|
||||
ret_code = noecho();
|
||||
if(ret_code == ERR)
|
||||
return -1;
|
||||
|
||||
/* Hide the cursor. */
|
||||
ret_code = curs_set(FALSE);
|
||||
if(ret_code == ERR)
|
||||
return -1;
|
||||
|
||||
/* Set delay. */
|
||||
ret_code = nodelay(stdscr, TRUE);
|
||||
if(ret_code == ERR)
|
||||
return -1;
|
||||
|
||||
/* Initialize the screen size variables. */
|
||||
getmaxyx(stdscr, h, w);
|
||||
|
||||
return 0;
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
void set_colors(void){
|
||||
@@ -168,26 +221,29 @@ void set_colors(void){
|
||||
ret_code = start_color();
|
||||
if(ret_code == OK){
|
||||
if(has_colors() == TRUE){
|
||||
init_pair(1, COLOR_WHITE, COLOR_RED); /* The color for the top and bottom bars. */
|
||||
init_pair(2, COLOR_WHITE, COLOR_BLACK); /* Basic text color. */
|
||||
init_pair(3, COLOR_YELLOW, COLOR_BLACK); /* Highlighted text color. */
|
||||
init_pair(4, COLOR_BLUE, COLOR_BLACK); /* Lights off color. */
|
||||
init_pair(5, COLOR_RED, COLOR_BLACK); /* Dim light color. */
|
||||
init_pair(6, COLOR_YELLOW, COLOR_BLACK); /* Lights on color. */
|
||||
init_pair(7, COLOR_YELLOW, COLOR_YELLOW); /* Main GUI bar color. */
|
||||
init_pair(8, COLOR_WHITE, COLOR_WHITE); /* Empty GUI bar color. */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void clear_screen(void){
|
||||
int i, j;
|
||||
move(0,0);
|
||||
attron(COLOR_PAIR(BSC_COLOR));
|
||||
for(i = 0; i < w; i++){
|
||||
for(j = 0; j < h; j++){
|
||||
move(j, i);
|
||||
printw(" ");
|
||||
init_pair(BAR_COLOR, COLOR_WHITE, COLOR_RED); /* The color for the top and bottom bars. */
|
||||
init_pair(BSC_COLOR, COLOR_WHITE, COLOR_BLACK); /* Basic text color. */
|
||||
init_pair(HLT_COLOR, COLOR_YELLOW, COLOR_BLACK); /* Highlighted text color. */
|
||||
init_pair(OFF_COLOR, COLOR_BLUE, COLOR_BLACK); /* Lights off color. */
|
||||
init_pair(DIM_COLOR, COLOR_RED, COLOR_BLACK); /* Dim light color. */
|
||||
init_pair(LIT_COLOR, COLOR_YELLOW, COLOR_BLACK); /* Lights on color. */
|
||||
init_pair(GUI_COLOR, COLOR_YELLOW, COLOR_YELLOW); /* Main GUI bar color. */
|
||||
init_pair(EMP_COLOR, COLOR_WHITE, COLOR_WHITE); /* Empty GUI bar color. */
|
||||
|
||||
init_pair(DW_COLOR, COLOR_BLUE, COLOR_BLACK);
|
||||
init_pair(SW_COLOR, COLOR_CYAN, COLOR_BLACK);
|
||||
init_pair(SN_COLOR, COLOR_YELLOW, COLOR_BLACK);
|
||||
init_pair(GR_COLOR, COLOR_GREEN, COLOR_BLACK);
|
||||
init_pair(FR_COLOR, COLOR_RED, COLOR_BLACK);
|
||||
init_pair(HL_COLOR, COLOR_WHITE, COLOR_BLACK);
|
||||
init_pair(MN_COLOR, COLOR_WHITE, COLOR_BLACK);
|
||||
|
||||
init_pair(VOID_COLOR, COLOR_BLACK, COLOR_BLACK); /* Pure black. */
|
||||
init_pair(IND_COLOR, COLOR_MAGENTA, COLOR_BLACK); /* Intro shadow. */
|
||||
}
|
||||
}else{
|
||||
fprintf(stderr, "\t%s: Colors not supported.\n", __FILE__);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
146
src/main_menu.c
Normal file
146
src/main_menu.c
Normal file
@@ -0,0 +1,146 @@
|
||||
/**
|
||||
* Copyright (c) 2014, Miguel Angel Astor Romero. All rights reserved.
|
||||
* See the file LICENSE for more details.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <ncursesw/ncurses.h>
|
||||
|
||||
#include "constants.h"
|
||||
#include "main_menu.h"
|
||||
|
||||
static const char * title = "NOT SO ROGUE-LIKE";
|
||||
static const char * subtitle = "A game for the Cyberpunk Jam 2014";
|
||||
static const char * opt1 = "New game";
|
||||
static const char * opt2 = "Replay intro";
|
||||
static const char * opt3 = "Quit";
|
||||
static const char * creds = "Designed and programmed by Miky";
|
||||
static const char * info = "Press enter to select an option. Scroll with the arrow keys.";
|
||||
static const char * info2 = "Press escape while in game to return to the main menu.";
|
||||
|
||||
static int selOpt = 0;
|
||||
static bool uK, dK, esc, enter;
|
||||
|
||||
void mmInput();
|
||||
gsname_t mmUpdate();
|
||||
void mmRender(int, int);
|
||||
|
||||
void initMMState(gs_t * gs){
|
||||
gs->name = MENU;
|
||||
gs->input = &mmInput;
|
||||
gs->update = &mmUpdate;
|
||||
gs->render = &mmRender;
|
||||
}
|
||||
|
||||
void mmInput(){
|
||||
int key = 0;
|
||||
|
||||
key = getch();
|
||||
|
||||
if(key != ERR){
|
||||
if(key == KEY_UP) uK = TRUE;
|
||||
if(key == KEY_DOWN) dK = TRUE;
|
||||
if(key == 27) esc = TRUE;
|
||||
if(key == KEY_ENTER || key == '\n') enter = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
gsname_t mmUpdate(){
|
||||
if(uK){
|
||||
selOpt = selOpt - 1 < 0 ? 2 : selOpt - 1;
|
||||
uK = FALSE;
|
||||
}
|
||||
|
||||
if(dK){
|
||||
selOpt = (selOpt + 1) % 3;
|
||||
dK = FALSE;
|
||||
}
|
||||
|
||||
if(esc) return -1;
|
||||
|
||||
if(enter){
|
||||
enter = FALSE;
|
||||
if(selOpt == 0) return IN_GAME;
|
||||
else if(selOpt == 1) return INTRO;
|
||||
else return -1;
|
||||
}
|
||||
|
||||
return MENU;
|
||||
}
|
||||
|
||||
void mmRender(int w, int h){
|
||||
int sW;
|
||||
|
||||
clear_screen(w, h);
|
||||
|
||||
/* Print the title. */
|
||||
sW = strlen(title);
|
||||
sW /= 2;
|
||||
|
||||
attron(A_BOLD);
|
||||
|
||||
move(1, (w / 2) - sW);
|
||||
attron(COLOR_PAIR(SN_COLOR));
|
||||
printw(title);
|
||||
|
||||
/* Print the subtitle. */
|
||||
sW = strlen(subtitle);
|
||||
sW /= 2;
|
||||
|
||||
move(2, (w / 2) - sW);
|
||||
attron(COLOR_PAIR(SW_COLOR));
|
||||
printw(subtitle);
|
||||
|
||||
attroff(A_BOLD);
|
||||
|
||||
/* Print the menu options. */
|
||||
sW = strlen(opt1);
|
||||
sW /= 2;
|
||||
|
||||
move((h / 2) - 2, (w / 2) - sW);
|
||||
if(selOpt == 0) attron(COLOR_PAIR(GR_COLOR));
|
||||
else attron(COLOR_PAIR(DW_COLOR));
|
||||
printw(opt1);
|
||||
|
||||
sW = strlen(opt2);
|
||||
sW /= 2;
|
||||
|
||||
move((h / 2) - 1, (w / 2) - sW);
|
||||
if(selOpt == 1) attron(COLOR_PAIR(GR_COLOR));
|
||||
else attron(COLOR_PAIR(DW_COLOR));
|
||||
printw(opt2);
|
||||
|
||||
sW = strlen(opt3);
|
||||
sW /= 2;
|
||||
|
||||
move((h / 2), (w / 2) - sW);
|
||||
if(selOpt == 2) attron(COLOR_PAIR(GR_COLOR));
|
||||
else attron(COLOR_PAIR(DW_COLOR));
|
||||
printw(opt3);
|
||||
|
||||
/* Print help. */
|
||||
sW = strlen(info);
|
||||
sW /= 2;
|
||||
|
||||
move(h - 5, (w / 2) - sW);
|
||||
attron(COLOR_PAIR(MN_COLOR));
|
||||
printw(info);
|
||||
|
||||
sW = strlen(info2);
|
||||
sW /= 2;
|
||||
|
||||
move(h - 4, (w / 2) - sW);
|
||||
attron(COLOR_PAIR(MN_COLOR));
|
||||
printw(info2);
|
||||
|
||||
/* Print credits. */
|
||||
sW = strlen(creds);
|
||||
sW /= 2;
|
||||
|
||||
attron(A_BOLD);
|
||||
move(h - 2, (w / 2) - sW);
|
||||
attron(COLOR_PAIR(SW_COLOR));
|
||||
printw(creds);
|
||||
attroff(A_BOLD);
|
||||
}
|
368
src/map.c
Normal file
368
src/map.c
Normal file
@@ -0,0 +1,368 @@
|
||||
/**
|
||||
* Copyright (c) 2014, Miguel Angel Astor Romero. All rights reserved.
|
||||
* See the file LICENSE for more details.
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "map.h"
|
||||
|
||||
errcode_t readMapData(const char * file, map_cell_t *** map, int * w, int * h){
|
||||
size_t n = 2048;
|
||||
char *buffer;
|
||||
FILE * f;
|
||||
|
||||
f = fopen(file, "r");
|
||||
if(f == NULL) return FILE_NOT_FOUND;
|
||||
|
||||
buffer = (char*)calloc(n + 1, sizeof(char));
|
||||
if(buffer == NULL) return OUT_OF_MEMORY;
|
||||
|
||||
while(getline(&buffer, &n, f) != -1){
|
||||
if(strcmp(buffer, "[MAP]\n") == 0){
|
||||
int rc, i, j;
|
||||
char *end;
|
||||
|
||||
rc = getline(&buffer, &n, f);
|
||||
if(rc == -1){
|
||||
free(buffer);
|
||||
return PREMATURE_EOF;
|
||||
}
|
||||
|
||||
*w = strtol(buffer, &end, 10);
|
||||
*h = strtol(end, NULL, 10);
|
||||
|
||||
if((*w <= 0 || *w > MAX_MAP_SIZE) || (*h <= 0 || *h > MAX_MAP_SIZE)){
|
||||
*w = -1;
|
||||
*h = -1;
|
||||
free(buffer);
|
||||
return MAP_TOO_LARGE;
|
||||
}
|
||||
|
||||
for(i = 0; i < *w; i++){
|
||||
rc = getline(&buffer, &n, f);
|
||||
if(rc == -1){
|
||||
free(buffer);
|
||||
return PREMATURE_EOF;
|
||||
}
|
||||
|
||||
/* Skip commentaries. */
|
||||
if(buffer[0] == '%'){
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
|
||||
for(j = 0; buffer[j] && j < *h; j++){
|
||||
if(buffer[j] >= '0' && buffer[j] <= '9'){
|
||||
switch(buffer[j]){
|
||||
case '0': (*map)[i][j].f = VOID; break;
|
||||
case '1': (*map)[i][j].f = SOLID_WALL; break;
|
||||
case '2': (*map)[i][j].f = SECRET_WALL; break;
|
||||
case '3': (*map)[i][j].f = CLEAR_WALL; break;
|
||||
case '4': (*map)[i][j].f = NEON_WALL; break;
|
||||
case '5': (*map)[i][j].f = WINDOW_WALL; break;
|
||||
case '6': (*map)[i][j].f = EMPTY_FLOOR; break;
|
||||
case '7': (*map)[i][j].f = RUG; break;
|
||||
case '8': (*map)[i][j].f = WATER; break;
|
||||
case '9': (*map)[i][j].f = BAR; break;
|
||||
default:
|
||||
fprintf(stderr, "\t%s.readMapData() : Invalid character %c in map file %s\n", __FILE__, buffer[j], file);
|
||||
(*map)[i][j].f = VOID;
|
||||
break;
|
||||
}
|
||||
}else{
|
||||
fprintf(stderr, "\t%s.readMapData() : Invalid character %c in map file %s\n", __FILE__, buffer[j], file);
|
||||
(*map)[i][j].f = VOID;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Skip the rest of the file. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
free(buffer);
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
errcode_t readMapObjects(const char * file, game_obj_t ** objArr, int *nObj){
|
||||
size_t n = 2048;
|
||||
int rc;
|
||||
char *buffer;
|
||||
FILE * f;
|
||||
|
||||
*nObj = 0;
|
||||
|
||||
f = fopen(file, "r");
|
||||
if(f == NULL) return FILE_NOT_FOUND;
|
||||
|
||||
buffer = (char*)calloc(n + 1, sizeof(char));
|
||||
if(buffer == NULL) return OUT_OF_MEMORY;
|
||||
|
||||
rc = getline(&buffer, &n, f);
|
||||
if(rc == -1){
|
||||
free(buffer);
|
||||
return PREMATURE_EOF;
|
||||
}
|
||||
|
||||
while(*nObj < MAX_OBJECTS && rc != -1){
|
||||
if(buffer[0] == '%') continue;
|
||||
|
||||
if(strcmp(buffer, "[MAP]\n") == 0){
|
||||
int i, w;
|
||||
|
||||
rc = getline(&buffer, &n, f);
|
||||
if(rc == -1){
|
||||
free(buffer);
|
||||
return PREMATURE_EOF;
|
||||
}
|
||||
|
||||
w = strtol(buffer, NULL, 10);
|
||||
|
||||
for(i = 0; i <= w; ++i){
|
||||
rc = getline(&buffer, &n, f);
|
||||
if(rc == -1){
|
||||
free(buffer);
|
||||
return PREMATURE_EOF;
|
||||
}
|
||||
}
|
||||
|
||||
}else if(strcmp(buffer, "[PLAYER]\n") == 0){
|
||||
do{
|
||||
rc = getline(&buffer, &n, f);
|
||||
if(rc == -1) break;
|
||||
|
||||
if(buffer[0] == '%') continue;
|
||||
else if(buffer[0] == 'p'){
|
||||
int i;
|
||||
|
||||
for(i = 0; buffer[i] && buffer[i] != '='; ++i);
|
||||
|
||||
if(strncmp(buffer, "player =", i) == 0){
|
||||
int sX, sY;
|
||||
char *end;
|
||||
|
||||
sX = strtol(&buffer[i + 1], &end, 10);
|
||||
sY = strtol(end, NULL, 10);
|
||||
|
||||
(*objArr)[*nObj].type = PLAYER_START;
|
||||
(*objArr)[*nObj].sX = sX;
|
||||
(*objArr)[*nObj].sY = sY;
|
||||
|
||||
*nObj += 1;
|
||||
|
||||
}else{
|
||||
fprintf(stderr, "\t%s.readMapObjects(): Skipped invalid data in PLAYER key in map file %s.\n", __FILE__, file);
|
||||
fprintf(stderr, "\t%s.readMapObjects(): The invalid line is %s.\n", __FILE__, buffer);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}while(buffer[0] != '[');
|
||||
|
||||
}else if(strcmp(buffer, "[EXITS]\n") == 0){
|
||||
do{
|
||||
rc = getline(&buffer, &n, f);
|
||||
if(rc == -1) break;
|
||||
|
||||
if(buffer[0] == '%') continue;
|
||||
else if(buffer[0] == 'e'){
|
||||
int i;
|
||||
|
||||
for(i = 0; buffer[i] && buffer[i] != '='; ++i);
|
||||
|
||||
if(strncmp(buffer, "exit =", i) == 0){
|
||||
int x, y, eX, eY;
|
||||
char *end, *end2, *end3;
|
||||
|
||||
x = strtol(&buffer[i + 1], &end, 10);
|
||||
y = strtol(end, &end2, 10);
|
||||
end2++;
|
||||
|
||||
(*objArr)[*nObj].type = EXIT;
|
||||
(*objArr)[*nObj].x = x;
|
||||
(*objArr)[*nObj].y = y;
|
||||
|
||||
for(i = 0; end2[i] && end2[i] != ' '; ++i);
|
||||
|
||||
strncpy((*objArr)[*nObj].target, end2, i);
|
||||
(*objArr)[*nObj].target[i] = '\0';
|
||||
|
||||
eX = strtol(&end2[i], &end3, 10);
|
||||
eY = strtol(end3, NULL, 10);
|
||||
|
||||
(*objArr)[*nObj].eX = eX;
|
||||
(*objArr)[*nObj].eY = eY;
|
||||
|
||||
*nObj += 1;
|
||||
|
||||
}else{
|
||||
fprintf(stderr, "\t%s.readMapObjects(): Skipped invalid data in EXITS key in map file %s.\n", __FILE__, file);
|
||||
fprintf(stderr, "\t%s.readMapObjects(): The invalid line is %s.\n", __FILE__, buffer);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}while(buffer[0] != '[');
|
||||
|
||||
}else if(strcmp(buffer, "[DOORS]\n") == 0){
|
||||
do{
|
||||
rc = getline(&buffer, &n, f);
|
||||
if(rc == -1) break;
|
||||
|
||||
if(buffer[0] == '%') continue;
|
||||
else if(buffer[0] == 'd'){
|
||||
int i;
|
||||
|
||||
for(i = 0; buffer[i] && buffer[i] != '='; ++i);
|
||||
|
||||
if(strncmp(buffer, "door =", i) == 0){
|
||||
int dX, dY, dId, un;
|
||||
char *end, *end2, *end3;
|
||||
|
||||
dX = strtol(&buffer[i + 1], &end, 10);
|
||||
dY = strtol(end, &end2, 10);
|
||||
dId = strtol(end2, &end3, 10);
|
||||
un = strtol(end3, NULL, 10);
|
||||
|
||||
(*objArr)[*nObj].type = DOOR;
|
||||
(*objArr)[*nObj].x = dX;
|
||||
(*objArr)[*nObj].y = dY;
|
||||
(*objArr)[*nObj].id = dId;
|
||||
(*objArr)[*nObj].unlocked = un;
|
||||
|
||||
*nObj += 1;
|
||||
|
||||
}else{
|
||||
fprintf(stderr, "\t%s.readMapObjects(): Skipped invalid data in DOORS key in map file %s.\n", __FILE__, file);
|
||||
fprintf(stderr, "\t%s.readMapObjects(): The invalid line is %s.\n", __FILE__, buffer);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}while(buffer[0] != '[');
|
||||
|
||||
}else if(strcmp(buffer, "[KEYS]\n") == 0){
|
||||
do{
|
||||
rc = getline(&buffer, &n, f);
|
||||
if(rc == -1) break;
|
||||
|
||||
if(buffer[0] == '%') continue;
|
||||
else if(buffer[0] == 'k'){
|
||||
int i;
|
||||
|
||||
for(i = 0; buffer[i] && buffer[i] != '='; ++i);
|
||||
|
||||
if(strncmp(buffer, "key =", i) == 0){
|
||||
int kX, kY, kId;
|
||||
char *end, *end2;
|
||||
|
||||
kX = strtol(&buffer[i + 1], &end, 10);
|
||||
kY = strtol(end, &end2, 10);
|
||||
kId = strtol(end2, NULL, 10);
|
||||
|
||||
(*objArr)[*nObj].type = KEY;
|
||||
(*objArr)[*nObj].x = kX;
|
||||
(*objArr)[*nObj].y = kY;
|
||||
(*objArr)[*nObj].id = kId;
|
||||
|
||||
*nObj += 1;
|
||||
|
||||
}else{
|
||||
fprintf(stderr, "\t%s.readMapObjects(): Skipped invalid data in KEYS key in map file %s.\n", __FILE__, file);
|
||||
fprintf(stderr, "\t%s.readMapObjects(): The invalid line is %s.\n", __FILE__, buffer);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}while(buffer[0] != '[');
|
||||
|
||||
}else if(strcmp(buffer, "[PERSONS]\n") == 0){
|
||||
do{
|
||||
rc = getline(&buffer, &n, f);
|
||||
if(rc == -1) break;
|
||||
|
||||
if(buffer[0] == '%') continue;
|
||||
else if(buffer[0] == 'p'){
|
||||
int i;
|
||||
|
||||
for(i = 0; buffer[i] && buffer[i] != '='; ++i);
|
||||
|
||||
if(strncmp(buffer, "person =", i) == 0){
|
||||
int pX, pY, pDId;
|
||||
char *end, *end2;
|
||||
|
||||
pX = strtol(&buffer[i + 1], &end, 10);
|
||||
pY = strtol(end, &end2, 10);
|
||||
end2++;
|
||||
|
||||
(*objArr)[*nObj].type = PERSON;
|
||||
(*objArr)[*nObj].x = pX;
|
||||
(*objArr)[*nObj].y = pY;
|
||||
|
||||
for(i = 0; end2[i] && end2[i] != ' '; ++i);
|
||||
|
||||
strncpy((*objArr)[*nObj].name, end2, i);
|
||||
(*objArr)[*nObj].name[i] = '\0';
|
||||
|
||||
pDId = strtol(&end2[i], NULL, 10);
|
||||
(*objArr)[*nObj].dId = pDId;
|
||||
|
||||
*nObj += 1;
|
||||
|
||||
}else{
|
||||
fprintf(stderr, "\t%s.readMapObjects(): Skipped invalid data in PERSONS key in map file %s.\n", __FILE__, file);
|
||||
fprintf(stderr, "\t%s.readMapObjects(): The invalid line is %s.\n", __FILE__, buffer);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}while(buffer[0] != '[');
|
||||
|
||||
}else if(strcmp(buffer, "[DIALOGS]\n") == 0){
|
||||
do{
|
||||
rc = getline(&buffer, &n, f);
|
||||
if(rc == -1) break;
|
||||
|
||||
if(buffer[0] == '%') continue;
|
||||
else if(buffer[0] == 'd'){
|
||||
int i;
|
||||
|
||||
for(i = 0; buffer[i] && buffer[i] != '='; ++i);
|
||||
|
||||
if(strncmp(buffer, "dialog =", i) == 0){
|
||||
int dId;
|
||||
char *end;
|
||||
|
||||
dId = strtol(&buffer[i + 1], &end, 10);
|
||||
end++;
|
||||
|
||||
(*objArr)[*nObj].type = DIALOG;
|
||||
(*objArr)[*nObj].id = dId;
|
||||
|
||||
strcpy((*objArr)[*nObj].dialog, end);
|
||||
for(i = 0; (*objArr)[*nObj].dialog[i] && (*objArr)[*nObj].dialog[i] != '\n'; ++i);
|
||||
(*objArr)[*nObj].dialog[i] = '\0';
|
||||
|
||||
*nObj += 1;
|
||||
|
||||
}else{
|
||||
fprintf(stderr, "\t%s.readMapObjects(): Skipped invalid data in DIALOGS key in map file %s.\n", __FILE__, file);
|
||||
fprintf(stderr, "\t%s.readMapObjects(): The invalid line is %s.\n", __FILE__, buffer);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}while(buffer[0] != '[');
|
||||
|
||||
}else{
|
||||
fprintf(stderr, "\t%s.readMapObjects(): Found invalid key in map file %s. Key is %s\n", __FILE__, file, buffer);
|
||||
free(buffer);
|
||||
return INVALID_KEY;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
free(buffer);
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
Reference in New Issue
Block a user