diff --git a/basegraph.cpp b/basegraph.cpp index 7ee7e632..d1b1e559 100644 --- a/basegraph.cpp +++ b/basegraph.cpp @@ -773,8 +773,16 @@ int colormix(int a, int b, int c) { int rhypot(int a, int b) { return (int) sqrt(a*a - b*b); } +ld realradius() { + ld vradius = vid.radius; + if(sphere && vid.alphax > 1) vradius /= sqrt(vid.alphax*vid.alphax - 1); + if(sphere && vid.alphax <= 1) vradius = 1e12; // use the following + vradius = min(vradius, min(vid.xres, vid.yres) / 2); + return vradius; + } + void drawmessage(const string& s, int& y, int col) { - int rrad = min(vid.radius, min(vid.xres, vid.yres) / 2); + int rrad = (int) realradius(); int space; if(y > vid.ycenter + rrad) space = vid.xres; diff --git a/control.cpp b/control.cpp index d53d912e..a2c75486 100644 --- a/control.cpp +++ b/control.cpp @@ -759,8 +759,9 @@ void mainloop() { void displayabutton(int px, int py, string s, int col) { // TMP int siz = vid.yres > vid.xres ? vid.fsize*2 : vid.fsize * 3/2; - int vrx = min(vid.radius, vid.xres/2 - 40); - int vry = min(vid.radius, min(vid.ycenter, vid.yres - vid.ycenter) - 20); + int rad = (int) realradius(); + int vrx = min(rad, vid.xres/2 - 40); + int vry = min(rad, min(vid.ycenter, vid.yres - vid.ycenter) - 20); int x = vid.xcenter + px * vrx; int y = vid.ycenter + py * (vry - siz/2); int vrr = int(hypot(vrx, vry) * sqrt(2.)); diff --git a/graph.cpp b/graph.cpp index c01a8d03..9323de5d 100644 --- a/graph.cpp +++ b/graph.cpp @@ -5048,8 +5048,6 @@ void drawmovestar(double dx, double dy) { // old style joystick control -int realradius; - bool sidescreen; bool dronemode; @@ -5059,7 +5057,7 @@ void calcparam() { vid.xcenter = vid.xres / 2; vid.ycenter = vid.yres / 2; - realradius = min(vid.xcenter, vid.ycenter); + int realradius = min(vid.xcenter, vid.ycenter); vid.radius = int(vid.scale * vid.ycenter) - (ISANDROID ? 2 : ISIOS ? 40 : 40); diff --git a/shmup.cpp b/shmup.cpp index b79279a4..bb3dad0e 100644 --- a/shmup.cpp +++ b/shmup.cpp @@ -11,8 +11,8 @@ extern bool clicked; namespace shmupballs { int xmove, xfire, yb, rad; - void calc() { - rad = min(vid.radius, min(vid.xres, vid.yres) / 2) * (vid.mobilecompasssize ? vid.mobilecompasssize : 14) / 100; + void calc() { + rad = int(realradius() * (vid.mobilecompasssize ? vid.mobilecompasssize : 14) / 100); xmove = max(vid.xcenter - vid.radius - rad, rad); xfire = min(vid.xcenter + vid.radius + rad, vid.xres - rad); yb = vid.ycenter + vid.radius - rad;