# HG changeset patch # User Matti Hamalainen # Date 1348914458 -10800 # Node ID 758a39d3f750f218d77802170068d486435845f0 # Parent 833dad075e3bbf1edab6da535c1ba1f18070ee5d Various "engine" cleanups. diff -r 833dad075e3b -r 758a39d3f750 krapula.c --- a/krapula.c Sat Sep 29 09:02:04 2012 +0300 +++ b/krapula.c Sat Sep 29 13:27:38 2012 +0300 @@ -579,112 +579,12 @@ #define engineGetResModule(name) (JSSModule *) engineGetResource(name) -int main(int argc, char *argv[]) +int engineLoadResources() { - BOOL initSDL = FALSE; - JSSModule *mod = NULL; - JSSMixer *dev = NULL; - JSSPlayer *plr = NULL; - int err, i, loaded, total; - SDL_AudioSpec *a_desired = NULL, *a_obtained = NULL; - - memset(&frame, 0, sizeof(frame)); - memset(&engine, 0, sizeof(engine)); - - dmInitProg("krapula", "Lauantai Aamun Krapula", "0.2", "(c) 2012 Anciat Prodz & TNSP", "PENIS."); - if (!dmArgsProcess(argc, argv, optList, optListN, - argHandleOpt, NULL, FALSE)) - exit(1); - - dmPrint(0, "%s\n", dmProgDesc); - dmPrint(0, "%s\n", dmProgAuthor); - dmPrint(0, "TNSP PIERUPASKA engine 2012 'passeli professional' loading.\n"); - - // Open packfs - if ((err = dmres_init("orvellys.dat", NULL, DRF_USE_PACK | DRF_PRELOAD_RES, engineClassifier)) != DMERR_OK) - { - dmError("Could not initialize resource manager: %d, %s.\n", err, dmErrorStr(err)); - goto error_exit; - } - - jssInit(); - - // Initialize SDL components - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) != 0) - { - dmError("Could not initialize SDL: %s\n", SDL_GetError()); - goto error_exit; - } - initSDL = TRUE; - - - // Audio kyrvet - a_desired = dmMalloc(sizeof(SDL_AudioSpec)); - a_obtained = dmMalloc(sizeof(SDL_AudioSpec)); - if (!a_desired || !a_obtained) - { - fprintf(stderr, "Could not allocate SDL shit\n"); - return 3; - } - - a_desired->freq = 44100; - a_desired->format = AUDIO_S16SYS; - a_desired->channels = 2; + int err, loaded, total; + + err = dmres_preload(TRUE, &loaded, &total); - dmMsg(0, "Initializing miniJSS mixer with: %d, %d, %d\n", - JSS_AUDIO_S16, a_desired->channels, a_desired->freq); - - dev = jvmInit(JSS_AUDIO_S16, a_desired->channels, a_desired->freq, JMIX_AUTO); - if (!dev) - { - dmError("jvmInit() returned NULL, voi perkele.\n"); - goto error_exit; - } - - a_desired->samples = 16*1024; - a_desired->callback = engineAudioCallback; - a_desired->userdata = (void *) dev; - - /* Open the audio device */ - dmMsg(0, "Trying to init SDL audio with: %d, %d, %d\n", - a_desired->format, a_desired->channels, a_desired->freq); - - if (SDL_OpenAudio(a_desired, a_obtained) < 0) - { - dmError("Couldn't open audio: %s\n", SDL_GetError()); - goto error_exit; - } - - dmMsg(0, "SDL gave us: %d, %d, %d\n", - a_obtained->format, a_obtained->channels, a_obtained->freq); - - if ((a_obtained->format != a_desired->format) || - (a_obtained->channels != a_desired->channels) || - (a_obtained->freq != a_desired->freq)) - { - dmError("Could not get wanted audio parameters from SDL!\n"); - goto error_exit; - } - - dmFree(a_desired); - - plr = jmpInit(dev); - if (!plr) - { - dmError("jmpInit() returned NULL\n"); - goto error_exit; - } - - - // Joo - if (!dmInitializeVideo(&engine.screen)) - goto error_exit; - - SDL_WM_SetCaption(dmProgDesc, dmProgName); - - - // Load resources - err = dmres_preload(TRUE, &loaded, &total); while ((err = dmres_preload(FALSE, &loaded, &total)) == DMERR_PROGRESS) { // Show a nice progress bar while loading @@ -696,10 +596,7 @@ dy = (engine.screen->h - dh) / 2; if (SDL_MUSTLOCK(engine.screen) != 0 && SDL_LockSurface(engine.screen) != 0) - { - dmError("Can't lock surface.\n"); - goto error_exit; - } + return DMERR_INIT_FAIL; // Draw the progress bar dmClearSurface(engine.screen, dmMapRGBA(engine.screen, 0,0,0,0)); @@ -722,6 +619,105 @@ SDL_Flip(engine.screen); } } + + return err; +} + + + +int main(int argc, char *argv[]) +{ + BOOL initSDL = FALSE; + JSSModule *mod = NULL; + JSSMixer *dev = NULL; + JSSPlayer *plr = NULL; + int err, i; + SDL_AudioSpec afmt; + + memset(&afmt, 0, sizeof(afmt)); + memset(&frame, 0, sizeof(frame)); + memset(&engine, 0, sizeof(engine)); + + dmInitProg("krapula", "Lauantai Aamun Krapula", "0.2", "(c) 2012 Anciat Prodz & TNSP", "PENIS."); + if (!dmArgsProcess(argc, argv, optList, optListN, + argHandleOpt, NULL, FALSE)) + exit(1); + + dmPrint(0, "%s\n", dmProgDesc); + dmPrint(0, "%s\n", dmProgAuthor); + dmPrint(0, "TNSP PIERUPASKA engine 2012 'passeli professional' loading.\n"); + + // Initialize resource subsystem + dmPrint(1, "Initializing resources subsystem.\n"); + if ((err = dmres_init("orvellys.dat", NULL, DRF_USE_PACK | DRF_PRELOAD_RES, engineClassifier)) != DMERR_OK) + { + dmError("Could not initialize resource manager: %d, %s.\n", err, dmErrorStr(err)); + goto error_exit; + } + + + // Initialize SDL components + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) != 0) + { + dmError("Could not initialize SDL: %s\n", SDL_GetError()); + goto error_exit; + } + initSDL = TRUE; + + + // Initialize JSS + jssInit(); + + afmt.freq = 44100; + afmt.format = AUDIO_S16SYS; + afmt.channels = 2; + afmt.samples = 16*1024; + + dmPrint(1, "Initializing miniJSS mixer with: %d, %d, %d\n", + JSS_AUDIO_S16, afmt.channels, afmt.freq); + + if ((dev = jvmInit(JSS_AUDIO_S16, afmt.channels, afmt.freq, JMIX_AUTO)) == NULL) + { + dmError("jvmInit() returned NULL, voi perkele.\n"); + goto error_exit; + } + + if ((plr = jmpInit(dev)) == NULL) + { + dmError("jmpInit() returned NULL\n"); + goto error_exit; + } + + // Initialize SDL audio + dmPrint(1, "Trying to init SDL audio with: %d, %d, %d\n", + afmt.format, afmt.channels, afmt.freq); + + afmt.callback = engineAudioCallback; + afmt.userdata = (void *) dev; + + if (SDL_OpenAudio(&afmt, NULL) < 0) + { + dmError("Couldn't open audio: %s\n", SDL_GetError()); + goto error_exit; + } + + // Initialize SDL video + dmPrint(1, "Initializing SDL video %d x %d x %dbpp - %08x flags\n", + optScrWidth, optScrHeight, 32, optVFlags); + + engine.screen = SDL_SetVideoMode(optScrWidth, optScrHeight, 32, optVFlags); + if (engine.screen == NULL) + { + dmError("Can't SDL_SetVideoMode(): %s\n", SDL_GetError()); + goto error_exit; + } + + SDL_ShowCursor(SDL_DISABLE); + SDL_WM_SetCaption(dmProgDesc, dmProgName); + + + // Load resources + err = engineLoadResources(); if (err != DMERR_OK) { dmError("Error loading resources, %d: %s.\n", @@ -729,7 +725,7 @@ goto error_exit; } - // efut + // Initialize effect stuff dmPerlinInit(); SDL_Surface *nosfe[NOSFE_MAX - NOSFE_MIN + 1]; for (i = 0; i < NOSFE_MAX; i++) @@ -744,7 +740,8 @@ SDL_Surface *bmap = SDL_CreateRGBSurface(SDL_SWSURFACE, QWIDTH, QHEIGHT, 8, 0, 0, 0, 0); - /* Set callback, init module */ + + // Initialize music player jvmSetCallback(dev, jmpExec, plr); jmpSetModule(plr, engineGetResModule("krapula.xm")); jmpPlayOrder(plr, 0); @@ -776,16 +773,6 @@ break; -#if 0 - case SDL_VIDEORESIZE: - optScrWidth = engine.event.resize.w; - optScrHeight = engine.event.resize.h; - - if (!dmInitializeVideo(&engine.screen)) - goto error_exit; - break; -#endif - case SDL_VIDEOEXPOSE: break;