⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pnuc.c

📁 一个runtils v2.0图形音乐库的demo程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*============================================================================*/
/*   PROJECT NUCLEUS.      (c) RocSoft, 1995.                                 */
/*   v1.0  18 Jan 95.                                                         */
/*============================================================================*/

#include <dos.h>
#include <rgenrl.h>
#include <rgraph.h>
#include <rsprite.h>
#include <rinout.h>
#include <rfileio.h>
#include <rsound.h>
#include <rblast.h>
#include <rmem.h>
#include <rmath.h>
#include "\rocco\glib\games.h"

#include <malloc.h>
#include <memory.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#include "defines.h"
#include "prototyp.h"
#include "globals.h"

int           WPage=0;

char          *Banner="Project Nucleus  v1.0  Shareware Version  (c) RocSoft, 1995";
char          *ErrorTab[]={ "Memory Allocation Error!",
                             "",
                             "No mouse driver present!",
                             "Game data missing!",
                             "Failure loading Nucleus Level Data (NLD) file!",
                             "" };
char          *LevelName="NUCLEUS.NLD";
char          Demo_Exited, Demo_Mode;

unsigned int  Demo_Timer=0, Experiment_Timer=0;
int           *RootTable;

int           LogoIndex1[]={ 0,1,2,3,4,5,6 };
int           LogoIndex2[]={ 7,8,5,9,4,8,10 };
int           Logo_Control[14];
int           ParticleMass[NUM_OF_PARTICLES]={ 1,2,4 };

/*     Debug Flags     */

BYTE          Check_Sfx=FALSE;
BYTE          Screen_Shot=FALSE;
int           Check_Level=0;
char          *Cheat_Password="13crZ9";

/*=====================[ External Variable Definitions ]======================*/

extern GAME_MENU        GMenu;
extern GAME_OPTIONS     GOptions;
extern HIGH_SCORE_TABLE High_Scores;
extern GAME_SLOTS       GSlots;

extern int              No_Sound_Flag, Effects_Flag, Music_Flag;

/*==========================[ The Main Program ]==============================*/

