Allegro.cc - Online Community

Allegro.cc Forums » The Depot » 7Zip file of my game - Alien Cookbook

This thread is locked; no one can reply to it. rss feed Print
7Zip file of my game - Alien Cookbook
kingnoob
Member #18,984
January 2021

It seems to have accepted it. It was compressed using ultra compression. There is no game panel yet so no options to select and no save game. This is definitely pre alpha.

Play is simple.
1. Left click on empty space pauses the game and calls Game() but there is no game panel so it just exits and is in paused mode. Right clicking on empty space un_pauses the game.
2. Right clicking on open space pauses the game and right clicking again un_pauses it.
3. Clicking right or left on a star selects it and enters select mode. Clicking in empty space exits select mode. Then left clicking on a destination star in range brings up the
send ships panel. I think it is self explanatory. There is one hidden clickable though. Left clicking on the origins ships display on the upper right will instantly send all those ships. Right clicking on a destination star will bring up the standing orders screen. Ships can be scheduled to automatically be sent. Even another player can be helped out by sending ships to them. Let me know if help is needed for either of the panels. Minus "-" will slow down game play and "+" will speed it up. The range is 1 to 40. It starts at 20. Demo "d" will toggle demo mode where the computer plays the human as well.
I would explain more but I am desperately in need of some sleep, gn. Oh yeah, the exe is static linked.

P.S. For now it only works in 1920 x 1080p. It is set up to scale to any graphics mode but I was to focused on getting it working that I have not added all the scaling adjustments. Or I was just being lazy. Not sure which. Back to bed.

Arthur Kalliokoski
Second in Command
February 2005
avatar

They all watch too much MSNBC... they get ideas.

Edgar Reynaldo
Major Reynaldo
May 2007
avatar

Runs fine on my laptop. Simple yet fun. Fairly intuitive.

I see you're doing your own GUI work, and it's working fine for you. That's good. There may be a time you want a more powerful solution and Eagle is always there for you to try if you like it.

kingnoob
Member #18,984
January 2021

Added keyboard support to the send ships panel and the standing orders panel.

send ships: 0-9(pad), backspace, enter
standing orders: 0-9, backspace, enter, tab

Added new game "n".

Added save game.

1. On exit of game, starting game then loads from save game
2. On pressing "s", then "l" loads game
3. On new game just in case that was done in haste, then "l"

There is only one save file. The game panel is next which will have the save game and new game functionality. This update is just a stopgap measure until the game panel is coded.

Edit: A friend of mine tried out the game and that is when I discovered that the mcruntime140.dll also has to be statically linked. So I made another compile and replaced the exe in the attachment. Also my friend did not have 7zip so it is now just a plain zip file.

Edgar Reynaldo
Major Reynaldo
May 2007
avatar

I kept going with the example of using Eagle for your GUI stuff.

Here is the send ships panel. No events are hooked up yet, but everything functions properly. I had to write a flow layout for the buttons on the bottom, which took up most the time. Everything can be adjusted fairly easily.

