Mercurial > hg > demos > krapula
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; |