comparison krapula.c @ 17:758a39d3f750

Various "engine" cleanups.
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 29 Sep 2012 13:27:38 +0300
parents 833dad075e3b
children ccc5cdce91e3
comparison
equal deleted inserted replaced
16:833dad075e3b 17:758a39d3f750
577 577
578 #define engineGetResImage(name) (SDL_Surface *) engineGetResource(name) 578 #define engineGetResImage(name) (SDL_Surface *) engineGetResource(name)
579 #define engineGetResModule(name) (JSSModule *) engineGetResource(name) 579 #define engineGetResModule(name) (JSSModule *) engineGetResource(name)
580 580
581 581
582 int main(int argc, char *argv[]) 582 int engineLoadResources()
583 { 583 {
584 BOOL initSDL = FALSE; 584 int err, loaded, total;
585 JSSModule *mod = NULL;
586 JSSMixer *dev = NULL;
587 JSSPlayer *plr = NULL;
588 int err, i, loaded, total;
589 SDL_AudioSpec *a_desired = NULL, *a_obtained = NULL;
590
591 memset(&frame, 0, sizeof(frame));
592 memset(&engine, 0, sizeof(engine));
593
594 dmInitProg("krapula", "Lauantai Aamun Krapula", "0.2", "(c) 2012 Anciat Prodz & TNSP", "PENIS.");
595 if (!dmArgsProcess(argc, argv, optList, optListN,
596 argHandleOpt, NULL, FALSE))
597 exit(1);
598
599 dmPrint(0, "%s\n", dmProgDesc);
600 dmPrint(0, "%s\n", dmProgAuthor);
601 dmPrint(0, "TNSP PIERUPASKA engine 2012 'passeli professional' loading.\n");
602
603 // Open packfs
604 if ((err = dmres_init("orvellys.dat", NULL, DRF_USE_PACK | DRF_PRELOAD_RES, engineClassifier)) != DMERR_OK)
605 {
606 dmError("Could not initialize resource manager: %d, %s.\n", err, dmErrorStr(err));
607 goto error_exit;
608 }
609
610 jssInit();
611
612 // Initialize SDL components
613 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) != 0)
614 {
615 dmError("Could not initialize SDL: %s\n", SDL_GetError());
616 goto error_exit;
617 }
618 initSDL = TRUE;
619
620
621 // Audio kyrvet
622 a_desired = dmMalloc(sizeof(SDL_AudioSpec));
623 a_obtained = dmMalloc(sizeof(SDL_AudioSpec));
624 if (!a_desired || !a_obtained)
625 {
626 fprintf(stderr, "Could not allocate SDL shit\n");
627 return 3;
628 }
629
630 a_desired->freq = 44100;
631 a_desired->format = AUDIO_S16SYS;
632 a_desired->channels = 2;
633
634 dmMsg(0, "Initializing miniJSS mixer with: %d, %d, %d\n",
635 JSS_AUDIO_S16, a_desired->channels, a_desired->freq);
636
637 dev = jvmInit(JSS_AUDIO_S16, a_desired->channels, a_desired->freq, JMIX_AUTO);
638 if (!dev)
639 {
640 dmError("jvmInit() returned NULL, voi perkele.\n");
641 goto error_exit;
642 }
643
644 a_desired->samples = 16*1024;
645 a_desired->callback = engineAudioCallback;
646 a_desired->userdata = (void *) dev;
647
648 /* Open the audio device */
649 dmMsg(0, "Trying to init SDL audio with: %d, %d, %d\n",
650 a_desired->format, a_desired->channels, a_desired->freq);
651 585
652 if (SDL_OpenAudio(a_desired, a_obtained) < 0)
653 {
654 dmError("Couldn't open audio: %s\n", SDL_GetError());
655 goto error_exit;
656 }
657
658 dmMsg(0, "SDL gave us: %d, %d, %d\n",
659 a_obtained->format, a_obtained->channels, a_obtained->freq);
660
661 if ((a_obtained->format != a_desired->format) ||
662 (a_obtained->channels != a_desired->channels) ||
663 (a_obtained->freq != a_desired->freq))
664 {
665 dmError("Could not get wanted audio parameters from SDL!\n");
666 goto error_exit;
667 }
668
669 dmFree(a_desired);
670
671 plr = jmpInit(dev);
672 if (!plr)
673 {
674 dmError("jmpInit() returned NULL\n");
675 goto error_exit;
676 }
677
678
679 // Joo
680 if (!dmInitializeVideo(&engine.screen))
681 goto error_exit;
682
683 SDL_WM_SetCaption(dmProgDesc, dmProgName);
684
685
686 // Load resources
687 err = dmres_preload(TRUE, &loaded, &total); 586 err = dmres_preload(TRUE, &loaded, &total);
587
688 while ((err = dmres_preload(FALSE, &loaded, &total)) == DMERR_PROGRESS) 588 while ((err = dmres_preload(FALSE, &loaded, &total)) == DMERR_PROGRESS)
689 { 589 {
690 // Show a nice progress bar while loading 590 // Show a nice progress bar while loading
691 if (total > 0 && (loaded % 2) == 0) 591 if (total > 0 && (loaded % 2) == 0)
692 { 592 {
694 dh = 20, 594 dh = 20,
695 dw = engine.screen->w - (2 * dx), 595 dw = engine.screen->w - (2 * dx),
696 dy = (engine.screen->h - dh) / 2; 596 dy = (engine.screen->h - dh) / 2;
697 597
698 if (SDL_MUSTLOCK(engine.screen) != 0 && SDL_LockSurface(engine.screen) != 0) 598 if (SDL_MUSTLOCK(engine.screen) != 0 && SDL_LockSurface(engine.screen) != 0)
699 { 599 return DMERR_INIT_FAIL;
700 dmError("Can't lock surface.\n");
701 goto error_exit;
702 }
703 600
704 // Draw the progress bar 601 // Draw the progress bar
705 dmClearSurface(engine.screen, dmMapRGBA(engine.screen, 0,0,0,0)); 602 dmClearSurface(engine.screen, dmMapRGBA(engine.screen, 0,0,0,0));
706 dmFillRect(engine.screen, dx, dy, dx+dw, dy+dh, dmMapRGB(engine.screen, 255,255,255)); 603 dmFillRect(engine.screen, dx, dy, dx+dw, dy+dh, dmMapRGB(engine.screen, 255,255,255));
707 dmFillRect(engine.screen, dx+1, dy+1, dx+dw-1, dy+dh-1, dmMapRGB(engine.screen, 0,0,0)); 604 dmFillRect(engine.screen, dx+1, dy+1, dx+dw-1, dy+dh-1, dmMapRGB(engine.screen, 0,0,0));
720 SDL_UnlockSurface(engine.screen); 617 SDL_UnlockSurface(engine.screen);
721 618
722 SDL_Flip(engine.screen); 619 SDL_Flip(engine.screen);
723 } 620 }
724 } 621 }
622
623 return err;
624 }
625
626
627
628 int main(int argc, char *argv[])
629 {
630 BOOL initSDL = FALSE;
631 JSSModule *mod = NULL;
632 JSSMixer *dev = NULL;
633 JSSPlayer *plr = NULL;
634 int err, i;
635 SDL_AudioSpec afmt;
636
637 memset(&afmt, 0, sizeof(afmt));
638 memset(&frame, 0, sizeof(frame));
639 memset(&engine, 0, sizeof(engine));
640
641 dmInitProg("krapula", "Lauantai Aamun Krapula", "0.2", "(c) 2012 Anciat Prodz & TNSP", "PENIS.");
642 if (!dmArgsProcess(argc, argv, optList, optListN,
643 argHandleOpt, NULL, FALSE))
644 exit(1);
645
646 dmPrint(0, "%s\n", dmProgDesc);
647 dmPrint(0, "%s\n", dmProgAuthor);
648 dmPrint(0, "TNSP PIERUPASKA engine 2012 'passeli professional' loading.\n");
649
650 // Initialize resource subsystem
651 dmPrint(1, "Initializing resources subsystem.\n");
652 if ((err = dmres_init("orvellys.dat", NULL, DRF_USE_PACK | DRF_PRELOAD_RES, engineClassifier)) != DMERR_OK)
653 {
654 dmError("Could not initialize resource manager: %d, %s.\n", err, dmErrorStr(err));
655 goto error_exit;
656 }
657
658
659 // Initialize SDL components
660 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) != 0)
661 {
662 dmError("Could not initialize SDL: %s\n", SDL_GetError());
663 goto error_exit;
664 }
665 initSDL = TRUE;
666
667
668 // Initialize JSS
669 jssInit();
670
671 afmt.freq = 44100;
672 afmt.format = AUDIO_S16SYS;
673 afmt.channels = 2;
674 afmt.samples = 16*1024;
675
676 dmPrint(1, "Initializing miniJSS mixer with: %d, %d, %d\n",
677 JSS_AUDIO_S16, afmt.channels, afmt.freq);
678
679 if ((dev = jvmInit(JSS_AUDIO_S16, afmt.channels, afmt.freq, JMIX_AUTO)) == NULL)
680 {
681 dmError("jvmInit() returned NULL, voi perkele.\n");
682 goto error_exit;
683 }
684
685 if ((plr = jmpInit(dev)) == NULL)
686 {
687 dmError("jmpInit() returned NULL\n");
688 goto error_exit;
689 }
690
691 // Initialize SDL audio
692 dmPrint(1, "Trying to init SDL audio with: %d, %d, %d\n",
693 afmt.format, afmt.channels, afmt.freq);
694
695 afmt.callback = engineAudioCallback;
696 afmt.userdata = (void *) dev;
697
698 if (SDL_OpenAudio(&afmt, NULL) < 0)
699 {
700 dmError("Couldn't open audio: %s\n", SDL_GetError());
701 goto error_exit;
702 }
703
704 // Initialize SDL video
705 dmPrint(1, "Initializing SDL video %d x %d x %dbpp - %08x flags\n",
706 optScrWidth, optScrHeight, 32, optVFlags);
707
708 engine.screen = SDL_SetVideoMode(optScrWidth, optScrHeight, 32, optVFlags);
709 if (engine.screen == NULL)
710 {
711 dmError("Can't SDL_SetVideoMode(): %s\n", SDL_GetError());
712 goto error_exit;
713 }
714
715 SDL_ShowCursor(SDL_DISABLE);
716 SDL_WM_SetCaption(dmProgDesc, dmProgName);
717
718
719 // Load resources
720 err = engineLoadResources();
725 if (err != DMERR_OK) 721 if (err != DMERR_OK)
726 { 722 {
727 dmError("Error loading resources, %d: %s.\n", 723 dmError("Error loading resources, %d: %s.\n",
728 err, dmErrorStr(err)); 724 err, dmErrorStr(err));
729 goto error_exit; 725 goto error_exit;
730 } 726 }
731 727
732 // efut 728 // Initialize effect stuff
733 dmPerlinInit(); 729 dmPerlinInit();
734 SDL_Surface *nosfe[NOSFE_MAX - NOSFE_MIN + 1]; 730 SDL_Surface *nosfe[NOSFE_MAX - NOSFE_MIN + 1];
735 for (i = 0; i < NOSFE_MAX; i++) 731 for (i = 0; i < NOSFE_MAX; i++)
736 { 732 {
737 char fname[64]; 733 char fname[64];
742 for (i = 0; i < ncredits; i++) 738 for (i = 0; i < ncredits; i++)
743 credits[i].img = engineGetResImage(credits[i].filename); 739 credits[i].img = engineGetResImage(credits[i].filename);
744 740
745 SDL_Surface *bmap = SDL_CreateRGBSurface(SDL_SWSURFACE, QWIDTH, QHEIGHT, 8, 0, 0, 0, 0); 741 SDL_Surface *bmap = SDL_CreateRGBSurface(SDL_SWSURFACE, QWIDTH, QHEIGHT, 8, 0, 0, 0, 0);
746 742
747 /* Set callback, init module */ 743
744 // Initialize music player
748 jvmSetCallback(dev, jmpExec, plr); 745 jvmSetCallback(dev, jmpExec, plr);
749 jmpSetModule(plr, engineGetResModule("krapula.xm")); 746 jmpSetModule(plr, engineGetResModule("krapula.xm"));
750 jmpPlayOrder(plr, 0); 747 jmpPlayOrder(plr, 0);
751 jvmSetGlobalVol(dev, 55); 748 jvmSetGlobalVol(dev, 55);
752 SDL_PauseAudio(0); 749 SDL_PauseAudio(0);
774 break; 771 break;
775 } 772 }
776 773
777 break; 774 break;
778 775
779 #if 0
780 case SDL_VIDEORESIZE:
781 optScrWidth = engine.event.resize.w;
782 optScrHeight = engine.event.resize.h;
783
784 if (!dmInitializeVideo(&engine.screen))
785 goto error_exit;
786 break;
787 #endif
788
789 case SDL_VIDEOEXPOSE: 776 case SDL_VIDEOEXPOSE:
790 break; 777 break;
791 778
792 case SDL_QUIT: 779 case SDL_QUIT:
793 engine.exitFlag = TRUE; 780 engine.exitFlag = TRUE;