Moved all files one dir upwards (should've done that long ago)
This commit is contained in:
432
project/jni/application/opentyrian/src/starlib.cpp
Normal file
432
project/jni/application/opentyrian/src/starlib.cpp
Normal file
@@ -0,0 +1,432 @@
|
||||
/*
|
||||
* OpenTyrian Classic: A modern cross-platform port of Tyrian
|
||||
* Copyright (C) 2007-2009 The OpenTyrian Development Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
#include "opentyr.h"
|
||||
#include "starlib.h"
|
||||
|
||||
#include "keyboard.h"
|
||||
#include "mtrand.h"
|
||||
#include "video.h"
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
#define starlib_MAX_STARS 1000
|
||||
#define MAX_TYPES 14
|
||||
|
||||
struct JE_StarType
|
||||
{
|
||||
JE_integer spX, spY, spZ;
|
||||
JE_integer lastX, lastY;
|
||||
};
|
||||
|
||||
static int tempX, tempY;
|
||||
static JE_boolean run;
|
||||
static struct JE_StarType star[starlib_MAX_STARS];
|
||||
|
||||
static JE_byte setup;
|
||||
static JE_word stepCounter;
|
||||
|
||||
static JE_word nsp2;
|
||||
static JE_shortint nspVar2Inc;
|
||||
|
||||
/* JE: new sprite pointer */
|
||||
static JE_real nsp;
|
||||
static JE_real nspVarInc;
|
||||
static JE_real nspVarVarInc;
|
||||
|
||||
static JE_word changeTime;
|
||||
static JE_boolean doChange;
|
||||
|
||||
static JE_boolean grayB;
|
||||
|
||||
static JE_integer starlib_speed;
|
||||
static JE_shortint speedChange;
|
||||
|
||||
static JE_byte pColor;
|
||||
|
||||
|
||||
void JE_starlib_main( void )
|
||||
{
|
||||
int off;
|
||||
JE_word i;
|
||||
JE_integer tempZ;
|
||||
JE_byte tempCol;
|
||||
struct JE_StarType *stars;
|
||||
Uint8 *surf;
|
||||
|
||||
JE_wackyCol();
|
||||
|
||||
grayB = false;
|
||||
|
||||
starlib_speed += speedChange;
|
||||
|
||||
|
||||
for(stars = star, i = starlib_MAX_STARS; i > 0; stars++, i--)
|
||||
{
|
||||
/* Make a pointer to the screen... */
|
||||
surf = (Uint8 *)VGAScreen->pixels;
|
||||
|
||||
/* Calculate the offset to where we wish to draw */
|
||||
off = (stars->lastX)+(stars->lastY)*320;
|
||||
|
||||
|
||||
/* We don't want trails in our star field. Erase the old graphic */
|
||||
if (off >= 640 && off < (320*200)-640)
|
||||
{
|
||||
surf[off] = 0; /* Shade Level 0 */
|
||||
|
||||
surf[off-1] = 0; /* Shade Level 1, 2 */
|
||||
surf[off+1] = 0;
|
||||
surf[off-2] = 0;
|
||||
surf[off+2] = 0;
|
||||
|
||||
surf[off-320] = 0;
|
||||
surf[off+320] = 0;
|
||||
surf[off-640] = 0;
|
||||
surf[off+640] = 0;
|
||||
}
|
||||
|
||||
/* Move star */
|
||||
tempZ = stars->spZ;
|
||||
tempX = (stars->spX / tempZ) + 160;
|
||||
tempY = (stars->spY / tempZ) + 100;
|
||||
tempZ -= starlib_speed;
|
||||
|
||||
|
||||
/* If star is out of range, make a new one */
|
||||
if (tempZ <= 0 ||
|
||||
tempY == 0 || tempY > 198 ||
|
||||
tempX > 318 || tempX < 1)
|
||||
{
|
||||
stars->spZ = 500;
|
||||
|
||||
JE_newStar();
|
||||
|
||||
stars->spX = tempX;
|
||||
stars->spY = tempY;
|
||||
}
|
||||
else /* Otherwise, update & draw it */
|
||||
{
|
||||
stars->lastX = tempX;
|
||||
stars->lastY = tempY;
|
||||
stars->spZ = tempZ;
|
||||
|
||||
off = tempX+tempY*320;
|
||||
|
||||
if (grayB)
|
||||
{
|
||||
tempCol = tempZ >> 1;
|
||||
} else {
|
||||
tempCol = pColor+((tempZ >> 4) & 31);
|
||||
}
|
||||
|
||||
/* Draw the pixel! */
|
||||
if (off >= 640 && off < (320*200)-640)
|
||||
{
|
||||
surf[off] = tempCol;
|
||||
|
||||
tempCol += 72;
|
||||
surf[off-1] = tempCol;
|
||||
surf[off+1] = tempCol;
|
||||
surf[off-320] = tempCol;
|
||||
surf[off+320] = tempCol;
|
||||
|
||||
tempCol += 72;
|
||||
surf[off-2] = tempCol;
|
||||
surf[off+2] = tempCol;
|
||||
surf[off-640] = tempCol;
|
||||
surf[off+640] = tempCol;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (newkey)
|
||||
{
|
||||
switch (toupper(lastkey_char))
|
||||
{
|
||||
case '+':
|
||||
starlib_speed++;
|
||||
speedChange = 0;
|
||||
break;
|
||||
case '-':
|
||||
starlib_speed--;
|
||||
speedChange = 0;
|
||||
break;
|
||||
case '1':
|
||||
JE_changeSetup(1);
|
||||
break;
|
||||
case '2':
|
||||
JE_changeSetup(2);
|
||||
break;
|
||||
case '3':
|
||||
JE_changeSetup(3);
|
||||
break;
|
||||
case '4':
|
||||
JE_changeSetup(4);
|
||||
break;
|
||||
case '5':
|
||||
JE_changeSetup(5);
|
||||
break;
|
||||
case '6':
|
||||
JE_changeSetup(6);
|
||||
break;
|
||||
case '7':
|
||||
JE_changeSetup(7);
|
||||
break;
|
||||
case '8':
|
||||
JE_changeSetup(8);
|
||||
break;
|
||||
case '9':
|
||||
JE_changeSetup(9);
|
||||
break;
|
||||
case '0':
|
||||
JE_changeSetup(10);
|
||||
break;
|
||||
case '!':
|
||||
JE_changeSetup(11);
|
||||
break;
|
||||
case '@':
|
||||
JE_changeSetup(12);
|
||||
break;
|
||||
case '#':
|
||||
JE_changeSetup(13);
|
||||
break;
|
||||
case '$':
|
||||
JE_changeSetup(14);
|
||||
break;
|
||||
|
||||
case 'C':
|
||||
JE_resetValues();
|
||||
break;
|
||||
case 'S':
|
||||
nspVarVarInc = mt_rand_1() * 0.01f - 0.005f;
|
||||
break;
|
||||
case 'X':
|
||||
case 27:
|
||||
run = false;
|
||||
break;
|
||||
case '[':
|
||||
pColor--;
|
||||
break;
|
||||
case ']':
|
||||
pColor++;
|
||||
break;
|
||||
case '{':
|
||||
pColor -= 72;
|
||||
break;
|
||||
case '}':
|
||||
pColor += 72;
|
||||
break;
|
||||
case '`': /* ` */
|
||||
doChange = !doChange;
|
||||
break;
|
||||
case 'P':
|
||||
wait_noinput(true, false, false);
|
||||
wait_input(true, false, false);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (doChange)
|
||||
{
|
||||
stepCounter++;
|
||||
if (stepCounter > changeTime)
|
||||
{
|
||||
JE_changeSetup(0);
|
||||
}
|
||||
}
|
||||
|
||||
if ((mt_rand() % 1000) == 1)
|
||||
{
|
||||
nspVarVarInc = mt_rand_1() * 0.01f - 0.005f;
|
||||
}
|
||||
|
||||
nspVarInc += nspVarVarInc;
|
||||
}
|
||||
|
||||
void JE_wackyCol( void )
|
||||
{
|
||||
/* YKS: Does nothing */
|
||||
}
|
||||
|
||||
void JE_starlib_init( void )
|
||||
{
|
||||
static JE_boolean initialized = false;
|
||||
|
||||
if (!initialized)
|
||||
{
|
||||
initialized = true;
|
||||
|
||||
JE_resetValues();
|
||||
JE_changeSetup(2);
|
||||
doChange = true;
|
||||
|
||||
/* RANDOMIZE; */
|
||||
for (int x = 0; x < starlib_MAX_STARS; x++)
|
||||
{
|
||||
star[x].spX = (mt_rand() % 64000) - 32000;
|
||||
star[x].spY = (mt_rand() % 40000) - 20000;
|
||||
star[x].spZ = x+1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void JE_resetValues( void )
|
||||
{
|
||||
nsp2 = 1;
|
||||
nspVar2Inc = 1;
|
||||
nspVarInc = 0.1f;
|
||||
nspVarVarInc = 0.0001f;
|
||||
nsp = 0;
|
||||
pColor = 32;
|
||||
starlib_speed = 2;
|
||||
speedChange = 0;
|
||||
}
|
||||
|
||||
void JE_changeSetup( JE_byte setupType )
|
||||
{
|
||||
stepCounter = 0;
|
||||
changeTime = (mt_rand() % 1000);
|
||||
|
||||
if (setupType > 0)
|
||||
{
|
||||
setup = setupType;
|
||||
} else {
|
||||
setup = mt_rand() % (MAX_TYPES + 1);
|
||||
}
|
||||
|
||||
if (setup == 1)
|
||||
{
|
||||
nspVarInc = 0.1f;
|
||||
}
|
||||
if (nspVarInc > 2.2f)
|
||||
{
|
||||
nspVarInc = 0.1f;
|
||||
}
|
||||
}
|
||||
|
||||
void JE_newStar( void )
|
||||
{
|
||||
if (setup == 0)
|
||||
{
|
||||
tempX = (mt_rand() % 64000) - 32000;
|
||||
tempY = (mt_rand() % 40000) - 20000;
|
||||
} else {
|
||||
nsp = nsp + nspVarInc; /* YKS: < lol */
|
||||
switch (setup)
|
||||
{
|
||||
case 1:
|
||||
tempX = (int)(sinf(nsp / 30) * 20000);
|
||||
tempY = (mt_rand() % 40000) - 20000;
|
||||
break;
|
||||
case 2:
|
||||
tempX = (int)(cosf(nsp) * 20000);
|
||||
tempY = (int)(sinf(nsp) * 20000);
|
||||
break;
|
||||
case 3:
|
||||
tempX = (int)(cosf(nsp * 15) * 100) * ((int)(nsp / 6) % 200);
|
||||
tempY = (int)(sinf(nsp * 15) * 100) * ((int)(nsp / 6) % 200);
|
||||
break;
|
||||
case 4:
|
||||
tempX = (int)(sinf(nsp / 60) * 20000);
|
||||
tempY = (int)(cosf(nsp) * (int)(sinf(nsp / 200) * 300) * 100);
|
||||
break;
|
||||
case 5:
|
||||
tempX = (int)(sinf(nsp / 2) * 20000);
|
||||
tempY = (int)(cosf(nsp) * (int)(sinf(nsp / 200) * 300) * 100);
|
||||
break;
|
||||
case 6:
|
||||
tempX = (int)(sinf(nsp) * 40000);
|
||||
tempY = (int)(cosf(nsp) * 20000);
|
||||
break;
|
||||
case 8:
|
||||
tempX = (int)(sinf(nsp / 2) * 40000);
|
||||
tempY = (int)(cosf(nsp) * 20000);
|
||||
break;
|
||||
case 7:
|
||||
tempX = mt_rand() % 65535;
|
||||
if ((mt_rand() % 2) == 0)
|
||||
{
|
||||
tempY = (int)(cosf(nsp / 80) * 10000) + 15000;
|
||||
} else {
|
||||
tempY = 50000 - (int)(cosf(nsp / 80) * 13000);
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
nsp2 += nspVar2Inc;
|
||||
if ((nsp2 == 65535) || (nsp2 == 0))
|
||||
{
|
||||
nspVar2Inc = -nspVar2Inc;
|
||||
}
|
||||
tempX = (int)(cosf(sinf(nsp2 / 10.0f) + (nsp / 500)) * 32000);
|
||||
tempY = (int)(sinf(cosf(nsp2 / 10.0f) + (nsp / 500)) * 30000);
|
||||
break;
|
||||
case 10:
|
||||
nsp2 += nspVar2Inc;
|
||||
if ((nsp2 == 65535) || (nsp2 == 0))
|
||||
{
|
||||
nspVar2Inc = -nspVar2Inc;
|
||||
}
|
||||
tempX = (int)(cosf(sinf(nsp2 / 5.0f) + (nsp / 100)) * 32000);
|
||||
tempY = (int)(sinf(cosf(nsp2 / 5.0f) + (nsp / 100)) * 30000);
|
||||
break;;
|
||||
case 11:
|
||||
nsp2 += nspVar2Inc;
|
||||
if ((nsp2 == 65535) || (nsp2 == 0))
|
||||
{
|
||||
nspVar2Inc = -nspVar2Inc;
|
||||
}
|
||||
tempX = (int)(cosf(sinf(nsp2 / 1000.0f) + (nsp / 2)) * 32000);
|
||||
tempY = (int)(sinf(cosf(nsp2 / 1000.0f) + (nsp / 2)) * 30000);
|
||||
break;
|
||||
case 12:
|
||||
if (nsp != 0)
|
||||
{
|
||||
nsp2 += nspVar2Inc;
|
||||
if ((nsp2 == 65535) || (nsp2 == 0))
|
||||
{
|
||||
nspVar2Inc = -nspVar2Inc;
|
||||
}
|
||||
tempX = (int)(cosf(sinf(nsp2 / 2.0f) / (sqrtf(fabsf(nsp)) / 10.0f + 1) + (nsp2 / 100.0f)) * 32000);
|
||||
tempY = (int)(sinf(cosf(nsp2 / 2.0f) / (sqrtf(fabsf(nsp)) / 10.0f + 1) + (nsp2 / 100.0f)) * 30000);
|
||||
}
|
||||
break;
|
||||
case 13:
|
||||
if (nsp != 0)
|
||||
{
|
||||
nsp2 += nspVar2Inc;
|
||||
if ((nsp2 == 65535) || (nsp2 == 0))
|
||||
{
|
||||
nspVar2Inc = -nspVar2Inc;
|
||||
}
|
||||
tempX = (int)(cosf(sinf(nsp2 / 10.0f) / 2 + (nsp / 20)) * 32000);
|
||||
tempY = (int)(sinf(sinf(nsp2 / 11.0f) / 2 + (nsp / 20)) * 30000);
|
||||
}
|
||||
break;
|
||||
case 14:
|
||||
nsp2 += nspVar2Inc;
|
||||
tempX = (int)((sinf(nsp) + cosf(nsp2 / 1000.0f) * 3) * 12000);
|
||||
tempY = (int)(cosf(nsp) * 10000) + nsp2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// kate: tab-width 4; vim: set noet:
|
||||
Reference in New Issue
Block a user