Here's a screennie :
{"name":"612878","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/d\/edb6ed03eaa9e4ac5071899f9af6c021.png","w":302,"h":641,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/d\/edb6ed03eaa9e4ac5071899f9af6c021"}612878

And here's the code to produce it :

#SelectExpand
1 2 3#define ALLEGRO_UNSTABLE 4 5 6#include "Eagle/backends/Allegro5Backend.hpp" 7#include "Eagle.hpp" 8 9void AllegroLog(const char* text) {EagleInfo() << text;} 10 11 12 13 14 15 16 17class PSlider : public Slider { 18 bool drag = false; 19public : 20 PSlider() : 21 Slider("PSlider" , "Percent slider" , false , false) 22{} 23// virtual void Display(EagleGraphicsContext* win , int xpos , int ypos); 24 virtual int PrivateHandleEvent(EagleEvent e) { 25 if (IsMouseEvent(e)) { 26 if (e.type == EAGLE_EVENT_MOUSE_BUTTON_DOWN) { 27 if (InnerArea().Contains(e.mouse.x , e.mouse.y)) { 28 Slider::SetPercent((double)(e.mouse.x - InnerArea().X())/InnerArea().W()); 29 drag = true; 30 } 31 } 32 else if (e.type == EAGLE_EVENT_MOUSE_AXES) { 33 if (drag) { 34 Slider::SetPercent((double)(e.mouse.x - InnerArea().X())/InnerArea().W()); 35 } 36 } 37 else if (e.type == EAGLE_EVENT_MOUSE_BUTTON_UP) { 38 drag = false; 39 } 40 } 41 return DIALOG_OKAY; 42 } 43 virtual void PrivateDisplay(EagleGraphicsContext* win , int xpos , int ypos) { 44 Rectangle r = InnerArea(); 45 win->DrawFilledRectangle(r , GetColor(BGCOL)); 46 Rectangle pct(r.X() , r.Y() , r.W()*this->GetPercent() , r.H()); 47 win->DrawFilledRectangle(pct , GetColor(FGCOL)); 48 } 49}; 50 51class NumberButton : public GuiButton { 52 int num; 53// virtual void Display(EagleGraphicsContext* win , int xpos , int ypos); 54 virtual void PrivateDisplay(EagleGraphicsContext* win , int xpos , int ypos) { 55 text = StringPrintF("%d" , num); 56 GuiButton::PrivateDisplay(win,xpos,ypos); 57// win->DrawTextString(text_font , StringPrintF("%d" , num) , InnerArea().CX() , InnerArea().CY() , GetColor(TXTCOL) , HALIGN_CENTER , VALIGN_CENTER); 58 } 59public : 60 void SetNum(int n) {num = n;} 61}; 62 63int main(int argc , char** argv) { 64 Allegro5System* sys = GetAllegro5System(); 65 66 if (sys->Initialize(EAGLE_FULL_SETUP) != EAGLE_FULL_SETUP) { 67 EagleWarn() << "Some subsystems not initialized. Proceeding" << std::endl; 68 } 69 70 int sw = 300; 71 int sh = 600; 72 73 EagleGraphicsContext* win = sys->CreateGraphicsContext("Main Window" , sw , sh , EAGLE_OPENGL | EAGLE_WINDOWED | EAGLE_RESIZABLE); 74 75 EAGLE_ASSERT(win && win->Valid()); 76 77 EagleFont* font = win->LoadFont("Verdana.ttf" , -20); 78 79 EAGLE_ASSERT(font && font->Valid()); 80 81 82 83 WidgetHandler gui(win , "GUI" , "Example GUI"); 84 85 86 87 gui.SetupBuffer(sw , sh , win); 88 89 gui.SetWidgetArea(Rectangle(0 , 0 , sw , sh)); 90 91 RelativeLayout rl("RL" , "RelativeLayout"); 92 93 rl.Resize(7);/// layout has 7 basic rows 94 95 gui.SetRootLayout(&rl); 96 97 /// TOP ROW OF SHIP SEND PANEL 98 GridLayout toprow(3 , 1 , "GridLayout" , "TopRow"); 99 BasicText trtext1(font , "100" , HALIGN_RIGHT , VALIGN_CENTER , 2 , 2 , 0); 100 BasicText trtext2(font , "SOL\nTO\nULATTE" , HALIGN_CENTER , VALIGN_CENTER , 2 , 2 , 0); 101 BasicText trtext3(font , "20" , HALIGN_LEFT , VALIGN_CENTER , 2 , 2 , 0); 102 toprow.PlaceWidget(&trtext1 , 0); 103 toprow.PlaceWidget(&trtext2 , 1); 104 toprow.PlaceWidget(&trtext3 , 2); 105 106 float y = 0.0; 107 rl.PlaceWidget(&toprow , 0 , LayoutRectangle(0.0f , 0.0f , 1.0f , 0.2f)); 108 y += 0.2f; 109 110 111 /// 2ND ROW 112 GridLayout num1; 113 num1.ResizeGrid(10 , 1); 114 num1.SetGlobalPadding(2,2); 115 rl.PlaceWidget(&num1 , 2 , LayoutRectangle(0.0f , y , 1.0f , 0.1)); 116 y += 0.1f; 117 118 /// 3ND ROW 119 IntEditText numinput; 120 numinput.SetupText("" , font , HALIGN_RIGHT , VALIGN_CENTER); 121 rl.PlaceWidget(&numinput , 1 , LayoutRectangle(0.0f , y , 1.0f , 0.1)); 122 y += 0.1f; 123 124 /// 4TH ROW 125 GridLayout num2; 126 num2.ResizeGrid(11 , 1); 127 num2.SetGlobalSpacing(4 , 4); 128 129 NumberButton numbtns1[10]; 130 NumberButton numbtns2[10]; 131 132 for (unsigned int i = 0 ; i < 10 ; ++i) { 133 numbtns1[i].SetFont(font); 134 numbtns2[i].SetFont(win->DefaultFont()); 135 numbtns1[i].SetNum(i); 136 numbtns2[i].SetNum((i+1)*10); 137 num1.PlaceWidget(&numbtns1[i] , i); 138 num2.PlaceWidget(&numbtns2[i] , i + 1); 139 } 140 BasicText pctbtn; 141 pctbtn.SetupText("%" , font , HALIGN_CENTER , VALIGN_CENTER); 142 num2.PlaceWidget(&pctbtn , 0); 143 144 rl.PlaceWidget(&num2 , 3 , LayoutRectangle(0.0f , y , 1.0f , 0.2/3.0f)); 145 y += 0.2f/3.0f; 146 147 /// Row 5 148 BasicScrollButton lrbtn[2]; 149 lrbtn[0].SetScrollDirection(true , true); 150 lrbtn[1].SetScrollDirection(false , true); 151 /// Row 5 col 2 -> right 152 PSlider pslider; 153 BasicTextButton clrbtn; 154 clrbtn.SetupText("Clear" , font , HALIGN_CENTER , VALIGN_CENTER); 155 156 RelativeLayout rl2; 157 rl2.Resize(4); 158 rl2.PlaceWidget(&lrbtn[0] , 0 , LayoutRectangle(0.0f , 0.0f , 0.05f , 1.0f)); 159 rl2.PlaceWidget(&lrbtn[1] , 1 , LayoutRectangle(0.05f , 0.0f , 0.05f , 1.0f)); 160 rl2.PlaceWidget(&pslider , 2 , LayoutRectangle(0.1f , 0.0f , 0.7f , 1.0f)); 161 rl2.PlaceWidget(&clrbtn , 3 , LayoutRectangle(0.8f , 0.0f , 0.2f , 1.0f)); 162 163 rl.PlaceWidget(&rl2 , 4 , LayoutRectangle(0.0f , y , 1.0f , 0.2/3.0f)); 164 y += 0.2f/3.0f; 165 166 /// Row 6 167 BasicCheckBox cbox[2]; 168 BasicText cboxlabels[2]; 169 170 cbox[0].SetButtonState(false , false , false); 171 cbox[1].SetButtonState(false , false , false); 172 cboxlabels[0].SetupText("Instant % Box" , font , HALIGN_LEFT , VALIGN_CENTER); 173 cboxlabels[1].SetupText("Instant % Bar" , font , HALIGN_LEFT , VALIGN_CENTER); 174 175 RelativeLayout rl3; 176 rl3.Resize(5); 177 rl3.PlaceWidget(&cbox[0] , 0 , LayoutRectangle(0.0f , 0.0f , 0.1f , 1.0f)); 178 rl3.PlaceWidget(&cboxlabels[0] , 1 , LayoutRectangle(0.1f , 0.0f , 0.4f , 1.0f)); 179 rl3.PlaceWidget(&cbox[1] , 2 , LayoutRectangle(0.5f , 0.0f , 0.1f , 1.0f)); 180 rl3.PlaceWidget(&cboxlabels[1] , 3 , LayoutRectangle(0.6f , 0.0f , 0.4f , 1.0f)); 181 182 rl.PlaceWidget(&rl3 , 5 , LayoutRectangle(0.0f , y , 1.0f , 0.2f/3.0f)); 183 y += 0.2f/3.0f; 184 185 /// Row 7 186 BasicTextButton send_btns[4]; 187 send_btns[0].SetupText("Kill" , font , HALIGN_CENTER , VALIGN_CENTER , 2 , 2); 188 send_btns[1].SetupText("Chase" , font , HALIGN_CENTER , VALIGN_CENTER , 2 , 2); 189 send_btns[2].SetupText("No Retreat" , font , HALIGN_CENTER , VALIGN_CENTER , 2 , 2); 190 send_btns[3].SetupText("Send" , font , HALIGN_CENTER , VALIGN_CENTER , 2 , 2); 191 192 FlowLayout flow; 193 for (unsigned int i = 0 ; i < 4 ; ++i) { 194 BasicTextButton* pbtn = &send_btns[i]; 195 pbtn->SetPreferredSize(); 196 flow.AddWidget(pbtn); 197 } 198 rl.PlaceWidget(&flow , 6 , LayoutRectangle(0.0f , y , 1.0f , 0.13f)); 199// rl.PlaceWidget(&flow , 6 , LayoutRectangle(0.0f , 0.0 , 1.0f , 1.0f)); 200 201 202 bool quit = false; 203 bool redraw = true; 204 205 sys->GetSystemTimer()->Start(); 206 207 while (!quit) { 208 if (redraw) { 209 win->Clear(); 210 gui.Display(win , 0 , 0); 211 win->FlipDisplay(); 212 redraw = false; 213 } 214 do { 215 EagleEvent e = sys->WaitForSystemEventAndUpdateState(); 216 if (e.type == EAGLE_EVENT_DISPLAY_CLOSE) { 217 quit = true; 218 } 219 if (e.type == EAGLE_EVENT_KEY_DOWN && e.keyboard.keycode == EAGLE_KEY_ESCAPE) { 220 quit = true; 221 } 222 if (e.type == EAGLE_EVENT_TIMER) { 223 redraw = true; 224 gui.Update(sys->GetSystemTimer()->SPT()); 225 } 226 gui.HandleEvent(e); 227 while (gui.HasMessages()) { 228 WidgetMsg msg = gui.TakeNextMessage(); 229 EagleLog() << msg << std::endl; 230 } 231 } while (!sys->UpToDate()); 232 } 233 234 return 0; 235}

This is how I would do it, but as you've shown, some GUIs are better left off keeping things simple. But if you're looking for an extensible solution, Eagle would work for you.

kingnoob
Member #18,984
January 2021

Edgar Reynaldo, Thanks for following through with the example! It looks instructive. :)

