(20111228) 01:00
This commit is contained in:
@@ -93,6 +93,7 @@ int Draw_Init(int width,int height,char *title,int fps){
|
|||||||
glDepthMask( GL_FALSE);
|
glDepthMask( GL_FALSE);
|
||||||
|
|
||||||
// Triplebuffer swap
|
// Triplebuffer swap
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
SDL_GL_SwapBuffers();
|
SDL_GL_SwapBuffers();
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
SDL_GL_SwapBuffers();
|
SDL_GL_SwapBuffers();
|
||||||
@@ -116,7 +117,7 @@ int Draw_Init(int width,int height,char *title,int fps){
|
|||||||
glMatrixMode (GL_PROJECTION);
|
glMatrixMode (GL_PROJECTION);
|
||||||
glPushMatrix ();
|
glPushMatrix ();
|
||||||
glLoadIdentity ();
|
glLoadIdentity ();
|
||||||
glOrtho (0,width, 0, height, -1000, 1000);
|
glOrtho (0,_width, 0, _height, -1000, 1000);
|
||||||
glMatrixMode (GL_MODELVIEW);
|
glMatrixMode (GL_MODELVIEW);
|
||||||
glPushMatrix ();
|
glPushMatrix ();
|
||||||
glLoadIdentity ();
|
glLoadIdentity ();
|
||||||
@@ -136,7 +137,7 @@ int Draw_Init(int width,int height,char *title,int fps){
|
|||||||
void Draw_Loop(int (*proc)(),void (*draw)()){
|
void Draw_Loop(int (*proc)(),void (*draw)()){
|
||||||
int done=0;
|
int done=0;
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
Uint8* keys;
|
// Uint8* keys;
|
||||||
long long time,time2;
|
long long time,time2;
|
||||||
long long t_frame=0;
|
long long t_frame=0;
|
||||||
|
|
||||||
@@ -159,28 +160,35 @@ void Draw_Loop(int (*proc)(),void (*draw)()){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
// Process keys for Draw
|
// Process keys for Draw
|
||||||
keys=SDL_GetKeyState(NULL);
|
keys=SDL_GetKeyState(NULL);
|
||||||
if(keys[SDLK_F12]){
|
if(keys[SDLK_F12]){
|
||||||
// Screenshot key
|
// Screenshot key
|
||||||
SDL_SaveBMP(_screen,"shot.bmp");
|
SDL_SaveBMP(_screen,"shot.bmp");
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
// Input and sound Frame
|
// Sound Frame
|
||||||
Input_Frame();
|
|
||||||
Audio_Frame();
|
Audio_Frame();
|
||||||
|
|
||||||
// Process
|
// Measure time
|
||||||
time2=Time_GetTime();
|
time2=Time_GetTime();
|
||||||
t_frame+=time2-time;
|
t_frame+=time2-time;
|
||||||
time=time2;
|
time=time2;
|
||||||
|
if(t_frame>50000){
|
||||||
|
t_frame=50000;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process
|
||||||
if(proc){
|
if(proc){
|
||||||
while(t_frame>_t_frame && !done){
|
while(t_frame>_t_frame && !done){
|
||||||
|
//while(t_frame>0 && !done){
|
||||||
|
Input_Frame();
|
||||||
if(!proc()){
|
if(!proc()){
|
||||||
done=1;
|
done=1;
|
||||||
}
|
}
|
||||||
t_frame-=_t_frame;
|
t_frame-=_t_frame;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -422,6 +430,15 @@ void Draw_DrawImgPart(DrawImg img,int x,int y,int w,int i){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// Draw_SetColor
|
||||||
|
//
|
||||||
|
//
|
||||||
|
void Draw_SetColor(float r,float g,float b,float a){
|
||||||
|
glColor4f(r,g,b,a);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////
|
////////////////////////////////////////////////
|
||||||
// DrawFnt //
|
// DrawFnt //
|
||||||
/////////////
|
/////////////
|
||||||
7
Draw.h
7
Draw.h
@@ -72,6 +72,13 @@ void Draw_DrawImg(DrawImg img,int x,int y);
|
|||||||
void Draw_DrawImgPart(DrawImg img,int x,int y,int w,int i);
|
void Draw_DrawImgPart(DrawImg img,int x,int y,int w,int i);
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// Draw_SetColor
|
||||||
|
//
|
||||||
|
//
|
||||||
|
void Draw_SetColor(float r,float g,float b,float a);
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////
|
////////////////////////////////////////////////
|
||||||
// DrawFnt //
|
// DrawFnt //
|
||||||
/////////////
|
/////////////
|
||||||
|
|||||||
457
DrawSDL.c
457
DrawSDL.c
@@ -1,457 +0,0 @@
|
|||||||
// Copyright (C) 2011 Valeriano Alfonso Rodriguez (Kableado)
|
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
#define _WIN32_WINNT 0x0501
|
|
||||||
#include <windows.h>
|
|
||||||
#endif
|
|
||||||
#include <SDL/SDL.h>
|
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
#include "Time.h"
|
|
||||||
#include "Util.h"
|
|
||||||
#include "Draw.h"
|
|
||||||
#include "Input.h"
|
|
||||||
#include "Audio.h"
|
|
||||||
|
|
||||||
|
|
||||||
// Globals
|
|
||||||
SDL_Surface *_screen=NULL;
|
|
||||||
long long _t_frame=17000;
|
|
||||||
|
|
||||||
/////////////////////////////
|
|
||||||
// Draw_Init
|
|
||||||
//
|
|
||||||
// Initializes the game window.
|
|
||||||
int Draw_Init(int width,int height,char *title,int fps){
|
|
||||||
#ifdef WIN32
|
|
||||||
// Stdout on the parent console
|
|
||||||
AttachConsole(ATTACH_PARENT_PROCESS);
|
|
||||||
if(GetStdHandle(STD_OUTPUT_HANDLE)!=0){
|
|
||||||
fclose(stdin);
|
|
||||||
fclose(stdout);
|
|
||||||
fclose(stderr);
|
|
||||||
freopen("CONIN$","r",stdin);
|
|
||||||
freopen("CONOUT$","w",stdout);
|
|
||||||
freopen("CONOUT$","w",stderr);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Initialize SDL
|
|
||||||
if(SDL_Init(SDL_INIT_VIDEO)<0){
|
|
||||||
printf("Draw_Init: Failure initializing SDL.\n");
|
|
||||||
printf("Draw_Init: SDL Error: %s\n",SDL_GetError());
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize video mode
|
|
||||||
_screen=SDL_SetVideoMode(width,height,32,SDL_HWSURFACE);
|
|
||||||
if( _screen == NULL){
|
|
||||||
printf("Draw_Init: Failure initializing video mode.\n");
|
|
||||||
printf("Draw_Init: SDL Error: %s\n",SDL_GetError());
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
SDL_WM_SetCaption(title, NULL);
|
|
||||||
_t_frame=1000000/fps;
|
|
||||||
|
|
||||||
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////
|
|
||||||
// Draw_Loop
|
|
||||||
//
|
|
||||||
// Loops updating the game window.
|
|
||||||
void Draw_Loop(int (*proc)(),void (*draw)()){
|
|
||||||
int done=0;
|
|
||||||
SDL_Event event;
|
|
||||||
Uint8* keys;
|
|
||||||
long long time,time2;
|
|
||||||
long long t_frame=0;
|
|
||||||
|
|
||||||
t_frame=0;
|
|
||||||
while(!done){
|
|
||||||
|
|
||||||
// Update screen
|
|
||||||
time=Time_GetTime();
|
|
||||||
//SDL_GL_SwapBuffers();
|
|
||||||
SDL_Flip(_screen);
|
|
||||||
|
|
||||||
|
|
||||||
// Process Events
|
|
||||||
while(SDL_PollEvent(&event) ){
|
|
||||||
if(event.type == SDL_QUIT ){
|
|
||||||
done=1;
|
|
||||||
}
|
|
||||||
if(event.type == SDL_KEYDOWN ){
|
|
||||||
if(event.key.keysym.sym == SDLK_ESCAPE ) {
|
|
||||||
done=1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Process keys for Draw
|
|
||||||
keys=SDL_GetKeyState(NULL);
|
|
||||||
if(keys[SDLK_F12]){
|
|
||||||
// Screenshot key
|
|
||||||
SDL_SaveBMP(_screen,"shot.bmp");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Input and sound Frame
|
|
||||||
Input_Frame();
|
|
||||||
Audio_Frame();
|
|
||||||
|
|
||||||
// Process
|
|
||||||
time2=Time_GetTime();
|
|
||||||
t_frame+=time2-time;
|
|
||||||
time=time2;
|
|
||||||
if(proc){
|
|
||||||
while(t_frame>_t_frame && !done){
|
|
||||||
if(!proc()){
|
|
||||||
done=1;
|
|
||||||
}
|
|
||||||
t_frame-=_t_frame;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Draw
|
|
||||||
draw();
|
|
||||||
|
|
||||||
Time_Pause(0);
|
|
||||||
t_frame+=Time_GetTime()-time;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////
|
|
||||||
// Draw_Clean
|
|
||||||
//
|
|
||||||
// Cleans the game window.
|
|
||||||
void Draw_Clean(
|
|
||||||
unsigned char r,
|
|
||||||
unsigned char g,
|
|
||||||
unsigned char b)
|
|
||||||
{
|
|
||||||
SDL_Rect rect;
|
|
||||||
|
|
||||||
// Draw a full rectangle
|
|
||||||
rect.x=0;
|
|
||||||
rect.y=0;
|
|
||||||
rect.w=_screen->w;
|
|
||||||
rect.h=_screen->h;
|
|
||||||
SDL_FillRect(_screen, &rect,
|
|
||||||
SDL_MapRGB(_screen->format, r, g, b));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////
|
|
||||||
// DrawImage //
|
|
||||||
///////////////
|
|
||||||
// Image container.
|
|
||||||
typedef struct Tag_DrawImage {
|
|
||||||
SDL_Surface *surf;
|
|
||||||
int x,y;
|
|
||||||
} DrawImage;
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////
|
|
||||||
// Draw_LoadSurface
|
|
||||||
//
|
|
||||||
// Loads a surface.
|
|
||||||
SDL_Surface *Draw_LoadSurface(char *filename){
|
|
||||||
SDL_Surface *surf;
|
|
||||||
|
|
||||||
// Load the BMP as a surface
|
|
||||||
surf=SDL_LoadBMP(filename);
|
|
||||||
if(surf == NULL){
|
|
||||||
printf("Draw_LoadImage: Failure Loading image: %s\n",filename);
|
|
||||||
printf("Draw_LoadImage: SDL Error: %s\n",SDL_GetError());
|
|
||||||
return(NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIX: Setting up the alpha channel.
|
|
||||||
if(surf->format->BytesPerPixel==4){
|
|
||||||
int i,len,trans;
|
|
||||||
|
|
||||||
// set the correct values
|
|
||||||
surf->format->Amask=0xFF000000;
|
|
||||||
surf->format->Ashift=24;
|
|
||||||
|
|
||||||
// Check if the image has some area transparent
|
|
||||||
trans=0;
|
|
||||||
len=surf->w*surf->h;
|
|
||||||
for(i=0;i<len;i++){
|
|
||||||
if((((Uint32 *)surf->pixels)[i]&0xFF000000)!=0xFF000000){
|
|
||||||
trans=1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(trans){
|
|
||||||
// Make it use the alpha channel
|
|
||||||
SDL_SetAlpha(surf, SDL_SRCALPHA, 255);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return(surf);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////
|
|
||||||
// Draw_LoadImage
|
|
||||||
//
|
|
||||||
// Loads a image, giving a reference.
|
|
||||||
DrawImg Draw_LoadImage(char *filename){
|
|
||||||
DrawImage *image;
|
|
||||||
SDL_Surface *surf;
|
|
||||||
|
|
||||||
// Loads the surface
|
|
||||||
surf=Draw_LoadSurface(filename);
|
|
||||||
if(surf == NULL){
|
|
||||||
return(NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create the image container
|
|
||||||
image=malloc(sizeof(DrawImage));
|
|
||||||
image->surf=surf;
|
|
||||||
image->x=0;
|
|
||||||
image->y=0;
|
|
||||||
|
|
||||||
return((DrawImg)image);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////
|
|
||||||
// Draw_GetSize
|
|
||||||
//
|
|
||||||
// Gets the image size.
|
|
||||||
void Draw_GetSize(DrawImg img,int *w,int *h){
|
|
||||||
DrawImage *image=img;
|
|
||||||
|
|
||||||
// Gets the image size
|
|
||||||
*w=image->surf->w;
|
|
||||||
*h=image->surf->h;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////
|
|
||||||
// Draw_SetOffset
|
|
||||||
// Draw_GetOffset
|
|
||||||
//
|
|
||||||
// Sets and Gets the image offset.
|
|
||||||
void Draw_SetOffset(DrawImg img,int x,int y){
|
|
||||||
DrawImage *image=img;
|
|
||||||
|
|
||||||
// Sets the image offset
|
|
||||||
image->x=x;
|
|
||||||
image->y=y;
|
|
||||||
}
|
|
||||||
void Draw_GetOffset(DrawImg img,int *x,int *y){
|
|
||||||
DrawImage *image=img;
|
|
||||||
|
|
||||||
// Gets the image offset
|
|
||||||
*x=image->x;
|
|
||||||
*y=image->y;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////
|
|
||||||
// Draw_DrawImg
|
|
||||||
//
|
|
||||||
// Draws an image.
|
|
||||||
void Draw_DrawImg(DrawImg img,int x,int y){
|
|
||||||
DrawImage *image=img;
|
|
||||||
SDL_Rect orig;
|
|
||||||
SDL_Rect dest;
|
|
||||||
|
|
||||||
// Prepare the rects
|
|
||||||
orig.x=0;
|
|
||||||
orig.y=0;
|
|
||||||
dest.x=x+image->x;
|
|
||||||
dest.y=y+image->y;
|
|
||||||
orig.w=dest.w=image->surf->w;
|
|
||||||
orig.h=dest.h=image->surf->h;
|
|
||||||
|
|
||||||
// Blit the surface on the screen
|
|
||||||
SDL_BlitSurface(image->surf,&orig,_screen,&dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////
|
|
||||||
// Draw_DrawImgPart
|
|
||||||
//
|
|
||||||
// Draws an image part.
|
|
||||||
void Draw_DrawImgPart(DrawImg img,int x,int y,int w,int i){
|
|
||||||
DrawImage *image=img;
|
|
||||||
SDL_Rect orig;
|
|
||||||
SDL_Rect dest;
|
|
||||||
|
|
||||||
// Prepare the rects
|
|
||||||
orig.x=w*i;
|
|
||||||
orig.y=0;
|
|
||||||
dest.x=x+image->x;
|
|
||||||
dest.y=y+image->y;
|
|
||||||
orig.w=dest.w=w;
|
|
||||||
orig.h=dest.h=image->surf->h;
|
|
||||||
|
|
||||||
// Blit the surface on the screen
|
|
||||||
SDL_BlitSurface(image->surf,&orig,_screen,&dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////
|
|
||||||
// Draw_DrawImgTrans
|
|
||||||
//
|
|
||||||
// Draws an image transformed.
|
|
||||||
void Draw_DrawImgTrans(DrawImg img,int x,int y,float angle){
|
|
||||||
DrawImage *image=img;
|
|
||||||
SDL_Rect orig;
|
|
||||||
SDL_Rect dest;
|
|
||||||
|
|
||||||
// Prepare the rects
|
|
||||||
orig.x=0;
|
|
||||||
orig.y=0;
|
|
||||||
dest.x=x+image->x;
|
|
||||||
dest.y=y+image->y;
|
|
||||||
orig.w=dest.w=image->surf->w;
|
|
||||||
orig.h=dest.h=image->surf->h;
|
|
||||||
|
|
||||||
// Blit the surface on the screen
|
|
||||||
SDL_BlitSurface(image->surf,&orig,_screen,&dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////
|
|
||||||
// DrawFnt //
|
|
||||||
/////////////
|
|
||||||
// Reference to a Font.
|
|
||||||
typedef struct {
|
|
||||||
SDL_Surface *surf;
|
|
||||||
int w,h;
|
|
||||||
int min,max;
|
|
||||||
} DrawFont;
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////
|
|
||||||
// Draw_DefaultFont
|
|
||||||
//
|
|
||||||
// Creates a surface with the default font.
|
|
||||||
#include "FontData.h"
|
|
||||||
SDL_Surface *Draw_DefaultFontSurface(
|
|
||||||
unsigned char r,
|
|
||||||
unsigned char g,
|
|
||||||
unsigned char b,
|
|
||||||
unsigned char a)
|
|
||||||
{
|
|
||||||
SDL_Surface *surf;
|
|
||||||
int x,y,c;
|
|
||||||
Uint32 color,color2;
|
|
||||||
|
|
||||||
// Create the surface
|
|
||||||
surf = SDL_CreateRGBSurface(SDL_SWSURFACE,
|
|
||||||
8*256, 8, 32,0,0,0,0);
|
|
||||||
surf->format->Amask=0xFF000000;
|
|
||||||
surf->format->Ashift=24;
|
|
||||||
SDL_SetAlpha(surf, SDL_SRCALPHA, 255);
|
|
||||||
|
|
||||||
// Draw the font
|
|
||||||
SDL_LockSurface(surf);
|
|
||||||
color =SDL_MapRGBA(surf->format,r,g,b,a);
|
|
||||||
color2=SDL_MapRGBA(surf->format,r,g,b,0);
|
|
||||||
for(c=0;c<256;c++){
|
|
||||||
for(y=0;y<8;y++){
|
|
||||||
for(x=0;x<8;x++){
|
|
||||||
if(((fontdata_8x8[c*8+y]>>(7-x)) & 0x01)==1){
|
|
||||||
//Imagen_PutPixel(dest,c*8+x,y,color);
|
|
||||||
((Uint32 *)surf->pixels)[(c*8+x)+(8*256*y)]=
|
|
||||||
color;
|
|
||||||
}else{
|
|
||||||
//Imagen_PutPixel(dest,c*8+x,y,color2);
|
|
||||||
((Uint32 *)surf->pixels)[(c*8+x)+(8*256*y)]=
|
|
||||||
color2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SDL_UnlockSurface(surf);
|
|
||||||
|
|
||||||
return(surf);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////
|
|
||||||
// Draw_DefaultFont
|
|
||||||
//
|
|
||||||
// Creates the default font.
|
|
||||||
DrawFnt Draw_DefaultFont(
|
|
||||||
unsigned char r,
|
|
||||||
unsigned char g,
|
|
||||||
unsigned char b,
|
|
||||||
unsigned char a)
|
|
||||||
{
|
|
||||||
DrawFont *font;
|
|
||||||
|
|
||||||
// Create the default font
|
|
||||||
font=malloc(sizeof(DrawFont));
|
|
||||||
font->surf = Draw_DefaultFontSurface(r,g,b,a);
|
|
||||||
font->w=8;
|
|
||||||
font->h=8;
|
|
||||||
font->min=0;
|
|
||||||
font->max=128;
|
|
||||||
|
|
||||||
return((DrawFnt)font);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////
|
|
||||||
// Draw_LoadFont
|
|
||||||
//
|
|
||||||
// Load a font from a file.
|
|
||||||
DrawFnt Draw_LoadFont(char *fichero,int min,int max){
|
|
||||||
DrawFont *font;
|
|
||||||
int w,h;
|
|
||||||
|
|
||||||
// Create the font form the image
|
|
||||||
font=malloc(sizeof(DrawFont));
|
|
||||||
font->surf = Draw_LoadSurface(fichero);
|
|
||||||
font->w=font->surf->w/(max-min);
|
|
||||||
font->h=font->surf->h;
|
|
||||||
font->min=min;
|
|
||||||
font->max=max;
|
|
||||||
|
|
||||||
return((DrawFnt)font);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////
|
|
||||||
// Draw_DrawText
|
|
||||||
//
|
|
||||||
// Draws text using a font
|
|
||||||
void Draw_DrawText(DrawFnt f,char *text,int x,int y){
|
|
||||||
DrawFont *font=f;
|
|
||||||
SDL_Rect orig;
|
|
||||||
SDL_Rect dest;
|
|
||||||
char *ptr;
|
|
||||||
|
|
||||||
// Prepare the rects
|
|
||||||
orig.w=dest.w=font->w;
|
|
||||||
orig.h=dest.h=font->h;
|
|
||||||
orig.y=0;
|
|
||||||
dest.x=x;
|
|
||||||
dest.y=y;
|
|
||||||
|
|
||||||
// Iterate the string
|
|
||||||
ptr=text;
|
|
||||||
while(*ptr){
|
|
||||||
if((*ptr)<font->max){
|
|
||||||
orig.x=((*ptr)-font->min)*font->w;
|
|
||||||
dest.x=x;
|
|
||||||
dest.y=y;
|
|
||||||
// Blit every character
|
|
||||||
SDL_BlitSurface(font->surf,&orig,_screen,&dest);
|
|
||||||
}
|
|
||||||
x+=font->w;
|
|
||||||
ptr++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
129
Entity.c
129
Entity.c
@@ -38,9 +38,11 @@ Entity *Entity_New(){
|
|||||||
e->fric_static=0.0f;
|
e->fric_static=0.0f;
|
||||||
e->fric_dynamic=0.0f;
|
e->fric_dynamic=0.0f;
|
||||||
|
|
||||||
//e->img=NULL;
|
|
||||||
AnimPlay_SetImg(&e->anim,NULL);
|
AnimPlay_SetImg(&e->anim,NULL);
|
||||||
|
|
||||||
|
e->color[0]=e->color[1]=e->color[2]=e->color[3]=1.0f;
|
||||||
|
e->light[0]=e->light[1]=e->light[2]=e->light[3]=1.0f;
|
||||||
|
|
||||||
e->oncopy=NULL;
|
e->oncopy=NULL;
|
||||||
e->ondelete=NULL;
|
e->ondelete=NULL;
|
||||||
e->proc=NULL;
|
e->proc=NULL;
|
||||||
@@ -91,8 +93,15 @@ Entity *Entity_Copy(Entity *e){
|
|||||||
n->fric_static=e->fric_static;
|
n->fric_static=e->fric_static;
|
||||||
n->fric_dynamic=e->fric_dynamic;
|
n->fric_dynamic=e->fric_dynamic;
|
||||||
|
|
||||||
//n->img=e->img;
|
|
||||||
AnimPlay_Copy(&n->anim,&e->anim);
|
AnimPlay_Copy(&n->anim,&e->anim);
|
||||||
|
n->color[0]=e->color[0];
|
||||||
|
n->color[1]=e->color[1];
|
||||||
|
n->color[2]=e->color[2];
|
||||||
|
n->color[3]=e->color[3];
|
||||||
|
n->light[0]=e->light[0];
|
||||||
|
n->light[1]=e->light[1];
|
||||||
|
n->light[2]=e->light[2];
|
||||||
|
n->light[3]=e->light[3];
|
||||||
|
|
||||||
n->oncopy=e->oncopy;
|
n->oncopy=e->oncopy;
|
||||||
n->ondelete=e->ondelete;
|
n->ondelete=e->ondelete;
|
||||||
@@ -118,6 +127,7 @@ Entity *Entity_Copy(Entity *e){
|
|||||||
//
|
//
|
||||||
//
|
//
|
||||||
void Entity_Draw(Entity *e,int x,int y){
|
void Entity_Draw(Entity *e,int x,int y){
|
||||||
|
Draw_SetColor(e->color[0],e->color[1],e->color[2],e->color[3]);
|
||||||
AnimPlay_Draw(&e->anim,e->pos[0]+x,e->pos[1]+y);
|
AnimPlay_Draw(&e->anim,e->pos[0]+x,e->pos[1]+y);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,6 +137,7 @@ void Entity_Draw(Entity *e,int x,int y){
|
|||||||
//
|
//
|
||||||
//
|
//
|
||||||
void Entity_Process(Entity *b,int ft){
|
void Entity_Process(Entity *b,int ft){
|
||||||
|
b->flags&=~EntityFlag_UpdatedPos;
|
||||||
|
|
||||||
// Launch method
|
// Launch method
|
||||||
if(b->proc){
|
if(b->proc){
|
||||||
@@ -165,6 +176,8 @@ void Entity_PostProcess(Entity *e,int ft){
|
|||||||
1.0f-(e->fric_dynamic+(e->fric_static/len)));
|
1.0f-(e->fric_dynamic+(e->fric_static/len)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
e->flags|=EntityFlag_UpdatedPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Animate
|
// Animate
|
||||||
@@ -175,7 +188,7 @@ void Entity_PostProcess(Entity *e,int ft){
|
|||||||
/////////////////////////////
|
/////////////////////////////
|
||||||
// Entity_CollisionResponse
|
// Entity_CollisionResponse
|
||||||
//
|
//
|
||||||
// Response to a collision
|
// Normal response to a collision.
|
||||||
void Entity_CollisionResponse(
|
void Entity_CollisionResponse(
|
||||||
Entity *b1,Entity *b2,float t,vec2 n)
|
Entity *b1,Entity *b2,float t,vec2 n)
|
||||||
{
|
{
|
||||||
@@ -278,10 +291,11 @@ void Entity_Overlaps(Entity *b1,Entity *b2){
|
|||||||
vec2 len;
|
vec2 len;
|
||||||
float dist;
|
float dist;
|
||||||
|
|
||||||
if(!(b1->flags&EntityFlag_Overlap) || !(b2->flags&EntityFlag_Overlap))
|
// if(!(b1->flags&EntityFlag_Overlap) || !(b2->flags&EntityFlag_Overlap))
|
||||||
return;
|
// return;
|
||||||
|
|
||||||
vec2_minus(len,b1->pos,b2->pos);
|
vec2_minus(len,b1->pos,b2->pos);
|
||||||
|
#if 0
|
||||||
if(fabs(len[0])>b1->radius)
|
if(fabs(len[0])>b1->radius)
|
||||||
return;
|
return;
|
||||||
if(fabs(len[1])>b1->radius)
|
if(fabs(len[1])>b1->radius)
|
||||||
@@ -298,6 +312,23 @@ void Entity_Overlaps(Entity *b1,Entity *b2){
|
|||||||
if(b2->radius>dist && b2->overlap){
|
if(b2->radius>dist && b2->overlap){
|
||||||
b2->overlap(b2,b1);
|
b2->overlap(b2,b1);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
vec2_set(len,fabs(b1->pos[0]-b2->pos[0]),fabs(b1->pos[1]-b2->pos[1]));
|
||||||
|
if(b1->overlap){
|
||||||
|
if( len[0]<=b1->radius &&
|
||||||
|
len[1]<=b1->radius)
|
||||||
|
{
|
||||||
|
b1->overlap(b1,b2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(b2->overlap){
|
||||||
|
if( len[0]<=b2->radius &&
|
||||||
|
len[1]<=b2->radius)
|
||||||
|
{
|
||||||
|
b2->overlap(b2,b1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -323,5 +354,91 @@ void Entity_AddVelLimit(Entity *e,vec2 vel,float limit){
|
|||||||
vec2_scale(vel_temp,dir,vlen);
|
vec2_scale(vel_temp,dir,vlen);
|
||||||
vec2_plus(e->vel,e->vel,vel_temp);
|
vec2_plus(e->vel,e->vel,vel_temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// Entity_SetColor
|
||||||
|
//
|
||||||
|
//
|
||||||
|
void Entity_SetColor(Entity *e,float r,float g,float b,float a){
|
||||||
|
e->color[0]=r;
|
||||||
|
e->color[1]=g;
|
||||||
|
e->color[2]=b;
|
||||||
|
e->color[3]=a;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// Entity_AddColor
|
||||||
|
//
|
||||||
|
//
|
||||||
|
void Entity_AddColor(Entity *e,float r,float g,float b,float a){
|
||||||
|
e->color[0]+=r;
|
||||||
|
if(e->color[0]>1.0f)
|
||||||
|
e->color[0]=1.0f;
|
||||||
|
e->color[1]+=g;
|
||||||
|
if(e->color[1]>1.0f)
|
||||||
|
e->color[1]=1.0f;
|
||||||
|
e->color[2]+=b;
|
||||||
|
if(e->color[2]>1.0f)
|
||||||
|
e->color[2]=1.0f;
|
||||||
|
e->color[3]+=a;
|
||||||
|
if(e->color[3]>1.0f)
|
||||||
|
e->color[3]=1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// Entity_AddColor
|
||||||
|
//
|
||||||
|
//
|
||||||
|
void Entity_SetLight(Entity *e,float r,float g,float b,float rad){
|
||||||
|
e->light[0]=r;
|
||||||
|
e->light[1]=g;
|
||||||
|
e->light[2]=b;
|
||||||
|
e->light[3]=rad;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// Entity_AddColor
|
||||||
|
//
|
||||||
|
//
|
||||||
|
void Entity_Iluminate(Entity *e,Entity **elist,int n){
|
||||||
|
int i;
|
||||||
|
vec2 vdist;
|
||||||
|
float qdist,dist,f;
|
||||||
|
float qrad;
|
||||||
|
|
||||||
|
if(!(e->flags&EntityFlag_Light)){
|
||||||
|
Entity_SetColor(e,
|
||||||
|
e->light[0],
|
||||||
|
e->light[1],
|
||||||
|
e->light[2],
|
||||||
|
1.0f);
|
||||||
|
}else{
|
||||||
|
Entity_SetColor(e,1.0f,1.0f,1.0f,1.0f);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i=0;i<n;i++){
|
||||||
|
if(e==elist[i] || !(elist[i]->flags&EntityFlag_Light))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
vec2_minus(vdist,e->pos,elist[i]->pos);
|
||||||
|
qdist=vec2_dot(vdist,vdist);
|
||||||
|
qrad=elist[i]->light[3]*elist[i]->light[3];
|
||||||
|
if(qdist<qrad){
|
||||||
|
//dist=sqrtf(qdist);
|
||||||
|
//f=1.0f-dist/elist[i]->light[3];
|
||||||
|
f=1.0f-qdist/qrad;
|
||||||
|
Entity_AddColor(e,
|
||||||
|
f*elist[i]->light[0],
|
||||||
|
f*elist[i]->light[1],
|
||||||
|
f*elist[i]->light[2],
|
||||||
|
1.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
42
Entity.h
42
Entity.h
@@ -9,6 +9,9 @@
|
|||||||
|
|
||||||
#define EntityFlag_Collision 1
|
#define EntityFlag_Collision 1
|
||||||
#define EntityFlag_Overlap 2
|
#define EntityFlag_Overlap 2
|
||||||
|
#define EntityFlag_Light 4
|
||||||
|
#define EntityFlag_UpdateLight 8
|
||||||
|
#define EntityFlag_UpdatedPos 16
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////
|
////////////////////////////////////////////////
|
||||||
@@ -32,6 +35,9 @@ typedef struct Tag_Entity {
|
|||||||
|
|
||||||
AnimPlay anim;
|
AnimPlay anim;
|
||||||
|
|
||||||
|
float color[4];
|
||||||
|
float light[4];
|
||||||
|
|
||||||
void (*oncopy)(struct Tag_Entity *ent);
|
void (*oncopy)(struct Tag_Entity *ent);
|
||||||
void (*ondelete)(struct Tag_Entity *ent);
|
void (*ondelete)(struct Tag_Entity *ent);
|
||||||
void (*proc)(struct Tag_Entity *ent,int ft);
|
void (*proc)(struct Tag_Entity *ent,int ft);
|
||||||
@@ -92,6 +98,14 @@ void Entity_Process(Entity *e,int ft);
|
|||||||
void Entity_PostProcess(Entity *e,int ft);
|
void Entity_PostProcess(Entity *e,int ft);
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// Entity_CollisionResponse
|
||||||
|
//
|
||||||
|
// Normal response to a collision.
|
||||||
|
void Entity_CollisionResponse(
|
||||||
|
Entity *b1,Entity *b2,float t,vec2 n);
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////
|
/////////////////////////////
|
||||||
// Entity_Collide
|
// Entity_Collide
|
||||||
//
|
//
|
||||||
@@ -113,4 +127,32 @@ void Entity_Overlaps(Entity *b1,Entity *b2);
|
|||||||
void Entity_AddVelLimit(Entity *e,vec2 vel,float limit);
|
void Entity_AddVelLimit(Entity *e,vec2 vel,float limit);
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// Entity_SetColor
|
||||||
|
//
|
||||||
|
//
|
||||||
|
void Entity_SetColor(Entity *e,float r,float g,float b,float a);
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// Entity_AddColor
|
||||||
|
//
|
||||||
|
//
|
||||||
|
void Entity_AddColor(Entity *e,float r,float g,float b,float a);
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// Entity_AddColor
|
||||||
|
//
|
||||||
|
//
|
||||||
|
void Entity_SetLight(Entity *e,float r,float g,float b,float rad);
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// Entity_AddColor
|
||||||
|
//
|
||||||
|
//
|
||||||
|
void Entity_Iluminate(Entity *e,Entity **elist,int n);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
112
GameEnts.c
112
GameEnts.c
@@ -4,6 +4,7 @@
|
|||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include "GameLib.h"
|
#include "GameLib.h"
|
||||||
|
extern int gamelib_debug;
|
||||||
|
|
||||||
#include "GameEnts.h"
|
#include "GameEnts.h"
|
||||||
|
|
||||||
@@ -88,6 +89,19 @@ void player_proc(Entity *e,int ft){
|
|||||||
vec2 vel;
|
vec2 vel;
|
||||||
int pos[2],size[2],delta[2];
|
int pos[2],size[2],delta[2];
|
||||||
|
|
||||||
|
if (gamelib_debug) {
|
||||||
|
if (Input_GetKey(InputKey_Jump)==InputKey_Pressed) {
|
||||||
|
if (!(e->flags&EntityFlag_Collision)) {
|
||||||
|
e->flags|=(EntityFlag_Collision|EntityFlag_Overlap);
|
||||||
|
GameLib_EntitySetLight(e,0.4f,0.4f,0.4f,5*32.0f);
|
||||||
|
}else {
|
||||||
|
e->flags&=~(EntityFlag_Collision|EntityFlag_Overlap);
|
||||||
|
GameLib_EntitySetLight(e,0.7f,0.7f,0.7f,20*32.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if(Input_GetDir(vel)){
|
if(Input_GetDir(vel)){
|
||||||
vec2 up,right;
|
vec2 up,right;
|
||||||
float updown,leftright;
|
float updown,leftright;
|
||||||
@@ -131,6 +145,30 @@ void player_proc(Entity *e,int ft){
|
|||||||
GameLib_SetPos(pos);
|
GameLib_SetPos(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int player_collision(Entity *e1,Entity *e2,float t,vec2 n){
|
||||||
|
if(e2->type==Ent_Barrel){
|
||||||
|
/*
|
||||||
|
vec2_scale(e1->vel,e1->vel,0.5f);
|
||||||
|
vec2_plus(e2->vel,e2->vel,e1->vel);
|
||||||
|
*/
|
||||||
|
float vlen,dotp;
|
||||||
|
vec2 vdir;
|
||||||
|
vlen=sqrtf(vec2_dot(e1->vel,e1->vel));
|
||||||
|
if(vlen>0.0f){
|
||||||
|
vec2_scale(vdir,e1->vel,1.0f/vlen);
|
||||||
|
if(vec2_dot(vdir,n)>0.9){
|
||||||
|
Entity_CollisionResponse(e1,e2,t,vdir);
|
||||||
|
return(0);
|
||||||
|
}else{
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
void barrel_proc(Entity *e,int ft){
|
void barrel_proc(Entity *e,int ft){
|
||||||
float qvel;
|
float qvel;
|
||||||
int tnow;
|
int tnow;
|
||||||
@@ -262,8 +300,10 @@ void savepoint_overlap(Entity *e1,Entity *e2){
|
|||||||
}
|
}
|
||||||
if(e1!=_savepoint){
|
if(e1!=_savepoint){
|
||||||
AnimPlay_SetAnim(&e1->anim,anim_savepoint_active);
|
AnimPlay_SetAnim(&e1->anim,anim_savepoint_active);
|
||||||
|
GameLib_EntitySetLight(e1,0.0f,0.0f,0.5f,4*32.0f);
|
||||||
if(_savepoint){
|
if(_savepoint){
|
||||||
AnimPlay_SetImg(&_savepoint->anim,img_savepoint);
|
AnimPlay_SetImg(&_savepoint->anim,img_savepoint);
|
||||||
|
GameLib_EntitySetLight(_savepoint,0.0f,0.0f,0.5f,2*32.0f);
|
||||||
}
|
}
|
||||||
_savepoint=e1;
|
_savepoint=e1;
|
||||||
}
|
}
|
||||||
@@ -306,9 +346,10 @@ void timeoutent_proc(Entity *e,int ft){
|
|||||||
|
|
||||||
|
|
||||||
void GameEnts_Init(){
|
void GameEnts_Init(){
|
||||||
|
Entity *ent;
|
||||||
|
|
||||||
|
//////////////////////////////
|
||||||
// Load Graphics
|
// Load Resources
|
||||||
|
|
||||||
img_barrel=Draw_LoadImage("data/barrel.bmp");
|
img_barrel=Draw_LoadImage("data/barrel.bmp");
|
||||||
Draw_SetOffset(img_barrel,-16,-32);
|
Draw_SetOffset(img_barrel,-16,-32);
|
||||||
@@ -393,19 +434,35 @@ void GameEnts_Init(){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////
|
||||||
// Create the entity templates
|
// Create the entity templates
|
||||||
|
|
||||||
ent_player=Entity_New();
|
ent=Entity_New();
|
||||||
|
ent->mass=-1.0f;
|
||||||
|
ent->flags=0;
|
||||||
|
Entity_SetLight(ent,0.2f,0.2f,0.2f,1.0f);
|
||||||
|
|
||||||
|
|
||||||
|
ent_player=Entity_Copy(ent);
|
||||||
ent_player->type=Ent_Player;
|
ent_player->type=Ent_Player;
|
||||||
ent_player->radius=16.0f;
|
ent_player->radius=16.0f;
|
||||||
ent_player->mass=70.0f;
|
ent_player->mass=70.0f;
|
||||||
ent_player->fric_static=0.5f;
|
ent_player->fric_static=0.5f;
|
||||||
|
ent_player->flags=
|
||||||
|
EntityFlag_Collision|EntityFlag_Overlap|EntityFlag_Light;
|
||||||
|
Entity_SetLight(ent_player,0.4f,0.4f,0.4f,5*32.0f);
|
||||||
AnimPlay_SetImg(&ent_player->anim,img_player_down);
|
AnimPlay_SetImg(&ent_player->anim,img_player_down);
|
||||||
ent_player->proc=player_proc;
|
ent_player->proc=player_proc;
|
||||||
|
ent_player->collision=player_collision;
|
||||||
|
|
||||||
|
|
||||||
ent_barrel=Entity_New();
|
ent_barrel=Entity_Copy(ent);
|
||||||
ent_barrel->type=Ent_Barrel;
|
ent_barrel->type=Ent_Barrel;
|
||||||
|
ent_barrel->flags=
|
||||||
|
EntityFlag_Collision|EntityFlag_Overlap;
|
||||||
ent_barrel->radius=16.0f;
|
ent_barrel->radius=16.0f;
|
||||||
ent_barrel->mass=100.0f;
|
ent_barrel->mass=100.0f;
|
||||||
ent_barrel->fric_static=0.5f;
|
ent_barrel->fric_static=0.5f;
|
||||||
@@ -413,19 +470,18 @@ void GameEnts_Init(){
|
|||||||
AnimPlay_SetImg(&ent_barrel->anim,img_barrel);
|
AnimPlay_SetImg(&ent_barrel->anim,img_barrel);
|
||||||
|
|
||||||
|
|
||||||
ent_column=Entity_New();
|
ent_column=Entity_Copy(ent);
|
||||||
ent_column->type=Ent_Column;
|
ent_column->type=Ent_Column;
|
||||||
ent_column->flags=EntityFlag_Collision;
|
ent_column->flags=EntityFlag_Collision;
|
||||||
//ent_column->flags=0;
|
//ent_column->flags=0;
|
||||||
ent_column->radius=12;
|
ent_column->radius=12;
|
||||||
ent_column->mass=-1.0f;
|
|
||||||
AnimPlay_SetImg(&ent_column->anim,img_column);
|
AnimPlay_SetImg(&ent_column->anim,img_column);
|
||||||
ent_column_faded=Entity_Copy(ent_column);
|
ent_column_faded=Entity_Copy(ent_column);
|
||||||
AnimPlay_SetImg(&ent_column_faded->anim,img_column_faded);
|
AnimPlay_SetImg(&ent_column_faded->anim,img_column_faded);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ent_floor=Entity_New();
|
ent_floor=Entity_Copy(ent);
|
||||||
ent_floor->type=Ent_Floor;
|
ent_floor->type=Ent_Floor;
|
||||||
ent_floor->zorder=-1;
|
ent_floor->zorder=-1;
|
||||||
ent_floor->flags=0;
|
ent_floor->flags=0;
|
||||||
@@ -437,7 +493,7 @@ void GameEnts_Init(){
|
|||||||
ent_floor_center=Entity_Copy(ent_floor);
|
ent_floor_center=Entity_Copy(ent_floor);
|
||||||
AnimPlay_SetImg(&ent_floor_center->anim,img_floor_center);
|
AnimPlay_SetImg(&ent_floor_center->anim,img_floor_center);
|
||||||
|
|
||||||
ent_hole_spiked=Entity_New();
|
ent_hole_spiked=Entity_Copy(ent);
|
||||||
ent_hole_spiked->type=Ent_Hole_Spiked;
|
ent_hole_spiked->type=Ent_Hole_Spiked;
|
||||||
ent_hole_spiked->zorder=-1;
|
ent_hole_spiked->zorder=-1;
|
||||||
ent_hole_spiked->flags=EntityFlag_Overlap;
|
ent_hole_spiked->flags=EntityFlag_Overlap;
|
||||||
@@ -445,25 +501,29 @@ void GameEnts_Init(){
|
|||||||
AnimPlay_SetImg(&ent_hole_spiked->anim,img_hole_spiked);
|
AnimPlay_SetImg(&ent_hole_spiked->anim,img_hole_spiked);
|
||||||
ent_hole_spiked->overlap=hole_spiked_overlap;
|
ent_hole_spiked->overlap=hole_spiked_overlap;
|
||||||
|
|
||||||
ent_hole_filled=Entity_New();
|
ent_hole_filled=Entity_Copy(ent);
|
||||||
ent_hole_filled->type=Ent_Hole_Filled;
|
ent_hole_filled->type=Ent_Hole_Filled;
|
||||||
ent_hole_filled->zorder=-1;
|
ent_hole_filled->zorder=-1;
|
||||||
ent_hole_filled->flags=0;
|
ent_hole_filled->flags=0;
|
||||||
AnimPlay_SetImg(&ent_hole_filled->anim,img_barrel2);
|
AnimPlay_SetImg(&ent_hole_filled->anim,img_barrel2);
|
||||||
|
|
||||||
ent_hole_lava=Entity_New();
|
ent_hole_lava=Entity_Copy(ent);
|
||||||
ent_hole_lava->type=Ent_Hole_Lava;
|
ent_hole_lava->type=Ent_Hole_Lava;
|
||||||
ent_hole_lava->zorder=-1;
|
ent_hole_lava->zorder=-1;
|
||||||
ent_hole_lava->flags=EntityFlag_Overlap;
|
ent_hole_lava->flags=EntityFlag_Overlap|EntityFlag_Light;
|
||||||
ent_hole_lava->radius=18;
|
ent_hole_lava->radius=18;
|
||||||
AnimPlay_SetAnim(&ent_hole_lava->anim,anim_hole_lava);
|
AnimPlay_SetAnim(&ent_hole_lava->anim,anim_hole_lava);
|
||||||
|
Entity_SetLight(ent_hole_lava,1.0f,0.0f,0.0f,4*32.0f);
|
||||||
ent_hole_lava->overlap=hole_lava_overlap;
|
ent_hole_lava->overlap=hole_lava_overlap;
|
||||||
|
|
||||||
|
|
||||||
ent_arrow_up=Entity_New();
|
ent_arrow_up=Entity_Copy(ent);
|
||||||
ent_arrow_up->type=Ent_Arrow;
|
ent_arrow_up->type=Ent_Arrow;
|
||||||
ent_arrow_up->flags=EntityFlag_Collision;
|
//ent_arrow_up->flags=EntityFlag_Collision;
|
||||||
ent_arrow_up->radius=7;
|
ent_arrow_up->flags=EntityFlag_Collision|EntityFlag_Light;
|
||||||
|
Entity_SetLight(ent_arrow_up,0.2f,0.2f,0.2f,2*32.0f);
|
||||||
|
ent_arrow_up->radius=4;
|
||||||
|
ent_arrow_up->mass=0.1f;
|
||||||
ent_arrow_up->collision=arrow_collision;
|
ent_arrow_up->collision=arrow_collision;
|
||||||
ent_arrow_up->proc=timeoutent_proc;
|
ent_arrow_up->proc=timeoutent_proc;
|
||||||
ent_arrow_up->A=120;
|
ent_arrow_up->A=120;
|
||||||
@@ -480,11 +540,10 @@ void GameEnts_Init(){
|
|||||||
vec2_set(ent_arrow_right->vel,4,0);
|
vec2_set(ent_arrow_right->vel,4,0);
|
||||||
|
|
||||||
|
|
||||||
ent_arrowshooter_up=Entity_New();
|
ent_arrowshooter_up=Entity_Copy(ent);
|
||||||
ent_arrowshooter_up->type=Ent_ArrowShooter;
|
ent_arrowshooter_up->type=Ent_ArrowShooter;
|
||||||
ent_arrowshooter_up->flags=EntityFlag_Collision;
|
ent_arrowshooter_up->flags=EntityFlag_Collision;
|
||||||
ent_arrowshooter_up->radius=15;
|
ent_arrowshooter_up->radius=15;
|
||||||
ent_arrowshooter_up->mass=-1.0f;
|
|
||||||
ent_arrowshooter_up->oncopy=arrowshooter_oncopy;
|
ent_arrowshooter_up->oncopy=arrowshooter_oncopy;
|
||||||
ent_arrowshooter_up->proc=arrowshooter_proc;
|
ent_arrowshooter_up->proc=arrowshooter_proc;
|
||||||
AnimPlay_SetImg(&ent_arrowshooter_up->anim,img_arrowshooter_up);
|
AnimPlay_SetImg(&ent_arrowshooter_up->anim,img_arrowshooter_up);
|
||||||
@@ -500,11 +559,12 @@ void GameEnts_Init(){
|
|||||||
ent_arrowshooter_right->child=ent_arrow_right;
|
ent_arrowshooter_right->child=ent_arrow_right;
|
||||||
|
|
||||||
|
|
||||||
ent_savepoint_1=Entity_New();
|
ent_savepoint_1=Entity_Copy(ent);
|
||||||
ent_savepoint_1->type=Ent_SavePoint;
|
ent_savepoint_1->type=Ent_SavePoint;
|
||||||
ent_savepoint_1->zorder=0;
|
ent_savepoint_1->zorder=0;
|
||||||
ent_savepoint_1->flags=EntityFlag_Overlap;
|
ent_savepoint_1->flags=EntityFlag_Overlap|EntityFlag_Light;
|
||||||
ent_savepoint_1->radius=16;
|
ent_savepoint_1->radius=20;
|
||||||
|
Entity_SetLight(ent_savepoint_1,0.0f,0.0f,0.5f,2*32.0f);
|
||||||
AnimPlay_SetImg(&ent_savepoint_1->anim,img_savepoint);
|
AnimPlay_SetImg(&ent_savepoint_1->anim,img_savepoint);
|
||||||
ent_savepoint_1->overlap=savepoint_overlap;
|
ent_savepoint_1->overlap=savepoint_overlap;
|
||||||
ent_savepoint_1->ondelete=savepoint_ondelete;
|
ent_savepoint_1->ondelete=savepoint_ondelete;
|
||||||
@@ -527,24 +587,26 @@ void GameEnts_Init(){
|
|||||||
ent_savepoint_9->A=9;
|
ent_savepoint_9->A=9;
|
||||||
|
|
||||||
|
|
||||||
ent_exitpoint=Entity_New();
|
ent_exitpoint=Entity_Copy(ent);
|
||||||
ent_exitpoint->type=Ent_ExitPoint;
|
ent_exitpoint->type=Ent_ExitPoint;
|
||||||
ent_exitpoint->flags=EntityFlag_Overlap;
|
ent_exitpoint->flags=EntityFlag_Overlap|EntityFlag_Light;
|
||||||
ent_exitpoint->radius=16;
|
Entity_SetLight(ent_exitpoint,0.5f,0.5f,0.5f,5*32.0f);
|
||||||
|
ent_exitpoint->radius=20;
|
||||||
AnimPlay_SetAnim(&ent_exitpoint->anim,anim_exitpoint);
|
AnimPlay_SetAnim(&ent_exitpoint->anim,anim_exitpoint);
|
||||||
ent_exitpoint->overlap=exitpoint_overlap;
|
ent_exitpoint->overlap=exitpoint_overlap;
|
||||||
ent_endpoint=Entity_Copy(ent_exitpoint);
|
ent_endpoint=Entity_Copy(ent_exitpoint);
|
||||||
AnimPlay_SetImg(&ent_endpoint->anim,img_endpoint);
|
AnimPlay_SetImg(&ent_endpoint->anim,img_endpoint);
|
||||||
ent_endpoint->overlap=endpoint_overlap;
|
ent_endpoint->overlap=endpoint_overlap;
|
||||||
|
|
||||||
ent_fire=Entity_New();
|
ent_fire=Entity_Copy(ent);
|
||||||
ent_fire->type=Ent_Effect;
|
ent_fire->type=Ent_Effect;
|
||||||
ent_fire->flags=0;
|
ent_fire->flags=EntityFlag_Light;
|
||||||
|
Entity_SetLight(ent_fire,1.0f,0.0f,0.0f,3*32.0f);
|
||||||
AnimPlay_SetAnim(&ent_fire->anim,anim_fire);
|
AnimPlay_SetAnim(&ent_fire->anim,anim_fire);
|
||||||
ent_fire->proc=timeoutent_proc;
|
ent_fire->proc=timeoutent_proc;
|
||||||
ent_fire->A=60;
|
ent_fire->A=60;
|
||||||
|
|
||||||
ent_player_broken=Entity_New();
|
ent_player_broken=Entity_Copy(ent);
|
||||||
ent_player_broken->type=Ent_Effect;
|
ent_player_broken->type=Ent_Effect;
|
||||||
ent_player_broken->flags=0;
|
ent_player_broken->flags=0;
|
||||||
AnimPlay_SetImg(&ent_player_broken->anim,img_player_broken);
|
AnimPlay_SetImg(&ent_player_broken->anim,img_player_broken);
|
||||||
|
|||||||
145
GameLib.c
145
GameLib.c
@@ -33,7 +33,10 @@ long long t_col;
|
|||||||
long long t_over;
|
long long t_over;
|
||||||
long long t_postproc;
|
long long t_postproc;
|
||||||
long long t_draw;
|
long long t_draw;
|
||||||
int f_count;
|
int fproc_count;
|
||||||
|
int fdraw_count;
|
||||||
|
|
||||||
|
int gamelib_debug=0;
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////
|
/////////////////////////////
|
||||||
@@ -93,6 +96,9 @@ void GameLib_AddEntity(Entity *e){
|
|||||||
_entity[_n_entities]=e;
|
_entity[_n_entities]=e;
|
||||||
_entity_flag[_n_entities]=1;
|
_entity_flag[_n_entities]=1;
|
||||||
_n_entities++;
|
_n_entities++;
|
||||||
|
|
||||||
|
// Mark for light update
|
||||||
|
GameLib_EntityUpdateLight(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -104,6 +110,7 @@ int GameLib_UnrefEntity(Entity *e){
|
|||||||
int i;
|
int i;
|
||||||
for(i=0;i<_n_entities;i++){
|
for(i=0;i<_n_entities;i++){
|
||||||
if(e==_entity[i]){
|
if(e==_entity[i]){
|
||||||
|
// Mark or unref
|
||||||
if(_entities_lock){
|
if(_entities_lock){
|
||||||
_entity_flag[i]=-2;
|
_entity_flag[i]=-2;
|
||||||
}else{
|
}else{
|
||||||
@@ -111,6 +118,9 @@ int GameLib_UnrefEntity(Entity *e){
|
|||||||
_entity_flag[i]=0;
|
_entity_flag[i]=0;
|
||||||
}
|
}
|
||||||
_entities_compactate=1;
|
_entities_compactate=1;
|
||||||
|
|
||||||
|
// Mark for light update
|
||||||
|
GameLib_EntityUpdateLight(e);
|
||||||
return(i);
|
return(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -197,11 +207,11 @@ int GameLib_ProcLoop(){
|
|||||||
count=0;
|
count=0;
|
||||||
do{
|
do{
|
||||||
repeat=0;
|
repeat=0;
|
||||||
for(i=0;i<_n_entities-1;i++){
|
for(i=0;i<_n_entities;i++){
|
||||||
if(!(_entity[i]->flags&EntityFlag_Collision))
|
if(!(_entity[i]->flags&EntityFlag_Collision) || _entity[i]->mass<0.0f)
|
||||||
continue;
|
continue;
|
||||||
for(j=i+1;j<_n_entities;j++){
|
for(j=0;j<_n_entities;j++){
|
||||||
if(!(_entity[j]->flags&EntityFlag_Collision))
|
if(!(_entity[j]->flags&EntityFlag_Collision) || i==j)
|
||||||
continue;
|
continue;
|
||||||
if(Entity_Collide(_entity[i],_entity[j])){
|
if(Entity_Collide(_entity[i],_entity[j])){
|
||||||
repeat=1;
|
repeat=1;
|
||||||
@@ -212,11 +222,11 @@ int GameLib_ProcLoop(){
|
|||||||
}while(repeat && count<10);
|
}while(repeat && count<10);
|
||||||
// Stop remaining collisions
|
// Stop remaining collisions
|
||||||
if(count==10){
|
if(count==10){
|
||||||
for(i=0;i<_n_entities-1;i++){
|
for(i=0;i<_n_entities;i++){
|
||||||
if(!(_entity[i]->flags&EntityFlag_Collision))
|
if(!(_entity[i]->flags&EntityFlag_Collision) || _entity[i]->mass<0.0f)
|
||||||
continue;
|
continue;
|
||||||
for(j=i+1;j<_n_entities;j++){
|
for(j=0;j<_n_entities;j++){
|
||||||
if(!(_entity[j]->flags&EntityFlag_Collision))
|
if(!(_entity[j]->flags&EntityFlag_Collision) || i==j)
|
||||||
continue;
|
continue;
|
||||||
if(Entity_Collide(_entity[i],_entity[j])){
|
if(Entity_Collide(_entity[i],_entity[j])){
|
||||||
vec2_set(_entity[i]->vel,0,0);
|
vec2_set(_entity[i]->vel,0,0);
|
||||||
@@ -231,11 +241,11 @@ int GameLib_ProcLoop(){
|
|||||||
// Process Overlaps
|
// Process Overlaps
|
||||||
time=Time_GetTime();
|
time=Time_GetTime();
|
||||||
GameLib_Compactate();_entities_lock=1;
|
GameLib_Compactate();_entities_lock=1;
|
||||||
for(i=0;i<_n_entities-1;i++){
|
for(i=0;i<_n_entities;i++){
|
||||||
if(!(_entity[i]->flags&EntityFlag_Overlap))
|
if(!(_entity[i]->flags&EntityFlag_Overlap) || _entity[i]->mass<0.0f)
|
||||||
continue;
|
continue;
|
||||||
for(j=i+1;j<_n_entities;j++){
|
for(j=0;j<_n_entities;j++){
|
||||||
if(!(_entity[j]->flags&EntityFlag_Overlap))
|
if(!(_entity[j]->flags&EntityFlag_Overlap) || i==j)
|
||||||
continue;
|
continue;
|
||||||
Entity_Overlaps(_entity[i],_entity[j]);
|
Entity_Overlaps(_entity[i],_entity[j]);
|
||||||
}
|
}
|
||||||
@@ -280,6 +290,9 @@ int GameLib_ProcLoop(){
|
|||||||
for(i=0;i<_n_entities;i++){
|
for(i=0;i<_n_entities;i++){
|
||||||
Entity *e;
|
Entity *e;
|
||||||
Entity_PostProcess(_entity[i],_ft);
|
Entity_PostProcess(_entity[i],_ft);
|
||||||
|
if(_entity[i]->flags&EntityFlag_UpdatedPos){
|
||||||
|
GameLib_EntityUpdateLight(_entity[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(_gamepostproc){
|
if(_gamepostproc){
|
||||||
_gamepostproc();
|
_gamepostproc();
|
||||||
@@ -287,7 +300,7 @@ int GameLib_ProcLoop(){
|
|||||||
GameLib_Compactate();
|
GameLib_Compactate();
|
||||||
t_postproc+=Time_GetTime()-time;
|
t_postproc+=Time_GetTime()-time;
|
||||||
|
|
||||||
f_count++;
|
fproc_count++;
|
||||||
|
|
||||||
return(_running);
|
return(_running);
|
||||||
}
|
}
|
||||||
@@ -303,6 +316,9 @@ void GameLib_DrawLoop(){
|
|||||||
|
|
||||||
time=Time_GetTime();
|
time=Time_GetTime();
|
||||||
|
|
||||||
|
// Update Lights
|
||||||
|
//GameLib_UpdateIlumination();
|
||||||
|
|
||||||
// Limpiar pantalla
|
// Limpiar pantalla
|
||||||
Draw_Clean(0,0,0);
|
Draw_Clean(0,0,0);
|
||||||
|
|
||||||
@@ -322,6 +338,12 @@ void GameLib_DrawLoop(){
|
|||||||
if(e->pos[1]>(_game_pos[1]+_game_size[1]+128))
|
if(e->pos[1]>(_game_pos[1]+_game_size[1]+128))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// Update ilumination of this entity
|
||||||
|
if(e->flags&EntityFlag_UpdateLight){
|
||||||
|
Entity_Iluminate(e,_entity,_n_entities);
|
||||||
|
e->flags&=~EntityFlag_UpdateLight;
|
||||||
|
}
|
||||||
|
|
||||||
Entity_Draw(e,-_game_pos[0],-_game_pos[1]);
|
Entity_Draw(e,-_game_pos[0],-_game_pos[1]);
|
||||||
}
|
}
|
||||||
if(_gamedraw){
|
if(_gamedraw){
|
||||||
@@ -329,7 +351,10 @@ void GameLib_DrawLoop(){
|
|||||||
}
|
}
|
||||||
GameLib_Compactate();
|
GameLib_Compactate();
|
||||||
|
|
||||||
|
|
||||||
t_draw+=Time_GetTime()-time;
|
t_draw+=Time_GetTime()-time;
|
||||||
|
|
||||||
|
fdraw_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -352,15 +377,18 @@ void GameLib_Loop(
|
|||||||
t_over=0;
|
t_over=0;
|
||||||
t_postproc=0;
|
t_postproc=0;
|
||||||
t_draw=0;
|
t_draw=0;
|
||||||
f_count=0;
|
fproc_count=0;
|
||||||
|
fdraw_count=0;
|
||||||
Draw_Loop(GameLib_ProcLoop,GameLib_DrawLoop);
|
Draw_Loop(GameLib_ProcLoop,GameLib_DrawLoop);
|
||||||
|
|
||||||
printf("Profiling:::::::::\n");
|
if (gamelib_debug) {
|
||||||
printf("t_proc.....:%6lld\n",t_proc/f_count);
|
printf("Profiling:::::::::\n");
|
||||||
printf("t_col......:%6lld\n",t_col/f_count);
|
printf("t_proc.....:%6lld\n",t_proc/fproc_count);
|
||||||
printf("t_over.....:%6lld\n",t_over/f_count);
|
printf("t_col......:%6lld\n",t_col/fproc_count);
|
||||||
printf("t_postproc.:%6lld\n",t_postproc/f_count);
|
printf("t_over.....:%6lld\n",t_over/fproc_count);
|
||||||
printf("t_draw.....:%6lld\n",t_draw/f_count);
|
printf("t_postproc.:%6lld\n",t_postproc/fproc_count);
|
||||||
|
printf("t_draw.....:%6lld\n",t_draw/fdraw_count);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -463,4 +491,77 @@ void GameLib_PlaySound(AudioSnd snd,int x,int y){
|
|||||||
|
|
||||||
// PLAY!
|
// PLAY!
|
||||||
Audio_PlaySound(snd,vleft,vright);
|
Audio_PlaySound(snd,vleft,vright);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// GameLib_Iluminate
|
||||||
|
//
|
||||||
|
//
|
||||||
|
void GameLib_Iluminate(){
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i=0;i<_n_entities;i++){
|
||||||
|
Entity_Iluminate(_entity[i],_entity,_n_entities);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// GameLib_EntitySetLight
|
||||||
|
//
|
||||||
|
//
|
||||||
|
void GameLib_EntitySetLight(Entity *e,float r,float g,float b,float rad){
|
||||||
|
if(e->flags&EntityFlag_Light){
|
||||||
|
GameLib_EntityUpdateLight(e);
|
||||||
|
Entity_SetLight(e,r,g,b,rad);
|
||||||
|
GameLib_EntityUpdateLight(e);
|
||||||
|
}else{
|
||||||
|
Entity_SetLight(e,r,g,b,rad);
|
||||||
|
e->flags|=EntityFlag_UpdateLight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// GameLib_EntityUpdateLight
|
||||||
|
//
|
||||||
|
//
|
||||||
|
void GameLib_EntityUpdateLight(Entity *e){
|
||||||
|
if(e->flags&EntityFlag_Light){
|
||||||
|
int i;
|
||||||
|
vec2 max,min;
|
||||||
|
|
||||||
|
vec2_set(max,e->pos[0]+e->light[3],e->pos[1]+e->light[3]);
|
||||||
|
vec2_set(min,e->pos[0]-e->light[3],e->pos[1]-e->light[3]);
|
||||||
|
for(i=0;i<_n_entities;i++){
|
||||||
|
if( min[0]<=_entity[i]->pos[0] &&
|
||||||
|
max[0]>=_entity[i]->pos[0] &&
|
||||||
|
min[1]<=_entity[i]->pos[1] &&
|
||||||
|
max[1]>=_entity[i]->pos[1])
|
||||||
|
{
|
||||||
|
_entity[i]->flags|=EntityFlag_UpdateLight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
e->flags|=EntityFlag_UpdateLight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// GameLib_UpdateIlumination
|
||||||
|
//
|
||||||
|
//
|
||||||
|
void GameLib_UpdateIlumination(){
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i=0;i<_n_entities;i++){
|
||||||
|
if(_entity[i]->flags&EntityFlag_UpdateLight){
|
||||||
|
Entity_Iluminate(_entity[i],_entity,_n_entities);
|
||||||
|
_entity[i]->flags&=~EntityFlag_UpdateLight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
28
GameLib.h
28
GameLib.h
@@ -89,4 +89,32 @@ void GameLib_ForEachEnt(int (*func)(Entity *ent));
|
|||||||
void GameLib_PlaySound(AudioSnd snd,int x,int y);
|
void GameLib_PlaySound(AudioSnd snd,int x,int y);
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// GameLib_Iluminate
|
||||||
|
//
|
||||||
|
//
|
||||||
|
void GameLib_Iluminate();
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// GameLib_EntitySetLight
|
||||||
|
//
|
||||||
|
//
|
||||||
|
void GameLib_EntitySetLight(Entity *e,float r,float g,float b,float rad);
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// GameLib_EntityUpdateLight
|
||||||
|
//
|
||||||
|
//
|
||||||
|
void GameLib_EntityUpdateLight(Entity *e);
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// GameLib_UpdateIlumination
|
||||||
|
//
|
||||||
|
//
|
||||||
|
void GameLib_UpdateIlumination();
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -222,6 +222,8 @@ int GameMap_CreateLevel(int level,int point){
|
|||||||
_startpoint=point;
|
_startpoint=point;
|
||||||
GameLib_ForEachEnt(GameMapAux_CreatePlayer);
|
GameLib_ForEachEnt(GameMapAux_CreatePlayer);
|
||||||
|
|
||||||
|
// Iluminate
|
||||||
|
//GameLib_Iluminate();
|
||||||
|
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
44
Input.c
44
Input.c
@@ -25,7 +25,7 @@ int Input_Init(){
|
|||||||
for(i=0;i<InputKey_Max;i++){
|
for(i=0;i<InputKey_Max;i++){
|
||||||
_keys[i]=InputKey_Released;
|
_keys[i]=InputKey_Released;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
// Check for joystick
|
// Check for joystick
|
||||||
if(SDL_NumJoysticks()>0){
|
if(SDL_NumJoysticks()>0){
|
||||||
// Open joystick
|
// Open joystick
|
||||||
@@ -44,7 +44,7 @@ int Input_Init(){
|
|||||||
if(SDL_JoystickOpened(0))
|
if(SDL_JoystickOpened(0))
|
||||||
SDL_JoystickClose(_joy);
|
SDL_JoystickClose(_joy);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,15 +55,45 @@ int Input_Init(){
|
|||||||
// Notify a frame update to the input subsystem.
|
// Notify a frame update to the input subsystem.
|
||||||
void Input_Frame(){
|
void Input_Frame(){
|
||||||
Uint8* keys;
|
Uint8* keys;
|
||||||
|
Uint8 buttons;
|
||||||
|
int mx,my;
|
||||||
|
vec2 mdir;
|
||||||
|
float temp;
|
||||||
|
int mup,mdown,mleft,mright;
|
||||||
|
extern int _width,_height;
|
||||||
|
|
||||||
|
|
||||||
|
// Get mouse state
|
||||||
|
buttons=SDL_GetMouseState(&mx,&my);
|
||||||
|
vec2_set(mdir,mx-(_width/2),my-(_height/2.0f));
|
||||||
|
temp=1.0f/sqrtf(vec2_dot(mdir,mdir));
|
||||||
|
vec2_scale(mdir,mdir,temp);
|
||||||
|
mup=mdown=mleft=mright=0;
|
||||||
|
|
||||||
|
// Virtual Dpad on screen using mouse position
|
||||||
|
if(buttons){
|
||||||
|
if(mdir[0]>0.5f){
|
||||||
|
mright=1;
|
||||||
|
}
|
||||||
|
if(mdir[0]<-0.5f){
|
||||||
|
mleft=1;
|
||||||
|
}
|
||||||
|
if(mdir[1]>0.5f){
|
||||||
|
mdown=1;
|
||||||
|
}
|
||||||
|
if(mdir[1]<-0.5f){
|
||||||
|
mup=1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Process Keys
|
// Process Keys
|
||||||
keys=SDL_GetKeyState(NULL);
|
keys=SDL_GetKeyState(NULL);
|
||||||
Input_SetKey(InputKey_Action1,keys[SDLK_z]);
|
Input_SetKey(InputKey_Action1,keys[SDLK_z]|buttons);
|
||||||
Input_SetKey(InputKey_Action2,keys[SDLK_x]);
|
Input_SetKey(InputKey_Action2,keys[SDLK_x]);
|
||||||
Input_SetKey(InputKey_Up,keys[SDLK_UP]);
|
Input_SetKey(InputKey_Up,keys[SDLK_UP]|mup);
|
||||||
Input_SetKey(InputKey_Down,keys[SDLK_DOWN]);
|
Input_SetKey(InputKey_Down,keys[SDLK_DOWN]|mdown);
|
||||||
Input_SetKey(InputKey_Left,keys[SDLK_LEFT]);
|
Input_SetKey(InputKey_Left,keys[SDLK_LEFT]|mleft);
|
||||||
Input_SetKey(InputKey_Right,keys[SDLK_RIGHT]);
|
Input_SetKey(InputKey_Right,keys[SDLK_RIGHT]|mright);
|
||||||
Input_SetKey(InputKey_Jump,keys[SDLK_SPACE]);
|
Input_SetKey(InputKey_Jump,keys[SDLK_SPACE]);
|
||||||
Input_SetKey(InputKey_Continue,keys[SDLK_RETURN]|keys[SDLK_KP_ENTER]);
|
Input_SetKey(InputKey_Continue,keys[SDLK_RETURN]|keys[SDLK_KP_ENTER]);
|
||||||
|
|
||||||
|
|||||||
3
Makefile
3
Makefile
@@ -14,15 +14,12 @@ endif # windir
|
|||||||
|
|
||||||
|
|
||||||
ifeq ($(TARGET_ARCH),mingw)
|
ifeq ($(TARGET_ARCH),mingw)
|
||||||
OPENGL_DRAW=opengl
|
|
||||||
include Makefile.win32
|
include Makefile.win32
|
||||||
else
|
else
|
||||||
ifeq ($(TARGET_ARCH),linux)
|
ifeq ($(TARGET_ARCH),linux)
|
||||||
OPENGL_DRAW=opengl
|
|
||||||
include Makefile.linux
|
include Makefile.linux
|
||||||
else
|
else
|
||||||
ifeq ($(TARGET_ARCH),macosx)
|
ifeq ($(TARGET_ARCH),macosx)
|
||||||
OPENGL_DRAW=opengl
|
|
||||||
include Makefile.macosx
|
include Makefile.macosx
|
||||||
endif # macosx
|
endif # macosx
|
||||||
endif # linux
|
endif # linux
|
||||||
|
|||||||
11
Makefile.common
Normal file → Executable file
11
Makefile.common
Normal file → Executable file
@@ -37,13 +37,8 @@ $(BUILDDIR)/Time.o: Time.c $(HEADS)
|
|||||||
$(BUILDDIR)/Util.o: Util.c $(HEADS)
|
$(BUILDDIR)/Util.o: Util.c $(HEADS)
|
||||||
$(CC) -c Util.c -o $(BUILDDIR)/Util.o $(CFLAGS)
|
$(CC) -c Util.c -o $(BUILDDIR)/Util.o $(CFLAGS)
|
||||||
|
|
||||||
ifeq ($(OPENGL_DRAW),opengl)
|
$(BUILDDIR)/Draw.o: Draw.c $(HEADS)
|
||||||
$(BUILDDIR)/Draw.o: DrawGL.c $(HEADS)
|
$(CC) -c Draw.c -o $(BUILDDIR)/Draw.o $(CFLAGS)
|
||||||
$(CC) -c DrawGL.c -o $(BUILDDIR)/Draw.o $(CFLAGS)
|
|
||||||
else
|
|
||||||
$(BUILDDIR)/Draw.o: DrawSDL.c $(HEADS)
|
|
||||||
$(CC) -c DrawSDL.c -o $(BUILDDIR)/Draw.o $(CFLAGS)
|
|
||||||
endif
|
|
||||||
|
|
||||||
$(BUILDDIR)/Input.o: Input.c $(HEADS)
|
$(BUILDDIR)/Input.o: Input.c $(HEADS)
|
||||||
$(CC) -c Input.c -o $(BUILDDIR)/Input.o $(CFLAGS)
|
$(CC) -c Input.c -o $(BUILDDIR)/Input.o $(CFLAGS)
|
||||||
@@ -77,6 +72,6 @@ clean:
|
|||||||
rm -f $(OBJS) $(BUILDDIR)/$(RESULT)
|
rm -f $(OBJS) $(BUILDDIR)/$(RESULT)
|
||||||
|
|
||||||
run: $(BUILDDIR)/$(RESULT)
|
run: $(BUILDDIR)/$(RESULT)
|
||||||
./$(BUILDDIR)/$(RESULT)
|
./$(BUILDDIR)/$(RESULT) debug
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
68
data/level_03 - copia.txt
Normal file
68
data/level_03 - copia.txt
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
100 100
|
||||||
|
|
||||||
|
##############
|
||||||
|
#SSSS#.1.#SSS#
|
||||||
|
#SSSS#...#SSS#
|
||||||
|
#SSSS#...#SSS#
|
||||||
|
#SSSS#B#.#SSS#
|
||||||
|
#S..SSB..#SSS#
|
||||||
|
#S.SSmmmmmSSS#
|
||||||
|
#S.SSSSSSSSSS#
|
||||||
|
#S.....BSSB.S#
|
||||||
|
#SSSSS.SSSSSS#
|
||||||
|
#mmmmm.mmmmmm#
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
######.#######
|
||||||
|
#SSSS#2..SSSS#
|
||||||
|
#SSSS#B#.SSSS#
|
||||||
|
#S..SSB..SSSS#
|
||||||
|
#S.SSSSSSSSSS#
|
||||||
|
#S.SSSSSSSSSS#
|
||||||
|
#S.SSSSSSSSSS#
|
||||||
|
#S.....BSSB.S#
|
||||||
|
#SSSSS.SSSSSS#
|
||||||
|
#mmmmm.mmmmmm#
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
######.######
|
||||||
|
#.....3.....#
|
||||||
|
#.B.B...B.B.#
|
||||||
|
#...........#
|
||||||
|
#LLLSSSSSLLL#
|
||||||
|
#...A...A...#
|
||||||
|
#mmmmm.mmmmm#
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
######.######
|
||||||
|
#.....4.....#
|
||||||
|
#.B.B...B.B.#
|
||||||
|
#...........#
|
||||||
|
#LLLLLSLLLLL#
|
||||||
|
#...A...A...#
|
||||||
|
#mmmmm.mmmmm#
|
||||||
|
m.m
|
||||||
|
m.m ###########
|
||||||
|
m.m #LLLLLLLL.#
|
||||||
|
m.m #...L...L.#
|
||||||
|
m.m #.L.L.L.L<#
|
||||||
|
m.m #.L.L.L.L.#
|
||||||
|
m.####.L.L.L.L<######
|
||||||
|
m....5.L.L.L.L.......
|
||||||
|
mmmmmm>L.L.L.L.mmmmmm
|
||||||
|
m.L.L.L.L.m
|
||||||
|
m>L.L.L.L.m
|
||||||
|
m.L...L...m
|
||||||
|
m.LLLLLLLL#
|
||||||
|
mmmmmmmmmm#
|
||||||
|
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
100 100
|
100 100
|
||||||
|
|
||||||
##############
|
##############
|
||||||
#SSSSm.1.mSSS#
|
#SSSS#.1.#SSS#
|
||||||
#SSSSm...mSSS#
|
#SSSS#...#SSS#
|
||||||
#SSSSm...mSSS#
|
#SSSS#...#SSS#
|
||||||
#SSSSmBm.mSSS#
|
#SSSS#B#.#SSS#
|
||||||
#S..SSB..mSSS#
|
#S..SSB..#SSS#
|
||||||
#S.SSmmmmmSSS#
|
#S.SSmmmmmSSS#
|
||||||
#S.SSSSSSSSSS#
|
#S.SSSSSSSSSS#
|
||||||
#S.....BSSB.S#
|
#S.....BSSB.S#
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
m.m
|
m.m
|
||||||
m.m
|
m.m
|
||||||
######.#######
|
######.#######
|
||||||
#SSSSm2..SSSS#
|
#SSSS#2..SSSS#
|
||||||
#SSSSmBm.SSSS#
|
#SSSS#B#.SSSS#
|
||||||
#S..SSB..SSSS#
|
#S..SSB..SSSS#
|
||||||
#S.SSSSSSSSSS#
|
#S.SSSSSSSSSS#
|
||||||
#S.SSSSSSSSSS#
|
#S.SSSSSSSSSS#
|
||||||
@@ -50,18 +50,52 @@
|
|||||||
#...........#
|
#...........#
|
||||||
#LLLLLSLLLLL#
|
#LLLLLSLLLLL#
|
||||||
#...A...A...#
|
#...A...A...#
|
||||||
#mmmmmmmmmmm#
|
#mmmmm.mmmmm#
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
######5######
|
||||||
|
#..V.V.....L#
|
||||||
|
#LLLLLLLLL.L#
|
||||||
|
#L.........L#
|
||||||
|
#L.LLLLLLLLL#
|
||||||
|
#L.........L#
|
||||||
|
#LLLLLLLLL.L#
|
||||||
|
#L.........L#
|
||||||
|
#L.LLLLLLLLL#
|
||||||
|
#L.....A.A..#
|
||||||
|
#mmmmm.mmmmm#
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
###V#V6######
|
||||||
|
#LLLLL.LLLLL#
|
||||||
|
#LLLLL.....L#
|
||||||
|
>LLLLLLLLL.L#
|
||||||
|
mL.........L#
|
||||||
|
mL.LLLLLLLLL<
|
||||||
|
mL.........Lm
|
||||||
|
>LLLLLLLLL.Lm
|
||||||
|
mL.........Lm
|
||||||
|
mL.LLLLLLLLL<
|
||||||
|
mL.....LLLLLm
|
||||||
|
mLLLLL.LLLLLm
|
||||||
|
mmmmmm.AmAmmm
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
m.m
|
||||||
|
####.####
|
||||||
|
#.......#
|
||||||
|
#.......#
|
||||||
|
#.......#
|
||||||
|
#...E...#
|
||||||
|
#mmmmmmm#
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
############
|
|
||||||
#mmm.mmm# #....L.....#
|
|
||||||
m.m #..L.L.S..<#
|
|
||||||
m.m #..L.L.S...#
|
|
||||||
m.#######..L.L.S..<#
|
|
||||||
m........2.L.L.S...#
|
|
||||||
mmmmmmmmmmmL.L.S...#
|
|
||||||
m.>L.L.S...#
|
|
||||||
m....L.S...#
|
|
||||||
m.>..L.S...########
|
|
||||||
m.B....S..........#
|
|
||||||
mmmmmmmmmmmmmmmmm
|
|
||||||
37
data/level_04.txt
Normal file
37
data/level_04.txt
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
100 100
|
||||||
|
|
||||||
|
1
|
||||||
|
#######7#######
|
||||||
|
#SSSSSS.SSSSSS#
|
||||||
|
#S....S.S....S#
|
||||||
|
#S.LLBS.S.LL.S#
|
||||||
|
#S...........S#
|
||||||
|
#SSSS.SSSSSSSS#####
|
||||||
|
#SSSS.SSS.........8
|
||||||
|
#SSSSSSSSSSSSSmmmmm
|
||||||
|
#S..B...S....Sm
|
||||||
|
#S.LL.SSSBLL.Sm
|
||||||
|
#S....SSS....Sm
|
||||||
|
#SSSSSSSSSSSSSm
|
||||||
|
mmmmmmmmmmmmmmm
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
m.m
|
||||||
|
m.m #####################
|
||||||
|
m.m #S....SSS.....S...BB#
|
||||||
|
m.m #S.SSBSSS.SSS.SSS....
|
||||||
|
m.m #S............SSSS..m
|
||||||
|
m.m #SSSL.LLL.LLL.LSSSS.m
|
||||||
|
m.####SSSL.LLL.LLL..LLSS.m
|
||||||
|
m....8......L.B.......LS.m
|
||||||
|
mmmmmmSSSS.LLL.LLL..LLSS.m
|
||||||
|
mSSSSSLLL.LLL.LSSSS.m
|
||||||
|
m.SSS....S...LSS....m
|
||||||
|
m..LLLLLL.LLLLLL.SS.m
|
||||||
|
mB...............SS.m
|
||||||
|
mmmmmmmmmmmmmmmmmmmmm
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
95
main.c
95
main.c
@@ -6,6 +6,7 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#include "GameLib.h"
|
#include "GameLib.h"
|
||||||
|
extern int gamelib_debug;
|
||||||
|
|
||||||
#include "GameEnts.h"
|
#include "GameEnts.h"
|
||||||
#include "GameMap.h"
|
#include "GameMap.h"
|
||||||
@@ -21,7 +22,6 @@ DrawImg img_logo;
|
|||||||
DrawImg img_end;
|
DrawImg img_end;
|
||||||
|
|
||||||
DrawFnt font;
|
DrawFnt font;
|
||||||
DrawFnt font_shad;
|
|
||||||
|
|
||||||
int ProcTitle(){
|
int ProcTitle(){
|
||||||
if( Input_GetKey(InputKey_Jump)==InputKey_Pressed||
|
if( Input_GetKey(InputKey_Jump)==InputKey_Pressed||
|
||||||
@@ -30,20 +30,30 @@ int ProcTitle(){
|
|||||||
play=1;
|
play=1;
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
if( (Input_GetKey(InputKey_Action1)==InputKey_Pressed||
|
||||||
|
Input_GetKey(InputKey_Action2)==InputKey_Pressed) &&
|
||||||
|
game_started)
|
||||||
|
{
|
||||||
|
play=1;
|
||||||
|
game_started=0;
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawTitle(){
|
void DrawTitle(){
|
||||||
Draw_Clean(0,0,0);
|
Draw_Clean(0,0,0);
|
||||||
|
Draw_SetColor(1.0f,1.0f,1.0f,1.0f);
|
||||||
|
|
||||||
Draw_DrawImg(img_logo,170,100);
|
Draw_DrawImg(img_logo,170,100);
|
||||||
if(!game_started){
|
if(!game_started){
|
||||||
Draw_DrawText(font ,"Press [Space] to Start.",300,300);
|
Draw_DrawText(font,"Press [Space] to Start.",300,300);
|
||||||
}else{
|
}else{
|
||||||
Draw_DrawText(font ,"Press [Space] to Continue.",300,300);
|
Draw_DrawText(font,"Press [Space] to Continue.",300,300);
|
||||||
|
Draw_DrawText(font,"Press [X] to Start.",300,316);
|
||||||
}
|
}
|
||||||
|
|
||||||
Draw_DrawText(font ,"By Kableado (VAR)",200,440);
|
Draw_DrawText(font,"By Kableado (VAR)",200,440);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,13 +70,13 @@ int ProcEnd(){
|
|||||||
|
|
||||||
void DrawEnd(){
|
void DrawEnd(){
|
||||||
Draw_Clean(0,0,0);
|
Draw_Clean(0,0,0);
|
||||||
|
Draw_SetColor(1.0f,1.0f,1.0f,1.0f);
|
||||||
|
|
||||||
Draw_DrawImg(img_end,170,100);
|
Draw_DrawImg(img_end,170,100);
|
||||||
|
|
||||||
Draw_DrawText(font ,"Congratulations you saved the kittie!",250,320);
|
Draw_DrawText(font,"Congratulations you saved the kittie!",250,320);
|
||||||
Draw_DrawText(font ,"Thanks for playing!",250,350);
|
Draw_DrawText(font,"Thanks for playing!",250,350);
|
||||||
|
Draw_DrawText(font,"Press [Space] to Title.",300,400);
|
||||||
Draw_DrawText(font ,"Press [Space] to Title.",300,400);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -94,23 +104,61 @@ void PostProcGame(){
|
|||||||
void DrawGame(){
|
void DrawGame(){
|
||||||
char string[1024];
|
char string[1024];
|
||||||
|
|
||||||
|
Draw_SetColor(1.0f,1.0f,1.0f,1.0f);
|
||||||
|
|
||||||
sprintf(string, "Level: %d.%d",game_level+1,game_level_point);
|
sprintf(string, "Level: %d.%d",game_level+1,game_level_point);
|
||||||
Draw_DrawText(font_shad,string,17,17);
|
Draw_SetColor(0,0,0,0.5f);
|
||||||
Draw_DrawText(font ,string,16,16);
|
Draw_DrawText(font,string,17,17);
|
||||||
|
Draw_SetColor(1,1,1,1);
|
||||||
|
Draw_DrawText(font,string,16,16);
|
||||||
|
|
||||||
if(game_level_reset==2){
|
if(game_level_reset==2){
|
||||||
Draw_DrawText(font_shad,"Level Complete",301,301);
|
Draw_SetColor(0,0,0,0.5f);
|
||||||
Draw_DrawText(font ,"Level Complete.",300,300);
|
Draw_DrawText(font,"Level Complete",301,301);
|
||||||
|
Draw_SetColor(1,1,0,1);
|
||||||
|
Draw_DrawText(font,"Level Complete.",300,300);
|
||||||
}else
|
}else
|
||||||
if(game_level_reset==1){
|
if(game_level_reset==1){
|
||||||
Draw_DrawText(font_shad,"You are dead.",301,301);
|
Draw_SetColor(0,0,0,0.5f);
|
||||||
Draw_DrawText(font ,"You are dead.",300,300);
|
Draw_DrawText(font,"You are dead.",301,301);
|
||||||
|
Draw_SetColor(1,0,0,1);
|
||||||
|
Draw_DrawText(font,"You are dead.",300,300);
|
||||||
}else
|
}else
|
||||||
if(game_level_reset==3){
|
if(game_level_reset==3){
|
||||||
play=2;
|
play=2;
|
||||||
GameLib_BreakLoop();
|
GameLib_BreakLoop();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void LoadGame(char *fname){
|
||||||
|
FILE *f;
|
||||||
|
|
||||||
|
f=fopen(fname,"rb");
|
||||||
|
if(!f)
|
||||||
|
return;
|
||||||
|
|
||||||
|
fread(&game_level,1,sizeof(int),f);
|
||||||
|
fread(&game_level_point,1,sizeof(int),f);
|
||||||
|
|
||||||
|
GameMap_CreateLevel(game_level,game_level_point);
|
||||||
|
game_started=1;
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SaveGame(char *fname){
|
||||||
|
FILE *f;
|
||||||
|
|
||||||
|
f=fopen(fname,"wb");
|
||||||
|
if(!f)
|
||||||
|
return;
|
||||||
|
|
||||||
|
fwrite(&game_level,1,sizeof(int),f);
|
||||||
|
fwrite(&game_level_point,1,sizeof(int),f);
|
||||||
|
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -118,16 +166,23 @@ int main(int argc,char *argv[]){
|
|||||||
|
|
||||||
srand(time(NULL));
|
srand(time(NULL));
|
||||||
|
|
||||||
|
if (argc>1) {
|
||||||
|
if (!strcmp(argv[1],"debug")) {
|
||||||
|
gamelib_debug=1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GameLib_Init(640,480,"Game",60);
|
GameLib_Init(640,480,"Game",60);
|
||||||
|
|
||||||
img_logo=Draw_LoadImage("data/logo.bmp");
|
img_logo=Draw_LoadImage("data/logo.bmp");
|
||||||
img_end=Draw_LoadImage("data/end.bmp");
|
img_end=Draw_LoadImage("data/end.bmp");
|
||||||
|
|
||||||
font=Draw_DefaultFont(255,0,0,255);
|
font=Draw_DefaultFont(255,255,255,255);
|
||||||
font_shad=Draw_DefaultFont(0,0,0,127);
|
|
||||||
|
|
||||||
|
|
||||||
GameEnts_Init();
|
GameEnts_Init();
|
||||||
|
|
||||||
|
LoadGame("game.save");
|
||||||
|
|
||||||
do{
|
do{
|
||||||
play=0;
|
play=0;
|
||||||
Draw_Loop(ProcTitle,DrawTitle);
|
Draw_Loop(ProcTitle,DrawTitle);
|
||||||
@@ -138,9 +193,10 @@ int main(int argc,char *argv[]){
|
|||||||
game_level=0;
|
game_level=0;
|
||||||
game_level_point=1;
|
game_level_point=1;
|
||||||
game_level_reset=0;
|
game_level_reset=0;
|
||||||
|
|
||||||
GameMap_CreateLevel(game_level,game_level_point);
|
GameMap_CreateLevel(game_level,game_level_point);
|
||||||
|
game_started=1;
|
||||||
}
|
}
|
||||||
game_started=1;
|
|
||||||
GameLib_Loop(ProcGame,PostProcGame,DrawGame);
|
GameLib_Loop(ProcGame,PostProcGame,DrawGame);
|
||||||
}
|
}
|
||||||
if(play==2){
|
if(play==2){
|
||||||
@@ -148,5 +204,8 @@ int main(int argc,char *argv[]){
|
|||||||
}
|
}
|
||||||
}while(play);
|
}while(play);
|
||||||
|
|
||||||
|
|
||||||
|
SaveGame("game.save");
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user