/**
The Mana World
Copyright 2004 The Mana World Development Team
This file is part of The Mana World.
The Mana World is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
any later version.
The Mana World is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with The Mana World; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "main.h"
#include "./sound/sound.h"
#include "./graphic/graphic.h"
/* Account infos */
int account_ID, session_ID1, session_ID2;
char sex, n_server, n_character;
SERVER_INFO *server_info;
CHAR_SEL_INFO *char_info;
BITMAP *playerset;
DATAFILE *graphic, *emotions;
char username[25];
char password[25];
int map_address, char_ID;
short map_port;
char map_name[16];
unsigned char state;
unsigned short x, y;
unsigned char direction;
unsigned short job, hair, hair_color;
unsigned char stretch_mode;
// new sound-engine /- kth5
TmwSound sound;
void request_exit() {
state = EXIT;
}
/** Do all initialization stuff */
void init_engine() {
allegro_init();
init_log();
set_close_button_callback(request_exit); // we should not use set_window_close_hook() since it's deprecated and might be gone in the future /-kth5
set_config_file("tmw.ini");
#ifdef MACOSX
set_color_depth(32);
Init_SuperEagle(32);
#else
set_color_depth(16);
Init_SuperEagle(16);
#endif
stretch_mode = get_config_int("settings", "stretch", 0);
if(stretch_mode==0) {
if(set_gfx_mode(get_config_int("settings", "screen", 0), 400, 300, 0, 0))
error(allegro_error);
} else {
if(set_gfx_mode(get_config_int("settings", "screen", 0), 800, 600, 0, 0))
error(allegro_error);
}
if(install_keyboard())
error("Unable to install keyboard");
if(install_timer())
error("Unable to install timer");
if(install_mouse()==-1)
error("Unable to install mouse");
if(alfont_init()!=ALFONT_OK)
error("Unable to install AllegroFont");
buffer = create_bitmap(800, 600);
if(!buffer)
error("Not enough memory to create buffer");
graphic = load_datafile("./data/graphic/graphic.dat");
if(graphic==NULL)
error("Unable to load graphic datafile");
playerset = (BITMAP*)graphic[PLAYERSET_BMP].dat;
emotions = load_datafile("./data/graphic/emotions.dat");
if(emotions==NULL)
error("Unable to load emotions datafile");
init_gui(buffer, "./data/skin/aqua.skin");
state = LOGIN;
}
/** Clear the engine */
void exit_engine() {
gui_exit();
//alfont_exit();
destroy_bitmap(buffer);
allegro_exit();
}
/** Main */
int main() {
init_engine();
// initialize sound-engine and start playing intro-theme /-kth5
try{
if(get_config_int("settings", "sound", 0)==1)
sound.Init(32,20); // inits the sound-subsystem w/ 32 voices / 20 for mod
sound.SetVol(128,128,128); // sets intial volume parameters
//#ifdef WIN32
//sound.StartMIDI("Sound/Midis/city.mid",-1); // play a midi file
//#endif
}catch(const char * err){ // catch errors and show appropriate messages on-screen (elven plz... ^^)
ok("Sound Engine", err);
warning(err);
}
while(state!=EXIT) {
switch(state) {
case LOGIN:
status("LOGIN");
login();
break;
case CHAR_SERVER:
status("CHAR_SERVER");
char_server();
break;
case CHAR_SELECT:
status("CHAR_SELECT");
char_select();
break;
case GAME:
sound.StopBGM();
status("GAME");
map_start();
if( state==GAME )
game();
break;
default:
state = EXIT;
break;
}
}
status("EXIT");
exit_engine();
return 0;
}
END_OF_MAIN();