123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763 |
- /***********************************************************************
- *
- * SPACE TRADER 1.2.0
- *
- * WarpFormEvent.c
- *
- * Copyright (C) 2000-2002 Pieter Spronck, All Rights Reserved
- *
- * Additional coding by Sam Anderson (rulez2@home.com)
- * Additional coding by Samuel Goldstein (palm@fogbound.net)
- *
- * Some code of Matt Lee's Dope Wars program has been used.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * You can contact the author at space_trader@hotmail.com
- *
- * For those who are familiar with the classic game Elite: many of the
- * ideas in Space Trader are heavily inspired by Elite.
- *
- **********************************************************************/
- #include "external.h"
- // *************************************************************************
- // To draw a circle with centre Xs, Ys and radius R.
- // *************************************************************************
- static void DrawCircle( int Xs, int Ys, int R )
- {
- int Xp, Yp, i, Xt, Yt;
-
- Xp = Xs;
- Yp = Ys - R;
- for (i=0; i<=R; ++i)
- {
- Xt = Xs + i;
- Yt = Ys - sqrt( SQR( R ) - SQR( i ) );
- WinDrawLine( Xp, Yp, Xt, Yt );
- Xp = Xt;
- Yp = Yt;
- }
- Xp = Xs;
- Yp = Ys + R;
- for (i=0; i<=R; ++i)
- {
- Xt = Xs + i;
- Yt = Ys + sqrt( SQR( R ) - SQR( i ) );
- WinDrawLine( Xp, Yp, Xt, Yt );
- Xp = Xt;
- Yp = Yt;
- }
- Xp = Xs;
- Yp = Ys + R;
- for (i=0; i<=R; ++i)
- {
- Xt = Xs - i;
- Yt = Ys + sqrt( SQR( R ) - SQR( i ) );
- WinDrawLine( Xp, Yp, Xt, Yt );
- Xp = Xt;
- Yp = Yt;
- }
- Xp = Xs;
- Yp = Ys - R;
- for (i=0; i<=R; ++i)
- {
- Xt = Xs - i;
- Yt = Ys - sqrt( SQR( R ) - SQR( i ) );
- WinDrawLine( Xp, Yp, Xt, Yt );
- Xp = Xt;
- Yp = Yt;
- }
- }
- // *************************************************************************
- // Draw the short range chart
- // *************************************************************************
- static void DrawShortRange( int Index )
- {
- FormPtr frmP;
- RectangleType bounds;
- int i, j, Xs, Ys, Xp, Yp, delta;
- int dX, dY, dX3, dY3, distToTracked;
- frmP = FrmGetActiveForm();
- RectangularShortcuts( frmP, WarpBButton );
- FrmDrawForm ( frmP);
- // Rectangle for chart
- bounds.topLeft.x = 0;
- bounds.topLeft.y = BOUNDSY - EXTRAERASE;
- bounds.extent.x = 160;
- bounds.extent.y = 160 - BOUNDSY + EXTRAERASE;
- WinEraseRectangle( &bounds, 0 );
- WinSetClip( &bounds );
-
- // Centre of chart
- Xs = (int)((SHORTRANGEWIDTH >> 1) + SHORTRANGEBOUNDSX);
- Ys = (int)((SHORTRANGEHEIGHT >> 1) + BOUNDSY);
- delta = (SHORTRANGEWIDTH / (MAXRANGE << 1));
- FntSetFont( stdFont );
-
- // Draw the maximum range circle
- if (GetFuel() > 0)
- DrawCircle( Xs, Ys, GetFuel()*delta );
- // show the tracked system (if any)
- if (TrackedSystem >= 0)
- {
- distToTracked = RealDistance(SolarSystem[COMMANDER.CurSystem], SolarSystem[TrackedSystem]);
- if (distToTracked > 0)
- {
-
- dX = (int)(25.0 * ((float)SolarSystem[COMMANDER.CurSystem].X - (float)SolarSystem[TrackedSystem].X) /
- (float)distToTracked);
- dY = (int)(25.0 * ((float)SolarSystem[COMMANDER.CurSystem].Y - (float)SolarSystem[TrackedSystem].Y) /
- (float)distToTracked);
-
- // draw directional arrow from planet -- I'd do this in color if it were easier.
-
- dY3 = -(int)(4.0 * ((float)SolarSystem[COMMANDER.CurSystem].X - (float)SolarSystem[TrackedSystem].X) /
- (float)distToTracked);
- dX3 = (int)(4.0 * ((float)SolarSystem[COMMANDER.CurSystem].Y - (float)SolarSystem[TrackedSystem].Y) /
- (float)distToTracked);
- WinDrawLine( Xs - dX, Ys - dY, Xs - dX3, Ys - dY3 );
- WinDrawLine( Xs - dX, Ys - dY, Xs + dX3, Ys + dY3 );
- }
- }
- // Two loops: first draw the names and then the systems. The names may
- // overlap and the systems may be drawn on the names, but at least every
- // system is visible.
- for (j=0; j<2; ++j)
- {
- for (i=0; i<MAXSOLARSYSTEM; ++i)
- {
- if ((ABS( SolarSystem[i].X - SolarSystem[Index].X ) <= MAXRANGE) &&
- (ABS( SolarSystem[i].Y - SolarSystem[Index].Y ) <= MAXRANGE))
- {
- Xp = (int)((SHORTRANGEWIDTH >> 1) +
- (SolarSystem[i].X - SolarSystem[Index].X) *
- (SHORTRANGEWIDTH / (MAXRANGE << 1)) +
- SHORTRANGEBOUNDSX - EXTRAERASE);
- Yp = (int)((SHORTRANGEHEIGHT >> 1) +
- (SolarSystem[i].Y - SolarSystem[Index].Y) *
- (SHORTRANGEHEIGHT / (MAXRANGE << 1)) +
- BOUNDSY - EXTRAERASE);
- if (j == 1)
- {
- if (i == WarpSystem)
- {
- WinDrawLine( Xp-2, Yp+3, Xp+8, Yp+3 );
- WinDrawLine( Xp+3, Yp-2, Xp+3, Yp+8 );
- }
- WinDrawBitmap( (SolarSystem[i].Visited ? VisitedShortRangeSystemBmpPtr :
- ShortRangeSystemBmpPtr), Xp, Yp );
- if (WormholeExists( i, -1 ))
- {
- delta = WORMHOLEDISTANCE * (SHORTRANGEWIDTH / (MAXRANGE << 1));
- if (WormholeExists( i, WarpSystem ))
- {
- WinDrawLine( Xp-2+delta, Yp+3, Xp+8+delta, Yp+3 );
- WinDrawLine( Xp+3+delta, Yp-2, Xp+3+delta, Yp+8 );
- }
- WinDrawBitmap( WormholeBmpPtr, Xp + delta, Yp );
- }
- }
- else
- {
- DrawChars( SolarSystemName[SolarSystem[i].NameIndex],
- Xp - StrLen( SolarSystemName[SolarSystem[i].NameIndex] ) * 2,
- Yp - 12 );
- }
- }
- }
- }
-
- // if they're tracking, and they want range info:
- if (TrackedSystem >= 0 && ShowTrackedRange)
- {
- StrPrintF(SBuf, "%d", distToTracked);
- StrCat(SBuf, " parsecs to ");
- StrCat(SBuf, SolarSystemName[SolarSystem[TrackedSystem].NameIndex]);
- DrawChars( SBuf, 0, 149);
- }
-
- WinResetClip();
- }
- // *************************************************************************
- // Draw the galactic chart, with system Index selected.
- // *************************************************************************
- static void DrawGalaxy( int Index )
- {
- FormPtr frmP;
- RectangleType bounds;
- int i;
- frmP = FrmGetActiveForm();
- RectangularShortcuts( frmP, GalacticChartBButton );
- FrmDrawForm ( frmP);
- EraseRectangle( 0, 136, 120, 12 );
- EraseRectangle( 0, 148, 160, 12 );
- bounds.topLeft.x = 0;
- bounds.topLeft.y = BOUNDSY;
- bounds.extent.x = 160;
- bounds.extent.y = GALAXYHEIGHT+2*EXTRAERASE-2;
- WinEraseRectangle( &bounds, 0 );
- WinSetClip( &bounds );
- if (GetFuel() > 0)
- DrawCircle( CURSYSTEM.X+BOUNDSX, CURSYSTEM.Y+BOUNDSY, GetFuel() );
- for (i=0; i<MAXWORMHOLE; i++)
- {
- // Gosh, my idea of designating wormholes by using a negative index would
- // have been a lot cleverer, had both systems and wormholes not started with
- // an index of 0! SjG
- if (i == -Index - 1)
- {
- WinDrawLine(SolarSystem[Wormhole[i]].X + BOUNDSX - EXTRAERASE + 3 + WORMHOLEDISTANCE,
- SolarSystem[Wormhole[i]].Y + BOUNDSY - EXTRAERASE + 3,
- SolarSystem[Wormhole[i]].X + BOUNDSX - EXTRAERASE + 7 + WORMHOLEDISTANCE,
- SolarSystem[Wormhole[i]].Y + BOUNDSY - EXTRAERASE + 3);
-
- WinDrawLine(SolarSystem[Wormhole[i]].X + BOUNDSX - EXTRAERASE + 4 + WORMHOLEDISTANCE,
- SolarSystem[Wormhole[i]].Y + BOUNDSY - EXTRAERASE,
- SolarSystem[Wormhole[i]].X + BOUNDSX - EXTRAERASE + 4 + WORMHOLEDISTANCE,
- SolarSystem[Wormhole[i]].Y + BOUNDSY - EXTRAERASE + 6);
-
- WinDrawLine(SolarSystem[Wormhole[i]].X + BOUNDSX - EXTRAERASE + 4 + WORMHOLEDISTANCE,
- SolarSystem[Wormhole[i]].Y + BOUNDSY - EXTRAERASE + 3,
- SolarSystem[i < MAXWORMHOLE-1 ? Wormhole[i+1] : Wormhole[0]].X + 3 + BOUNDSX - EXTRAERASE,
- SolarSystem[i < MAXWORMHOLE-1 ? Wormhole[i+1] : Wormhole[0]].Y + 3 + BOUNDSY - EXTRAERASE);
- }
- }
-
- for (i=0; i<MAXSOLARSYSTEM; ++i)
- {
- if (i == Index)
- {
- WinDrawBitmap(
- (SolarSystem[i].Visited ? CurrentVisitedSystemBmpPtr : CurrentSystemBmpPtr),
- SolarSystem[i].X+BOUNDSX-EXTRAERASE, SolarSystem[i].Y+BOUNDSY-EXTRAERASE );
- }
- else
- {
- WinDrawBitmap(
- (SolarSystem[i].Visited ? VisitedSystemBmpPtr : SystemBmpPtr),
- SolarSystem[i].X+BOUNDSX-EXTRAERASE+1, SolarSystem[i].Y+BOUNDSY-EXTRAERASE+1 );
- }
-
- if (i == TrackedSystem)
- {
- WinDrawLine( SolarSystem[i].X+BOUNDSX-3, SolarSystem[i].Y+BOUNDSY+3,
- SolarSystem[i].X+BOUNDSX-2, SolarSystem[i].Y+BOUNDSY+2);
- WinDrawLine( SolarSystem[i].X+BOUNDSX-3, SolarSystem[i].Y+BOUNDSY-3,
- SolarSystem[i].X+BOUNDSX-2, SolarSystem[i].Y+BOUNDSY-2);
- WinDrawLine( SolarSystem[i].X+BOUNDSX+3, SolarSystem[i].Y+BOUNDSY+3,
- SolarSystem[i].X+BOUNDSX+2, SolarSystem[i].Y+BOUNDSY+2);
- WinDrawLine( SolarSystem[i].X+BOUNDSX+3, SolarSystem[i].Y+BOUNDSY-3,
- SolarSystem[i].X+BOUNDSX+2, SolarSystem[i].Y+BOUNDSY-2);
- }
- if (WormholeExists( i, -1 ))
- WinDrawBitmap( SmallWormholeBmpPtr, SolarSystem[i].X+BOUNDSX-EXTRAERASE+2+
- WORMHOLEDISTANCE, SolarSystem[i].Y+BOUNDSY-EXTRAERASE+1 );
- }
- WinResetClip();
- if (Index >= 0)
- {
- DrawChars( SolarSystemName[SolarSystem[Index].NameIndex], 0, 136 );
- StrCopy( SBuf, SystemSize[SolarSystem[Index].Size] );
- StrCat( SBuf, " " );
- StrCat( SBuf, TechLevel[SolarSystem[Index].TechLevel] );
- StrCat( SBuf, " " );
- StrCat( SBuf, Politics[SolarSystem[Index].Politics].Name );
- DrawChars( SBuf, 0, 148 );
- StrIToA( SBuf, RealDistance( CURSYSTEM, SolarSystem[Index] ) );
- StrCat( SBuf, " parsecs" );
- DrawChars( SBuf, 58, 136 );
-
- GalacticChartSystem = Index;
- }
- else
- {
- i = -Index - 1;
- StrCopy( SBuf, "Wormhole to ");
- StrCat( SBuf, SolarSystemName[i < MAXWORMHOLE-1 ? Wormhole[i+1] : Wormhole[0]]);
- DrawChars( SBuf, 0,136);
- StrCopy ( SBuf, "(from ");
- StrCat( SBuf, SolarSystemName[Wormhole[i]]);
- StrCat( SBuf, " System)");
- DrawChars( SBuf, 0, 148);
- }
-
- if (CanSuperWarp)
- {
- FrmShowObject( frmP, FrmGetObjectIndex( frmP, GalacticChartSuperWarpButton ) );
- }
- else
- {
- FrmHideObject( frmP, FrmGetObjectIndex( frmP, GalacticChartSuperWarpButton ) );
- }
- }
- // *************************************************************************
- // Events of the short range chart
- // *************************************************************************
- Boolean WarpFormHandleEvent(EventPtr eventP)
- {
- Boolean handled = false;
- int Xp, Yp, i, Index;
- switch (eventP->eType)
- {
- // Tap one of the systems on the short range chart
- case penDownEvent:
- if ((eventP->screenX >= SHORTRANGEBOUNDSX-EXTRAERASE) &&
- (eventP->screenX <= SHORTRANGEBOUNDSX+SHORTRANGEWIDTH+EXTRAERASE) &&
- (eventP->screenY >= BOUNDSY-EXTRAERASE) &&
- (eventP->screenY <= BOUNDSY+SHORTRANGEHEIGHT+EXTRAERASE))
- {
- i = 0;
- Index = COMMANDER.CurSystem;
- while (i < MAXSOLARSYSTEM)
- {
- Xp = (int)((SHORTRANGEWIDTH >> 1) +
- (SolarSystem[i].X - SolarSystem[Index].X) *
- (SHORTRANGEWIDTH / (MAXRANGE << 1)) +
- SHORTRANGEBOUNDSX);
- Yp = (int)((SHORTRANGEHEIGHT >> 1) +
- (SolarSystem[i].Y - SolarSystem[Index].Y) *
- (SHORTRANGEHEIGHT / (MAXRANGE << 1)) +
- BOUNDSY);
- if ((ABS( Xp - (eventP->screenX) ) <= MINDISTANCE) &&
- (ABS( Yp - (eventP->screenY) ) <= MINDISTANCE))
- break;
- ++i;
- }
- if (i < MAXSOLARSYSTEM)
- {
- WarpSystem = i;
- if (!AlwaysInfo && APLscreen && RealDistance( CURSYSTEM, SolarSystem[WarpSystem] ) <= GetFuel() &&
- RealDistance( CURSYSTEM, SolarSystem[WarpSystem] ) > 0)
- CurForm = AveragePricesForm;
- else
- CurForm = ExecuteWarpForm;
- FrmGotoForm( CurForm );
- handled = true;
- break;
- }
- i = 0;
- while (i < MAXWORMHOLE)
- {
- Xp = (int)((SHORTRANGEWIDTH >> 1) +
- (SolarSystem[Wormhole[i]].X + WORMHOLEDISTANCE - SolarSystem[Index].X) *
- (SHORTRANGEWIDTH / (MAXRANGE << 1)) +
- SHORTRANGEBOUNDSX);
- Yp = (int)((SHORTRANGEHEIGHT >> 1) +
- (SolarSystem[Wormhole[i]].Y - SolarSystem[Index].Y) *
- (SHORTRANGEHEIGHT / (MAXRANGE << 1)) +
- BOUNDSY);
- if ((ABS( Xp - (eventP->screenX) ) <= MINDISTANCE) &&
- (ABS( Yp - (eventP->screenY) ) <= MINDISTANCE))
- break;
- ++i;
- }
- if (i < MAXWORMHOLE)
- {
- if (COMMANDER.CurSystem != Wormhole[i])
- FrmCustomAlert( WormholeOutOfRangeAlert, SolarSystemName[i < MAXWORMHOLE-1 ? Wormhole[i+1] : Wormhole[0]], SolarSystemName[Wormhole[i]], "" );
- else
- {
- WarpSystem = (i < MAXWORMHOLE-1 ? Wormhole[i+1] : Wormhole[0] );
- if (!AlwaysInfo && APLscreen)
- CurForm = AveragePricesForm;
- else
- CurForm = ExecuteWarpForm;
- FrmGotoForm( CurForm );
- }
- handled = true;
- break;
- }
- }
- break;
- case frmOpenEvent:
- DrawShortRange( COMMANDER.CurSystem );
- handled = true;
- break;
-
- case frmUpdateEvent:
- DrawShortRange( COMMANDER.CurSystem );
- handled = true;
- break;
- default:
- break;
- }
-
- return handled;
- }
- // *************************************************************************
- // Handling of events on Galactic Chart
- // *************************************************************************
- Boolean GalacticChartFormHandleEvent(EventPtr eventP)
- {
- Boolean handled = false;
- Boolean track = false;
- int i=0, d, delta;
- static int last = -1;
- Handle SystemH;
- Handle SystemH2;
- FormPtr frm;
- char FindSystem[NAMELEN+1];
- Boolean DontLoad;
- switch (eventP->eType)
- {
- case keyDownEvent:
- d = ScrollButton( eventP );
- if (d == chrPageUp || d == chrPageDown)
- {
- if (d == chrPageDown)
- {
- i = GalacticChartSystem + 1;
- if (i >= MAXSOLARSYSTEM)
- i = 0;
- }
- else
- {
- i = GalacticChartSystem - 1;
- if (i < 0)
- i = MAXSOLARSYSTEM-1;
- }
- DrawGalaxy( i );
- handled = true;
- }
- break;
- // tap one of the systems
- case penDownEvent:
- if ((eventP->screenX >= BOUNDSX-EXTRAERASE) &&
- (eventP->screenX <= BOUNDSX+GALAXYWIDTH+EXTRAERASE) &&
- (eventP->screenY >= BOUNDSY-EXTRAERASE) &&
- (eventP->screenY <= BOUNDSY+GALAXYHEIGHT+EXTRAERASE))
- {
- i = 0;
- delta = WORMHOLEDISTANCE * (SHORTRANGEWIDTH / (MAXRANGE << 1))>>1;
-
- while (i < MAXWORMHOLE)
- {
- if ((ABS( SolarSystem[Wormhole[i]].X + delta - (eventP->screenX - BOUNDSX) ) <= 1) &&
- (ABS( SolarSystem[Wormhole[i]].Y - (eventP->screenY - BOUNDSY) ) <= 1))
- break;
- ++i;
- }
-
- if (i < MAXWORMHOLE)
- {
- DrawGalaxy(-i-1);
- last = -1;
- handled = true;
- break;
- }
- i = 0;
- while (i < MAXSOLARSYSTEM)
- {
- if ((ABS( SolarSystem[i].X - (eventP->screenX - BOUNDSX) ) <= MINDISTANCE>>1) &&
- (ABS( SolarSystem[i].Y - (eventP->screenY - BOUNDSY) ) <= MINDISTANCE>>1))
- break;
- ++i;
- }
- if (i < MAXSOLARSYSTEM)
- {
- if (i == TrackedSystem)
- {
- StrCopy( SBuf, "Do you wish to stop tracking ");
- StrCat( SBuf, SolarSystemName[i]);
- if (FrmCustomAlert(TrackSystemAlert,SBuf, NULL, NULL) == TrackSystemYes)
- {
- TrackedSystem = -1;
- }
- }
- else if (i == last)
- {
- if (TrackedSystem == -1)
- {
- StrCopy( SBuf, "Do you wish to track ");
- StrCat( SBuf, SolarSystemName[i] );
- }
- else
- {
- StrCopy( SBuf, "Do you wish to stop tracking ");
- StrCat( SBuf, SolarSystemName[TrackedSystem] );
- StrCat( SBuf, ", and track ");
- StrCat( SBuf, SolarSystemName[i] );
- StrCat( SBuf, " instead");
- }
- if (FrmCustomAlert(TrackSystemAlert,SBuf, NULL, NULL) == TrackSystemYes)
- {
- TrackedSystem = i;
- }
- }
- last = i;
- DrawGalaxy( i );
- handled = true;
- break;
- }
-
- }
- break;
- // Find System
- case ctlSelectEvent:
- if (eventP->data.ctlSelect.controlID == GalacticChartSuperWarpButton)
- {
- if (TrackedSystem < 0)
- {
- FrmAlert(NoSystemSelectedAlert);
- return true;
- }
- else if (TrackedSystem == COMMANDER.CurSystem)
- {
- FrmAlert( NoJumpToCurSystemAlert );
- return true;
- }
- else if (FrmCustomAlert(UseSingularityAlert, SolarSystemName[TrackedSystem], " ", " ") == UseSingularityUseSingularity)
- {
- WarpSystem = TrackedSystem;
- CanSuperWarp = false;
- DoWarp(true);
- }
- }
- else if (eventP->data.ctlSelect.controlID == GalacticChartFindButton)
- {
- frm = FrmInitForm( FindSystemForm );
-
- SystemH = (Handle) SetField( frm, FindSystemSystemField, "", NAMELEN+1, true );
-
- d = FrmDoDialog( frm );
- GetField( frm, FindSystemSystemField, SBuf, SystemH );
- if (SBuf[0] == '\0')
- d = FindSystemCancelButton;
- else
- StrCopy( FindSystem, SBuf );
- track = GetCheckBox( frm, FindSystemTrackCheckbox );
- FrmDeleteForm( frm );
- if (d != FindSystemOKButton)
- {
- handled = true;
- break;
- }
- if (StrCompare( FindSystem, "Moolah" ) == 0)
- {
- Credits += 100000;
- }
- else if (StrCompare( FindSystem, "Very rare" ) == 0)
- {
- frm = FrmInitForm( RareCheatForm );
- SetCheckBox( frm, RareCheatMarieCheckbox, VeryRareEncounter & (Byte)ALREADYMARIE );
- SetCheckBox( frm, RareCheatHuieCheckbox, VeryRareEncounter & (Byte)ALREADYHUIE );
- SetCheckBox( frm, RareCheatAhabCheckbox, VeryRareEncounter & (Byte)ALREADYAHAB );
- SetCheckBox( frm, RareCheatConradCheckbox, VeryRareEncounter & (Byte)ALREADYCONRAD );
- SetCheckBox( frm, RareCheatGoodTonicCheckbox, VeryRareEncounter & (Byte)ALREADYBOTTLEGOOD );
- SetCheckBox( frm, RareCheatBadTonicCheckbox, VeryRareEncounter & (Byte)ALREADYBOTTLEOLD );
- StrIToA( SBuf, ChanceOfVeryRareEncounter );
- SystemH = (Handle) SetField( frm, RareCheatChancesField, SBuf, 5, true );
- StrIToA( SBuf, ChanceOfTradeInOrbit );
- SystemH2 = (Handle) SetField( frm, RareCheatTradeField, SBuf, 5, true );
-
- d = FrmDoDialog( frm );
- GetField( frm, RareCheatChancesField, SBuf, SystemH );
- if (SBuf[0] != '\0')
- {
- ChanceOfVeryRareEncounter = StrAToI(SBuf);
- }
- GetField( frm, RareCheatTradeField, SBuf, SystemH2 );
- if (SBuf[0] != '\0')
- {
- ChanceOfTradeInOrbit = StrAToI(SBuf);
- }
-
- VeryRareEncounter = 0;
- if (GetCheckBox( frm, RareCheatMarieCheckbox))
- VeryRareEncounter |= (Byte)ALREADYMARIE;
- if (GetCheckBox( frm, RareCheatHuieCheckbox))
- VeryRareEncounter |= (Byte)ALREADYHUIE;
- if (GetCheckBox( frm, RareCheatAhabCheckbox))
- VeryRareEncounter |= (Byte)ALREADYAHAB;
- if (GetCheckBox( frm, RareCheatConradCheckbox))
- VeryRareEncounter |= (Byte)ALREADYCONRAD;
- if (GetCheckBox( frm, RareCheatGoodTonicCheckbox))
- VeryRareEncounter |= (Byte)ALREADYBOTTLEGOOD;
- if (GetCheckBox( frm, RareCheatBadTonicCheckbox))
- VeryRareEncounter |= (Byte)ALREADYBOTTLEOLD;
-
- FrmDeleteForm( frm );
- }
- else if (StrCompare( FindSystem, "Cheetah" ) == 0)
- {
- CheatCounter = 3;
- }
- else if (StrNCompare(FindSystem,"Go ",3) == 0 && StrLen(FindSystem) > 3 )
- {
- StrCopy(FindSystem, FindSystem+3);
- i = 0;
- while (i < MAXSOLARSYSTEM)
- {
- if (StrCaselessCompare( SolarSystemName[i], FindSystem ) >= 0)
- break;
- ++i;
- }
- if (i < MAXSOLARSYSTEM)
- {
- COMMANDER.CurSystem = i;
- DrawGalaxy( i );
- }
- }
- else if (StrCompare( FindSystem, "Quests" ) == 0)
- {
- frm = FrmInitForm( QuestListForm );
- for (i=0; i<MAXSOLARSYSTEM; ++i)
- {
- if (SolarSystem[i].Special == DRAGONFLY)
- setLabelText( frm, QuestListDragonflyLabel, SolarSystemName[SolarSystem[i].NameIndex] );
- else if (SolarSystem[i].Special == SPACEMONSTER)
- setLabelText( frm, QuestListMonsterLabel, SolarSystemName[SolarSystem[i].NameIndex] );
- else if (SolarSystem[i].Special == JAPORIDISEASE)
- setLabelText( frm, QuestListDiseaseLabel, SolarSystemName[SolarSystem[i].NameIndex] );
- else if (SolarSystem[i].Special == ALIENARTIFACT)
- {
- setLabelText( frm, QuestListArtifactQuestLabel, "Artifact:" );
- setLabelText( frm, QuestListArtifactLabel, SolarSystemName[SolarSystem[i].NameIndex] );
- }
- else if (SolarSystem[i].Special == ARTIFACTDELIVERY && ArtifactOnBoard)
- {
- setLabelText( frm, QuestListArtifactQuestLabel, "Berger:" );
- setLabelText( frm, QuestListArtifactLabel, SolarSystemName[SolarSystem[i].NameIndex] );
- }
- else if (SolarSystem[i].Special == TRIBBLE)
- setLabelText( frm, QuestListTribblesLabel, SolarSystemName[SolarSystem[i].NameIndex] );
- else if (SolarSystem[i].Special == GETREACTOR)
- setLabelText( frm, QuestListReactorLabel, SolarSystemName[SolarSystem[i].NameIndex] );
- else if (SolarSystem[i].Special == AMBASSADORJAREK)
- setLabelText( frm, QuestListJarekLabel, SolarSystemName[SolarSystem[i].NameIndex] );
- else if (SolarSystem[i].Special == ALIENINVASION)
- setLabelText( frm, QuestListInvasionLabel, SolarSystemName[SolarSystem[i].NameIndex] );
- else if (SolarSystem[i].Special == EXPERIMENT)
- setLabelText( frm, QuestListExperimentLabel, SolarSystemName[SolarSystem[i].NameIndex] );
- else if (SolarSystem[i].Special == TRANSPORTWILD)
- setLabelText( frm, QuestListWildLabel, SolarSystemName[SolarSystem[i].NameIndex] );
- else if (SolarSystem[i].Special == SCARAB)
- setLabelText( frm, QuestListScarabLabel, SolarSystemName[SolarSystem[i].NameIndex] );
- else if (SolarSystem[i].Special == SCARABDESTROYED && ScarabStatus > 0 && ScarabStatus < 2)
- setLabelText( frm, QuestListScarabLabel, SolarSystemName[SolarSystem[i].NameIndex] );
- }
- FrmDoDialog( frm );
- FrmDeleteForm( frm );
- }
- #ifdef BETATEST
- else if (StrCompare( FindSystem, "Load" ) == 0)
- #else
- else if (StrCompare( FindSystem, "Timewarp" ) == 0)
- #endif
- {
- DontLoad = false;
- if (!GameLoaded)
- {
- if (FrmAlert( DisableScoringAlert ) != DisableScoringYes)
- DontLoad = true;
- }
- else if (FrmAlert( ReallyLoadAlert ) != ReallyLoadYes)
- DontLoad = true;
- if (!DontLoad)
- {
- if (LoadGame( 1 ))
- {
- GameLoaded = true;
- FrmGotoForm( CurForm );
- }
- }
- }
- else
- {
- i = 0;
- while (i < MAXSOLARSYSTEM)
- {
- if (StrCaselessCompare( SolarSystemName[i], FindSystem ) >= 0)
- break;
- ++i;
- }
- if (i >= MAXSOLARSYSTEM)
- {
- i = COMMANDER.CurSystem;
- }
- else if (track)
- {
- TrackedSystem = i;
- }
- DrawGalaxy( i );
- }
- }
- handled = true;
- break;
- case frmOpenEvent:
- DrawGalaxy( COMMANDER.CurSystem );
- handled = true;
- break;
-
- case frmUpdateEvent:
- DrawGalaxy( COMMANDER.CurSystem );
- handled = true;
- break;
- default:
- break;
- }
-
- return handled;
- }
|