changeset 17:758a39d3f750

Various "engine" cleanups.
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 29 Sep 2012 13:27:38 +0300
parents 833dad075e3b
children ccc5cdce91e3
files krapula.c
diffstat 1 files changed, 107 insertions(+), 120 deletions(-) [+]
line wrap: on
line diff
--- 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;