示例#1
0
void loadpalette(void)
{
    enterfilename("LOAD PALETTE", palname);
    gfx_loadpalette(palname);
    gfx_calcpalette(64, 0, 0, 0);
    gfx_setpalette();
}
示例#2
0
文件: mapedit.c 项目: Jedzia/acm3
void loadpalette(void)
{
    char textbuffer[13];

    textbuffer[0] = 0;
    enterfilename("LOAD PALETTE", textbuffer);

    if (gfx_loadpalette(textbuffer))
    {
        memcpy(map.palettename, textbuffer, 13);
    }
    gfx_calcpalette(64, 0, 0, 0);
    gfx_setpalette();
}
示例#3
0
void mainloop(void)
{
    gfx_calcpalette(64, 0, 0, 0);
    gfx_setpalette();
    win_getspeed(60);

    for (;;)
    {
        speed = win_getspeed(60);
        key = kbd_getkey();
        getmousemove();
        getmousebuttons();
        if ((key == KEY_ESC) || (win_quitted)) break;
        generalcommands();
        gfx_fillscreen(0);
        printinfo();
        printstatus();
        gfx_drawsprite(mousex, mousey, 0x00010001);
        gfx_updatepage();
    }
}
示例#4
0
void initstuff(void)
{
    FILE *handle;

    win_openwindow("Block-info Editor V1.26", NULL);
    win_fullscreen = 1;
    win_setmousemode(MOUSE_ALWAYS_HIDDEN);
    setscreenmode();
    kbd_init();
    mou_init();
    if (!gfx_loadsprites(SPR_FONTS, "fonts.spr"))
    {
        win_messagebox("Sprite load error (FONTS.SPR)");
        exit(1);
    }
    if (!gfx_loadsprites(SPR_EDITOR, "editor.spr"))
    {
        win_messagebox("Sprite load error (EDITOR.SPR)");
        exit(1);
    }
    blkinfdata = malloc((MAXBLOCKS+1)*16);
    if (!blkinfdata)
    {
        win_messagebox("No memory for blockinfotable!");
        exit(1);
    }
    memset(blkinfdata, 0, (MAXBLOCKS+1)*16);

    io_setfilemode(0); // Rest of file access happens without datafile

    gfx_loadblocks(blkname);
    gfx_loadpalette(palname);
    gfx_calcpalette(64,0,0,0);
    gfx_setpalette();
    handle = fopen(infname, "rb");
    if (!handle) return;
    fread(&blkinfdata[0], (gfx_nblocks+1) * 16, 1, handle);
    fclose(handle);
}
示例#5
0
文件: mapedit.c 项目: Jedzia/acm3
void loadmap(void)
{
    FILE *handle;
    int c;

    if (!strlen(mapname)) return;
    handle = fopen(mapname, "rb");
    if (!handle) return;
    /* Load map header */
    fread(&map, sizeof(MAPHEADER), 1, handle);
    /* Load each layer */
    for (c = 0; c < MAX_LAYERS; c++)
    {
        layer[c].xsize = freadle32(handle);
        layer[c].ysize = freadle32(handle);
        layer[c].xdivisor = fread8(handle);
        layer[c].ydivisor = fread8(handle);
        layer[c].xwrap = fread8(handle);
        layer[c].ywrap = fread8(handle);
        if ((layer[c].xsize) && (layer[c].ysize))
        {
            int d;
            for (d = 0; d < layer[c].xsize * layer[c].ysize; d++)
            {
                layerdataptr[c][d] = freadle16(handle);
            }
        }
    }
    fclose(handle);
    /* Load correct blocks & palette */
    gfx_loadblocks((char *)map.blocksname);
    minxsize = (gfx_virtualxsize + (gfx_blockxsize-1)) / gfx_blockxsize;
    minysize = (gfx_virtualysize + (gfx_blockysize-1)) / gfx_blockysize;
    gfx_loadpalette((char *)map.palettename);
    gfx_calcpalette(64, 0, 0, 0);
    gfx_setpalette();
}
示例#6
0
文件: mapedit.c 项目: Jedzia/acm3
void mainloop(void)
{
    gfx_calcpalette(64, 0, 0, 0);
    gfx_setpalette();

    win_getspeed(60);
    for (;;)
    {
        speed = win_getspeed(60);
        if (speed > 10) speed = 10;
        key = kbd_getkey();
        getmousemove();
        getmousebuttons();
        if ((key == KEY_ESC) || (win_quitted)) break;
        blockediting();
        scrollmap();
        generalcommands();
        gfx_fillscreen(transparent);
        drawalllayers();
        printstatus();
        if (mark)
        {
            int mx, my;
            if (layer[cl].xdivisor) mx = markx1*gfx_blockxsize-xpos/layer[cl].xdivisor;
            else mx = markx1*gfx_blockxsize;
            if (layer[cl].xsize)
            {
                while (mx < 0)
                {
                    mx += layer[cl].xsize*gfx_blockxsize;
                }
                mx %= (layer[cl].xsize*gfx_blockxsize);
            }
            if (layer[cl].ydivisor) my = marky1*gfx_blockysize-ypos/layer[cl].ydivisor;
            else my = marky1*gfx_blockysize;
            if (layer[cl].ysize)
            {
                while (my < 0)
                {
                    my += layer[cl].ysize*gfx_blockysize;
                }
                my %= (layer[cl].ysize*gfx_blockysize);
            }
            gfx_drawsprite(mx,my,0x00010002);
        }
        if (mark==2)
        {
            int mx, my;
            if (layer[cl].xdivisor) mx = markx2*gfx_blockxsize-xpos/layer[cl].xdivisor;
            else mx = markx2*gfx_blockxsize;
            if (layer[cl].xsize)
            {
                while (mx < 0)
                {
                    mx += layer[cl].xsize*gfx_blockxsize;
                }
                mx %= (layer[cl].xsize*gfx_blockxsize);
            }
            if (layer[cl].ydivisor) my = marky2*gfx_blockysize-ypos/layer[cl].ydivisor;
            else my = marky2*gfx_blockysize;
            if (layer[cl].ysize)
            {
                while (my < 0)
                {
                    my += layer[cl].ysize*gfx_blockysize;
                }
                my %= (layer[cl].ysize*gfx_blockysize);
            }
            gfx_drawsprite(mx,my,0x00010003);
        }
        gfx_drawsprite(mousex,mousey,0x00010001);
        gfx_updatepage();

    }
}
示例#7
0
int gfx_init(unsigned xsize, unsigned ysize, unsigned framerate, unsigned flags)
{
    int sdlflags = SDL_HWSURFACE;

    // Prevent re-entry (by window procedure)
    if (gfx_initexec) return BME_OK;
    gfx_initexec = 1;

    gfx_last_xsize = xsize;
    gfx_last_ysize = ysize;
    gfx_last_framerate = framerate;
    gfx_last_flags = flags & ~(GFX_FULLSCREEN | GFX_WINDOW);

    // Store the options contained in the flags

    gfx_scanlinemode = flags & (GFX_SCANLINES | GFX_DOUBLESIZE);

    if (flags & GFX_NOSWITCHING) gfx_preventswitch = 1;
        else gfx_preventswitch = 0;
    if (win_fullscreen) sdlflags |= SDL_FULLSCREEN;
    if (flags & GFX_FULLSCREEN) sdlflags |= SDL_FULLSCREEN;
    if (flags & GFX_WINDOW) sdlflags &= ~SDL_FULLSCREEN;
    if (sdlflags & SDL_FULLSCREEN)
    {
        sdlflags |= SDL_DOUBLEBUF;
        gfx_fullscreen = 1;
    }
    else gfx_fullscreen = 0;

    // Calculate virtual window size

    gfx_virtualxsize = xsize;
    gfx_virtualxsize /= 16;
    gfx_virtualxsize *= 16;
    gfx_virtualysize = ysize;
    gfx_vscreen = NULL;

    if ((!gfx_virtualxsize) || (!gfx_virtualysize))
    {
        gfx_initexec = 0;
        gfx_uninit();
        bme_error = BME_ILLEGAL_CONFIG;
        return BME_ERROR;
    }

    // Calculate actual window size (for scanline mode & doublesize mode
    // this is double the virtual)

    gfx_windowxsize = gfx_virtualxsize;
    gfx_windowysize = gfx_virtualysize;
    if (gfx_scanlinemode)
    {
        gfx_windowxsize <<= 1;
        gfx_windowysize <<= 1;
    }

    gfx_vscreen = malloc(gfx_virtualysize*gfx_virtualxsize);
    if (!gfx_vscreen)
    {
        gfx_initexec = 0;
        gfx_uninit();
        bme_error = BME_OUT_OF_MEMORY;
        return BME_ERROR;
    }
    gfx_setclipregion(0, 0, gfx_virtualxsize, gfx_virtualysize);

    // Colors 0 & 255 are always black & white
    gfx_sdlpalette[0].r = 0;
    gfx_sdlpalette[0].g = 0;
    gfx_sdlpalette[0].b = 0;
    gfx_sdlpalette[255].r = 255;
    gfx_sdlpalette[255].g = 255;
    gfx_sdlpalette[255].b = 255;

    gfx_screen = SDL_SetVideoMode(gfx_windowxsize, gfx_windowysize, 8, sdlflags);
    gfx_initexec = 0;
    if (gfx_screen)
    {
        gfx_initted = 1;
        gfx_setpalette();
        win_setmousemode(win_mousemode);
        return BME_OK;
    }
    else return BME_ERROR;
}