void main( int argc, char *argv[] )
{
    int    handle, bytes, opt, i;
    char   quit_flag=FALSE, buff[8], no_sound=FALSE, force_spk=FALSE;

    for ( i=1; i<argc; i++ )
    {
        if ( stricmp(argv[i],"/SFX")==0 ) Check_Sfx=TRUE; else
         if ( strnicmp(argv[i],"/LEV:",5)==0 ) Check_Level=atoi(argv[i]+5); else
           if ( stricmp(argv[i],"/SCREENSHOT")==0 ) Screen_Shot=TRUE; else
             if ( stricmp(argv[i],"/NOSOUND")==0 ) no_sound=TRUE; else
               if ( stricmp(argv[i],"/SPK")==0 ) force_spk=TRUE; else
                 if ( strnicmp(argv[i],"/L:",3)==0 ) LevelName=argv[i]+3;
    }

    if ( (allocpal(&DefPal,VGA_PALETTE))==NULL ) Terminate( ERR_MALLOC );
    getpals( &DefPal );

    Game_Paused    = TRUE;

    OldINT9H       = NULL;
    PMousePtr.h    = PMousePtr.w = 1;
    PMousePtr.buff = NULL;

    Max_Levels     = 0;

    randomize();

    Print_Banner(TRUE);

    OldINT9H    = _dos_getvect(0x09);
    _dos_setvect( 0x09,NewINT9H );

    prints( "Timers       :",L_GREY,0 );
    prints( (enable_timers(SAMPLE_RATE)==0)?"ENABLED!":"NOT ENABLED!\a",WHITE,0 );

    set_timer_hooks( NULL, &Slow_Timer_Hook );

    prints( "\n\rSound Source :",L_GREY,0 );
    if ( !force_spk && SB_enable()==0 )
    {
        prints( "SOUND BLASTER!",WHITE,0 );
        Sound_Source = SOUND_BLASTER;
    }
    else
    {
        prints( (enable_sound(SOUND_QUEUE_SIZE,SAMPLE_RATE)==0)?"PC SPEAKER!":"NO SOUND!\a",WHITE,0 );
        Sound_Source = PC_SPEAKER;
    }

    prints( "\n\rMouse        :",L_GREY,0 );
    prints( (MouseActive=chkmouse())?"ENABLED!":"NOT ENABLED!\a",WHITE,0 );

    setpos( 0,21,0 );
    prints( "Please wait...",L_GREY,0 );

    if ( (RootTable=(int *)malloc(MAX_SQUARE*sizeof(int)))==NULL ) Terminate( ERR_MALLOC );
    for ( i=0; i<MAX_SQUARE; i++ ) RootTable[i]=PseudoRoot(i);

    if ( !MouseActive || enable_pseudo_mouse(&PMousePtr,&MouseTrap) ) Terminate( ERR_NOMOUSE );

    No_Sound_Flag = FALSE;
    Effects_Flag  = Music_Flag = TRUE;

    if ( no_sound )
    {
        No_Sound_Flag=TRUE;
        Effects_Flag =Music_Flag=FALSE;
    }
    else
    {
        if ( !opfile(&handle,"OPTIONS.CFG",READ,NOT_WRITE) )
        {
            rdfile( handle,sizeof(int),(char *)&No_Sound_Flag,&bytes );
            rdfile( handle,sizeof(int),(char *)&Effects_Flag,&bytes );
            rdfile( handle,sizeof(int),(char *)&Music_Flag,&bytes );
            clfile( handle );
        }
    }

    if ( Sound_Source!=SOUND_BLASTER )
      Music_Flag=GOptions.o[ MUSIC_OPTIONS_TOKEN ].active=FALSE;
    else
      if ( Music_Flag ) GOptions_Music( 0 );

    if ( !opfile(&handle,"SAVENAME.TAB",READ,NOT_WRITE) )
    {
        rdfile( handle,sizeof(GSlots.name),(char *)&GSlots.name,&bytes );
        clfile( handle );
    }

    if ( !opfile(&handle,"SCORES.TAB",READ,NOT_WRITE) )
    {
        rdfile( handle,sizeof(High_Scores.initials),(char *)&High_Scores.initials,&bytes );
        rdfile( handle,sizeof(High_Scores.scores),(char *)&High_Scores.scores,&bytes );
        clfile( handle );
    }

    Load_Game_Data();
    Create_Animations();

    if ( Check_Sfx )
    {
        setpos( 0,23,0 );
        for ( i=0; i<NUMBER_OF_SFX; i++ )
        {
            printsi( "\rSound Effect: ",i,7,0 );
            if ( getkey(0)==ESCAPEKEY ) break;
            Sfx( i );
        }
    }

    if ( Check_Level != 0 )
    {
        cls( ATTR(BLUE,L_YELLOW) );
        setpos( 35,0,0 );
        prints( "Cheat Mode",ATTR(BLUE,L_YELLOW),0 );
        setpos( 10,10,0 );
        prints( "Enter Password:",ATTR(BLUE,L_YELLOW),0 );
        Sfx( SFX_WARNING );
        *buff = '\0';
        if ( getstr(26,10,buff,6,ATTR(RED,WHITE)) || strcmp(buff,Cheat_Password ) )
        {
            setpos( 0,23,0 );
            prints( "Cheat Mode Failed!",ATTR(RED,WHITE),0 );
            Check_Level=0;
            Sfx( SFX_ERROR );
        }
        else
        {
            setpos( 0,23,0 );
            prints( "Cheat Mode Verified!",ATTR(BLUE,WHITE),0 );
            Sfx( SFX_BONUS_PICKUP );
        }
        sleep( 1 );
    }

    do
    {
        Menu_New_Game( 0 );
        Demo_Exited = FALSE;
        Demo_Mode   = TRUE;
        Display_Title_Screen();
        if ( !Demo_Exited )
        {
            Play_Level();
            if ( !Demo_Exited ) Hall_Of_Fame( &High_Scores,0L,1 );
        }
        if ( Demo_Exited )
        {
            Demo_Mode = FALSE;
            do
            {
                switch( opt=Game_Menu(&GMenu,0) )
                {
                    case NEW_GAME_OPTION:
                    case LOAD_GAME_OPTION:
                    case BACK_TO_GAME_OPTION:
                        if ( Check_Level!=0 && Check_Level<=Max_Levels && Cfg.level<Check_Level )
                        {
                            Cfg.level = Check_Level;
                            Initialise_Level();
                        }
                        Play_Level();
                        GMenu.m[ SAVE_GAME_OPTION].active = GMenu.m[ BACK_TO_GAME_OPTION ].active = (Meltdown || Cfg.level>Max_Levels)?FALSE:TRUE;
                        break;
                    case EXIT_OPTION:
                        quit_flag=TRUE;
                        break;
                }
            }
            while ( !quit_flag && opt!=DEMO_OPTION );
        }
    }
    while ( !quit_flag );

    if ( !mkfile(&handle,"SCORES.TAB",NORMAL) )
    {
        wtfile( handle,sizeof(High_Scores.initials),(char *)&High_Scores.initials,&bytes );
        wtfile( handle,sizeof(High_Scores.scores),(char *)&High_Scores.scores,&bytes );
        clfile( handle );
    }

    if ( !mkfile(&handle,"SAVENAME.TAB",NORMAL) )
    {
        wtfile( handle,sizeof(GSlots.name),(char *)&GSlots.name,&bytes );
        clfile( handle );
    }

    if ( !mkfile(&handle,"OPTIONS.CFG",NORMAL) )
    {
        wtfile( handle,sizeof(int),(char *)&No_Sound_Flag,&bytes );
        wtfile( handle,sizeof(int),(char *)&Effects_Flag,&bytes );
        wtfile( handle,sizeof(int),(char *)&Music_Flag,&bytes );
        clfile( handle );
    }

    fadeout( &Pal,0 );
    Terminate( ERR_REGNAG );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -