piss and gass by Posercummers [web]
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <stdio.h>
#include <stdlib.h>
#include "fmod.h"
FSOUND_SAMPLE *music = NULL;
const char mp3file[]="ice.mp3";
SDL_Surface *surface;
SDL_Event event;
GLuint texture[10];
int done = 0;
int volume = 255;
int i;
float trans = 2.5;
float lolsex = 0.0;
int lolsex2 = 0;
unsigned int tick;
unsigned int frames = 0;
int loadTexture(char *, int n);
int initSDL(void);
int initOGL(void);
int renderScene(void);
int resizeWindow(int height, int width);
void keypress(SDL_keysym *keysym);
void initSound();
void quit(int returnCode);
int main(int argc, char **argv)
{
printf("Loading... (If you were watching this on a _really_ fast computer you wouldn't be able to read this...)\n");
initSound();
printf("Let's kick it!\n--------------\n");
if (initSDL()) {
printf("Error when initializing SDL\n");
return 1;
}
if (initOGL()) {
printf("Error when initialinzing OpenGL\n");
return 1;
}
resizeWindow(640, 480);
while(!done) {
while(SDL_PollEvent(&event)) {
switch(event.type) {
case SDL_VIDEORESIZE:
surface = SDL_SetVideoMode(event.resize.w, event.resize.h, 16, SDL_OPENGL);
if (!surface) {
printf("Couldn't get a surface after resize\n");
quit(1);
}
resizeWindow(event.resize.w, event.resize.h);
break;
case SDL_KEYDOWN:
keypress(&event.key.keysym);
break;
case SDL_QUIT:
done = 1;
break;
default: break;
}
}
renderScene();
}
return 0;
}
int loadTexture(char *filename, int n)
{
SDL_Surface * image;
if (!(image = IMG_Load(filename)))
return 1;
glGenTextures(1, &texture[n]);
glBindTexture(GL_TEXTURE_2D, texture[n]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, image->w, image->h, 0, GL_BGR, GL_UNSIGNED_BYTE, image->pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
SDL_FreeSurface(image);
return 0;
}
int initSDL()
{
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
printf("Unable to initialize SDL: %s\n", SDL_GetError());
return 1;
}
surface = SDL_SetVideoMode(640, 480, 16, SDL_OPENGL | SDL_FULLSCREEN | SDL_HWSURFACE);
if (!surface) {
printf("Error %s\n", SDL_GetError());
return 1;
}
SDL_WM_SetCaption("Ice Ice baby!", "OGL");
SDL_ShowCursor(SDL_DISABLE);
return 0;
}
int initOGL()
{
/* load textures*/
if (loadTexture("sorry.png", 8))
return 1;/**/
if (loadTexture("greets.png", 9))
return 1;/**/
if (loadTexture("music.png", 7))
return 1;/**/
if (loadTexture("gfx.png", 6))
return 1;/**/
if (loadTexture("code.png", 5))
return 1;/**/
if (loadTexture("dance.png", 4))
return 1;/**/
if (loadTexture("tagg.png", 2))
return 1;/**/
if (loadTexture("kikkit.png", 0))
return 1;
if (loadTexture("main_title.png", 1))
return 1;/**/
if (loadTexture("intro.png", 3))
return 1;/**/
/* enable opengl doublebuffering */
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
/* set color depth to 16 bit 565 */
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 6);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
glFogf(GL_FOG_START, 0.0);
glFogf(GL_FOG_END , 1.0);
glFogf(GL_FOG_DENSITY, 0.3);
glEnable(GL_TEXTURE_2D);
glEnable(GL_SMOOTH);
glClearColor(0.0, 0.0, 0.0, 0.0);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
return 0;
}
int renderScene()
{
tick = SDL_GetTicks();
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0, 0.0,-2.5);
glColor3ub(255, 255, 255);
if (frames == 0)
FSOUND_PlaySound(FSOUND_FREE, music);
if (frames < 180) {
glBindTexture(GL_TEXTURE_2D, texture[3]);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 1.0);
glVertex2f(-1.0,-1.0);
glTexCoord2f(0.0, 0.0);
glVertex2f(-1.0, 1.0);
glTexCoord2f(1.0, 0.0);
glVertex2f( 1.0, 1.0);
glTexCoord2f(1.0, 1.0);
glVertex2f( 1.0,-1.0);
glEnd();
}
else if (frames < 358) {
glBindTexture(GL_TEXTURE_2D, texture[1]);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 1.0);
glVertex2f(-1.0,-1.0);
glTexCoord2f(0.0, 0.0);
glVertex2f(-1.0, 1.0);
glTexCoord2f(1.0, 0.0);
glVertex2f( 1.0, 1.0);
glTexCoord2f(1.0, 1.0);
glVertex2f( 1.0,-1.0);
glEnd();
}
else if (frames < 518) {
glBindTexture(GL_TEXTURE_2D, texture[0]);
glBegin(GL_QUADS);
glTexCoord2f(0.0, .25);
glVertex2f(-1.0, 0.5);
glTexCoord2f(0.0, 0.0);
glVertex2f(-1.0, 1.0);
glTexCoord2f(1.0, 0.0);
glVertex2f( 1.0, 1.0);
glTexCoord2f(1.0, .25);
glVertex2f( 1.0, 0.5);
if (frames > 437) {
glTexCoord2f(0.0, 0.5);
glVertex2f(-1.0, 0.0);
glTexCoord2f(0.0, .25);
glVertex2f(-1.0, 0.5);
glTexCoord2f(1.0, .25);
glVertex2f( 1.0, 0.5);
glTexCoord2f(1.0, 0.5);
glVertex2f( 1.0, 0.0);
}
if (frames > 440) {
glTexCoord2f(0.0, .75);
glVertex2f(-1.0,-0.5);
glTexCoord2f(0.0, 0.5);
glVertex2f(-1.0, 0.0);
glTexCoord2f(1.0, 0.5);
glVertex2f( 1.0, 0.0);
glTexCoord2f(1.0, .75);
glVertex2f( 1.0,-0.5);
}
if (frames > 443) {
glTexCoord2f(0.0, 1.0);
glVertex2f(-1.0,-1.0);
glTexCoord2f(0.0, .75);
glVertex2f(-1.0,-0.5);
glTexCoord2f(1.0, .75);
glVertex2f( 1.0,-0.5);
glTexCoord2f(1.0, 1.0);
glVertex2f( 1.0,-1.0);
}
glEnd();
}
else if (frames < 715) {
glBindTexture(GL_TEXTURE_2D, texture[2]);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.8);
glVertex2f(-1.3,-0.7);
glTexCoord2f(0.0, 0.0);
glVertex2f(-1.3, 1.0);
glTexCoord2f(1.0, 0.0);
glVertex2f( 1.3, 1.0);
glTexCoord2f(1.0, 0.8);
glVertex2f( 1.3,-0.7);
glTexCoord2f(0.0-lolsex, 1.0);
glVertex2f(-1.3, -1.0);
glTexCoord2f(0.0-lolsex, 0.8);
glVertex2f(-1.3, -0.7);
glTexCoord2f(1.0-lolsex, 0.8);
glVertex2f( 1.3, -0.7);
glTexCoord2f(1.0-lolsex, 1.0);
glVertex2f( 1.3, -1.0);
glEnd();
lolsex += 0.03;
}
else if (frames < 815) {
if (frames == 715) {
trans = 2.5;
glEnable(GL_FOG);
}
glLoadIdentity();
glTranslatef(0.0, 0.0,-trans);
glBindTexture(GL_TEXTURE_2D, texture[5]);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 1.0);
glVertex2f(-1.0,-1.0);
glTexCoord2f(0.0, 0.0);
glVertex2f(-1.0, 1.0);
glTexCoord2f(1.0, 0.0);
glVertex2f( 1.0, 1.0);
glTexCoord2f(1.0, 1.0);
glVertex2f( 1.0,-1.0);
glEnd();
if (frames > 760)
trans += 0.3;
}
else if (frames < 915) {
if (frames == 815) {
trans = 2.5;
}
glLoadIdentity();
glTranslatef(0.0, 0.0,-trans);
glBindTexture(GL_TEXTURE_2D, texture[6]);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 1.0);
glVertex2f(-1.0,-1.0);
glTexCoord2f(0.0, 0.0);
glVertex2f(-1.0, 1.0);
glTexCoord2f(1.0, 0.0);
glVertex2f( 1.0, 1.0);
glTexCoord2f(1.0, 1.0);
glVertex2f( 1.0,-1.0);
glEnd();
if (frames > 860)
trans += 0.3;
}
else if (frames < 1015) {
if (frames == 915) {
trans = 2.5;
}
glLoadIdentity();
glTranslatef(0.0, 0.0,-trans);
glBindTexture(GL_TEXTURE_2D, texture[7]);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 1.0);
glVertex3f(-1.0,-1.0, 0.0);
glTexCoord2f(0.0, 0.0);
glVertex3f(-1.0, 1.0, 0.0);
glTexCoord2f(1.0, 0.0);
glVertex3f( 1.0, 1.0, 0.0);
glTexCoord2f(1.0, 1.0);
glVertex3f( 1.0,-1.0, 0.0);
glEnd();
if (frames > 960)
trans += 0.3;
}
else if (frames < 1200) {
glBindTexture(GL_TEXTURE_2D, texture[4]);
float fogcolor[] = {0.75, 0.43, 0.9, 0.0};
glFogfv(GL_FOG_COLOR, fogcolor);
glFogf(GL_FOG_DENSITY, 1.1);
glBegin(GL_QUADS);
if (lolsex2 < 6) { glTexCoord2f(0.0-lolsex, 0.5); }
else if (lolsex2 < 12){glTexCoord2f(0.5-lolsex, 0.5);}
else if (lolsex2 < 18){glTexCoord2f(0.0-lolsex, 1.0);}
else if (lolsex2 < 24){glTexCoord2f(0.5-lolsex, 0.5);}
glVertex3f(-1.6,-0.7,-0.3);
if (lolsex2 < 6) { glTexCoord2f(0.0-lolsex,0.0); }
else if (lolsex2 < 12){glTexCoord2f(0.5-lolsex,0.0); }
else if (lolsex2 < 18){glTexCoord2f(0.0-lolsex,0.5); }
else if (lolsex2 < 24){glTexCoord2f(0.5-lolsex, 0.0);}
glVertex3f(-1.6, 0.7,-0.3);
if (lolsex2 < 6) { glTexCoord2f(0.5-lolsex, 0.0); }
else if (lolsex2 < 12){glTexCoord2f(1.0-lolsex, 0.0); }
else if (lolsex2 < 18){glTexCoord2f(0.5-lolsex, 0.5); }
else if (lolsex2 < 24){glTexCoord2f(1.0-lolsex, 0.0);}
glVertex3f( 1.6, 0.7,-0.3);
if (lolsex2 < 6) { glTexCoord2f(0.5-lolsex, 0.5); }
else if (lolsex2 < 12){glTexCoord2f(1.0-lolsex, 0.5); }
else if (lolsex2 < 18){glTexCoord2f(0.5-lolsex, 1.0); }
else if (lolsex2 < 24){glTexCoord2f(1.0-lolsex, 0.5);}
glVertex3f( 1.6,-0.7,-0.3);
glEnd();
lolsex2++;
lolsex -= 0.02;
if (lolsex2 >= 24)
lolsex2 = 0;
}
else if (frames < 1600) {
float fogcolor[] = {0.0, 0.0, 0.0, 0.0};
glFogfv(GL_FOG_COLOR, fogcolor);
glFogf(GL_FOG_DENSITY, 0.3);
glBindTexture(GL_TEXTURE_2D, texture[9]);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.2);
glVertex3f(-1.0, 0.6, 0.0);
glTexCoord2f(0.0, 0.0);
glVertex3f(-1.0, 1.0, 0.0);
glTexCoord2f(1.0, 0.0);
glVertex3f( 1.0, 1.0, 0.0);
glTexCoord2f(1.0, 0.2);
glVertex3f( 1.0, 0.6, 0.0);
glEnd();
if (frames < 1250) {
if (frames == 1200) {
trans = 17.5;
}
glLoadIdentity();
glTranslatef(0.0, 0.0,-trans);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.375);
glVertex2f(-1.0,-0.5);
glTexCoord2f(0.0, 0.25);
glVertex2f(-1.0, 0.5);
glTexCoord2f(0.25, 0.25);
glVertex2f( 1.0, 0.5);
glTexCoord2f(0.25, 0.375);
glVertex2f( 1.0,-0.5);
glEnd();
if (frames < 1225)
trans -= 0.6;
else
trans += 0.6;
}
else if (frames < 1300) {
if (frames == 1250) {
trans = 17.5;
}
glLoadIdentity();
glTranslatef(0.0, 0.0,-trans);
glBegin(GL_QUADS);
glTexCoord2f(0.25, 0.4);
glVertex2f(-1.0,-0.5);
glTexCoord2f(0.25, 0.2);
glVertex2f(-1.0, 0.5);
glTexCoord2f(0.5, 0.2);
glVertex2f( 1.0, 0.5);
glTexCoord2f(0.5, 0.4);
glVertex2f( 1.0,-0.5);
glEnd();
if (frames < 1275)
trans -= 0.6;
else
trans += 0.6;
}
else if (frames < 1350) {
if (frames == 1300) {
trans = 17.5;
}
glLoadIdentity();
glTranslatef(0.0, 0.0,-trans);
glBegin(GL_QUADS);
glTexCoord2f(0.5, 0.4);
glVertex2f(-1.0,-0.5);
glTexCoord2f(0.5, 0.2);
glVertex2f(-1.0, 0.5);
glTexCoord2f(1.0, 0.2);
glVertex2f( 1.0, 0.5);
glTexCoord2f(1.0, 0.4);
glVertex2f( 1.0,-0.5);
glEnd();
if (frames < 1325)
trans -= 0.6;
else
trans += 0.6;
}
else if (frames < 1400) {
if (frames == 1350) {
trans = 17.5;
}
glLoadIdentity();
glTranslatef(0.0, 0.0,-trans);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.5);
glVertex2f(-1.0,-0.5);
glTexCoord2f(0.0, 0.375);
glVertex2f(-1.0, 0.5);
glTexCoord2f(0.625, 0.375);
glVertex2f( 1.0, 0.5);
glTexCoord2f(0.625, 0.5);
glVertex2f( 1.0,-0.5);
glEnd();
if (frames < 1375)
trans -= 0.6;
else
trans += 0.6;
}
else if (frames < 1450) {
if (frames == 1400) {
trans = 17.5;
}
glLoadIdentity();
glTranslatef(0.0, 0.0,-trans);
glBegin(GL_QUADS);
glTexCoord2f(0.625, 0.5);
glVertex2f(-1.0,-0.5);
glTexCoord2f(0.625, 0.375);
glVertex2f(-1.0, 0.5);
glTexCoord2f(0.875, 0.375);
glVertex2f( 1.0, 0.5);
glTexCoord2f(0.875, 0.5);
glVertex2f( 1.0,-0.5);
glEnd();
if (frames < 1425)
trans -= 0.6;
else
trans += 0.6;
}
else if (frames < 1500) {
if (frames == 1450) {
trans = 17.5;
}
glLoadIdentity();
glTranslatef(0.0, 0.0,-trans);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.625);
glVertex2f(-1.0,-0.5);
glTexCoord2f(0.0, 0.5);
glVertex2f(-1.0, 0.5);
glTexCoord2f(0.625, 0.5);
glVertex2f( 1.0, 0.5);
glTexCoord2f(0.625, 0.625);
glVertex2f( 1.0,-0.5);
glEnd();
if (frames < 1475)
trans -= 0.6;
else
trans += 0.6;
}
else if (frames < 1550) {
if (frames == 1500) {
trans = 17.5;
}
glLoadIdentity();
glTranslatef(0.0, 0.0,-trans);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.75);
glVertex2f(-1.0,-0.5);
glTexCoord2f(0.0, 0.625);
glVertex2f(-1.0, 0.5);
glTexCoord2f(0.5, 0.625);
glVertex2f( 1.0, 0.5);
glTexCoord2f(0.5, 0.75);
glVertex2f( 1.0,-0.5);
glEnd();
if (frames < 1525)
trans -= 0.6;
else
trans += 0.6;
}
else {
if (frames == 1550) {
trans = 17.5;
}
glLoadIdentity();
glTranslatef(0.0, 0.0,-trans);
glBegin(GL_QUADS);
glTexCoord2f(0.5, 0.75);
glVertex2f(-1.0,-0.5);
glTexCoord2f(0.5, 0.625);
glVertex2f(-1.0, 0.5);
glTexCoord2f(1.0, 0.625);
glVertex2f( 1.0, 0.5);
glTexCoord2f(1.0, 0.75);
glVertex2f( 1.0,-0.5);
glEnd();
if (frames < 1575)
trans -= 0.6;
else
trans += 0.6;
}
}
else if (frames < 1915) {
glBindTexture(GL_TEXTURE_2D, texture[8]);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 1.0);
glVertex3f(-1.0,-1.0, 0.0);
glTexCoord2f(0.0, 0.0);
glVertex3f(-1.0, 1.0, 0.0);
glTexCoord2f(1.0, 0.0);
glVertex3f( 1.0, 1.0, 0.0);
glTexCoord2f(1.0, 1.0);
glVertex3f( 1.0,-1.0, 0.0);
glEnd();
if (frames > 1770) {
trans += 0.3;
FSOUND_SetVolume(FSOUND_ALL, volume-=2);
}
}
else
quit(0);
SDL_GL_SwapBuffers();
while(SDL_GetTicks() - tick < 33);
frames++;
if (frames%100 == 0)
printf("Frame #%i, still going strong...\n", frames);
return 0;
}
int resizeWindow(int width, int height)
{
GLfloat ratio;
if (height == 0)
height = 1;
ratio = (GLfloat)width / (GLfloat)height;
glViewport(0, 0, (GLsizei)width, (GLsizei)height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f, ratio, 0.1f, 100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
return 1;
}
void keypress(SDL_keysym *keysym)
{
switch(keysym->sym) {
case SDLK_ESCAPE:
printf("--------------\nMy god, ESC was pressed!!\n");
quit(0);
break;
case SDLK_F1:
SDL_WM_ToggleFullScreen(surface);
default:
break;
}
}
void initSound()
{
if (!FSOUND_Init(44100, 64, FSOUND_INIT_GLOBALFOCUS))
quit(1);
music = FSOUND_Sample_Load(FSOUND_FREE, mp3file, FSOUND_HW2D | FSOUND_ENABLEFX, 0);
if (!music) {
printf("Scaaaaaaaaaaaaat, 0 music :/\n");
quit(1);
}
}
void quit(int returnCode)
{
printf("-------------------------\nCleaning up and quitting.\n");
FSOUND_Sample_Free(music);
FSOUND_Close();
SDL_Quit();
exit(returnCode);
}
[ back to the prod ]
