mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-12-23 16:50:27 +00:00
273 lines
6.1 KiB
C++
273 lines
6.1 KiB
C++
// Hyperbolic Rogue -- fake mobile target
|
|
// Copyright (C) 2011-2018 Zeno Rogue, see 'hyper.cpp' for details
|
|
|
|
#define ISFAKEMOBILE 1
|
|
#define MOBPAR_FORMAL int
|
|
#define MOBPAR_ACTUAL 0
|
|
#define MIX_MAX_VOLUME 128
|
|
#define NOMAIN
|
|
#include <string>
|
|
|
|
namespace hr {
|
|
const char *scorefile = "fakemobile_score.txt";
|
|
}
|
|
|
|
#include <SDL/SDL.h>
|
|
|
|
#include "hyper.cpp"
|
|
|
|
#include <SDL/SDL_ttf.h>
|
|
#include <SDL/SDL_gfxPrimitives.h>
|
|
|
|
#undef main
|
|
|
|
namespace hr {
|
|
|
|
transmatrix Orient = Id;
|
|
|
|
int lasttick = 0;
|
|
|
|
transmatrix getOrientation() {
|
|
int curtick = SDL_GetTicks();
|
|
ld t = (curtick - lasttick) / 1000.0;
|
|
lasttick = curtick;
|
|
Uint8 *keystate = SDL_GetKeyState(NULL);
|
|
if(keystate[SDLK_LCTRL]) {
|
|
if(keystate['s']) Orient = Orient * cspin(2, 1, t);
|
|
if(keystate['w']) Orient = Orient * cspin(1, 2, t);
|
|
if(keystate['a']) Orient = Orient * cspin(2, 0, t);
|
|
if(keystate['d']) Orient = Orient * cspin(0, 2, t);
|
|
}
|
|
return Orient;
|
|
}
|
|
|
|
void resetmusic() { printf("resetmusic\n"); }
|
|
|
|
void playSound(cell *c, const string& fname, int vol) {
|
|
printf("Play sound: %s\n", fname.c_str());
|
|
}
|
|
|
|
SDL_Surface *s;
|
|
|
|
int gdpos = 0;
|
|
|
|
int gdpop() { return graphdata[gdpos++]; }
|
|
|
|
TTF_Font *font[256];
|
|
|
|
bool rawdisplaystr(int x, int y, int shift, int size, const char *str, int color, int align) {
|
|
|
|
if(strlen(str) == 0) return false;
|
|
|
|
if(size <= 0 || size > 255) {
|
|
return false;
|
|
}
|
|
SDL_Color col;
|
|
col.r = (color >> 16) & 255;
|
|
col.g = (color >> 8 ) & 255;
|
|
col.b = (color >> 0 ) & 255;
|
|
|
|
col.r >>= darken; col.g >>= darken; col.b >>= darken;
|
|
|
|
if(!font[size])
|
|
font[size] = TTF_OpenFont("VeraBd.ttf", size);
|
|
|
|
SDL_Surface *txt = TTF_RenderText_Solid(font[size], str, col);
|
|
|
|
if(txt == NULL) return false;
|
|
|
|
SDL_Rect rect;
|
|
|
|
rect.w = txt->w;
|
|
rect.h = txt->h;
|
|
|
|
rect.x = x - rect.w * align / 16;
|
|
rect.y = y - rect.h/2;
|
|
|
|
bool clicked = (mousex >= rect.x && mousey >= rect.y && mousex <= rect.x+rect.w && mousey <= rect.y+rect.h);
|
|
|
|
SDL_BlitSurface(txt, NULL, s,&rect);
|
|
SDL_FreeSurface(txt);
|
|
|
|
return clicked;
|
|
}
|
|
|
|
int textwidth(int siz, const string &str) {
|
|
if(isize(str) == 0) return 0;
|
|
|
|
if(!font[siz]) font[siz] = TTF_OpenFont("VeraBd.ttf", siz);
|
|
|
|
int w, h;
|
|
TTF_SizeUTF8(font[siz], str.c_str(), &w, &h);
|
|
// printf("width = %d [%d]\n", w, isize(str));
|
|
return w;
|
|
}
|
|
|
|
char action;
|
|
|
|
bool currentlyConnecting() { return false; }
|
|
bool currentlyConnected() { return false; }
|
|
void viewAchievements() { printf("view Achievements\n"); }
|
|
void viewLeaderboard(string id) { printf("view Leaderboard :: %s\n", id.c_str()); }
|
|
void switchGoogleConnection() { printf("sgc\n"); }
|
|
|
|
void shareScore(int) {
|
|
printf("share\n");
|
|
}
|
|
|
|
void openURL() {
|
|
printf("< openURL > \n");
|
|
}
|
|
|
|
}
|
|
|
|
using namespace hr;
|
|
|
|
int main(int argc, char **argv) {
|
|
|
|
initAll();
|
|
glhr::init();
|
|
|
|
vid.xres = 800; vid.yres = 450;
|
|
vid.usingGL = false;
|
|
// 450; vid.yres = 600;
|
|
|
|
s= SDL_SetVideoMode(vid.xres, vid.yres, 32, 0);
|
|
|
|
if(TTF_Init() != 0) {
|
|
printf("Failed to initialize TTF.\n");
|
|
exit(2);
|
|
}
|
|
|
|
int mx = 0; int my = 0; bool _clicked = false;
|
|
|
|
inv::on = true;
|
|
// firstland = laMinefield;
|
|
// activateSafety(laWhirlwind);
|
|
|
|
items[itGreenStone] = 100;
|
|
// items[itDiamond] = 50;
|
|
// for(int i=1; i<10; i++) kills[i] = 5;
|
|
|
|
while(true) {
|
|
|
|
SDL_LockSurface(s);
|
|
memset(s->pixels, 0, vid.xres * vid.yres * 4);
|
|
SDL_UnlockSurface(s);
|
|
|
|
mousex = mx;
|
|
mousey = my;
|
|
clicked = _clicked;
|
|
|
|
mobile_draw(MOBPAR_ACTUAL);
|
|
action = 0;
|
|
|
|
gdpos = 0;
|
|
while(gdpos < isize(graphdata)) {
|
|
switch(gdpop()) {
|
|
case 2: {
|
|
int x = gdpop(), y = gdpop(), al = gdpop();
|
|
int color = gdpop();
|
|
int size = gdpop();
|
|
gdpop();
|
|
int n = gdpop();
|
|
string s;
|
|
for(int i=0; i<n; i++) s += char(gdpop());
|
|
rawdisplaystr(x, y, 0, size, s.c_str(), color, al);
|
|
break;
|
|
}
|
|
|
|
case 1: {
|
|
int col = gdpop();
|
|
int otl = gdpop();
|
|
int num = gdpop();
|
|
|
|
Sint16 xpox[6000], xpoy[6000];
|
|
|
|
// printf("%4d polygon %d\n", gdpos, num);
|
|
for(int i=0; i<num; i++) xpox[i] = gdpop(), xpoy[i] = gdpop();
|
|
|
|
filledPolygonColor(s, xpox, xpoy, num, col);
|
|
aapolygonColor(s, xpox, xpoy, num, otl);
|
|
break;
|
|
}
|
|
|
|
case 3: {
|
|
int col = gdpop();
|
|
int num = gdpop();
|
|
|
|
for(int i=0; i<num; i++) polyx[i] = gdpop(), polyy[i] = gdpop();
|
|
|
|
for(int i=0; i<num-1; i++)
|
|
aalineColor(s, polyx[i], polyy[i], polyx[i+1], polyy[i+1], col);
|
|
}
|
|
|
|
case 4: {
|
|
int col = gdpop();
|
|
int out = gdpop();
|
|
int x = gdpop(), y = gdpop(), rad = gdpop();
|
|
|
|
aacircleColor(s, x, y, rad, (col << 8) + 0xFF);
|
|
}
|
|
|
|
case 5: {
|
|
int out = gdpop();
|
|
/* not implemented */
|
|
}
|
|
|
|
}
|
|
}
|
|
SDL_UpdateRect(s, 0, 0, vid.xres, vid.yres);
|
|
|
|
SDL_Event ev;
|
|
while(SDL_PollEvent(&ev)) {
|
|
|
|
if(ev.type == SDL_MOUSEBUTTONDOWN) {
|
|
mx = ev.button.x;
|
|
my = ev.button.y;
|
|
_clicked = true;
|
|
}
|
|
|
|
if(ev.type == SDL_MOUSEBUTTONUP) {
|
|
_clicked = false;
|
|
}
|
|
|
|
if(ev.type == SDL_MOUSEMOTION) {
|
|
mx = ev.motion.x;
|
|
my = ev.motion.y;
|
|
}
|
|
|
|
if(ev.type == SDL_KEYDOWN) {
|
|
int sym = ev.key.keysym.sym;
|
|
/* if(sym == '1') {
|
|
printf("Number of cells explored, by distance from the player:\n");
|
|
for(int i=0; i<10; i++) printf(" %d", explore[i]); printf("\n");
|
|
return 0;
|
|
}
|
|
else if(sym == '2') {
|
|
items[rand() % ittypes] += 3;
|
|
kills[rand() % motypes] += 3;
|
|
}
|
|
else if(sym == '3') {
|
|
items[itHell] = 0;
|
|
items[itGreenStone] = 100;
|
|
}
|
|
action = sym; */
|
|
if(ev.key.keysym.mod & KMOD_LCTRL) continue;
|
|
mousing = false;
|
|
handlekey(sym, sym);
|
|
}
|
|
|
|
if(ev.type == SDL_QUIT) {
|
|
SDL_Quit();
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
SDL_Quit();
|
|
|
|
clearMemory();
|
|
}
|
|
|