-/*
+/*
* Copyright (C) 2003 Robert Kooima
*
* NEVERBALL is free software; you can redistribute it and/or modify
config_get_s(CONFIG_BALL, name, MAXSTR);
ball_text[0] = make_image_from_file(NULL, NULL, NULL, NULL, name);
-
+
config_get_s(CONFIG_BALL_BONUS, name, MAXSTR);
ball_text[1] = make_image_from_file(NULL, NULL, NULL, NULL, name);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
ball_list = glGenLists(1);
-
+
glNewList(ball_list, GL_COMPILE);
{
for (i = 0; i < stacks; i++)
int i, slices = b ? 32 : 16;
mark_list = glGenLists(1);
-
+
glNewList(mark_list, GL_COMPILE);
{
glBegin(GL_TRIANGLE_FAN);
void coin_init(int b)
{
- char name[MAXSTR];
int n = b ? 32 : 8;
- config_get_s(CONFIG_COIN, name, MAXSTR);
-
- coin_text = make_image_from_file(NULL, NULL, NULL, NULL, name);
+ coin_text = make_image_from_file(NULL, NULL, NULL, NULL, IMG_COIN);
coin_list = glGenLists(1);
glNewList(coin_list, GL_COMPILE);
/*---------------------------------------------------------------------------*/
+static GLuint item_grow_text;
+static GLuint item_shrink_text;
+static GLuint item_list;
+
+void item_color(float *c, int t)
+{
+ switch (t)
+ {
+ case ITEM_GROW:
+ case ITEM_SHRINK:
+
+ default:
+ c[0] = 1.0f;
+ c[1] = 1.0f;
+ c[2] = 1.0f;
+
+ break;
+ }
+}
+
+void item_init(int b)
+{
+ int n = b ? 32 : 8;
+
+ item_grow_text = make_image_from_file(NULL, NULL, NULL, NULL,
+ IMG_ITEM_GROW);
+ item_shrink_text = make_image_from_file(NULL, NULL, NULL, NULL,
+ IMG_ITEM_SHRINK);
+ item_list = glGenLists(1);
+
+ glNewList(item_list, GL_COMPILE);
+ {
+ coin_edge(n, COIN_RADIUS, COIN_THICK);
+ coin_head(n, COIN_RADIUS, COIN_THICK);
+ coin_tail(n, COIN_RADIUS, COIN_THICK);
+ }
+ glEndList();
+}
+
+void item_free(void)
+{
+ if (glIsList(item_list))
+ glDeleteLists(item_list, 1);
+
+ if (glIsTexture(item_grow_text))
+ glDeleteTextures(1, &item_grow_text);
+
+ if (glIsTexture(item_shrink_text))
+ glDeleteTextures(1, &item_shrink_text);
+
+ item_list = 0;
+ item_grow_text = 0;
+ item_shrink_text = 0;
+}
+
+void item_push(void)
+{
+ static const float a[4] = { 0.2f, 0.2f, 0.2f, 1.0f };
+ static const float s[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
+ static const float e[4] = { 0.0f, 0.0f, 0.0f, 0.0f };
+ static const float h[1] = { 32.0f };
+
+ glPushAttrib(GL_LIGHTING_BIT);
+
+ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, a);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, s);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, e);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, h);
+}
+
+void item_push_text(int t)
+{
+ glEnable(GL_COLOR_MATERIAL);
+
+ switch (t)
+ {
+ case ITEM_GROW:
+ glBindTexture(GL_TEXTURE_2D, item_grow_text);
+ break;
+
+ case ITEM_SHRINK:
+ glBindTexture(GL_TEXTURE_2D, item_shrink_text);
+ break;
+ }
+}
+
+void item_draw(int t, float r)
+{
+ float c[3];
+
+ item_color(c, t);
+
+ glColor3fv(c);
+ glCallList(item_list);
+}
+
+void item_pull(void)
+{
+ glPopAttrib();
+}
+
+/*---------------------------------------------------------------------------*/
+
static GLuint goal_list;
void goal_init(int b)
{
float x = fcosf(2.f * PI * i / n);
float y = fsinf(2.f * PI * i / n);
-
+
glColor4f(1.0f, 1.0f, 0.0f, 0.5f);
glVertex3f(x, 0.0f, y);
jump_list = glGenLists(2);
- for (k=0; k<12; k++)
+ for (k = 0; k < 12; k++)
{
- glNewList(jump_list + k, GL_COMPILE);
- {
- glPushAttrib(GL_TEXTURE_BIT |
- GL_LIGHTING_BIT |
- GL_DEPTH_BUFFER_BIT);
- {
- glEnable(GL_COLOR_MATERIAL);
- glDisable(GL_LIGHTING);
- glDisable(GL_TEXTURE_2D);
- glDepthMask(GL_FALSE);
-
- glBegin(GL_QUAD_STRIP);
- {
- for (i = 0; i <= n; i++)
- {
- float x = fcosf(2.f * PI * i / n);
- float y = fsinf(2.f * PI * i / n);
-
- glColor4f(1.0f, 1.0f, 1.0f, (k==0 ? 0.5f : 0.8f));
- glVertex3f(x, 0.0f, y);
-
- glColor4f(1.0f, 1.0f, 1.0f, 0.0f);
- glVertex3f(x, JUMP_HEIGHT, y);
- }
- }
- glEnd();
- }
- glPopAttrib();
- }
- glEndList();
+ glNewList(jump_list + k, GL_COMPILE);
+ {
+ glPushAttrib(GL_TEXTURE_BIT | GL_LIGHTING_BIT | GL_DEPTH_BUFFER_BIT);
+ {
+ glEnable(GL_COLOR_MATERIAL);
+ glDisable(GL_LIGHTING);
+ glDisable(GL_TEXTURE_2D);
+ glDepthMask(GL_FALSE);
+
+ glBegin(GL_QUAD_STRIP);
+ {
+ for (i = 0; i <= n; i++)
+ {
+ float x = fcosf(2.f * PI * i / n);
+ float y = fsinf(2.f * PI * i / n);
+
+ glColor4f(1.0f, 1.0f, 1.0f, (k == 0 ? 0.5f : 0.8f));
+ glVertex3f(x, 0.0f, y);
+
+ glColor4f(1.0f, 1.0f, 1.0f, 0.0f);
+ glVertex3f(x, JUMP_HEIGHT, y);
+ }
+ }
+ glEnd();
+ }
+ glPopAttrib();
+ }
+ glEndList();
}
}
for (k = 0; k < 4; k++)
{
- glNewList(swch_list + k, GL_COMPILE);
- {
- glPushAttrib(GL_TEXTURE_BIT |
- GL_LIGHTING_BIT |
- GL_DEPTH_BUFFER_BIT);
- {
- glEnable(GL_COLOR_MATERIAL);
- glDisable(GL_LIGHTING);
- glDisable(GL_TEXTURE_2D);
- glDepthMask(GL_FALSE);
-
- glBegin(GL_QUAD_STRIP);
- {
- for (i = 0; i <= n; i++)
- {
- float x = fcosf(2.f * PI * i / n);
- float y = fsinf(2.f * PI * i / n);
-
- glColor4fv(swch_colors[2*k]);
- glVertex3f(x, 0.0f, y);
-
- glColor4fv(swch_colors[2*k+1]);
- glVertex3f(x, SWCH_HEIGHT, y);
- }
- }
- glEnd();
- }
- glPopAttrib();
- }
- glEndList();
+ glNewList(swch_list + k, GL_COMPILE);
+ {
+ glPushAttrib(GL_TEXTURE_BIT | GL_LIGHTING_BIT | GL_DEPTH_BUFFER_BIT);
+ {
+ glEnable(GL_COLOR_MATERIAL);
+ glDisable(GL_LIGHTING);
+ glDisable(GL_TEXTURE_2D);
+ glDepthMask(GL_FALSE);
+
+ glBegin(GL_QUAD_STRIP);
+ {
+ for (i = 0; i <= n; i++)
+ {
+ float x = fcosf(2.f * PI * i / n);
+ float y = fsinf(2.f * PI * i / n);
+
+ glColor4fv(swch_colors[2 * k]);
+ glVertex3f(x, 0.0f, y);
+
+ glColor4fv(swch_colors[2 * k + 1]);
+ glVertex3f(x, SWCH_HEIGHT, y);
+ }
+ }
+ glEnd();
+ }
+ glPopAttrib();
+ }
+ glEndList();
}
}
void swch_draw(int b, int e)
{
- glCallList(swch_list + b*2 + e);
+ glCallList(swch_list + b * 2 + e);
}
/*---------------------------------------------------------------------------*/
{
float x = fcosf(2.f * PI * i / n) * 0.01f;
float y = fsinf(2.f * PI * i / n) * 0.01f;
-
+
glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f(x, 0.0f, y);
glVertex3f(x, GOAL_HEIGHT, y);
glDisable(GL_LIGHTING);
glDisable(GL_DEPTH_TEST);
glDisable(GL_TEXTURE_2D);
-
+
glColor4f(0.0f, 0.0f, 0.0f, k);
glBegin(GL_QUADS);