(20111213)
259
Audio.c
Normal file
@@ -0,0 +1,259 @@
|
||||
#ifdef WIN32
|
||||
#define _WIN32_WINNT 0x0501
|
||||
#include <windows.h>
|
||||
#endif
|
||||
#include <SDL/SDL.h>
|
||||
|
||||
#include "Audio.h"
|
||||
|
||||
static void Audio_MixerCallback(void *ud,Uint8 *stream,int l);
|
||||
|
||||
|
||||
////////////////////////////////////////////////
|
||||
// AudioWave //
|
||||
///////////////
|
||||
// Reference to a sound.
|
||||
typedef struct Tag_AudioWave {
|
||||
SDL_AudioSpec spec;
|
||||
Uint32 len;
|
||||
Uint8 *buffer;
|
||||
|
||||
struct Tag_AudioWave *next;
|
||||
} AudioWave;
|
||||
AudioWave *_waves=NULL;
|
||||
|
||||
|
||||
////////////////////////////////////////////////
|
||||
// AudioChan //
|
||||
///////////////
|
||||
// Reference to a sound.
|
||||
typedef struct Tag_AudioChan {
|
||||
AudioWave *wave;
|
||||
Uint32 pos;
|
||||
unsigned char rightvol;
|
||||
unsigned char leftvol;
|
||||
|
||||
struct Tag_AudioChan *next;
|
||||
} AudioChan;
|
||||
AudioChan *_channels=NULL;
|
||||
AudioChan *_free_channels=NULL;
|
||||
|
||||
/////////////////////////////
|
||||
// Audio_Init
|
||||
//
|
||||
// Initializes the game audio.
|
||||
int Audio_Init(){
|
||||
SDL_AudioSpec as;
|
||||
SDL_AudioSpec as2;
|
||||
|
||||
// Initialize audio subsistem
|
||||
#ifdef WIN32
|
||||
// Force DSound Driver on win32
|
||||
putenv("SDL_AUDIODRIVER=dsound");
|
||||
#endif
|
||||
if(SDL_InitSubSystem(SDL_INIT_AUDIO) < 0){
|
||||
printf("Audio_Init: Failure initializing SDL Audio.\n");
|
||||
printf("Audio_Init: SDL Error: %s\n",SDL_GetError());
|
||||
return(0);
|
||||
}
|
||||
|
||||
// Open the audio device using the desired parameters
|
||||
as.freq = 44100;
|
||||
as.format = AUDIO_S16SYS;
|
||||
as.channels = 2;
|
||||
as.samples = 1024;
|
||||
as.callback = Audio_MixerCallback;
|
||||
if(SDL_OpenAudio(&as, &as2) < 0){
|
||||
printf("Audio_Init: Failure opening audio.\n");
|
||||
printf("Audio_Init: SDL Error: %s\n",SDL_GetError());
|
||||
return(0);
|
||||
}
|
||||
|
||||
// Asert results
|
||||
if( as2.format != AUDIO_S16SYS ||
|
||||
as2.freq != 44100 ||
|
||||
as2.channels != 2 )
|
||||
{
|
||||
printf("Audio_Init: Failure opening audio. (44.1Khz/16b/2c).\n");
|
||||
SDL_CloseAudio();
|
||||
return(0);
|
||||
}
|
||||
|
||||
// Unpause and ready to go
|
||||
SDL_PauseAudio(0);
|
||||
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Audio_MixerCallback
|
||||
//
|
||||
// Mixes the audio channels.
|
||||
static void Audio_MixerCallback(void *ud,Uint8 *stream,int l){
|
||||
signed short *ptr_out,*ptr_wave;
|
||||
AudioChan *prevchan;
|
||||
AudioChan *chan;
|
||||
AudioWave *wave;
|
||||
int len=l/4; // Asume 16bpb and 2 output chan
|
||||
int chan_remain;
|
||||
int len_mix;
|
||||
int i;
|
||||
|
||||
// Clean
|
||||
memset(stream,0,len);
|
||||
|
||||
// Mix all the channels
|
||||
prevchan=NULL;
|
||||
chan=_channels;
|
||||
while(chan){
|
||||
if(!chan->wave){
|
||||
// Remove finished channels
|
||||
AudioChan *aux_chan=chan->next;
|
||||
chan->next=_free_channels;
|
||||
_free_channels=chan;
|
||||
chan=aux_chan;
|
||||
if(prevchan){
|
||||
prevchan->next=chan;
|
||||
}else{
|
||||
_channels=chan;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
// Prepare the pointers
|
||||
ptr_out=(signed short *)stream;
|
||||
ptr_wave=((signed short *)chan->wave->buffer)+chan->pos;
|
||||
wave=chan->wave;
|
||||
|
||||
// Determine mixing lenght
|
||||
chan_remain=wave->len-chan->pos;
|
||||
if(chan_remain>len){
|
||||
len_mix=len;
|
||||
}else{
|
||||
len_mix=chan_remain;
|
||||
chan->wave=NULL;
|
||||
}
|
||||
|
||||
// Mix the buffer
|
||||
for(i=0;i<len_mix;i++){
|
||||
int temp;
|
||||
|
||||
// Left Channel
|
||||
temp=ptr_out[0];
|
||||
temp+=(ptr_wave[0]*chan->leftvol)>>8;
|
||||
if(temp>(1<<14)){
|
||||
ptr_out[0]=1<<14;
|
||||
}else if(temp<-(1<<14)){
|
||||
ptr_out[0]=-(1<<14);
|
||||
}else{
|
||||
ptr_out[0]=temp;
|
||||
}
|
||||
|
||||
// Right Channel
|
||||
temp=ptr_out[1];
|
||||
temp+=(ptr_wave[0]*chan->rightvol)>>8;
|
||||
if(temp>(1<<14)){
|
||||
ptr_out[1]=1<<14;
|
||||
}else if(temp<-(1<<14)){
|
||||
ptr_out[1]=-(1<<14);
|
||||
}else{
|
||||
ptr_out[1]=temp;
|
||||
}
|
||||
|
||||
// Next sample
|
||||
ptr_out+=2;
|
||||
ptr_wave++;
|
||||
}
|
||||
chan->pos+=len_mix;
|
||||
|
||||
// Next channel
|
||||
prevchan=chan;
|
||||
chan=chan->next;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Audio_Frame
|
||||
//
|
||||
// Notify a frame update to the audio subsystem.
|
||||
void Audio_Frame(){
|
||||
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Audio_LoadSound
|
||||
//
|
||||
// Loads a sound, giving a reference.
|
||||
AudioSnd Audio_LoadSound(char *filename){
|
||||
AudioWave *wave;
|
||||
|
||||
// Allocate and load the sound
|
||||
wave=malloc(sizeof(AudioWave));
|
||||
if( SDL_LoadWAV(filename,
|
||||
&wave->spec, &wave->buffer, &wave->len) == NULL )
|
||||
{
|
||||
printf("Audio_LoadSound: Failure Loading sound: %s\n",filename);
|
||||
printf("Audio_LoadSound: SDL Error: %s\n",SDL_GetError());
|
||||
free(wave);
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
// Asert results
|
||||
if( wave->spec.format != AUDIO_S16 ||
|
||||
wave->spec.freq != 44100 ||
|
||||
wave->spec.channels != 1 )
|
||||
{
|
||||
printf("Audio_LoadSound: Failure opening sound. (44.1Khz/16b/1c).\n");
|
||||
SDL_FreeWAV(wave->buffer);
|
||||
free(wave);
|
||||
return(0);
|
||||
}
|
||||
|
||||
// Correct the lenght
|
||||
wave->len/=2;
|
||||
|
||||
// Take a reference
|
||||
wave->next=_waves;
|
||||
_waves=wave;
|
||||
|
||||
return((AudioSnd)wave);
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Audio_PlaySound
|
||||
//
|
||||
// Loads a sound, giving a reference.
|
||||
void Audio_PlaySound(AudioSnd snd,
|
||||
float leftvol, float rightvol)
|
||||
{
|
||||
AudioChan *chan;
|
||||
AudioWave *wave;
|
||||
if(!snd)
|
||||
return;
|
||||
|
||||
// Cast AudioSnd to AudioWave
|
||||
wave=snd;
|
||||
|
||||
// Get a free channel
|
||||
if(_free_channels){
|
||||
chan=_free_channels;
|
||||
_free_channels=chan->next;
|
||||
chan->next=NULL;
|
||||
}else{
|
||||
chan=malloc(sizeof(AudioChan));
|
||||
chan->next=NULL;
|
||||
}
|
||||
|
||||
// Initialize the channel
|
||||
chan->wave=wave;
|
||||
chan->pos=0;
|
||||
chan->rightvol=(rightvol*255);
|
||||
chan->leftvol=(leftvol*255);
|
||||
chan->next=_channels;
|
||||
_channels=chan;
|
||||
}
|
||||
|
||||
41
Audio.h
Normal file
@@ -0,0 +1,41 @@
|
||||
#ifndef _AUDIO_H_
|
||||
#define _AUDIO_H_
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Audio_Init
|
||||
//
|
||||
// Initializes the game audio.
|
||||
int Audio_Init();
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Audio_Frame
|
||||
//
|
||||
// Notify a frame update to the audio subsystem.
|
||||
void Audio_Frame();
|
||||
|
||||
|
||||
////////////////////////////////////////////////
|
||||
// AudioSnd //
|
||||
//////////////
|
||||
// Reference to a sound.
|
||||
typedef void *AudioSnd;
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Audio_LoadSound
|
||||
//
|
||||
// Loads a sound, giving a reference.
|
||||
AudioSnd Audio_LoadSound(char *filename);
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Audio_PlaySound
|
||||
//
|
||||
// Loads a sound, giving a reference.
|
||||
void Audio_PlaySound(AudioSnd snd,
|
||||
float leftvol, float rightvol);
|
||||
|
||||
|
||||
#endif
|
||||
349
Draw.c
Normal file
@@ -0,0 +1,349 @@
|
||||
#ifdef WIN32
|
||||
#define _WIN32_WINNT 0x0501
|
||||
#include <windows.h>
|
||||
#endif
|
||||
#include <SDL/SDL.h>
|
||||
|
||||
#include "Time.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)()){
|
||||
int done=0;
|
||||
SDL_Event event;
|
||||
Uint8* keys;
|
||||
long long t_framestart;
|
||||
long long t_frame;
|
||||
long long t_swap;
|
||||
long long t_proc;
|
||||
int f_count;
|
||||
|
||||
t_framestart=Time_GetTime();
|
||||
|
||||
while(!done){
|
||||
|
||||
// Update screen
|
||||
t_swap=Time_GetTime();
|
||||
SDL_Flip(_screen);
|
||||
t_swap=Time_GetTime()-t_swap;
|
||||
|
||||
// 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 loop, with frameskip for slow swapping systems
|
||||
t_proc=Time_GetTime();
|
||||
if(!proc()){
|
||||
done=1;
|
||||
}
|
||||
f_count=(t_swap/_t_frame);
|
||||
while(f_count>0 && !done){
|
||||
if(!proc()){
|
||||
done=1;
|
||||
}
|
||||
f_count--;
|
||||
t_framestart+=_t_frame;
|
||||
}
|
||||
t_proc=Time_GetTime()-t_proc;
|
||||
t_framestart+=_t_frame*(t_proc/_t_frame);
|
||||
|
||||
|
||||
// Sleep to limit frames
|
||||
t_frame=Time_GetTime()-t_framestart;
|
||||
if(t_frame<_t_frame){
|
||||
Time_Pause(_t_frame-t_frame);
|
||||
}else{
|
||||
Time_Pause(0);
|
||||
}
|
||||
t_framestart=Time_GetTime();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// 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));
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Draw_LoadImage
|
||||
//
|
||||
// Loads a image, giving a reference.
|
||||
DrawImg Draw_LoadImage(char *filename){
|
||||
SDL_Surface *img;
|
||||
|
||||
// Load the BMP as a surface
|
||||
img=SDL_LoadBMP(filename);
|
||||
if(img == 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(img->format->BytesPerPixel==4){
|
||||
img->format->Amask=0xFF000000;
|
||||
img->format->Ashift=24;
|
||||
}
|
||||
|
||||
return((DrawImg *)img);
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Draw_ImgSetKeyCol
|
||||
//
|
||||
// Setting the image color key.
|
||||
void Draw_ImgSetKeyCol(DrawImg img,
|
||||
unsigned char r,
|
||||
unsigned char g,
|
||||
unsigned char b)
|
||||
{
|
||||
SDL_Surface *surf;
|
||||
if(!img)
|
||||
return;
|
||||
|
||||
// Set the color key for the surface
|
||||
surf=(SDL_Surface *)img;
|
||||
SDL_SetColorKey(surf, SDL_SRCCOLORKEY,
|
||||
SDL_MapRGB(surf->format, r, g, b));
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Draw_ImgSetAlpha
|
||||
//
|
||||
// Setting the image alpha.
|
||||
void Draw_ImgSetAlpha(DrawImg img, unsigned char a){
|
||||
SDL_Surface *surf;
|
||||
if(!img)
|
||||
return;
|
||||
|
||||
// Set the alpha for the surface
|
||||
surf=(SDL_Surface *)img;
|
||||
SDL_SetAlpha(surf, SDL_SRCALPHA, a);
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Draw_DrawImg
|
||||
// Draw_DrawImgCenter
|
||||
//
|
||||
// Draws an image. And a centered variant
|
||||
void Draw_DrawImg(DrawImg img,int x,int y){
|
||||
SDL_Surface *surf;
|
||||
SDL_Rect orig;
|
||||
SDL_Rect dest;
|
||||
if(!img)
|
||||
return;
|
||||
|
||||
// Prepare the rects
|
||||
surf=(SDL_Surface *)img;
|
||||
orig.x=0;
|
||||
orig.y=0;
|
||||
dest.x=x;
|
||||
dest.y=y;
|
||||
orig.w=dest.w=surf->w;
|
||||
orig.h=dest.h=surf->h;
|
||||
|
||||
// Blit the surface on the screen
|
||||
SDL_BlitSurface(surf,&orig,_screen,&dest);
|
||||
}
|
||||
void Draw_DrawImgCenter(DrawImg img,int x,int y){
|
||||
SDL_Surface *surf;
|
||||
SDL_Rect orig;
|
||||
SDL_Rect dest;
|
||||
if(!img)
|
||||
return;
|
||||
|
||||
// Prepare the rects
|
||||
surf=(SDL_Surface *)img;
|
||||
orig.x=0;
|
||||
orig.y=0;
|
||||
dest.x=x-(surf->w/2);
|
||||
dest.y=y-(surf->h/2);
|
||||
orig.w=dest.w=surf->w;
|
||||
orig.h=dest.h=surf->h;
|
||||
|
||||
// Blit the surface on the screen
|
||||
SDL_BlitSurface(surf,&orig,_screen,&dest);
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////
|
||||
// DrawFnt //
|
||||
/////////////
|
||||
// Reference to a Font.
|
||||
typedef struct {
|
||||
SDL_Surface *surf;
|
||||
int w,h;
|
||||
} DrawFont;
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Draw_DefaultFont
|
||||
//
|
||||
// Creates a image with the default font.
|
||||
#include "FontData.h"
|
||||
DrawFnt Draw_DefaultFont(
|
||||
unsigned char r,
|
||||
unsigned char g,
|
||||
unsigned char b,
|
||||
unsigned char a)
|
||||
{
|
||||
DrawFont *font;
|
||||
int x,y,c;
|
||||
Uint32 color,color2;
|
||||
|
||||
// Create the default font
|
||||
font=malloc(sizeof(DrawFont));
|
||||
font->surf = SDL_CreateRGBSurface(SDL_SWSURFACE,
|
||||
8*256, 8, 32,0,0,0,0);
|
||||
font->w=8;
|
||||
font->h=8;
|
||||
font->surf->format->Amask=0xFF000000;
|
||||
font->surf->format->Ashift=24;
|
||||
SDL_SetAlpha(font->surf, SDL_SRCALPHA, 255);
|
||||
|
||||
// Draw the font
|
||||
SDL_LockSurface(font->surf);
|
||||
color =SDL_MapRGBA(font->surf->format,r,g,b,a);
|
||||
color2=SDL_MapRGBA(font->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 *)font->surf->pixels)[(c*8+x)+(8*256*y)]=
|
||||
color;
|
||||
}else{
|
||||
//Imagen_PutPixel(dest,c*8+x,y,color2);
|
||||
((Uint32 *)font->surf->pixels)[(c*8+x)+(8*256*y)]=
|
||||
color2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
SDL_UnlockSurface(font->surf);
|
||||
|
||||
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;
|
||||
if(!f)
|
||||
return;
|
||||
|
||||
// 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){
|
||||
orig.x=(*ptr)*font->w;
|
||||
dest.x=x;
|
||||
dest.y=y;
|
||||
// Blit every character
|
||||
SDL_BlitSurface(font->surf,&orig,_screen,&dest);
|
||||
x+=font->w;
|
||||
ptr++;
|
||||
}
|
||||
}
|
||||
|
||||
93
Draw.h
Normal file
@@ -0,0 +1,93 @@
|
||||
#ifndef _DRAW_H_
|
||||
#define _DRAW_H_
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Draw_Init
|
||||
//
|
||||
// Initializes the game window.
|
||||
int Draw_Init(int width,int height,char *title,int fps);
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Draw_Loop
|
||||
//
|
||||
// Loops updating the game window.
|
||||
void Draw_Loop(int (*proc)());
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Draw_Clean
|
||||
//
|
||||
// Cleans the game window.
|
||||
void Draw_Clean(
|
||||
unsigned char r,
|
||||
unsigned char g,
|
||||
unsigned char b);
|
||||
|
||||
|
||||
////////////////////////////////////////////////
|
||||
// DrawImg //
|
||||
/////////////
|
||||
// Reference to a image.
|
||||
typedef void *DrawImg;
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Draw_LoadImage
|
||||
//
|
||||
// Loads a image, giving a reference.
|
||||
DrawImg Draw_LoadImage(char *filename);
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Draw_ImgSetKeyCol
|
||||
//
|
||||
// Setting the image color key.
|
||||
void Draw_ImgSetKeyCol(DrawImg img,
|
||||
unsigned char r,
|
||||
unsigned char g,
|
||||
unsigned char b);
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Draw_ImgSetAlpha
|
||||
//
|
||||
// Setting the image alpha.
|
||||
void Draw_ImgSetAlpha(DrawImg img, unsigned char a);
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Draw_DrawImg
|
||||
// Draw_DrawImgCenter
|
||||
//
|
||||
// Draws an image. And a centered variant
|
||||
void Draw_DrawImg(DrawImg img,int x,int y);
|
||||
void Draw_DrawImgCenter(DrawImg img,int x,int y);
|
||||
|
||||
|
||||
////////////////////////////////////////////////
|
||||
// DrawFnt //
|
||||
/////////////
|
||||
// Reference to a Font.
|
||||
typedef void *DrawFnt;
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Draw_DefaultFont
|
||||
//
|
||||
// Loads a image, giving a reference.
|
||||
DrawFnt Draw_DefaultFont(
|
||||
unsigned char r,
|
||||
unsigned char g,
|
||||
unsigned char b,
|
||||
unsigned char a);
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Draw_DrawText
|
||||
//
|
||||
// Draws text using a font
|
||||
void Draw_DrawText(DrawFnt f,char *text,int x,int y);
|
||||
|
||||
#endif
|
||||
37
Entity.c
Normal file
@@ -0,0 +1,37 @@
|
||||
#ifndef _ENTITY_H_
|
||||
#define _ENTITY_H_
|
||||
|
||||
|
||||
////////////////////////////////////////////////
|
||||
// Entity //
|
||||
////////////
|
||||
// Reference to an entity.
|
||||
typedef void *Entity;
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Entity_Create
|
||||
//
|
||||
// Creates an entity.
|
||||
Entity Entity_Create(
|
||||
int x,int y,
|
||||
void (*process)(Entity ent,void *data),
|
||||
void *data);
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Entity_Create
|
||||
//
|
||||
// Creates an entity.
|
||||
|
||||
/////////////////////////////
|
||||
// Entity_CreateClass
|
||||
//
|
||||
// Initializes the game.
|
||||
void Entity_CreateClass(char *name,
|
||||
void *(*createdata)(),
|
||||
void (*process)(Entity ent,void *data));
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
258
FontData.h
Normal file
@@ -0,0 +1,258 @@
|
||||
static unsigned char fontdata_8x8[2048] = {
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0xfe,0xfe,0xfe,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x10,0x38,0x7c,0xfe,0x00,0x00,
|
||||
0x00,0x00,0xfe,0x7c,0x38,0x10,0x00,0x00,
|
||||
0x20,0x30,0x38,0x3c,0x38,0x30,0x20,0x00,
|
||||
0x04,0x0c,0x1c,0x3c,0x1c,0x0c,0x04,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x18,0x18,0x18,0x18,0x18,0x00,0x18,0x00,
|
||||
0x6c,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x6c,0x6c,0xfe,0x6c,0xfe,0x6c,0x6c,0x00,
|
||||
0x18,0x3e,0x60,0x3c,0x06,0x7c,0x18,0x00,
|
||||
0x00,0xc6,0xcc,0x18,0x30,0x66,0xc6,0x00,
|
||||
0x38,0x6c,0x38,0x76,0xdc,0xcc,0x76,0x00,
|
||||
0x18,0x18,0x30,0x00,0x00,0x00,0x00,0x00,
|
||||
0x0c,0x18,0x30,0x30,0x30,0x18,0x0c,0x00,
|
||||
0x30,0x18,0x0c,0x0c,0x0c,0x18,0x30,0x00,
|
||||
0x00,0x6c,0x38,0xfe,0x38,0x6c,0x00,0x00,
|
||||
0x00,0x18,0x18,0x7e,0x18,0x18,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x18,0x18,0x30,0x00,
|
||||
0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,
|
||||
0x06,0x0c,0x18,0x30,0x60,0xc0,0x80,0x00,
|
||||
0x3c,0x66,0x6e,0x76,0x66,0x3c,0x00,0x00,
|
||||
0x18,0x38,0x78,0x18,0x18,0x18,0x00,0x00,
|
||||
0x3c,0x66,0x06,0x1c,0x30,0x7e,0x00,0x00,
|
||||
0x3c,0x66,0x0c,0x06,0x66,0x3c,0x00,0x00,
|
||||
0x1c,0x3c,0x6c,0xcc,0xfe,0x0c,0x00,0x00,
|
||||
0x7e,0x60,0x7c,0x06,0x66,0x3c,0x00,0x00,
|
||||
0x1c,0x30,0x60,0x7c,0x66,0x3c,0x00,0x00,
|
||||
0x7e,0x06,0x06,0x0c,0x18,0x18,0x00,0x00,
|
||||
0x3c,0x66,0x3c,0x66,0x66,0x3c,0x00,0x00,
|
||||
0x3c,0x66,0x3e,0x06,0x0c,0x38,0x00,0x00,
|
||||
0x00,0x18,0x18,0x00,0x18,0x18,0x00,0x00,
|
||||
0x00,0x18,0x18,0x00,0x18,0x18,0x30,0x00,
|
||||
0x00,0x06,0x18,0x60,0x18,0x06,0x00,0x00,
|
||||
0x00,0x00,0x7e,0x00,0x7e,0x00,0x00,0x00,
|
||||
0x00,0x60,0x18,0x06,0x18,0x60,0x00,0x00,
|
||||
0x3c,0x66,0x06,0x0c,0x18,0x00,0x18,0x00,
|
||||
0x3c,0x66,0x5a,0x5a,0x5e,0x60,0x3c,0x00,
|
||||
0x3c,0x66,0x66,0x7e,0x66,0x66,0x00,0x00,
|
||||
0x7c,0x66,0x7c,0x66,0x66,0x7c,0x00,0x00,
|
||||
0x3c,0x60,0x60,0x60,0x60,0x3c,0x00,0x00,
|
||||
0x78,0x6c,0x66,0x66,0x6c,0x78,0x00,0x00,
|
||||
0x7e,0x60,0x78,0x60,0x60,0x7e,0x00,0x00,
|
||||
0x7e,0x60,0x78,0x60,0x60,0x60,0x00,0x00,
|
||||
0x3c,0x66,0x60,0x6e,0x66,0x3e,0x00,0x00,
|
||||
0x66,0x66,0x7e,0x66,0x66,0x66,0x00,0x00,
|
||||
0x3c,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,
|
||||
0x06,0x06,0x06,0x06,0x66,0x3c,0x00,0x00,
|
||||
0xc6,0xcc,0xd8,0xf8,0xcc,0xc6,0x00,0x00,
|
||||
0x60,0x60,0x60,0x60,0x60,0x7c,0x00,0x00,
|
||||
0xc6,0xee,0xfe,0xd6,0xc6,0xc6,0x00,0x00,
|
||||
0xc6,0xe6,0xf6,0xde,0xce,0xc6,0x00,0x00,
|
||||
0x3c,0x66,0x66,0x66,0x66,0x3c,0x00,0x00,
|
||||
0xfc,0xc6,0xc6,0xfc,0xc0,0xc0,0x00,0x00,
|
||||
0x78,0xcc,0xcc,0xcc,0xdc,0x7e,0x00,0x00,
|
||||
0x7c,0x66,0x66,0x7c,0x6c,0x66,0x00,0x00,
|
||||
0x7c,0xc6,0x70,0x1c,0xc6,0x7c,0x00,0x00,
|
||||
0x7e,0x18,0x18,0x18,0x18,0x18,0x00,0x00,
|
||||
0x66,0x66,0x66,0x66,0x66,0x3c,0x00,0x00,
|
||||
0x66,0x66,0x66,0x66,0x3c,0x18,0x00,0x00,
|
||||
0xc6,0xc6,0xd6,0xfe,0xee,0xc6,0x00,0x00,
|
||||
0xc6,0x6c,0x38,0x38,0x6c,0xc6,0x00,0x00,
|
||||
0xc6,0x6c,0x38,0x30,0x30,0x30,0x00,0x00,
|
||||
0xfe,0x0c,0x18,0x30,0x60,0xfe,0x00,0x00,
|
||||
0x3c,0x30,0x30,0x30,0x30,0x30,0x3c,0x00,
|
||||
0xc0,0x60,0x30,0x18,0x0c,0x06,0x02,0x00,
|
||||
0x3c,0x0c,0x0c,0x0c,0x0c,0x0c,0x3c,0x00,
|
||||
0x18,0x3c,0x66,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,
|
||||
0x18,0x18,0x0c,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x3c,0x06,0x3e,0x66,0x3e,0x00,0x00,
|
||||
0x60,0x60,0x7c,0x66,0x66,0x7c,0x00,0x00,
|
||||
0x00,0x3c,0x60,0x60,0x60,0x3c,0x00,0x00,
|
||||
0x06,0x06,0x3e,0x66,0x66,0x3e,0x00,0x00,
|
||||
0x00,0x3c,0x66,0x7e,0x60,0x3c,0x00,0x00,
|
||||
0x1c,0x30,0x7c,0x30,0x30,0x30,0x00,0x00,
|
||||
0x00,0x3e,0x66,0x66,0x3e,0x06,0x3c,0x00,
|
||||
0x60,0x60,0x7c,0x66,0x66,0x66,0x00,0x00,
|
||||
0x30,0x00,0x30,0x30,0x30,0x18,0x00,0x00,
|
||||
0x0c,0x00,0x0c,0x0c,0x0c,0x0c,0x78,0x00,
|
||||
0x60,0x66,0x6c,0x78,0x6c,0x66,0x00,0x00,
|
||||
0x18,0x18,0x18,0x18,0x18,0x0c,0x00,0x00,
|
||||
0x00,0xec,0xfe,0xd6,0xc6,0xc6,0x00,0x00,
|
||||
0x00,0x7c,0x66,0x66,0x66,0x66,0x00,0x00,
|
||||
0x00,0x3c,0x66,0x66,0x66,0x3c,0x00,0x00,
|
||||
0x00,0x7c,0x66,0x66,0x7c,0x60,0x60,0x00,
|
||||
0x00,0x3e,0x66,0x66,0x3e,0x06,0x06,0x00,
|
||||
0x00,0x7c,0x66,0x60,0x60,0x60,0x00,0x00,
|
||||
0x00,0x3c,0x60,0x3c,0x06,0x7c,0x00,0x00,
|
||||
0x30,0x30,0x7c,0x30,0x30,0x1c,0x00,0x00,
|
||||
0x00,0x66,0x66,0x66,0x66,0x3e,0x00,0x00,
|
||||
0x00,0x66,0x66,0x66,0x3c,0x18,0x00,0x00,
|
||||
0x00,0xc6,0xc6,0xd6,0xfe,0x6c,0x00,0x00,
|
||||
0x00,0xcc,0x78,0x30,0x78,0xcc,0x00,0x00,
|
||||
0x00,0x66,0x66,0x66,0x3c,0x18,0x30,0x00,
|
||||
0x00,0x7e,0x0c,0x18,0x30,0x7e,0x00,0x00,
|
||||
0x0c,0x18,0x18,0x30,0x18,0x18,0x0c,0x00,
|
||||
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,
|
||||
0x30,0x18,0x18,0x0c,0x18,0x18,0x30,0x00,
|
||||
0x76,0xdc,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x10,0x38,0x6c,0xc6,0xc6,0xfe,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
};
|
||||
26
GameLib.c
Normal file
@@ -0,0 +1,26 @@
|
||||
#include <SDL/SDL.h>
|
||||
|
||||
#include "Draw.h"
|
||||
#include "Input.h"
|
||||
#include "Audio.h"
|
||||
#include "Entity.h"
|
||||
#include "GameLib.h"
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// GameLib_Init
|
||||
//
|
||||
// Initializes the game.
|
||||
int GameLib_Init(int w,int h,char *title,int fps){
|
||||
if(!Draw_Init(w,h,title,fps)){
|
||||
return(0);
|
||||
}
|
||||
if(!Input_Init()){
|
||||
return(0);
|
||||
}
|
||||
Audio_Init();
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
33
GameLib.h
Normal file
@@ -0,0 +1,33 @@
|
||||
#ifndef _GAMELIB_H_
|
||||
#define _GAMELIB_H_
|
||||
|
||||
#include "Draw.h"
|
||||
#include "Input.h"
|
||||
#include "Audio.h"
|
||||
#include "Entity.h"
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// GameLib_Init
|
||||
//
|
||||
// Initializes the game.
|
||||
int GameLib_Init(int w,int h,char *title,int fps);
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// GameLib_Loop
|
||||
//
|
||||
// Loops the game.
|
||||
void GameLib_Loop();
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// GameLib_BreakLoop
|
||||
//
|
||||
// Breaks the game loop.
|
||||
void GameLib_BreakLoop();
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
68
Input.c
Normal file
@@ -0,0 +1,68 @@
|
||||
#include <SDL/SDL.h>
|
||||
|
||||
#include "Input.h"
|
||||
|
||||
|
||||
// Globals
|
||||
InputKeyStatus _keys[InputKey_Max];
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Input_Init
|
||||
//
|
||||
// Initializes the game input.
|
||||
int Input_Init(){
|
||||
int i;
|
||||
|
||||
// Mark released all the keys
|
||||
for(i=0;i<InputKey_Max;i++){
|
||||
_keys[i]=InputKey_Released;
|
||||
}
|
||||
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Input_Frame
|
||||
//
|
||||
// Notify a frame update to the input subsystem.
|
||||
void Input_Frame(){
|
||||
Uint8* keys;
|
||||
|
||||
// Process Keys
|
||||
keys=SDL_GetKeyState(NULL);
|
||||
Input_SetKey(InputKey_Action1,keys[SDLK_z]);
|
||||
Input_SetKey(InputKey_Action2,keys[SDLK_x]);
|
||||
Input_SetKey(InputKey_Up,keys[SDLK_UP]);
|
||||
Input_SetKey(InputKey_Down,keys[SDLK_DOWN]);
|
||||
Input_SetKey(InputKey_Left,keys[SDLK_LEFT]);
|
||||
Input_SetKey(InputKey_Right,keys[SDLK_RIGHT]);
|
||||
Input_SetKey(InputKey_Jump,keys[SDLK_SPACE]);
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Input_SetKey
|
||||
//
|
||||
// Notify a key press to the input subsystem.
|
||||
void Input_SetKey(InputKey key,int status){
|
||||
if(!status){
|
||||
_keys[key]=InputKey_Released;
|
||||
}else{
|
||||
if(_keys[key]>=InputKey_Pressed){
|
||||
_keys[key]=InputKey_Holded;
|
||||
}else{
|
||||
_keys[key]=InputKey_Pressed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Input_GetKey
|
||||
//
|
||||
// Reports a the status of a key.
|
||||
InputKeyStatus Input_GetKey(InputKey key){
|
||||
return(_keys[key]);
|
||||
}
|
||||
61
Input.h
Normal file
@@ -0,0 +1,61 @@
|
||||
#ifndef _INPUT_H_
|
||||
#define _INPUT_H_
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Input_Init
|
||||
//
|
||||
// Initializes the game input.
|
||||
int Input_Init();
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Input_Frame
|
||||
//
|
||||
// Notify a frame update to the input subsystem.
|
||||
void Input_Frame();
|
||||
|
||||
|
||||
////////////////////////////////////////////////
|
||||
// InputKey //
|
||||
//////////////
|
||||
// Key enumeration.
|
||||
typedef enum {
|
||||
InputKey_Action1,
|
||||
InputKey_Action2,
|
||||
InputKey_Up,
|
||||
InputKey_Down,
|
||||
InputKey_Left,
|
||||
InputKey_Right,
|
||||
InputKey_Jump,
|
||||
InputKey_Max
|
||||
} InputKey;
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Input_SetKey
|
||||
//
|
||||
// Notify a key press to the input subsystem.
|
||||
void Input_SetKey(InputKey key,int status);
|
||||
|
||||
|
||||
////////////////////////////////////////////////
|
||||
// InputKeyStatus //
|
||||
///////////////////
|
||||
// Key status enumeration.
|
||||
typedef enum {
|
||||
InputKey_Released,
|
||||
InputKey_Pressed,
|
||||
InputKey_Holded
|
||||
} InputKeyStatus;
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Input_GetKey
|
||||
//
|
||||
// Reports a the status of a key.
|
||||
InputKeyStatus Input_GetKey(InputKey key);
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
26
Makefile
Normal file
@@ -0,0 +1,26 @@
|
||||
ifneq (,$(findstring MINGW,$(shell uname -s)))
|
||||
TARGET_ARCH=mingw
|
||||
else
|
||||
ARCH:=$(shell uname)
|
||||
ifeq ($(ARCH), Darwin)
|
||||
TARGET_ARCH=macosx
|
||||
else
|
||||
TARGET_ARCH=linux
|
||||
endif # Darwin
|
||||
endif # windir
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ifeq ($(TARGET_ARCH),mingw)
|
||||
include Makefile.mingw
|
||||
else
|
||||
ifeq ($(TARGET_ARCH),linux)
|
||||
include Makefile.linux
|
||||
else
|
||||
ifeq ($(TARGET_ARCH),macosx)
|
||||
include Makefile.macosx
|
||||
endif # macosx
|
||||
endif # linux
|
||||
endif # mingw
|
||||
56
Makefile.common
Normal file
@@ -0,0 +1,56 @@
|
||||
HEADS= \
|
||||
Time.h \
|
||||
Draw.h \
|
||||
Input.h \
|
||||
Audio.h \
|
||||
Entity.h \
|
||||
GameLib.h
|
||||
OBJS= \
|
||||
$(BUILDDIR)/Time.o \
|
||||
$(BUILDDIR)/Draw.o \
|
||||
$(BUILDDIR)/Input.o \
|
||||
$(BUILDDIR)/Audio.o \
|
||||
$(BUILDDIR)/Entity.o \
|
||||
$(BUILDDIR)/GameLib.o \
|
||||
$(BUILDDIR)/main.o
|
||||
|
||||
|
||||
all: $(BUILDDIR) $(BUILDDIR)/$(RESULT)
|
||||
|
||||
$(BUILDDIR):
|
||||
mkdir $(BUILDDIR)
|
||||
|
||||
|
||||
|
||||
$(BUILDDIR)/Time.o: Time.c $(HEADS)
|
||||
$(CC) -c Time.c -o $(BUILDDIR)/Time.o $(CFLAGS)
|
||||
|
||||
$(BUILDDIR)/Draw.o: Draw.c $(HEADS)
|
||||
$(CC) -c Draw.c -o $(BUILDDIR)/Draw.o $(CFLAGS)
|
||||
|
||||
$(BUILDDIR)/Input.o: Input.c $(HEADS)
|
||||
$(CC) -c Input.c -o $(BUILDDIR)/Input.o $(CFLAGS)
|
||||
|
||||
$(BUILDDIR)/Audio.o: Audio.c $(HEADS)
|
||||
$(CC) -c Audio.c -o $(BUILDDIR)/Audio.o $(CFLAGS)
|
||||
|
||||
$(BUILDDIR)/Entity.o: Entity.c $(HEADS)
|
||||
$(CC) -c Entity.c -o $(BUILDDIR)/Entity.o $(CFLAGS)
|
||||
|
||||
$(BUILDDIR)/GameLib.o: GameLib.c $(HEADS)
|
||||
$(CC) -c GameLib.c -o $(BUILDDIR)/GameLib.o $(CFLAGS)
|
||||
|
||||
$(BUILDDIR)/main.o: main.c $(HEADS)
|
||||
$(CC) -c main.c -o $(BUILDDIR)/main.o $(CFLAGS)
|
||||
|
||||
$(BUILDDIR)/$(RESULT): $(OBJS)
|
||||
$(CC) -o $(BUILDDIR)/$(RESULT) $(OBJS) $(LIBS) $(CFLAGS)
|
||||
|
||||
|
||||
clean:
|
||||
rm -f $(OBJS) $(BUILDDIR)/$(RESULT)
|
||||
|
||||
run: $(BUILDDIR)/$(RESULT)
|
||||
./$(BUILDDIR)/$(RESULT)
|
||||
|
||||
|
||||
9
Makefile.linux
Normal file
@@ -0,0 +1,9 @@
|
||||
LIBS= -lSDL -lpthread -L/usr/X11R6/lib -L/usr/lib
|
||||
CFLAGS= -Wall -g -I/usr/include/ -I/usr/include/SDL/ -I/usr/X11R6/include/
|
||||
CC=gcc
|
||||
RM=rm -rf
|
||||
|
||||
RESULT=game
|
||||
BUILDDIR=build-linux
|
||||
|
||||
include Makefile.common
|
||||
9
Makefile.macosx
Normal file
@@ -0,0 +1,9 @@
|
||||
LIBS=-lm -ldl -framework Cocoa -framework SDL macosx/SDLMain.m
|
||||
CFLAGS=-g -DDEBUG -Wall -DMACOSX -ObjC -Dmain=SDL_main
|
||||
CC=gcc
|
||||
RM=rm -rf
|
||||
|
||||
RESULT=game
|
||||
BUILDDIR=build-macosx
|
||||
|
||||
include Makefile.common
|
||||
11
Makefile.mingw
Normal file
@@ -0,0 +1,11 @@
|
||||
LIBS=-I/mingw/include/SDL -D_GNU_SOURCE=1 -Dmain=SDL_main
|
||||
CFLAGS= -L/mingw/lib -lmingw32 -lSDLmain -lSDL -mwindows
|
||||
CC=gcc
|
||||
RM=rm -rf
|
||||
|
||||
RESULT=game.exe
|
||||
BUILDDIR=build-mingw
|
||||
|
||||
include Makefile.common
|
||||
|
||||
|
||||
83
Time.c
Normal file
@@ -0,0 +1,83 @@
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
#include <unistd.h>
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
#include <SDL/SDL.h>
|
||||
|
||||
#include "Time.h"
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Time_GetTime
|
||||
//
|
||||
// Gets the current time in usecs.
|
||||
/////////////////////////////
|
||||
// Time_Pause
|
||||
//
|
||||
// Pauses the execution for t usecs.
|
||||
#if WIN32
|
||||
#include <windows.h>
|
||||
// WIN32
|
||||
long long Time_GetTime(){
|
||||
LARGE_INTEGER freq;
|
||||
LARGE_INTEGER tim;
|
||||
long long int microt;
|
||||
|
||||
QueryPerformanceFrequency(&freq);
|
||||
QueryPerformanceCounter(&tim);
|
||||
microt=(tim.QuadPart*1000000)/freq.QuadPart;
|
||||
return(microt);
|
||||
}
|
||||
void Time_Pause(int pausa){
|
||||
long long tend,t,diff;
|
||||
|
||||
tend=Time_GetTime()+pausa;
|
||||
do{
|
||||
diff=tend-t;
|
||||
if(diff>1000){
|
||||
SDL_Delay(diff/1000);
|
||||
}else{
|
||||
Sleep(0);
|
||||
}
|
||||
t=Time_GetTime();
|
||||
}while(tend>=t);
|
||||
}
|
||||
#else
|
||||
#ifdef MACOSX
|
||||
#include <mach/mach_time.h>
|
||||
// MacOSX
|
||||
long long Time_GetTime(){
|
||||
static mach_timebase_info_data_t info = {0,0};
|
||||
uint64_t t;
|
||||
if(info.denom==0){
|
||||
mach_timebase_info(&info);
|
||||
}
|
||||
t=mach_absolute_time()*(info.numer / info.denom);
|
||||
return(t/1000);
|
||||
}
|
||||
void Time_Pause(int pausa){
|
||||
struct timeval tv;
|
||||
tv.tv_sec=(long long)pausa/1000000;
|
||||
tv.tv_usec=(long long)pausa%1000000;
|
||||
select(0, NULL, NULL, NULL, &tv);
|
||||
}
|
||||
#else
|
||||
// UNIX
|
||||
long long Time_GetTime(){
|
||||
struct timeval t;
|
||||
long long usecs;
|
||||
gettimeofday(&t,NULL);
|
||||
usecs=(t.tv_sec*1000000ll)+(t.tv_usec);
|
||||
return(usecs);
|
||||
}
|
||||
void Time_Pause(int pausa){
|
||||
struct timeval tv;
|
||||
tv.tv_sec=(long long)pausa/1000000;
|
||||
tv.tv_usec=(long long)pausa%1000000;
|
||||
select(0, NULL, NULL, NULL, &tv);
|
||||
}
|
||||
#endif // if MACOSX
|
||||
#endif // if WIN32
|
||||
|
||||
|
||||
17
Time.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#ifndef _TIME_H_
|
||||
#define _TIME_H_
|
||||
|
||||
/////////////////////////////
|
||||
// Time_GetTime
|
||||
//
|
||||
// Gets the current time in usecs.
|
||||
long long Time_GetTime();
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Time_Pause
|
||||
//
|
||||
// Pauses the execution for t usecs.
|
||||
void Time_Pause(int pausa);
|
||||
|
||||
#endif
|
||||
BIN
data/agua.bmp
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
data/bisho.bmp
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
data/bisho_alpha.bmp
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
data/coin.wav
Normal file
BIN
data/tierra.bmp
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
data/tile0000.bmp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
data/tile0001.bmp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
data/tile0010.bmp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
data/tile0011.bmp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
data/tile0100.bmp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
data/tile0101.bmp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
data/tile0110.bmp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
data/tile0111.bmp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
data/tile1000.bmp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
data/tile1001.bmp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
data/tile1010.bmp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
data/tile1011.bmp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
data/tile1100.bmp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
data/tile1101.bmp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
data/tile1110.bmp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
data/tile1111.bmp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
macosx/.DS_Store
vendored
Normal file
16
macosx/SDLMain.h
Normal file
@@ -0,0 +1,16 @@
|
||||
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
|
||||
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
|
||||
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
|
||||
|
||||
Feel free to customize this file to suit your needs
|
||||
*/
|
||||
|
||||
#ifndef _SDLMain_h_
|
||||
#define _SDLMain_h_
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@interface SDLMain : NSObject
|
||||
@end
|
||||
|
||||
#endif /* _SDLMain_h_ */
|
||||
381
macosx/SDLMain.m
Normal file
@@ -0,0 +1,381 @@
|
||||
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
|
||||
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
|
||||
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
|
||||
|
||||
Feel free to customize this file to suit your needs
|
||||
*/
|
||||
|
||||
#include <SDL/SDL.h>
|
||||
#include "SDLMain.h"
|
||||
#include <sys/param.h> /* for MAXPATHLEN */
|
||||
#include <unistd.h>
|
||||
|
||||
/* For some reaon, Apple removed setAppleMenu from the headers in 10.4,
|
||||
but the method still is there and works. To avoid warnings, we declare
|
||||
it ourselves here. */
|
||||
@interface NSApplication(SDL_Missing_Methods)
|
||||
- (void)setAppleMenu:(NSMenu *)menu;
|
||||
@end
|
||||
|
||||
/* Use this flag to determine whether we use SDLMain.nib or not */
|
||||
#define SDL_USE_NIB_FILE 0
|
||||
|
||||
/* Use this flag to determine whether we use CPS (docking) or not */
|
||||
#define SDL_USE_CPS 1
|
||||
#ifdef SDL_USE_CPS
|
||||
/* Portions of CPS.h */
|
||||
typedef struct CPSProcessSerNum
|
||||
{
|
||||
UInt32 lo;
|
||||
UInt32 hi;
|
||||
} CPSProcessSerNum;
|
||||
|
||||
extern OSErr CPSGetCurrentProcess( CPSProcessSerNum *psn);
|
||||
extern OSErr CPSEnableForegroundOperation( CPSProcessSerNum *psn, UInt32 _arg2, UInt32 _arg3, UInt32 _arg4, UInt32 _arg5);
|
||||
extern OSErr CPSSetFrontProcess( CPSProcessSerNum *psn);
|
||||
|
||||
#endif /* SDL_USE_CPS */
|
||||
|
||||
static int gArgc;
|
||||
static char **gArgv;
|
||||
static BOOL gFinderLaunch;
|
||||
static BOOL gCalledAppMainline = FALSE;
|
||||
|
||||
static NSString *getApplicationName(void)
|
||||
{
|
||||
const NSDictionary *dict;
|
||||
NSString *appName = 0;
|
||||
|
||||
/* Determine the application name */
|
||||
dict = (const NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle());
|
||||
if (dict)
|
||||
appName = [dict objectForKey: @"CFBundleName"];
|
||||
|
||||
if (![appName length])
|
||||
appName = [[NSProcessInfo processInfo] processName];
|
||||
|
||||
return appName;
|
||||
}
|
||||
|
||||
#if SDL_USE_NIB_FILE
|
||||
/* A helper category for NSString */
|
||||
@interface NSString (ReplaceSubString)
|
||||
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString;
|
||||
@end
|
||||
#endif
|
||||
|
||||
@interface NSApplication (SDLApplication)
|
||||
@end
|
||||
|
||||
@implementation NSApplication (SDLApplication)
|
||||
/* Invoked from the Quit menu item */
|
||||
- (void)terminate:(id)sender
|
||||
{
|
||||
/* Post a SDL_QUIT event */
|
||||
SDL_Event event;
|
||||
event.type = SDL_QUIT;
|
||||
SDL_PushEvent(&event);
|
||||
}
|
||||
@end
|
||||
|
||||
/* The main class of the application, the application's delegate */
|
||||
@implementation SDLMain
|
||||
|
||||
/* Set the working directory to the .app's parent directory */
|
||||
- (void) setupWorkingDirectory:(BOOL)shouldChdir
|
||||
{
|
||||
if (shouldChdir)
|
||||
{
|
||||
char parentdir[MAXPATHLEN];
|
||||
CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle());
|
||||
CFURLRef url2 = CFURLCreateCopyDeletingLastPathComponent(0, url);
|
||||
if (CFURLGetFileSystemRepresentation(url2, 1, (UInt8 *)parentdir, MAXPATHLEN)) {
|
||||
chdir(parentdir); /* chdir to the binary app's parent */
|
||||
}
|
||||
CFRelease(url);
|
||||
CFRelease(url2);
|
||||
}
|
||||
}
|
||||
|
||||
#if SDL_USE_NIB_FILE
|
||||
|
||||
/* Fix menu to contain the real app name instead of "SDL App" */
|
||||
- (void)fixMenu:(NSMenu *)aMenu withAppName:(NSString *)appName
|
||||
{
|
||||
NSRange aRange;
|
||||
NSEnumerator *enumerator;
|
||||
NSMenuItem *menuItem;
|
||||
|
||||
aRange = [[aMenu title] rangeOfString:@"SDL App"];
|
||||
if (aRange.length != 0)
|
||||
[aMenu setTitle: [[aMenu title] stringByReplacingRange:aRange with:appName]];
|
||||
|
||||
enumerator = [[aMenu itemArray] objectEnumerator];
|
||||
while ((menuItem = [enumerator nextObject]))
|
||||
{
|
||||
aRange = [[menuItem title] rangeOfString:@"SDL App"];
|
||||
if (aRange.length != 0)
|
||||
[menuItem setTitle: [[menuItem title] stringByReplacingRange:aRange with:appName]];
|
||||
if ([menuItem hasSubmenu])
|
||||
[self fixMenu:[menuItem submenu] withAppName:appName];
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static void setApplicationMenu(void)
|
||||
{
|
||||
/* warning: this code is very odd */
|
||||
NSMenu *appleMenu;
|
||||
NSMenuItem *menuItem;
|
||||
NSString *title;
|
||||
NSString *appName;
|
||||
|
||||
appName = getApplicationName();
|
||||
appleMenu = [[NSMenu alloc] initWithTitle:@""];
|
||||
|
||||
/* Add menu items */
|
||||
title = [@"About " stringByAppendingString:appName];
|
||||
[appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
|
||||
|
||||
[appleMenu addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
title = [@"Hide " stringByAppendingString:appName];
|
||||
[appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"];
|
||||
|
||||
menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
|
||||
[menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
|
||||
|
||||
[appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""];
|
||||
|
||||
[appleMenu addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
title = [@"Quit " stringByAppendingString:appName];
|
||||
[appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"];
|
||||
|
||||
|
||||
/* Put menu into the menubar */
|
||||
menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
|
||||
[menuItem setSubmenu:appleMenu];
|
||||
[[NSApp mainMenu] addItem:menuItem];
|
||||
|
||||
/* Tell the application object that this is now the application menu */
|
||||
[NSApp setAppleMenu:appleMenu];
|
||||
|
||||
/* Finally give up our references to the objects */
|
||||
[appleMenu release];
|
||||
[menuItem release];
|
||||
}
|
||||
|
||||
/* Create a window menu */
|
||||
static void setupWindowMenu(void)
|
||||
{
|
||||
NSMenu *windowMenu;
|
||||
NSMenuItem *windowMenuItem;
|
||||
NSMenuItem *menuItem;
|
||||
|
||||
windowMenu = [[NSMenu alloc] initWithTitle:@"Window"];
|
||||
|
||||
/* "Minimize" item */
|
||||
menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"];
|
||||
[windowMenu addItem:menuItem];
|
||||
[menuItem release];
|
||||
|
||||
/* Put menu into the menubar */
|
||||
windowMenuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
|
||||
[windowMenuItem setSubmenu:windowMenu];
|
||||
[[NSApp mainMenu] addItem:windowMenuItem];
|
||||
|
||||
/* Tell the application object that this is now the window menu */
|
||||
[NSApp setWindowsMenu:windowMenu];
|
||||
|
||||
/* Finally give up our references to the objects */
|
||||
[windowMenu release];
|
||||
[windowMenuItem release];
|
||||
}
|
||||
|
||||
/* Replacement for NSApplicationMain */
|
||||
static void CustomApplicationMain (int argc, char **argv)
|
||||
{
|
||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||
SDLMain *sdlMain;
|
||||
|
||||
/* Ensure the application object is initialised */
|
||||
[NSApplication sharedApplication];
|
||||
|
||||
#ifdef SDL_USE_CPS
|
||||
{
|
||||
CPSProcessSerNum PSN;
|
||||
/* Tell the dock about us */
|
||||
if (!CPSGetCurrentProcess(&PSN))
|
||||
if (!CPSEnableForegroundOperation(&PSN,0x03,0x3C,0x2C,0x1103))
|
||||
if (!CPSSetFrontProcess(&PSN))
|
||||
[NSApplication sharedApplication];
|
||||
}
|
||||
#endif /* SDL_USE_CPS */
|
||||
|
||||
/* Set up the menubar */
|
||||
[NSApp setMainMenu:[[NSMenu alloc] init]];
|
||||
setApplicationMenu();
|
||||
setupWindowMenu();
|
||||
|
||||
/* Create SDLMain and make it the app delegate */
|
||||
sdlMain = [[SDLMain alloc] init];
|
||||
[NSApp setDelegate:sdlMain];
|
||||
|
||||
/* Start the main event loop */
|
||||
[NSApp run];
|
||||
|
||||
[sdlMain release];
|
||||
[pool release];
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Catch document open requests...this lets us notice files when the app
|
||||
* was launched by double-clicking a document, or when a document was
|
||||
* dragged/dropped on the app's icon. You need to have a
|
||||
* CFBundleDocumentsType section in your Info.plist to get this message,
|
||||
* apparently.
|
||||
*
|
||||
* Files are added to gArgv, so to the app, they'll look like command line
|
||||
* arguments. Previously, apps launched from the finder had nothing but
|
||||
* an argv[0].
|
||||
*
|
||||
* This message may be received multiple times to open several docs on launch.
|
||||
*
|
||||
* This message is ignored once the app's mainline has been called.
|
||||
*/
|
||||
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
|
||||
{
|
||||
const char *temparg;
|
||||
size_t arglen;
|
||||
char *arg;
|
||||
char **newargv;
|
||||
|
||||
if (!gFinderLaunch) /* MacOS is passing command line args. */
|
||||
return FALSE;
|
||||
|
||||
if (gCalledAppMainline) /* app has started, ignore this document. */
|
||||
return FALSE;
|
||||
|
||||
temparg = [filename UTF8String];
|
||||
arglen = SDL_strlen(temparg) + 1;
|
||||
arg = (char *) SDL_malloc(arglen);
|
||||
if (arg == NULL)
|
||||
return FALSE;
|
||||
|
||||
newargv = (char **) realloc(gArgv, sizeof (char *) * (gArgc + 2));
|
||||
if (newargv == NULL)
|
||||
{
|
||||
SDL_free(arg);
|
||||
return FALSE;
|
||||
}
|
||||
gArgv = newargv;
|
||||
|
||||
SDL_strlcpy(arg, temparg, arglen);
|
||||
gArgv[gArgc++] = arg;
|
||||
gArgv[gArgc] = NULL;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/* Called when the internal event loop has just started running */
|
||||
- (void) applicationDidFinishLaunching: (NSNotification *) note
|
||||
{
|
||||
int status;
|
||||
|
||||
/* Set the working directory to the .app's parent directory */
|
||||
[self setupWorkingDirectory:gFinderLaunch];
|
||||
|
||||
#if SDL_USE_NIB_FILE
|
||||
/* Set the main menu to contain the real app name instead of "SDL App" */
|
||||
[self fixMenu:[NSApp mainMenu] withAppName:getApplicationName()];
|
||||
#endif
|
||||
|
||||
/* Hand off to main application code */
|
||||
gCalledAppMainline = TRUE;
|
||||
status = SDL_main (gArgc, gArgv);
|
||||
|
||||
/* We're done, thank you for playing */
|
||||
exit(status);
|
||||
}
|
||||
@end
|
||||
|
||||
|
||||
@implementation NSString (ReplaceSubString)
|
||||
|
||||
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString
|
||||
{
|
||||
unsigned int bufferSize;
|
||||
unsigned int selfLen = [self length];
|
||||
unsigned int aStringLen = [aString length];
|
||||
unichar *buffer;
|
||||
NSRange localRange;
|
||||
NSString *result;
|
||||
|
||||
bufferSize = selfLen + aStringLen - aRange.length;
|
||||
buffer = (unichar *)NSAllocateMemoryPages(bufferSize*sizeof(unichar));
|
||||
|
||||
/* Get first part into buffer */
|
||||
localRange.location = 0;
|
||||
localRange.length = aRange.location;
|
||||
[self getCharacters:buffer range:localRange];
|
||||
|
||||
/* Get middle part into buffer */
|
||||
localRange.location = 0;
|
||||
localRange.length = aStringLen;
|
||||
[aString getCharacters:(buffer+aRange.location) range:localRange];
|
||||
|
||||
/* Get last part into buffer */
|
||||
localRange.location = aRange.location + aRange.length;
|
||||
localRange.length = selfLen - localRange.location;
|
||||
[self getCharacters:(buffer+aRange.location+aStringLen) range:localRange];
|
||||
|
||||
/* Build output string */
|
||||
result = [NSString stringWithCharacters:buffer length:bufferSize];
|
||||
|
||||
NSDeallocateMemoryPages(buffer, bufferSize);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
||||
#ifdef main
|
||||
# undef main
|
||||
#endif
|
||||
|
||||
|
||||
/* Main entry point to executable - should *not* be SDL_main! */
|
||||
int main (int argc, char **argv)
|
||||
{
|
||||
/* Copy the arguments into a global variable */
|
||||
/* This is passed if we are launched by double-clicking */
|
||||
if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) {
|
||||
gArgv = (char **) SDL_malloc(sizeof (char *) * 2);
|
||||
gArgv[0] = argv[0];
|
||||
gArgv[1] = NULL;
|
||||
gArgc = 1;
|
||||
gFinderLaunch = YES;
|
||||
} else {
|
||||
int i;
|
||||
gArgc = argc;
|
||||
gArgv = (char **) SDL_malloc(sizeof (char *) * (argc+1));
|
||||
for (i = 0; i <= argc; i++)
|
||||
gArgv[i] = argv[i];
|
||||
gFinderLaunch = NO;
|
||||
}
|
||||
|
||||
#if SDL_USE_NIB_FILE
|
||||
NSApplicationMain (argc, argv);
|
||||
#else
|
||||
CustomApplicationMain (argc, argv);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
BIN
macosx/SDL_dev.zip
Normal file
162
main.c
Normal file
@@ -0,0 +1,162 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "GameLib.h"
|
||||
|
||||
|
||||
#define MAP_ANCHO 11
|
||||
#define MAP_ALTO 9
|
||||
|
||||
DrawImg tiles[20];
|
||||
int mapa[MAP_ANCHO][MAP_ALTO];
|
||||
|
||||
// Dibujar el mapa
|
||||
void DrawMapa(){
|
||||
int x;
|
||||
int y;
|
||||
int value;
|
||||
|
||||
// dibujar el entorno
|
||||
for(x=0;x<MAP_ANCHO-1;x++){
|
||||
for(y=0;y<MAP_ALTO-1;y++){
|
||||
value = mapa[x ][y ] * 8;
|
||||
value += mapa[x+1][y ] * 4;
|
||||
value += mapa[x ][y+1] * 2;
|
||||
value += mapa[x+1][y+1] * 1;
|
||||
Draw_DrawImg(tiles[value], x*64, y*64);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Crear un mapa aleatorio
|
||||
int CrearMapa(){
|
||||
int x;
|
||||
int y;
|
||||
double rnd;
|
||||
|
||||
for(x=0;x<MAP_ANCHO;x++){
|
||||
for(y=0;y<MAP_ALTO;y++){
|
||||
rnd=rand();
|
||||
rnd=rnd/RAND_MAX;
|
||||
if(rnd>0.7){
|
||||
mapa[x][y]=0;
|
||||
}else{
|
||||
mapa[x][y]=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
DrawFnt font;
|
||||
DrawFnt fonts;
|
||||
DrawImg bisho;
|
||||
float xacel,yacel;
|
||||
int xpos=0,ypos=0;
|
||||
AudioSnd coin;
|
||||
int t_start,t_end;
|
||||
int frames=0;
|
||||
|
||||
int ProcGame(){
|
||||
int i;
|
||||
|
||||
//Draw_Clean(0,0,0);
|
||||
DrawMapa();
|
||||
|
||||
if(Input_GetKey(InputKey_Up) && yacel>-10){
|
||||
yacel-=2;
|
||||
}
|
||||
if(Input_GetKey(InputKey_Down) && yacel<10){
|
||||
yacel+=2;
|
||||
}
|
||||
if(Input_GetKey(InputKey_Left) && xacel>-10){
|
||||
xacel-=2;
|
||||
}
|
||||
if(Input_GetKey(InputKey_Right) && xacel<10){
|
||||
xacel+=2;
|
||||
}
|
||||
if(xacel!=0){
|
||||
xpos+=xacel;
|
||||
if(xacel>0){
|
||||
xacel-=1;
|
||||
}else{
|
||||
xacel+=1;
|
||||
}
|
||||
}
|
||||
if(yacel!=0){
|
||||
ypos+=yacel;
|
||||
if(yacel>0){
|
||||
yacel-=1;
|
||||
}else{
|
||||
yacel+=1;
|
||||
}
|
||||
}
|
||||
Draw_DrawImgCenter(bisho,xpos,ypos);
|
||||
Draw_DrawText(fonts,"BISHO!",xpos-15,ypos-23);
|
||||
Draw_DrawText(font ,"BISHO!",xpos-16,ypos-24);
|
||||
|
||||
|
||||
if(Input_GetKey(InputKey_Action1)==InputKey_Pressed){
|
||||
Audio_PlaySound(coin,1,1);
|
||||
}
|
||||
|
||||
/*for(i=0;i<1000;i++){
|
||||
Draw_DrawImgCenter(bisho,rand()%640,rand()%480);
|
||||
}*/
|
||||
|
||||
Draw_DrawText(fonts,"Hola Mundo!",11,11);
|
||||
Draw_DrawText(font ,"Hola Mundo!",10,10);
|
||||
|
||||
frames++;
|
||||
|
||||
return(1);
|
||||
}
|
||||
|
||||
int main(int argc,char *argv[]){
|
||||
|
||||
srand(time(NULL));
|
||||
|
||||
GameLib_Init(640,480,"Game",60);
|
||||
|
||||
tiles[0] = Draw_LoadImage("data/tile0000.bmp");
|
||||
tiles[1] = Draw_LoadImage("data/tile0001.bmp");
|
||||
tiles[2] = Draw_LoadImage("data/tile0010.bmp");
|
||||
tiles[3] = Draw_LoadImage("data/tile0011.bmp");
|
||||
tiles[4] = Draw_LoadImage("data/tile0100.bmp");
|
||||
tiles[5] = Draw_LoadImage("data/tile0101.bmp");
|
||||
tiles[6] = Draw_LoadImage("data/tile0110.bmp");
|
||||
tiles[7] = Draw_LoadImage("data/tile0111.bmp");
|
||||
tiles[8] = Draw_LoadImage("data/tile1000.bmp");
|
||||
tiles[9] = Draw_LoadImage("data/tile1001.bmp");
|
||||
tiles[10] = Draw_LoadImage("data/tile1010.bmp");
|
||||
tiles[11] = Draw_LoadImage("data/tile1011.bmp");
|
||||
tiles[12] = Draw_LoadImage("data/tile1100.bmp");
|
||||
tiles[13] = Draw_LoadImage("data/tile1101.bmp");
|
||||
tiles[14] = Draw_LoadImage("data/tile1110.bmp");
|
||||
tiles[15] = Draw_LoadImage("data/tile1111.bmp");
|
||||
|
||||
font=Draw_DefaultFont(255,255,255,255);
|
||||
fonts=Draw_DefaultFont(0,0,0,127);
|
||||
|
||||
//bisho=Draw_LoadImage("data/bisho.bmp");
|
||||
//Draw_ImgSetKeyCol(bisho,0,255,0);
|
||||
//Draw_ImgSetAlpha(bisho,127);
|
||||
|
||||
bisho=Draw_LoadImage("data/bisho_alpha.bmp");
|
||||
Draw_ImgSetAlpha(bisho,255);
|
||||
|
||||
xpos=320;
|
||||
ypos=240;
|
||||
|
||||
|
||||
coin=Audio_LoadSound("data/coin.wav");
|
||||
|
||||
|
||||
CrearMapa();
|
||||
|
||||
t_start=SDL_GetTicks();
|
||||
Draw_Loop(ProcGame);
|
||||
t_end=SDL_GetTicks();
|
||||
printf("%d %d %.2f\n",t_end-t_start,frames,frames/((t_end-t_start)/1000.0f));
|
||||
|
||||
return(0);
|
||||
}
|
||||