Added much code for the foundation of the netcode. Server automatically starts on port 31337 and runs as a separate thread in the SDL client. This TCP server functions as a basic echo server and can be connected to thru telnet or by typing 'connect 127.0.0.1 31337' in timesynk's console. Once connected, the echo functionality can be tested by using console command 'send my message goes here'. Somewhat buggy and crashses on occasion - suspected cause is consoleLog()ing a string that is not properly nul terminated, resulting in reading memory out of bounds. Curses client does not run the server properly at the moment, probably due to using select on server, clients, and stdin when combined with ncurses - will look into this later.

netcode
kts 2013-11-06 23:40:19 -08:00
parent df73d846d8
commit 7bc43929e0
25 changed files with 717 additions and 533 deletions

View File

@ -10,6 +10,13 @@ CURSES_LFLAGS = -lcurses
XCURSES_LFLAGS = -lXCurses
SDL_LFLAGS = -lSDL -lSDL_image
LFLAGS = -Wall $(DEBUG)
ifeq ($(OS),Windows_NT)
else
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),SunOS)
LFLAGS += -lsocket -lnsl
endif
endif
$(BINARY): $(OBJS) $(CURSES_OBJS)
$(CC) $(OBJS) $(CURSES_OBJS) $(CURSES_LFLAGS) -o $(BINARY)

View File

@ -10,4 +10,6 @@ Contains common variables, such as return codes.
#define ERROR 1
#define SUCCESS 0
int is_networking;
#endif

View File