For comparison I'll post the code.

#SelectExpand
1// The draw code. 2void DrawSend() { 3 int h, i, x, nx, y, w; 4 char buf[12]; 5 ALLEGRO_COLOR c; 6 x = star[dst].x; y = star[dst].y; 7 gx = x = (x < sw / 2) ? x + 20 : x - 500; 8 gy = y = (y < 530) ? y : 530; 9 al_draw_filled_rounded_rectangle(x, y, x + 479, y + 540, 10, 10, STEEL); 10 al_draw_filled_rounded_rectangle(x + 435, y + 4, x + 475, y + 44, 10, 10, DARKSTEEL); 11 al_draw_text(font35, STEEL, x + 455, y + 4, ALLEGRO_ALIGN_CENTER, "X"); 12 al_draw_text(font70, BLACK, x + 239, y, ALLEGRO_ALIGN_CENTRE, star[org].name); 13 al_draw_text(font35, BLACK, x + 239, y + 80, ALLEGRO_ALIGN_CENTER, "to"); 14 al_draw_text(font70, BLACK, x + 239, y + 116, ALLEGRO_ALIGN_CENTER, star[dst].name); 15 _itoa_s(star[org].ships, buf, 12, 10); 16 al_draw_text(font35, LIGHTSTEEL, x + 119, y + 80, ALLEGRO_ALIGN_CENTER, buf); 17 _itoa_s(star[dst].ships, buf, 12, 10); 18 al_draw_text(font35, LIGHTSTEEL, x + 359, y + 80, ALLEGRO_ALIGN_CENTER, buf); 19 al_draw_line(x + 10, y + 200, x + 469, y + 200, BLACK, 4.0f); 20 for (i = 0; i < 10; i++) { 21 _itoa_s(i, buf, 12, 10); 22 al_draw_text(font70, BLACK, x + 33 + i * 46, y + 201, ALLEGRO_ALIGN_CENTER, buf); 23 } 24 al_draw_line(x + 10, y + 280, x + 469, y + 280, BLACK, 4.0f); 25 al_draw_filled_rectangle(x + 10, y + 290, x + 469, y + 370, LIGHTSTEEL); 26 _itoa_s(send, buf, 12, 10); 27 al_draw_text(font70, BLACK, x + 229, y + 290, ALLEGRO_ALIGN_CENTER, buf); 28 al_draw_text(font35, LIGHTSTEEL, x + 10, y + 374, 0, "%"); 29 for (i = 0; i < 10; i++) { 30 _itoa_s((i + 1) * 10, buf, 12, 10); 31 al_draw_filled_rectangle(x + 49 + i * 43, y + 377, x + 83 + i * 43, y + 410, DARKSTEEL); 32 al_draw_text(font15, LIGHTSTEEL, x + 66 + i * 43, y + 385, ALLEGRO_ALIGN_CENTER, buf); 33 } 34 al_draw_filled_triangle(x + 10, y + 431, x + 24, y + 417, x + 24, y + 445, LIGHTSTEEL); 35 al_draw_filled_triangle(x + 42, y + 431, x + 28, y + 417, x + 28, y + 445, LIGHTSTEEL); 36 al_draw_filled_rectangle(x + 51, y + 420, x + 469, y + 442, DARKSTEEL); 37 if (! demo &&(int)send) 38 al_draw_filled_rectangle(x + 51, y + 420, x + 51 + (418 * ((float)send/star[org].ships)), y + 442, LIGHTSTEEL); 39 al_draw_filled_rectangle(x + 12, y + 454, x + 38, y + 480, LIGHTSTEEL); 40 if (sendBox) al_draw_filled_rectangle(x + 18, y + 460, x + 32, y + 474, DARKSTEEL); 41 al_draw_text(font15, LIGHTSTEEL, x + 51, y + 458, 0, "Instant % Box"); 42 al_draw_filled_rectangle(x + 176, y + 454, x + 202, y + 480, LIGHTSTEEL); 43 if (sendBar) al_draw_filled_rectangle(x + 182, y + 460, x + 194, y + 474, DARKSTEEL); 44 al_draw_text(font15, LIGHTSTEEL, x + 214, y + 458, 0, "instant % Bar"); 45 al_draw_filled_rectangle(x + 338, y + 454, x + 400, y + 480, LIGHTSTEEL); 46 al_draw_text(font15, BLACK, x + 370, y + 458, ALLEGRO_ALIGN_CENTER, "Clear"); 47 al_draw_filled_triangle(x + 426, y + 467, x + 439, y + 453, x + 439, y + 481, LIGHTSTEEL); 48 al_draw_filled_rectangle(x + 439, y + 453, x + 468, y + 481, LIGHTSTEEL); 49 al_draw_text(font15, BLACK, x + 454, y + 458, ALLEGRO_ALIGN_CENTER, "X"); 50 w = al_get_text_width(font35, "Kill"); 51 h = al_get_font_line_height(font35); 52 al_draw_filled_rectangle(x + 10, y + 490, x + 10 + w, y + 490 + h, DARKSTEEL); 53 c = LIGHTSTEEL; 54 if (star[dst].owner > 1) c = star[org].ships > star[dst].ships * 1.2 ? DARKGREEN : DARKRED; 55 al_draw_text(font35, c, x + 10, y + 490, 0, "Kill"); 56 nx = x + 18 + w; 57 w = al_get_text_width(font35, "Chase"); 58 al_draw_filled_rectangle(nx, y + 490, nx + w, y + 490 + h, DARKSTEEL); 59 c = LIGHTSTEEL; 60 if (star[dst].owner > 1) c = star[org].ships > star[dst].ships * 1.5 ? DARKGREEN : DARKRED; 61 al_draw_text(font35, c, nx, y + 490, 0, "Chase"); 62 nx += w + 8; 63 w = al_get_text_width(font35, "No Retreat"); 64 al_draw_filled_rectangle(nx, y + 490, nx + w, y + 490 + h, DARKSTEEL); 65 c = LIGHTSTEEL; 66 if (star[dst].owner != 1) c = retreat ? LIGHTSTEEL : DARKRED; 67 al_draw_text(font35, c, nx, y + 490, 0, "No Retreat"); 68 nx += w + 8; 69 w = al_get_text_width(font35, "Send"); 70 al_draw_filled_rectangle(nx, y + 490, nx + w, y + 490 + h, DARKSTEEL); 71 al_draw_text(font35, LIGHTSTEEL, nx, y + 490, 0, "Send"); 72} 73 74The execution code. 75void Send() { 76 int i, x; 77 if (star[org].owner != 1) { 78 gui[ui] = NONE; 79 ui--; 80 mbd = false; 81 mbu = false; 82 } 83 else if (key) { 84 if (key == ALLEGRO_KEY_ENTER) { 85 if (send >= 1.0f) { 86 if (star[org].ships >= send) { 87 SendFleet(org, dst, (int)send, 1); 88 star[org].ships -= send; 89 gui[ui] = NONE; 90 ui--; 91 } 92 send = 0; 93 } 94 } 95 else if (key == ALLEGRO_KEY_BACKSPACE) { 96 send = (int)(send / 10); 97 } 98 else if (key >= ALLEGRO_KEY_PAD_0 && key <= ALLEGRO_KEY_PAD_9) { 99 printf("key pressed %i\n", key); 100 i = 9 - (ALLEGRO_KEY_PAD_9 - key); 101 printf("%i\n", i); 102 if (send * 10 + i <= star[org].ships) send = send * 10 + i; 103 } 104 } 105 else if (mbd) { 106 if (mdx >= gx + 10 && mdx < gx + 24 && mdy > gy + 417 && mdy < gy + 445) { 107 if (send >= 1) send -= ((float)star[org].ships / 2000); 108 if (send < 0) send = 0; 109 } 110 else if (mdx > gx + 28 && mdx <= gx + 42 && mdy > gy + 417 && mdy < gy + 445) { 111 if (send < star[org].ships) send += ((float)star[org].ships / 2000); 112 } 113 } 114 else if (mbu) { 115 send = (int)send; 116 if (muy > gy + 490 && muy < gy + 532) { 117 if (mux > gx + 380 && mux < gx + 469) { 118 if (send >= 1.0f) { 119 if (star[org].ships >= send) { 120 SendFleet(org, dst, send, 1); 121 star[org].ships -= send; 122 gui[ui] = NONE; 123 ui--; 124 } 125 send = 0; 126 } 127 } 128 else if (mux > gx + 10 && mux < gx + 64) { 129 if (star[org].ships > star[dst].ships * 1.1) { 130 send = star[dst].ships * 1.2; 131 SendFleet(org, dst, send, 1); 132 star[org].ships -= send; 133 gui[ui] = NONE; 134 ui--; 135 send = 0; 136 } 137 } 138 else if (mux > gx + 70 && mux < gx + 180) { 139 if (star[org].ships > star[dst].ships * 1.5) { 140 send = star[dst].ships * 1.5; 141 SendFleet(org, dst, send, 1); 142 star[org].ships -= send; 143 gui[ui] = NONE; 144 ui--; 145 send = 0; 146 } 147 } 148 else if (mux > gx + 186 && mux < gx + 372) { 149 retreat = 1 - retreat; 150 } 151 } 152 else if (mux > gx + 435 && mux < gx + 475 && muy > gy + 4 && muy < gy + 44) { 153 gui[ui] = NONE; 154 ui--; 155 } 156 else if (mux > gx + 10 && mux < gx + 200 && muy > gy + 80 && muy < gy + 120) { 157 send = star[org].ships; 158 SendFleet(org, dst, send, 1); 159 star[org].ships -= send; 160 gui[ui] = NONE; 161 ui--; 162 send = 0; 163 } 164 else if (mux > gx + 10 && mux < gx + 459 && muy > gy + 201 && muy < gy + 281) { 165 if (send * 10 + (int)((mux - gx - 16) / 45) <= star[org].ships) { 166 send *= 10; 167 send += (mux - gx - 16) / 45; 168 } 169 } 170 else if (mux >= gx + 49 && mux <= gx + 469 && muy >= gy + 377 && muy <= gy + 410) { 171 i = (int)((mux - gx - 51) / 43); 172 x = gx + 49 + (i * 43); 173 if (mux < x + 32) { 174 send = (float)star[org].ships / 10 * (i + 1); 175 if (sendBox) { 176 SendFleet(org, dst, send, 1); 177 star[org].ships -= send; 178 gui[ui] = NONE; 179 ui--; 180 send = 0; 181 } 182 } 183 } 184 else if (mux >= gx + 51 && mux <= gx + 469 && muy >= gy + 420 && muy <= gy + 442) { 185 send = star[org].ships * ((float)(mux - gx - 51) / 418); 186 if (sendBar) { 187 SendFleet(org, dst, send, 1); 188 star[org].ships -= send; 189 gui[ui] = NONE; 190 ui--; 191 send = 0; 192 } 193 } 194 else if (mux > gx + 12 && mux < gx +38 && muy > gy + 454 && muy < gy + 480) { 195 sendBox = 1 - sendBox; 196 } 197 else if (mux > gx + 176 && mux < gx + 202 && muy > gy + 454 && muy < gy + 480) { 198 sendBar = 1 - sendBar; 199 } 200 else if (mux > gx + 338 && mux < gx + 400 && muy > gy + 454 && muy < gy + 480) { 201 send = 0; 202 } 203 else if (mux > gx + 426 && mux < gx + 468 && muy > gy + 454 && muy < gy + 480) { 204 send = (int)(send / 10); 205 } 206 } 207 mbu = false; 208}

{"name":"612879","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/3\/8\/382cf22a454d411cefb9af2cbecc06b7.png","w":1920,"h":1080,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/3\/8\/382cf22a454d411cefb9af2cbecc06b7"}612879
As can be seen in the capture the "KILL" and "CHASE" options are possible (DARKGREEN). They are in DARKRED if not possible. As can be seen, in this latest play testing I am getting something of mine kicked pretty hard. But, I still have hopes of winning! ;D This one has some nice play improvements.

Go to: