Reinitialize console text / font on resolution change
[attac-man.git] / main.c
blobb3c160c1ff0615286cc4f294cbb15f548fbe4906
1 /*
2 Pacman Arena
3 Copyright (C) 2003 Nuno Subtil
5 This program is free software; you can redistribute it and/or
6 modify it under the terms of the GNU General Public License
7 as published by the Free Software Foundation; either version 2
8 of the License, or (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 static const char cvsid[] =
21 "$Id: main.c,v 1.60 2003/11/27 22:11:57 nsubtil Exp $";
23 #ifdef _WIN32
24 #include <windows.h>
25 #endif
27 #include <GL/gl.h>
28 #include <SDL.h>
29 #include <SDL_net.h>
30 #include <stdlib.h>
31 #include <string.h>
32 #include <unistd.h>
34 #include "audio.h"
35 #include "object.h"
36 #include "game.h"
37 #include "map.h"
38 #include "player.h"
39 #include "render.h"
40 #include "m_math.h"
41 #include "menu.h"
42 #include "screen.h"
43 #include "net.h"
44 #include "oglconsole.h"
46 extern struct game* current_game;
49 * TODO: Rename function. Need to look around code where it calls
50 * SDL_Quit() and exit and see if we can call this instead in
51 * those places.
53 void die(int ret)
55 OGLCONSOLE_Quit();
56 SDL_Quit();
57 exit(ret);
61 static int parse_resolution(char *res, int *w, int *h, int *bpp)
63 char res_copy[80];
64 char *p;
66 snprintf(res_copy, sizeof(res_copy)-1, "%s", res);
67 p = strtok(res_copy, "x");
68 if (!p)
69 goto out_err;
70 *w = atoi(p);
71 if (*w <= 0)
72 goto out_err;
74 p = strtok(NULL, "x");
75 if (!p)
76 goto out_err;
77 *h = atoi(p);
78 if (*h <= 0)
79 goto out_err;
81 p = strtok(NULL, "x");
82 if (!p)
83 goto out_ok;
84 *bpp = atoi(p);
85 if (*bpp <= 0)
86 goto out_err;
88 out_ok:
89 return 0;
90 out_err:
91 printf("Could not parse resolution '%s'\n", res);
92 return 1;
96 /* TODO: rewrite parsing routines here */
97 /* TODO: Add 'map' command to change maps */
98 static void console_input(OGLCONSOLE_Console console, char *cmd)
100 int width, height, x;
102 if (!strncmp(cmd, "quit", 4) ||
103 !strncmp(cmd, "exit", 4)) {
104 die(0);
107 if (!strncmp(cmd, "res ", 4)) {
108 if (parse_resolution((cmd+4), &width, &height, &x) != 0) {
109 con_printf("usage: res <resolution> e.g. 640x480\n");
110 return;
112 screen_set_resolution(width, height);
113 screen_switch_resolution();
114 OGLCONSOLE_InitText(console, width, height);
115 return;
118 if (!strncmp(cmd, "score", 5)) {
119 if (!current_game) {
120 con_printf("Start playing, first...\n");
121 return;
123 if (!current_game->players) {
124 con_printf("But, there are no players?\n");
125 return;
127 for (x = 0; x < current_game->n_players; x++) {
128 con_printf("Player %d: %d points, %d lives\n", x+1,
129 current_game->players[x].score,
130 current_game->players[x].lives);
131 return;
135 OGLCONSOLE_Output(console, "Invalid command: %s\n", cmd);
139 int main(int argc, char **argv)
141 int opt, ret = 0;
142 int width = 800, height = 600, bpp = 32, fullscreen = 0;
143 int enable_sound = 1;
145 while ((opt = getopt(argc, argv, "fwr:q")) != EOF) {
146 switch(opt) {
147 case 'f':
148 fullscreen = 1;
149 break;
150 case 'w':
151 fullscreen = 0;
152 break;
153 case 'q':
154 enable_sound = 0;
155 break;
156 case 'r':
157 if (parse_resolution(optarg, &width, &height,
158 &bpp) != 0)
159 return 1;
160 printf("Set resolution to %dx%dx%d\n",
161 width, height, bpp);
162 break;
163 default:
164 fprintf(stderr, "Invalid command line option: %c\n",
165 opt);
166 ret = 1;
167 case 'h':
168 /* fixme: help? */
169 return ret;
174 render_reshape_window(screen->w, screen->h);
177 srand(SDL_GetTicks());
179 screen_init(fullscreen, width, height, bpp);
181 audio_init(enable_sound);
183 /* preload */
185 object_read_file("gfx/pacman-moving.3d", &last_update);
186 object_read_file("gfx/pacman-dying.3d", &last_update);
187 object_read_file("gfx/pacman-stopped.3d", &last_update);
188 object_read_file("gfx/ghost-green-moving.3d", &last_update);
189 object_read_file("gfx/ghost-green-dying.3d", &last_update);
190 object_read_file("gfx/ghost-green-returning.3d", &last_update);
193 if(argc > 1 && strcmp(argv[1], "--server") == 0)
194 net_server_init();
196 if(argc > 1 && strcmp(argv[1], "--connect") == 0)
197 net_client_init(argv[2]);
199 OGLCONSOLE_Create();
200 OGLCONSOLE_EnterKey(console_input);
202 for(;;)
203 menu_run();
205 return 0;