@ -1,6 +1,6 @@
#ifndef CONSOLE_H
#define CONSOLE_H
#define COMMAND_HASH_SIZE 64
#define COMMAND_HASH_SIZE 256
#include "helper.h"
/*** ConsoleEntry
ConsoleEntry, akin to Tiles, stores pointers to the previous and next ConsoleEntry structs in a chain.

3
game.h
View File

@ -14,6 +14,9 @@
#define NORTHWEST 9
#define SOUTHEAST 1
#define SOUTHWEST 3
int tickrate;
struct Map *current_map;
int gameInit();

View File

@ -18,6 +18,8 @@
#include "../tile.h" // for DoorTile, etc.
#include "../tiles/curses_tiles.h"
#include "../net/sockets.h"
#include "../console.h"
void tickSignal() {
@ -73,7 +75,6 @@ int interfaceInit() {
#if _WIN32 | _WIN64
win_timer = SetTimer(NULL, 1, 500, tickSignal);
consoleLog("augh");
#else
/* basically instead of using linux-only timer fds, we use SIGALRM for updating the game world instead. I don't know if I agree with it. */
if (signal(SIGALRM, (void (*)(int)) tickSignal) == SIG_ERR) {
@ -89,13 +90,16 @@ int interfaceInit() {
/* add our commands */
consoleAddCommand("tickrate", interfaceSetInterval);
return SUCCESS;
}
int interfaceLoop() {
int i;
char data_buffer[31];
char data_buffer[2048];
if (is_networking) {
FD_SET(net_socket, &master_fds);
max_fd = net_socket;
}
while (is_running) {
read_fds = master_fds;
if (select(max_fd+1, &read_fds, NULL, NULL, NULL) == -1) {
@ -109,8 +113,38 @@ int interfaceLoop() {
} else {
globalContext(data_buffer[0]);
}
} else if (i == network_fd) {
// do network processing
} else if (i == net_socket) {
struct sockaddr_storage client_address;
socklen_t address_length = sizeof(client_address);
int new_fd = accept(net_socket, (struct sockaddr *)&client_address, &address_length);
if (new_fd == -1) {
// consoleLog("accept() error'd");
} else {
FD_SET(new_fd, &master_fds);
if (new_fd > max_fd) {
max_fd = new_fd;
}
char string[32];
char remote_ip[INET6_ADDRSTRLEN];
sprintf(string, "accept()'d, new client from %s on fd %d", inet_ntop(client_address.ss_family, get_in_addr((struct sockaddr *)&client_address), remote_ip, INET6_ADDRSTRLEN), new_fd);
consoleLog(string);
}
} else if (i > net_socket) { // handle existing client data
int bytes = 0;
if((bytes = recv(i, data_buffer, sizeof data_buffer, 0)) <= 0) {
if (bytes == 0) {
consoleLog("lost client");
} else {
consoleLog("recv() error'd");
}
close(i);
FD_CLR(i, &master_fds);
} else { // good data
//char string[sizeof data_buffer];
//sprintf(string, "client: %s", data_buffer);
//consoleLog(string);
consoleLog("client message");
}
}
}
}

View File

@ -15,9 +15,6 @@ int original_cursor;
int interface_fd; // STDIN, generally
int network_fd; // socket
fd_set master_fds;
fd_set read_fds;
int max_fd;
// TODO: gameLoop timer does not work on win32. Code is there, but needs a fake window for handling message events
// called on SIGALRM, calls gameLoop();

View File

@ -16,15 +16,157 @@
#include "../tile.h"
#include "../console.h"
#include "../net/sockets.h"
void interfaceSetInterval(const char *input_string) {
if (input_string) {
int tickrate = atoi(input_string);
int new_tickrate = atoi(input_string);
SDL_RemoveTimer(timer_id);
if (tickrate > 0)
if (new_tickrate > 0) {
tickrate = new_tickrate;
timer_id = SDL_AddTimer(tickrate, pushTickEvent, NULL);
}
}
}
static int networkThread(void *nada) {
int reuse = 1;
int net_socket;
struct sockaddr_in server_address;
if ((net_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
consoleLog("socket() success'd");
return ERROR;
}
consoleLog("socket() success'd");
if (setsockopt(net_socket, SOL_SOCKET, SO_REUSEADDR, (char*)&reuse, sizeof(reuse)) < 0) {
consoleLog("setsockopt() error'd");
}
consoleLog("setsockopt() success'd");
//fcntl(net_socket, F_SETFL, O_NONBLOCK);
memset(&server_address, 0, sizeof(server_address));
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_address.sin_port = htons(31337);
if (bind(net_socket, (struct sockaddr *) &server_address, sizeof(server_address)) < 0) {
consoleLog("bind() error'd");
return ERROR;
}
consoleLog("bind() success'd");
if (listen(net_socket, 32) < 0) {
consoleLog("listen() error'd");
return ERROR;
}
consoleLog("listen() success'd");
char test_string[31];
sprintf(test_string, "server running on fd %d!", net_socket);
consoleLog(test_string);
/******/
// fd_set master_fds;
// fd_set read_fds;
// int max_fd;
int i; // current fd in for
char data_buffer[2048];
/* set up our fds */
FD_ZERO(&master_fds);
FD_ZERO(&read_fds);
FD_SET(net_socket, &master_fds);
max_fd = net_socket;
SDL_Event event;
SDL_UserEvent user_event;
user_event.type = SDL_USEREVENT;
user_event.code = EVENT_NET;
user_event.data1 = NULL;
user_event.data2 = NULL;
event.type = SDL_USEREVENT;
event.user = user_event;
while(1 == 1) {
//while (is_networking) {
read_fds = master_fds;
if (select(max_fd+1, &read_fds, NULL, NULL, NULL) == -1) {
consoleLog("error on network select()");
}
for (i=0;i <= max_fd; i++) {
if (FD_ISSET(i, &read_fds)) {
if (i == net_socket) {
struct sockaddr_storage client_address;
socklen_t address_length = sizeof(client_address);
int new_fd = accept(net_socket, (struct sockaddr *)&client_address, &address_length);
if (new_fd == -1) {
consoleLog("accept() error'd");
} else {
FD_SET(new_fd, &master_fds);
if (new_fd > max_fd) {
max_fd = new_fd;
}
char remote_ip[INET6_ADDRSTRLEN];
event.user.data1 = (void *)new_fd;
event.user.data2 = (void *)inet_ntop(client_address.ss_family, get_in_addr((struct sockaddr *)&client_address), remote_ip, INET6_ADDRSTRLEN);
event.user.code = EVENT_NET_ACCEPT;
SDL_PushEvent(&event);
}
} else if (i == client_socket) {
int bytes = 0;
if((bytes = recv(i, data_buffer, sizeof data_buffer, 0)) <= 0) {
if (bytes == 0) {
event.user.code = EVENT_NET_CLIENT_LOST;
event.user.data1 = (void *)i;
} else {
event.user.code = EVENT_NET_CLIENT_ERROR;
event.user.data1 = (void *)i;
}
SDL_PushEvent(&event);
close(i);
FD_CLR(i, &master_fds);
} else {
data_buffer[bytes] = '\0'; // TEMP
struct NetMessage *net_message;
net_message = malloc(sizeof(struct NetMessage));
net_message->fd = i;
net_message->size = bytes;
net_message->data = (void *)data_buffer;
event.user.code = EVENT_NET_CLIENT_RECV;
event.user.data1 = (void *)i;
event.user.data2 = (void *)net_message;
SDL_PushEvent(&event);
}
} else if (i > net_socket) { // handle existing client data
int bytes = 0;
if((bytes = recv(i, data_buffer, sizeof data_buffer, 0)) <= 0) {
if (bytes == 0) {
event.user.code = EVENT_NET_LOST;
event.user.data1 = (void *)i;
} else {
event.user.code = EVENT_NET_ERROR;
event.user.data1 = (void *)i;
}
SDL_PushEvent(&event);
close(i);
FD_CLR(i, &master_fds);
} else { // good data
data_buffer[bytes] = '\0'; // TEMP
struct NetMessage *net_message;
net_message = malloc(sizeof(struct NetMessage));
net_message->fd = i;
net_message->size = bytes;
net_message->data = (void *)data_buffer;
event.user.code = EVENT_NET_RECV;
event.user.data1 = (void *)i;
event.user.data2 = (void *)net_message;
SDL_PushEvent(&event);
}
}
}
}
}
return 0;
}
Uint32 pushTickEvent(Uint32 interval, void *param) {
SDL_Event event;
SDL_UserEvent user_event;
@ -39,14 +181,18 @@ Uint32 pushTickEvent(Uint32 interval, void *param) {
return interval;
}
int interfaceInit() {
// TODO: read OS's best fullscreen resolution and use it
video_width = 800;
video_height = 600;
video_mode = 0;
// Load it up!
// since we use threads, Mac OS 10+ support only. Also threaded os.
#if _WIN32 | _WIN64
SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER|SDL_INIT_EVENTTHREAD);
#else
SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER);
#endif
// Enable Unicode, for later text input
SDL_EnableUNICODE(SDL_ENABLE);
// Set up our SDL Window
@ -59,6 +205,7 @@ int interfaceInit() {
consoleAddCommand("set_video", interfaceVideoSetSize);
camera_surface = SDL_CreateRGBSurface(screen->flags, screen->w, screen->h, screen->format->BitsPerPixel, screen->format->Rmask, screen->format->Gmask, screen->format->Bmask, screen->format->Amask);
/* load our surfaces from memory */
font_spritesheet = IMG_Load_RW(SDL_RWFromMem(&font_images, font_images_length), 1);
player_spritesheet = IMG_Load_RW(SDL_RWFromMem(&player_images, player_images_length), 1);
npc_spritesheet = IMG_Load_RW(SDL_RWFromMem(&npc_images, npc_images_length), 1);
@ -66,24 +213,16 @@ int interfaceInit() {
floor_spritesheet = IMG_Load_RW(SDL_RWFromMem(&floor_images, floor_images_length), 1);
door_spritesheet = IMG_Load_RW(SDL_RWFromMem(&door_images, door_images_length), 1);
shadow_spritesheet = IMG_Load_RW(SDL_RWFromMem(&shadow_images, shadow_images_length), 1);
int race, class;
SDL_Rect sprite_offset = {0, 0, TILE_WIDTH, TILE_HEIGHT};
for (race = 0; race < TOTAL_RACES;race++) {
for(class = 0; class < TOTAL_CLASSES;class++) {
player_sprites[race][class] = SDL_CreateRGBSurface(screen->flags, 16, 32, screen->format->BitsPerPixel, screen->format->Rmask, screen->format->Gmask, screen->format->Bmask, screen->format->Amask);
SDL_BlitSurface(player_spritesheet, &sprite_offset, player_sprites[race][class], NULL);
}
}
// Fill our screen w/ black
SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 32, 128, 64));
// Update!
SDL_Flip(screen);
/* now we load up our timer, woo */
delay = 500;
timer_id = SDL_AddTimer(delay, pushTickEvent, NULL);
tickrate = 500;
timer_id = SDL_AddTimer(tickrate, pushTickEvent, NULL);
/* now we spawn a network thread that will push user events to SDL */
network_thread = SDL_CreateThread(networkThread, NULL);
return SUCCESS;
}
@ -151,6 +290,9 @@ void cameraDraw() {
}
//SDL_BlitSurface(interfaceScaleSurface(camera_surface, camera_surface->w*(camera_surface->w/camera_rect.w), camera_surface->h*(camera_surface->h/camera_rect.h)), NULL, screen, &camera_rect);
SDL_BlitSurface(camera_surface, NULL, screen, &camera_rect);
char test[12];
itoa(tickrate, test, 10);
interfaceDrawString(test, screen->w-strlen(test)*TILE_WIDTH, 0);
}
int interfaceLoop() {
@ -159,8 +301,32 @@ int interfaceLoop() {
case SDL_USEREVENT:
if (event.user.code == EVENT_TICK) { // timer
gameLoop();
} else if (event.user.code == EVENT_NET) { // net
} else if (event.user.code == EVENT_NET_ACCEPT) { // net
char string[127];
sprintf(string, "net accept of %s on fd %d", (char*)event.user.data2, (int*)event.user.data1);
consoleLog(string);
} else if (event.user.code == EVENT_NET_RECV) {
char string[255];
struct NetMessage *net_message = (struct NetMessage*)event.user.data2;
sprintf(string, "client(%d): %s", net_message->fd, net_message->data);
consoleLog(string);
sprintf(string, "%s", net_message->data);
send(net_message->fd, string, net_message->size, 0);
free(net_message);
} else if (event.user.code == EVENT_NET_LOST) {
char string[23];
sprintf(string, "net lost for fd %d", (int*)event.user.data1);
consoleLog(string);
} else if (event.user.code == EVENT_NET_ERROR) {
char string[23];
sprintf(string, "net error for fd %d", (int*)event.user.data1);
consoleLog(string);
} else if (event.user.code == EVENT_NET_CLIENT_RECV) {// begin client
char string[255];
struct NetMessage *net_message = (struct NetMessage*)event.user.data2;
sprintf(string, "server(%d): %s", net_message->fd, net_message->data);
consoleLog(string);
free(net_message);
}
break;
case SDL_QUIT:

View File

@ -4,6 +4,13 @@
#define EVENT_TICK 1
#define EVENT_NET 2
#define EVENT_NET_ACCEPT 3
#define EVENT_NET_RECV 4
#define EVENT_NET_LOST 5
#define EVENT_NET_ERROR 6
#define EVENT_NET_CLIENT_RECV 7
#define EVENT_NET_CLIENT_LOST 8
#define EVENT_NET_CLIENT_ERROR 9
SDL_Surface* screen;
SDL_Surface* font_spritesheet;
@ -13,7 +20,6 @@
SDL_Surface* wall_spritesheet;
SDL_Surface* floor_spritesheet;
SDL_Surface* door_spritesheet;
SDL_Surface* player_sprites[TOTAL_RACES][TOTAL_CLASSES];
SDL_Surface* camera_surface;
SDL_Event event;
@ -31,6 +37,9 @@ void interfaceDrawChar(char ch, int start_x, int start_y);
void interfaceVideoSetSize(const char *input_string);
SDL_Surface *interfaceScaleSurface(SDL_Surface *Surface, Uint16 Width, Uint16 Height);
static int networkThread(void *nada);
SDL_Thread *network_thread;
Uint32 pushTickEvent(Uint32 interval, void *param);
#endif

8
main.c
View File

@ -10,10 +10,7 @@ int main(int argc, char *argv[]) {
if (interfaceInit() == ERROR) {
return ERROR;
}
// initialize our network system (sockets, winsock, etc.)
if (netInit() == ERROR) {
return ERROR;
}
is_running = 1;
consoleLog(" ");
@ -24,6 +21,9 @@ int main(int argc, char *argv[]) {
playerSetCommand(PLAYER_ACTIVATE, playerActivate);
playerSetCommand(PLAYER_LOOK, playerLook);
// initialize our network system (sockets, winsock, etc.)
netInit();
gameInit();
// start our program loop!
interfaceLoop();

1
main.h
View File

@ -1,7 +1,6 @@
#ifndef MAIN_H
#define MAIN_H
int is_running;
int is_networking;
void appQuit();
#endif

View File

@ -1,11 +1,153 @@
#include "sockets.h"
#include <sys/types.h>
#include <string.h>
#include "../common.h"
#include "../stubs.h"
int netInit() {
#include <fcntl.h>
void *get_in_addr(struct sockaddr *sa) {
if (sa->sa_family == AF_INET) {
return &(((struct sockaddr_in*)sa)->sin_addr);
}
return &(((struct sockaddr_in6*)sa)->sin6_addr);
}
int netInit() {
consoleAddCommand("connect", consoleNetConnect);
consoleAddCommand("disconnect", consoleNetDisconnect);
consoleAddCommand("send", consoleNetSend);
client_socket = -1;
/* int reuse = 1;
if ((net_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
consoleLog("socket() success'd");
return ERROR;
}
consoleLog("socket() success'd");
if (setsockopt(net_socket, SOL_SOCKET, SO_REUSEADDR, (char*)&reuse, sizeof(reuse)) < 0) {
consoleLog("setsockopt() error'd");
}
consoleLog("setsockopt() success'd");
//fcntl(net_socket, F_SETFL, O_NONBLOCK);
memset(&server_address, 0, sizeof(server_address));
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_address.sin_port = htons(1337357);
if (bind(net_socket, (struct sockaddr *) &server_address, sizeof(server_address)) < 0) {
consoleLog("bind() error'd");
return ERROR;
}
consoleLog("bind() success'd");
if (listen(net_socket, 32) < 0) {
consoleLog("listen() error'd");
return ERROR;
}
consoleLog("listen() success'd");
char test_string[31];
sprintf(test_string, "net is running on fd %d!", net_socket);
consoleLog(test_string);
is_networking = 1; */
return SUCCESS;
}
void netLoop() {
int netConnect(const char *server_string, const char *port_string) {
if (client_socket < 0) {
if ((client_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
return -2;
}
memset(&connected_address, 0, sizeof(connected_address));
connected_address.sin_family = AF_INET;
connected_address.sin_addr.s_addr = inet_addr(server_string);
connected_address.sin_port = htons(atoi(port_string));
if (connect(client_socket, (struct sockaddr *) &connected_address, sizeof(connected_address)) < 0) {
client_socket = -1;
return -3;
}
FD_SET(client_socket, &master_fds);
if (max_fd < client_socket) {
max_fd = client_socket;
}
return 0; // success!
}
return -1; // already connected
}
int netDisconnect() {
if (client_socket >= 0) {
close(client_socket);
FD_CLR(client_socket, &master_fds);
client_socket = -1;
return 0; // success
}
return -1;
}
/* console commands */
void consoleNetConnect(const char *input_string) {
if (input_string) {
int i = 0;
int j = 0;
char server[63];
char port[10];
int position = 0;
while(input_string[i] != '\0') {
if (input_string[i] == ' ') {
server[j] = '\0';
position = 1;
i++;
j = 0; // reset
}
if (position == 0) {
server[j] = input_string[i];
} else if (position == 1) {
port[j] = input_string[i];
}
j++;
i++;
}
if (position < 1) {
server[j] = '\0';
port[0] = '3';
port[1] = '1';
port[2] = '3';
port[3] = '3';
port[4] = '7';
port[5] = '\0';
} else if (position == 1) {
port[j] = '\0';
}
char string[127];
sprintf(string, "connecting to %s:%s", server, port);
consoleLog(string);
int net_return = netConnect(server, port);
if (net_return != 0) {
sprintf(string, "connect error %d", net_return);
consoleLog(string);
} else {
sprintf(string, "now connected on fd %d", client_socket);
consoleLog(string);
}
}
}
void consoleNetDisconnect() {
if (netDisconnect() == -1) {
consoleLog("not connected");
} else {
consoleLog("disconnected");
}
}
void consoleNetSend(const char *message) {
if (client_socket >= 0) {
if (send(client_socket, message, strlen(message), 0) < 0) {
consoleLog("couldn't send() message");
}
} else {
consoleLog("not connected to a server");
}
}

46
net/sockets.h 100644
View File

@ -0,0 +1,46 @@
#ifndef SOCKETS_H
#define SOCKETS_H
#if _WIN32 | _WIN64
#include <Windows.h>
#include <Ws2tcpip.h>
#include <Winsock2.h>
#else
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#if defined (sun)
/* For Solaris 2.6, as it lacks SIOCGIFCONF */
#include <sys/sockio.h>
#endif
#endif
void *get_in_addr(struct sockaddr *sa);
int net_socket;
struct sockaddr_in server_address;
fd_set master_fds;
fd_set read_fds;
int max_fd;
struct NetMessage {
int fd;
int size;
void *data;
};
int client_socket; // send/recv socket for clients only
struct sockaddr_in connected_address;
/* console commands */
// handles input "servername port" and calls netConnect
void consoleNetConnect(const char *input_string);
// simply calls netDisconnect
void consoleNetDisconnect();
// sends a message to server // NOTE: will be removed, just for testing
void consoleNetSend(const char *message);
/* client-> server funcs */
int netConnect(const char *server_string, const char *port_string);
int netDisconnect();
#endif

View File

@ -18,6 +18,5 @@ void interfaceDrawConsole();
void interfaceSetInterval(const char *input_string);
int netInit();
void netLoop();
#endif

View File

@ -311,12 +311,14 @@
<key>Dock</key>
<array>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXProjectModuleGUID</key>
<string>1CE0B20306471E060097A5F4</string>
<key>PBXProjectModuleLabel</key>
<string>npc.h</string>
<string>player.c</string>
<key>PBXSplitModuleInNavigatorKey</key>
<dict>
<key>Split0</key>
@ -324,11 +326,11 @@
<key>PBXProjectModuleGUID</key>
<string>1CE0B20406471E060097A5F4</string>
<key>PBXProjectModuleLabel</key>
<string>npc.h</string>
<string>player.c</string>
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>204EC1291827ADB00035FB9D</string>
<string>204EC241182B7A630035FB9D</string>
<key>history</key>
<array>
<string>20568DE817EC16C60022F314</string>
@ -338,19 +340,14 @@
<string>206D60B3180907AC00C0DE49</string>
<string>206D60B4180907AC00C0DE49</string>
<string>205CBE4718134A20009DA0FF</string>
<string>205AEFD81814CBEE00F6F9FF</string>
<string>205AEFD91814CBEE00F6F9FF</string>
<string>205AEFFA1814D0F800F6F9FF</string>
<string>205AEFFB1814D0F800F6F9FF</string>
<string>205AEFFC1814D0F800F6F9FF</string>
<string>205AF0B0181615E200F6F9FF</string>
<string>205AF3261816681B00F6F9FF</string>
<string>205AF3271816681B00F6F9FF</string>
<string>205AF37618166E8900F6F9FF</string>
<string>205AF396181670B300F6F9FF</string>
<string>205AF39C181670DB00F6F9FF</string>
<string>205AF39E181670DB00F6F9FF</string>
<string>205AF3B818167E1100F6F9FF</string>
<string>205AF3B918167E1100F6F9FF</string>
<string>20E2179D18179A08003112DE</string>
<string>20E2179E18179A08003112DE</string>
@ -359,8 +356,14 @@
<string>20E217CB18186B4C003112DE</string>
<string>20E217CC18186B4C003112DE</string>
<string>204EC0F6182788230035FB9D</string>
<string>204EC1261827ADB00035FB9D</string>
<string>204EC1271827ADB00035FB9D</string>
<string>204EC15718285FB20035FB9D</string>
<string>204EC15818285FB20035FB9D</string>
<string>204EC15918285FB20035FB9D</string>
<string>204EC15A18285FB20035FB9D</string>
<string>204EC171182889AD0035FB9D</string>
<string>204EC176182889C80035FB9D</string>
<string>204EC18218288AF90035FB9D</string>
<string>204EC18318288AF90035FB9D</string>
</array>
<key>prevStack</key>
<array>
@ -394,11 +397,17 @@
<string>205AF2A3181662B000F6F9FF</string>
<string>205AF3B11816778B00F6F9FF</string>
<string>20E217A518179A08003112DE</string>
<string>204EC0F8182788230035FB9D</string>
<string>204EC0F9182788230035FB9D</string>
<string>204EC10D18278AFA0035FB9D</string>
<string>204EC1191827A9360035FB9D</string>
<string>204EC1281827ADB00035FB9D</string>
<string>204EC15B18285FB20035FB9D</string>
<string>204EC15C18285FB20035FB9D</string>
<string>204EC15D18285FB20035FB9D</string>
<string>204EC15E18285FB20035FB9D</string>
<string>204EC15F18285FB20035FB9D</string>
<string>204EC16018285FB20035FB9D</string>
<string>204EC16118285FB20035FB9D</string>
<string>204EC16918285FE00035FB9D</string>
<string>204EC173182889AD0035FB9D</string>
<string>204EC178182889C80035FB9D</string>
<string>204EC18418288AF90035FB9D</string>
</array>
</dict>
<key>SplitCount</key>
@ -420,8 +429,6 @@
<string>517pt</string>
</dict>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXProjectModuleGUID</key>
@ -458,9 +465,9 @@
</array>
<key>TableOfContents</key>
<array>
<string>204EC0E4182787230035FB9D</string>
<string>204EC16318285FB20035FB9D</string>
<string>1CE0B1FE06471DED0097A5F4</string>
<string>204EC0E5182787230035FB9D</string>
<string>204EC16418285FB20035FB9D</string>
<string>1CE0B20306471E060097A5F4</string>
<string>1CE0B20506471E060097A5F4</string>
</array>
@ -594,11 +601,11 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>204EC11E1827A99C0035FB9D</string>
<string>204EC11F1827A99C0035FB9D</string>
<string>204EC21B1829F2EA0035FB9D</string>
<string>204EC21C1829F2EA0035FB9D</string>
<string>20F6A1B417E95A6200BAD261</string>
<string>1C78EAAD065D492600B07095</string>
<string>1CD10A99069EF8BA00B06720</string>
<string>20F6A1B417E95A6200BAD261</string>
<string>/Users/kts/Devel/timesynk/xcode/timesynk.xcodeproj</string>
</array>
<key>WindowString</key>
@ -623,7 +630,7 @@
<key>PBXProjectModuleGUID</key>
<string>1CD0528F0623707200166675</string>
<key>PBXProjectModuleLabel</key>
<string>sdl.c</string>
<string>sockets.c</string>
<key>StatusBarVisibility</key>
<true/>
</dict>
@ -632,7 +639,7 @@
<key>Frame</key>
<string>{{0, 0}, {500, 218}}</string>
<key>RubberWindowFrame</key>
<string>53 221 500 500 0 0 1024 746 </string>
<string>309 191 500 500 0 0 1024 746 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
@ -658,7 +665,7 @@
<key>Frame</key>
<string>{{0, 223}, {500, 236}}</string>
<key>RubberWindowFrame</key>
<string>53 221 500 500 0 0 1024 746 </string>
<string>309 191 500 500 0 0 1024 746 </string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@ -681,18 +688,18 @@
<key>TableOfContents</key>
<array>
<string>20F6A1B417E95A6200BAD261</string>
<string>204EC0E6182787230035FB9D</string>
<string>204EC14F18285FB00035FB9D</string>
<string>1CD0528F0623707200166675</string>
<string>XCMainBuildResultsModuleGUID</string>
</array>
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.buildV3</string>
<key>WindowString</key>
<string>53 221 500 500 0 0 1024 746 </string>
<string>309 191 500 500 0 0 1024 746 </string>
<key>WindowToolGUID</key>
<string>20F6A1B417E95A6200BAD261</string>
<key>WindowToolIsVisible</key>
<true/>
<false/>
</dict>
<dict>
<key>FirstTimeWindowDisplayed</key>
@ -775,10 +782,10 @@
<key>Frame</key>
<string>{{316, 0}, {378, 203}}</string>
<key>RubberWindowFrame</key>
<string>48 97 694 422 0 0 1024 746 </string>
<string>198 130 694 422 0 0 1024 746 </string>
</dict>
<key>RubberWindowFrame</key>
<string>48 97 694 422 0 0 1024 746 </string>
<string>198 130 694 422 0 0 1024 746 </string>
</dict>
<key>Module</key>
<string>PBXDebugSessionModule</string>
@ -801,22 +808,22 @@
<key>TableOfContents</key>
<array>
<string>1CD10A99069EF8BA00B06720</string>
<string>204EC0EC182787AA0035FB9D</string>
<string>204EC15018285FB00035FB9D</string>
<string>1C162984064C10D400B95A72</string>
<string>204EC0ED182787AA0035FB9D</string>
<string>204EC0EE182787AA0035FB9D</string>
<string>204EC0EF182787AA0035FB9D</string>
<string>204EC0F0182787AA0035FB9D</string>
<string>204EC0F1182787AA0035FB9D</string>
<string>204EC15118285FB00035FB9D</string>
<string>204EC15218285FB00035FB9D</string>
<string>204EC15318285FB00035FB9D</string>
<string>204EC15418285FB00035FB9D</string>
<string>204EC15518285FB00035FB9D</string>
</array>
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.debugV3</string>
<key>WindowString</key>
<string>48 97 694 422 0 0 1024 746 </string>
<string>198 130 694 422 0 0 1024 746 </string>
<key>WindowToolGUID</key>
<string>1CD10A99069EF8BA00B06720</string>
<key>WindowToolIsVisible</key>
<false/>
<true/>
</dict>
<dict>
<key>Identifier</key>
@ -934,6 +941,8 @@
<key>Dock</key>
<array>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXProjectModuleGUID</key>
@ -946,7 +955,7 @@
<key>Frame</key>
<string>{{0, 0}, {650, 209}}</string>
<key>RubberWindowFrame</key>
<string>290 308 650 250 0 0 1024 746 </string>
<string>290 212 650 250 0 0 1024 746 </string>
</dict>
<key>Module</key>
<string>PBXDebugCLIModule</string>
@ -969,17 +978,17 @@
<key>TableOfContents</key>
<array>
<string>1C78EAAD065D492600B07095</string>
<string>204EC0F2182787AA0035FB9D</string>
<string>204EC15618285FB00035FB9D</string>
<string>1C78EAAC065D492600B07095</string>
</array>
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.consoleV3</string>
<key>WindowString</key>
<string>290 308 650 250 0 0 1024 746 </string>
<string>290 212 650 250 0 0 1024 746 </string>
<key>WindowToolGUID</key>
<string>1C78EAAD065D492600B07095</string>
<key>WindowToolIsVisible</key>
<false/>
<true/>
</dict>
<dict>
<key>Identifier</key>

View File

@ -31,54 +31,6 @@
vrLen = 508;
vrLoc = 0;
};
204EC0E3182787230035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 68";
rLen = 0;
rLoc = 2795;
rType = 0;
vrLen = 1937;
vrLoc = 2195;
};
204EC0E81827877B0035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
comments = "error: SDL_Event has no member named code";
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
rLen = 1;
rLoc = 129;
rType = 1;
};
204EC0E91827877B0035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 130";
rLen = 49;
rLoc = 5894;
rType = 0;
vrLen = 1034;
vrLoc = 5227;
};
204EC0EB182787AA0035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 361";
rLen = 0;
rLoc = 12733;
rType = 0;
vrLen = 1556;
vrLoc = 3971;
};
204EC0F4182787F70035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 361";
rLen = 0;
rLoc = 12732;
rType = 0;
vrLen = 1954;
vrLoc = 2710;
};
204EC0F6182788230035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20DE9D051804FE1A0047B2DD /* context.c */;
@ -89,153 +41,37 @@
vrLen = 850;
vrLoc = 0;
};
204EC0F7182788230035FB9D /* PBXTextBookmark */ = {
204EC15718285FB20035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 361";
rLen = 0;
rLoc = 12732;
rType = 0;
vrLen = 1975;
vrLoc = 2710;
};
204EC0F8182788230035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 361";
rLen = 0;
rLoc = 12732;
rType = 0;
vrLen = 1975;
vrLoc = 2710;
};
204EC0F9182788230035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20DE9D051804FE1A0047B2DD /* context.c */;
name = "context.c: 1";
fRef = 20F6A1C417E95AD300BAD261 /* common.h */;
name = "common.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 850;
vrLen = 272;
vrLoc = 0;
};
204EC0FA182788230035FB9D /* PBXTextBookmark */ = {
204EC15818285FB20035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 361";
fRef = 20568DD217EBE9490022F314 /* game.c */;
name = "game.c: 165";
rLen = 0;
rLoc = 12732;
rLoc = 4885;
rType = 0;
vrLen = 999;
vrLoc = 5523;
vrLen = 848;
vrLoc = 4079;
};
204EC0FD182789ED0035FB9D /* PBXTextBookmark */ = {
204EC15918285FB20035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
comments = "error: pushTickEvent undeclared (first use in this function)";
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
rLen = 1;
rLoc = 58;
rType = 1;
};
204EC0FE182789ED0035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 59";
rLen = 56;
rLoc = 2265;
rType = 0;
vrLen = 170;
vrLoc = 2227;
};
204EC0FF182789EE0035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 379";
fRef = 20568DD317EBE9490022F314 /* game.h */;
name = "game.h: 18";
rLen = 0;
rLoc = 13186;
rLoc = 293;
rType = 0;
vrLen = 1700;
vrLoc = 4249;
vrLen = 647;
vrLoc = 0;
};
204EC10118278A000035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
comments = "error: pushTickEvent undeclared (first use in this function)";
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
rLen = 1;
rLoc = 58;
rType = 1;
};
204EC10218278A000035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 59";
rLen = 56;
rLoc = 2265;
rType = 0;
vrLen = 1000;
vrLoc = 1595;
};
204EC10418278A210035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 379";
rLen = 0;
rLoc = 13185;
rType = 0;
vrLen = 1000;
vrLoc = 1595;
};
204EC10618278A6C0035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 379";
rLen = 0;
rLoc = 13200;
rType = 0;
vrLen = 1054;
vrLoc = 1499;
};
204EC10818278AAE0035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 379";
rLen = 0;
rLoc = 13189;
rType = 0;
vrLen = 1102;
vrLoc = 1413;
};
204EC10A18278ACF0035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 379";
rLen = 0;
rLoc = 13190;
rType = 0;
vrLen = 1103;
vrLoc = 1413;
};
204EC10C18278AFA0035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 379";
rLen = 0;
rLoc = 13190;
rType = 0;
vrLen = 1157;
vrLoc = 1413;
};
204EC10D18278AFA0035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 379";
rLen = 0;
rLoc = 13190;
rType = 0;
vrLen = 1157;
vrLoc = 1413;
};
204EC10E18278AFA0035FB9D /* PBXTextBookmark */ = {
204EC15A18285FB20035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 209A27C71812256F00B15CEC /* npc.h */;
name = "npc.h: 1";
@ -245,7 +81,27 @@
vrLen = 434;
vrLoc = 0;
};
204EC11218278BBD0035FB9D /* PBXTextBookmark */ = {
204EC15B18285FB20035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1C417E95AD300BAD261 /* common.h */;
name = "common.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 272;
vrLoc = 0;
};
204EC15C18285FB20035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 385";
rLen = 0;
rLoc = 13657;
rType = 0;
vrLen = 830;
vrLoc = 21;
};
204EC15D18285FB20035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 209A27C71812256F00B15CEC /* npc.h */;
name = "npc.h: 1";
@ -255,7 +111,37 @@
vrLen = 434;
vrLoc = 0;
};
204EC11518278C0E0035FB9D /* PBXTextBookmark */ = {
204EC15E18285FB20035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20568DD217EBE9490022F314 /* game.c */;
name = "game.c: 165";
rLen = 0;
rLoc = 4885;
rType = 0;
vrLen = 848;
vrLoc = 4079;
};
204EC15F18285FB20035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20568DD317EBE9490022F314 /* game.h */;
name = "game.h: 18";
rLen = 0;
rLoc = 293;
rType = 0;
vrLen = 647;
vrLoc = 0;
};
204EC16018285FB20035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 26";
rLen = 0;
rLoc = 610;
rType = 0;
vrLen = 814;
vrLoc = 0;
};
204EC16118285FB20035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 209A27C71812256F00B15CEC /* npc.h */;
name = "npc.h: 1";
@ -265,105 +151,95 @@
vrLen = 434;
vrLoc = 0;
};
204EC1181827A9360035FB9D /* PBXTextBookmark */ = {
204EC16918285FE00035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 209A27C71812256F00B15CEC /* npc.h */;
name = "npc.h: 1";
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 37";
rLen = 0;
rLoc = 839;
rType = 0;
vrLen = 822;
vrLoc = 216;
};
204EC171182889AD0035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20568DD517EBE9490022F314 /* player.h */;
name = "player.h: 30";
rLen = 0;
rLoc = 559;
rType = 0;
vrLen = 959;
vrLoc = 0;
};
204EC173182889AD0035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20568DD517EBE9490022F314 /* player.h */;
name = "player.h: 30";
rLen = 0;
rLoc = 559;
rType = 0;
vrLen = 959;
vrLoc = 0;
};
204EC176182889C80035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 209A27C61812256F00B15CEC /* npc.c */;
name = "npc.c: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 434;
vrLen = 951;
vrLoc = 0;
};
204EC1191827A9360035FB9D /* PBXTextBookmark */ = {
204EC178182889C80035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 209A27C71812256F00B15CEC /* npc.h */;
name = "npc.h: 1";
fRef = 209A27C61812256F00B15CEC /* npc.c */;
name = "npc.c: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 434;
vrLen = 951;
vrLoc = 0;
};
204EC11A1827A9360035FB9D /* PBXTextBookmark */ = {
204EC18218288AF90035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 389";
name = "sdl.c: 97";
rLen = 0;
rLoc = 13402;
rLoc = 2811;
rType = 0;
vrLen = 1626;
vrLoc = 4926;
vrLen = 829;
vrLoc = 2551;
};
204EC11B1827A9540035FB9D /* PBXTextBookmark */ = {
204EC18318288AF90035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20568DD417EBE9490022F314 /* player.c */;
name = "player.c: 22";
rLen = 0;
rLoc = 614;
rType = 0;
vrLen = 1097;
vrLoc = 216;
};
204EC18418288AF90035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 390";
name = "sdl.c: 97";
rLen = 0;
rLoc = 13457;
rLoc = 2811;
rType = 0;
vrLen = 1895;
vrLoc = 4270;
vrLen = 829;
vrLoc = 2551;
};
204EC11D1827A99C0035FB9D /* PBXTextBookmark */ = {
204EC241182B7A630035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 391";
fRef = 20568DD417EBE9490022F314 /* player.c */;
name = "player.c: 25";
rLen = 0;
rLoc = 13458;
rLoc = 762;
rType = 0;
vrLen = 1966;
vrLoc = 3779;
};
204EC1211827ACCE0035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 391";
rLen = 0;
rLoc = 13481;
rType = 0;
vrLen = 2065;
vrLoc = 3136;
};
204EC1261827ADB00035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 391";
rLen = 0;
rLoc = 13481;
rType = 0;
vrLen = 860;
vrLoc = 12621;
};
204EC1271827ADB00035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 209A27C71812256F00B15CEC /* npc.h */;
name = "npc.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 434;
vrLoc = 0;
};
204EC1281827ADB00035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 391";
rLen = 0;
rLoc = 13481;
rType = 0;
vrLen = 860;
vrLoc = 12621;
};
204EC1291827ADB00035FB9D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 209A27C71812256F00B15CEC /* npc.h */;
name = "npc.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 434;
vrLoc = 0;
vrLen = 1097;
vrLoc = 216;
};
204F942218005466007B4DAD /* helper.c */ = {
uiCtxt = {
@ -456,30 +332,30 @@
};
20568DD217EBE9490022F314 /* game.c */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {755, 2394}}";
sepNavIntBoundsRect = "{{0, 0}, {755, 2632}}";
sepNavSelRange = "{4885, 0}";
sepNavVisRange = "{4158, 727}";
sepNavVisRange = "{4079, 848}";
};
};
20568DD317EBE9490022F314 /* game.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {755, 485}}";
sepNavSelRange = "{0, 0}";
sepNavVisRange = "{0, 506}";
sepNavIntBoundsRect = "{{0, 0}, {755, 490}}";
sepNavSelRange = "{293, 0}";
sepNavVisRange = "{0, 647}";
};
};
20568DD417EBE9490022F314 /* player.c */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {755, 1652}}";
sepNavSelRange = "{614, 0}";
sepNavIntBoundsRect = "{{0, 0}, {755, 1176}}";
sepNavSelRange = "{762, 0}";
sepNavVisRange = "{216, 1097}";
};
};
20568DD517EBE9490022F314 /* player.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1200, 728}}";
sepNavIntBoundsRect = "{{0, 0}, {1200, 630}}";
sepNavSelRange = "{559, 0}";
sepNavVisRange = "{0, 683}";
sepNavVisRange = "{0, 959}";
};
};
20568DE817EC16C60022F314 /* PBXTextBookmark */ = {
@ -499,16 +375,6 @@
sepNavVisRange = "{1124, 1020}";
};
};
205AEFD81814CBEE00F6F9FF /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1C417E95AD300BAD261 /* common.h */;
name = "common.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 272;
vrLoc = 0;
};
205AEFD91814CBEE00F6F9FF /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 089C165DFE840E0CC02AAC07 /* English */;
@ -569,16 +435,6 @@
vrLen = 980;
vrLoc = 1245;
};
205AF31A1816677A00F6F9FF /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20DE9D051804FE1A0047B2DD /* context.c */;
name = "context.c: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 846;
vrLoc = 0;
};
205AF3261816681B00F6F9FF /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 204F942218005466007B4DAD /* helper.c */;
@ -589,16 +445,6 @@
vrLen = 651;
vrLoc = 320;
};
205AF3271816681B00F6F9FF /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20568DD317EBE9490022F314 /* game.h */;
name = "game.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 506;
vrLoc = 0;
};
205AF37618166E8900F6F9FF /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F117E95B6F00BAD261 /* sdl.h */;
@ -609,16 +455,6 @@
vrLen = 810;
vrLoc = 0;
};
205AF396181670B300F6F9FF /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20568DD417EBE9490022F314 /* player.c */;
name = "player.c: 22";
rLen = 0;
rLoc = 614;
rType = 0;
vrLen = 1097;
vrLoc = 216;
};
205AF39C181670DB00F6F9FF /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 204F942318005466007B4DAD /* helper.h */;
@ -629,26 +465,6 @@
vrLen = 286;
vrLoc = 0;
};
205AF39E181670DB00F6F9FF /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20568DD517EBE9490022F314 /* player.h */;
name = "player.h: 29";
rLen = 0;
rLoc = 559;
rType = 0;
vrLen = 683;
vrLoc = 0;
};
205AF3AF1816778B00F6F9FF /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 209A27C71812256F00B15CEC /* npc.h */;
name = "npc.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 434;
vrLoc = 0;
};
205AF3B11816778B00F6F9FF /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 209A27C71812256F00B15CEC /* npc.h */;
@ -659,16 +475,6 @@
vrLen = 434;
vrLoc = 0;
};
205AF3B818167E1100F6F9FF /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20568DD217EBE9490022F314 /* game.c */;
name = "game.c: 171";
rLen = 0;
rLoc = 4885;
rType = 0;
vrLen = 727;
vrLoc = 4158;
};
205AF3B918167E1100F6F9FF /* PlistBookmark */ = {
isa = PlistBookmark;
fRef = 8D1107310486CEB800E47090 /* Info.plist */;
@ -879,15 +685,12 @@
vrLen = 175;
vrLoc = 0;
};
209860B918277B00009D5BE0 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 68";
rLen = 0;
rLoc = 2795;
rType = 0;
vrLen = 1937;
vrLoc = 2195;
209A27C61812256F00B15CEC /* npc.c */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {755, 1274}}";
sepNavSelRange = "{0, 0}";
sepNavVisRange = "{0, 951}";
};
};
209A27C71812256F00B15CEC /* npc.h */ = {
uiCtxt = {
@ -1010,16 +813,6 @@
vrLen = 989;
vrLoc = 57;
};
20E217E71818B5D0003112DE /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20F6A1F017E95B6F00BAD261 /* sdl.c */;
name = "sdl.c: 68";
rLen = 0;
rLoc = 2795;
rType = 0;
vrLen = 1937;
vrLoc = 2195;
};
20EC59781808D7A100F759CD /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 20DE9D051804FE1A0047B2DD /* context.c */;
@ -1150,9 +943,9 @@
};
20F6A1F017E95B6F00BAD261 /* sdl.c */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1224, 5082}}";
sepNavSelRange = "{13481, 0}";
sepNavVisRange = "{12621, 860}";
sepNavIntBoundsRect = "{{0, 0}, {1206, 7336}}";
sepNavSelRange = "{18100, 0}";
sepNavVisRange = "{5536, 843}";
sepNavWindowFrame = "{{174, 72}, {750, 558}}";
};
};
@ -1165,9 +958,9 @@
};
20F6A20217E95BC400BAD261 /* sockets.c */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {755, 485}}";
sepNavSelRange = "{0, 0}";
sepNavVisRange = "{0, 104}";
sepNavIntBoundsRect = "{{0, 0}, {439, 2268}}";
sepNavSelRange = "{4057, 0}";
sepNavVisRange = "{3467, 339}";
};
};
20F6A21A17E95C1200BAD261 /* PBXTextBookmark */ = {
@ -1278,105 +1071,83 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 405243665;
PBXWorkspaceStateSaveDate = 405243665;
PBXPerProjectTemplateStateSaveDate = 405290465;
PBXWorkspaceStateSaveDate = 405290465;
};
perUserProjectItems = {
2007C93017ECF2EB00268653 = 2007C93017ECF2EB00268653 /* PBXTextBookmark */;
204EC0E3182787230035FB9D /* PBXTextBookmark */ = 204EC0E3182787230035FB9D /* PBXTextBookmark */;
204EC0E81827877B0035FB9D /* PBXTextBookmark */ = 204EC0E81827877B0035FB9D /* PBXTextBookmark */;
204EC0E91827877B0035FB9D /* PBXTextBookmark */ = 204EC0E91827877B0035FB9D /* PBXTextBookmark */;
204EC0EB182787AA0035FB9D /* PBXTextBookmark */ = 204EC0EB182787AA0035FB9D /* PBXTextBookmark */;
204EC0F4182787F70035FB9D /* PBXTextBookmark */ = 204EC0F4182787F70035FB9D /* PBXTextBookmark */;
2007C93017ECF2EB00268653 /* PBXTextBookmark */ = 2007C93017ECF2EB00268653 /* PBXTextBookmark */;
204EC0F6182788230035FB9D /* PBXTextBookmark */ = 204EC0F6182788230035FB9D /* PBXTextBookmark */;
204EC0F7182788230035FB9D /* PBXTextBookmark */ = 204EC0F7182788230035FB9D /* PBXTextBookmark */;
204EC0F8182788230035FB9D /* PBXTextBookmark */ = 204EC0F8182788230035FB9D /* PBXTextBookmark */;
204EC0F9182788230035FB9D /* PBXTextBookmark */ = 204EC0F9182788230035FB9D /* PBXTextBookmark */;
204EC0FA182788230035FB9D /* PBXTextBookmark */ = 204EC0FA182788230035FB9D /* PBXTextBookmark */;
204EC0FD182789ED0035FB9D /* PBXTextBookmark */ = 204EC0FD182789ED0035FB9D /* PBXTextBookmark */;
204EC0FE182789ED0035FB9D /* PBXTextBookmark */ = 204EC0FE182789ED0035FB9D /* PBXTextBookmark */;
204EC0FF182789EE0035FB9D /* PBXTextBookmark */ = 204EC0FF182789EE0035FB9D /* PBXTextBookmark */;
204EC10118278A000035FB9D /* PBXTextBookmark */ = 204EC10118278A000035FB9D /* PBXTextBookmark */;
204EC10218278A000035FB9D /* PBXTextBookmark */ = 204EC10218278A000035FB9D /* PBXTextBookmark */;
204EC10418278A210035FB9D /* PBXTextBookmark */ = 204EC10418278A210035FB9D /* PBXTextBookmark */;
204EC10618278A6C0035FB9D /* PBXTextBookmark */ = 204EC10618278A6C0035FB9D /* PBXTextBookmark */;
204EC10818278AAE0035FB9D /* PBXTextBookmark */ = 204EC10818278AAE0035FB9D /* PBXTextBookmark */;
204EC10A18278ACF0035FB9D /* PBXTextBookmark */ = 204EC10A18278ACF0035FB9D /* PBXTextBookmark */;
204EC10C18278AFA0035FB9D /* PBXTextBookmark */ = 204EC10C18278AFA0035FB9D /* PBXTextBookmark */;
204EC10D18278AFA0035FB9D /* PBXTextBookmark */ = 204EC10D18278AFA0035FB9D /* PBXTextBookmark */;
204EC10E18278AFA0035FB9D /* PBXTextBookmark */ = 204EC10E18278AFA0035FB9D /* PBXTextBookmark */;
204EC11218278BBD0035FB9D /* PBXTextBookmark */ = 204EC11218278BBD0035FB9D /* PBXTextBookmark */;
204EC11518278C0E0035FB9D /* PBXTextBookmark */ = 204EC11518278C0E0035FB9D /* PBXTextBookmark */;
204EC1181827A9360035FB9D /* PBXTextBookmark */ = 204EC1181827A9360035FB9D /* PBXTextBookmark */;
204EC1191827A9360035FB9D /* PBXTextBookmark */ = 204EC1191827A9360035FB9D /* PBXTextBookmark */;
204EC11A1827A9360035FB9D /* PBXTextBookmark */ = 204EC11A1827A9360035FB9D /* PBXTextBookmark */;
204EC11B1827A9540035FB9D /* PBXTextBookmark */ = 204EC11B1827A9540035FB9D /* PBXTextBookmark */;
204EC11D1827A99C0035FB9D /* PBXTextBookmark */ = 204EC11D1827A99C0035FB9D /* PBXTextBookmark */;
204EC1211827ACCE0035FB9D /* PBXTextBookmark */ = 204EC1211827ACCE0035FB9D /* PBXTextBookmark */;
204EC1261827ADB00035FB9D /* PBXTextBookmark */ = 204EC1261827ADB00035FB9D /* PBXTextBookmark */;
204EC1271827ADB00035FB9D /* PBXTextBookmark */ = 204EC1271827ADB00035FB9D /* PBXTextBookmark */;
204EC1281827ADB00035FB9D /* PBXTextBookmark */ = 204EC1281827ADB00035FB9D /* PBXTextBookmark */;
204EC1291827ADB00035FB9D /* PBXTextBookmark */ = 204EC1291827ADB00035FB9D /* PBXTextBookmark */;
204F943D18005532007B4DAD = 204F943D18005532007B4DAD /* PBXTextBookmark */;
2050562217ED9E6100F572B7 = 2050562217ED9E6100F572B7 /* PBXTextBookmark */;
20567ED217E95DEC0002B1A9 = 20567ED217E95DEC0002B1A9 /* PBXTextBookmark */;
20567ED517E95DEC0002B1A9 = 20567ED517E95DEC0002B1A9 /* PBXTextBookmark */;
20568DE817EC16C60022F314 = 20568DE817EC16C60022F314 /* PBXTextBookmark */;
205AEFD81814CBEE00F6F9FF = 205AEFD81814CBEE00F6F9FF /* PBXTextBookmark */;
205AEFD91814CBEE00F6F9FF = 205AEFD91814CBEE00F6F9FF /* PBXTextBookmark */;
205AEFFA1814D0F800F6F9FF = 205AEFFA1814D0F800F6F9FF /* PBXTextBookmark */;
205AEFFB1814D0F800F6F9FF = 205AEFFB1814D0F800F6F9FF /* PBXTextBookmark */;
205AEFFC1814D0F800F6F9FF = 205AEFFC1814D0F800F6F9FF /* PBXTextBookmark */;
205AF0B0181615E200F6F9FF = 205AF0B0181615E200F6F9FF /* PBXTextBookmark */;
205AF2A3181662B000F6F9FF = 205AF2A3181662B000F6F9FF /* PBXTextBookmark */;
205AF31A1816677A00F6F9FF = 205AF31A1816677A00F6F9FF /* PBXTextBookmark */;
205AF3261816681B00F6F9FF = 205AF3261816681B00F6F9FF /* PBXTextBookmark */;
205AF3271816681B00F6F9FF = 205AF3271816681B00F6F9FF /* PBXTextBookmark */;
205AF37618166E8900F6F9FF = 205AF37618166E8900F6F9FF /* PBXTextBookmark */;
205AF396181670B300F6F9FF = 205AF396181670B300F6F9FF /* PBXTextBookmark */;
205AF39C181670DB00F6F9FF = 205AF39C181670DB00F6F9FF /* PBXTextBookmark */;
205AF39E181670DB00F6F9FF = 205AF39E181670DB00F6F9FF /* PBXTextBookmark */;
205AF3AF1816778B00F6F9FF = 205AF3AF1816778B00F6F9FF /* PBXTextBookmark */;
205AF3B11816778B00F6F9FF = 205AF3B11816778B00F6F9FF /* PBXTextBookmark */;
205AF3B818167E1100F6F9FF = 205AF3B818167E1100F6F9FF /* PBXTextBookmark */;
205AF3B918167E1100F6F9FF = 205AF3B918167E1100F6F9FF /* PlistBookmark */;
205CBE4718134A20009DA0FF = 205CBE4718134A20009DA0FF /* PBXTextBookmark */;
20664C241808D0EF00942104 = 20664C241808D0EF00942104 /* PBXTextBookmark */;
20664C291808D0EF00942104 = 20664C291808D0EF00942104 /* PBXTextBookmark */;
206D5FB01808EAE800C0DE49 = 206D5FB01808EAE800C0DE49 /* PBXTextBookmark */;
206D5FB61808EAE800C0DE49 = 206D5FB61808EAE800C0DE49 /* PBXTextBookmark */;
206D60391808F3A600C0DE49 = 206D60391808F3A600C0DE49 /* PBXTextBookmark */;
206D604B1808F92000C0DE49 = 206D604B1808F92000C0DE49 /* PBXTextBookmark */;
206D60511808F92000C0DE49 = 206D60511808F92000C0DE49 /* PBXTextBookmark */;
206D60541808F92000C0DE49 = 206D60541808F92000C0DE49 /* PBXTextBookmark */;
206D605B1808F99A00C0DE49 = 206D605B1808F99A00C0DE49 /* PBXTextBookmark */;
206D6096180904FB00C0DE49 = 206D6096180904FB00C0DE49 /* PBXTextBookmark */;
206D60B3180907AC00C0DE49 = 206D60B3180907AC00C0DE49 /* PBXTextBookmark */;
206D60B4180907AC00C0DE49 = 206D60B4180907AC00C0DE49 /* PBXTextBookmark */;
206D60B7180907AC00C0DE49 = 206D60B7180907AC00C0DE49 /* PBXTextBookmark */;
2090289E17E95F9E0051A253 = 2090289E17E95F9E0051A253 /* PBXTextBookmark */;
2090289F17E95F9E0051A253 = 2090289F17E95F9E0051A253 /* PBXTextBookmark */;
209028A517E95F9E0051A253 = 209028A517E95F9E0051A253 /* PBXTextBookmark */;
209860B918277B00009D5BE0 = 209860B918277B00009D5BE0 /* PBXTextBookmark */;
20CD05AE180FBCD8005A8231 = 20CD05AE180FBCD8005A8231 /* PBXTextBookmark */;
20DE9D35180500990047B2DD = 20DE9D35180500990047B2DD /* PBXTextBookmark */;
20DE9D36180500990047B2DD = 20DE9D36180500990047B2DD /* PBXTextBookmark */;
20E2179D18179A08003112DE = 20E2179D18179A08003112DE /* PBXTextBookmark */;
20E2179E18179A08003112DE = 20E2179E18179A08003112DE /* PBXTextBookmark */;
20E2179F18179A08003112DE = 20E2179F18179A08003112DE /* PBXTextBookmark */;
20E217A118179A08003112DE = 20E217A118179A08003112DE /* PBXTextBookmark */;
20E217A518179A08003112DE = 20E217A518179A08003112DE /* PBXTextBookmark */;
20E217CB18186B4C003112DE = 20E217CB18186B4C003112DE /* PBXTextBookmark */;
20E217CC18186B4C003112DE = 20E217CC18186B4C003112DE /* PBXTextBookmark */;
20E217E71818B5D0003112DE = 20E217E71818B5D0003112DE /* PBXTextBookmark */;
20EC59781808D7A100F759CD = 20EC59781808D7A100F759CD /* PBXTextBookmark */;
20F6A1AC17E95A6200BAD261 = 20F6A1AC17E95A6200BAD261 /* PBXTextBookmark */;
20F6A1AE17E95A6200BAD261 = 20F6A1AE17E95A6200BAD261 /* PBXTextBookmark */;
20F6A1B117E95A6200BAD261 = 20F6A1B117E95A6200BAD261 /* PlistBookmark */;
20F6A1E917E95B5200BAD261 = 20F6A1E917E95B5200BAD261 /* PBXTextBookmark */;
20F6A1EA17E95B5200BAD261 = 20F6A1EA17E95B5200BAD261 /* PBXTextBookmark */;
20F6A21A17E95C1200BAD261 = 20F6A21A17E95C1200BAD261 /* PBXTextBookmark */;
20F6A21E17E95C1200BAD261 = 20F6A21E17E95C1200BAD261 /* PBXTextBookmark */;
204EC15718285FB20035FB9D /* PBXTextBookmark */ = 204EC15718285FB20035FB9D /* PBXTextBookmark */;
204EC15818285FB20035FB9D /* PBXTextBookmark */ = 204EC15818285FB20035FB9D /* PBXTextBookmark */;
204EC15918285FB20035FB9D /* PBXTextBookmark */ = 204EC15918285FB20035FB9D /* PBXTextBookmark */;
204EC15A18285FB20035FB9D /* PBXTextBookmark */ = 204EC15A18285FB20035FB9D /* PBXTextBookmark */;
204EC15B18285FB20035FB9D /* PBXTextBookmark */ = 204EC15B18285FB20035FB9D /* PBXTextBookmark */;
204EC15C18285FB20035FB9D /* PBXTextBookmark */ = 204EC15C18285FB20035FB9D /* PBXTextBookmark */;
204EC15D18285FB20035FB9D /* PBXTextBookmark */ = 204EC15D18285FB20035FB9D /* PBXTextBookmark */;
204EC15E18285FB20035FB9D /* PBXTextBookmark */ = 204EC15E18285FB20035FB9D /* PBXTextBookmark */;
204EC15F18285FB20035FB9D /* PBXTextBookmark */ = 204EC15F18285FB20035FB9D /* PBXTextBookmark */;
204EC16018285FB20035FB9D /* PBXTextBookmark */ = 204EC16018285FB20035FB9D /* PBXTextBookmark */;
204EC16118285FB20035FB9D /* PBXTextBookmark */ = 204EC16118285FB20035FB9D /* PBXTextBookmark */;
204EC16918285FE00035FB9D /* PBXTextBookmark */ = 204EC16918285FE00035FB9D /* PBXTextBookmark */;
204EC171182889AD0035FB9D /* PBXTextBookmark */ = 204EC171182889AD0035FB9D /* PBXTextBookmark */;
204EC173182889AD0035FB9D /* PBXTextBookmark */ = 204EC173182889AD0035FB9D /* PBXTextBookmark */;
204EC176182889C80035FB9D /* PBXTextBookmark */ = 204EC176182889C80035FB9D /* PBXTextBookmark */;
204EC178182889C80035FB9D /* PBXTextBookmark */ = 204EC178182889C80035FB9D /* PBXTextBookmark */;
204EC18218288AF90035FB9D /* PBXTextBookmark */ = 204EC18218288AF90035FB9D /* PBXTextBookmark */;
204EC18318288AF90035FB9D /* PBXTextBookmark */ = 204EC18318288AF90035FB9D /* PBXTextBookmark */;
204EC18418288AF90035FB9D /* PBXTextBookmark */ = 204EC18418288AF90035FB9D /* PBXTextBookmark */;
204EC241182B7A630035FB9D /* PBXTextBookmark */ = 204EC241182B7A630035FB9D /* PBXTextBookmark */;
204F943D18005532007B4DAD /* PBXTextBookmark */ = 204F943D18005532007B4DAD /* PBXTextBookmark */;
2050562217ED9E6100F572B7 /* PBXTextBookmark */ = 2050562217ED9E6100F572B7 /* PBXTextBookmark */;
20567ED217E95DEC0002B1A9 /* PBXTextBookmark */ = 20567ED217E95DEC0002B1A9 /* PBXTextBookmark */;
20567ED517E95DEC0002B1A9 /* PBXTextBookmark */ = 20567ED517E95DEC0002B1A9 /* PBXTextBookmark */;
20568DE817EC16C60022F314 /* PBXTextBookmark */ = 20568DE817EC16C60022F314 /* PBXTextBookmark */;
205AEFD91814CBEE00F6F9FF /* PBXTextBookmark */ = 205AEFD91814CBEE00F6F9FF /* PBXTextBookmark */;
205AEFFA1814D0F800F6F9FF /* PBXTextBookmark */ = 205AEFFA1814D0F800F6F9FF /* PBXTextBookmark */;
205AEFFB1814D0F800F6F9FF /* PBXTextBookmark */ = 205AEFFB1814D0F800F6F9FF /* PBXTextBookmark */;
205AEFFC1814D0F800F6F9FF /* PBXTextBookmark */ = 205AEFFC1814D0F800F6F9FF /* PBXTextBookmark */;
205AF0B0181615E200F6F9FF /* PBXTextBookmark */ = 205AF0B0181615E200F6F9FF /* PBXTextBookmark */;
205AF2A3181662B000F6F9FF /* PBXTextBookmark */ = 205AF2A3181662B000F6F9FF /* PBXTextBookmark */;
205AF3261816681B00F6F9FF /* PBXTextBookmark */ = 205AF3261816681B00F6F9FF /* PBXTextBookmark */;
205AF37618166E8900F6F9FF /* PBXTextBookmark */ = 205AF37618166E8900F6F9FF /* PBXTextBookmark */;
205AF39C181670DB00F6F9FF /* PBXTextBookmark */ = 205AF39C181670DB00F6F9FF /* PBXTextBookmark */;
205AF3B11816778B00F6F9FF /* PBXTextBookmark */ = 205AF3B11816778B00F6F9FF /* PBXTextBookmark */;
205AF3B918167E1100F6F9FF /* PlistBookmark */ = 205AF3B918167E1100F6F9FF /* PlistBookmark */;
205CBE4718134A20009DA0FF /* PBXTextBookmark */ = 205CBE4718134A20009DA0FF /* PBXTextBookmark */;
20664C241808D0EF00942104 /* PBXTextBookmark */ = 20664C241808D0EF00942104 /* PBXTextBookmark */;
20664C291808D0EF00942104 /* PBXTextBookmark */ = 20664C291808D0EF00942104 /* PBXTextBookmark */;
206D5FB01808EAE800C0DE49 /* PBXTextBookmark */ = 206D5FB01808EAE800C0DE49 /* PBXTextBookmark */;
206D5FB61808EAE800C0DE49 /* PBXTextBookmark */ = 206D5FB61808EAE800C0DE49 /* PBXTextBookmark */;
206D60391808F3A600C0DE49 /* PBXTextBookmark */ = 206D60391808F3A600C0DE49 /* PBXTextBookmark */;
206D604B1808F92000C0DE49 /* PBXTextBookmark */ = 206D604B1808F92000C0DE49 /* PBXTextBookmark */;
206D60511808F92000C0DE49 /* PBXTextBookmark */ = 206D60511808F92000C0DE49 /* PBXTextBookmark */;
206D60541808F92000C0DE49 /* PBXTextBookmark */ = 206D60541808F92000C0DE49 /* PBXTextBookmark */;
206D605B1808F99A00C0DE49 /* PBXTextBookmark */ = 206D605B1808F99A00C0DE49 /* PBXTextBookmark */;
206D6096180904FB00C0DE49 /* PBXTextBookmark */ = 206D6096180904FB00C0DE49 /* PBXTextBookmark */;
206D60B3180907AC00C0DE49 /* PBXTextBookmark */ = 206D60B3180907AC00C0DE49 /* PBXTextBookmark */;
206D60B4180907AC00C0DE49 /* PBXTextBookmark */ = 206D60B4180907AC00C0DE49 /* PBXTextBookmark */;
206D60B7180907AC00C0DE49 /* PBXTextBookmark */ = 206D60B7180907AC00C0DE49 /* PBXTextBookmark */;
2090289E17E95F9E0051A253 /* PBXTextBookmark */ = 2090289E17E95F9E0051A253 /* PBXTextBookmark */;
2090289F17E95F9E0051A253 /* PBXTextBookmark */ = 2090289F17E95F9E0051A253 /* PBXTextBookmark */;
209028A517E95F9E0051A253 /* PBXTextBookmark */ = 209028A517E95F9E0051A253 /* PBXTextBookmark */;
20CD05AE180FBCD8005A8231 /* PBXTextBookmark */ = 20CD05AE180FBCD8005A8231 /* PBXTextBookmark */;
20DE9D35180500990047B2DD /* PBXTextBookmark */ = 20DE9D35180500990047B2DD /* PBXTextBookmark */;
20DE9D36180500990047B2DD /* PBXTextBookmark */ = 20DE9D36180500990047B2DD /* PBXTextBookmark */;
20E2179D18179A08003112DE /* PBXTextBookmark */ = 20E2179D18179A08003112DE /* PBXTextBookmark */;
20E2179E18179A08003112DE /* PBXTextBookmark */ = 20E2179E18179A08003112DE /* PBXTextBookmark */;
20E2179F18179A08003112DE /* PBXTextBookmark */ = 20E2179F18179A08003112DE /* PBXTextBookmark */;
20E217A118179A08003112DE /* PBXTextBookmark */ = 20E217A118179A08003112DE /* PBXTextBookmark */;
20E217A518179A08003112DE /* PBXTextBookmark */ = 20E217A518179A08003112DE /* PBXTextBookmark */;
20E217CB18186B4C003112DE /* PBXTextBookmark */ = 20E217CB18186B4C003112DE /* PBXTextBookmark */;
20E217CC18186B4C003112DE /* PBXTextBookmark */ = 20E217CC18186B4C003112DE /* PBXTextBookmark */;
20EC59781808D7A100F759CD /* PBXTextBookmark */ = 20EC59781808D7A100F759CD /* PBXTextBookmark */;
20F6A1AC17E95A6200BAD261 /* PBXTextBookmark */ = 20F6A1AC17E95A6200BAD261 /* PBXTextBookmark */;
20F6A1AE17E95A6200BAD261 /* PBXTextBookmark */ = 20F6A1AE17E95A6200BAD261 /* PBXTextBookmark */;
20F6A1B117E95A6200BAD261 /* PlistBookmark */ = 20F6A1B117E95A6200BAD261 /* PlistBookmark */;
20F6A1E917E95B5200BAD261 /* PBXTextBookmark */ = 20F6A1E917E95B5200BAD261 /* PBXTextBookmark */;
20F6A1EA17E95B5200BAD261 /* PBXTextBookmark */ = 20F6A1EA17E95B5200BAD261 /* PBXTextBookmark */;
20F6A21A17E95C1200BAD261 /* PBXTextBookmark */ = 20F6A21A17E95C1200BAD261 /* PBXTextBookmark */;
20F6A21E17E95C1200BAD261 /* PBXTextBookmark */ = 20F6A21E17E95C1200BAD261 /* PBXTextBookmark */;
};
sourceControlManager = 20F6A1A517E959A000BAD261 /* Source Control */;
userBuildSettings = {