mirror of
https://github.com/videogamepreservation/spacetrader
synced 2025-03-13 00:50:01 +00:00
684 lines
28 KiB
C
684 lines
28 KiB
C
/***********************************************************************
|
|
*
|
|
* SPACE TRADER 1.2.0
|
|
*
|
|
* Global.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.
|
|
*
|
|
**********************************************************************/
|
|
|
|
// Global Variable Storage
|
|
// Define any Global Variable Here and Reference it in external.h
|
|
// Include the external.h file in any new source file to have
|
|
// access to the global variable
|
|
//
|
|
|
|
#define PILOT_PRECOMPILED_HEADERS_OFF 1
|
|
|
|
#include <PalmCompatibility.h>
|
|
#include <PalmOS.h>
|
|
#include "spacetrader.h"
|
|
#include "MerchantRsc.h"
|
|
|
|
const POLICERECORD PoliceRecord[MAXPOLICERECORD] =
|
|
{
|
|
{ "Psycho", -100 },
|
|
{ "Villain", PSYCHOPATHSCORE },
|
|
{ "Criminal", VILLAINSCORE },
|
|
{ "Crook", CRIMINALSCORE },
|
|
{ "Dubious", DUBIOUSSCORE },
|
|
{ "Clean", CLEANSCORE },
|
|
{ "Lawful", LAWFULSCORE },
|
|
{ "Trusted", TRUSTEDSCORE },
|
|
{ "Liked", HELPERSCORE },
|
|
{ "Hero", HEROSCORE }
|
|
};
|
|
|
|
|
|
const REPUTATION Reputation[MAXREPUTATION] =
|
|
{
|
|
{ "Harmless", HARMLESSREP },
|
|
{ "Mostly harmless", MOSTLYHARMLESSREP },
|
|
{ "Poor", POORREP },
|
|
{ "Average", AVERAGESCORE },
|
|
{ "Above average", ABOVEAVERAGESCORE },
|
|
{ "Competent", COMPETENTREP },
|
|
{ "Dangerous", DANGEROUSREP },
|
|
{ "Deadly", DEADLYREP },
|
|
{ "Elite", ELITESCORE }
|
|
};
|
|
|
|
|
|
const char* DifficultyLevel[MAXDIFFICULTY] =
|
|
{
|
|
"Beginner",
|
|
"Easy",
|
|
"Normal",
|
|
"Hard",
|
|
"Impossible"
|
|
};
|
|
|
|
|
|
const char* SpecialResources[MAXRESOURCES] =
|
|
{
|
|
"Nothing special",
|
|
"Mineral rich",
|
|
"Mineral poor",
|
|
"Desert",
|
|
"Sweetwater oceans",
|
|
"Rich soil",
|
|
"Poor soil",
|
|
"Rich fauna",
|
|
"Lifeless",
|
|
"Weird mushrooms",
|
|
"Special herbs",
|
|
"Artistic populace",
|
|
"Warlike populace"
|
|
};
|
|
|
|
|
|
const char* Status[MAXSTATUS] =
|
|
{
|
|
"under no particular pressure", // Uneventful
|
|
"at war", // Ore and Weapons in demand
|
|
"ravaged by a plague", // Medicine in demand
|
|
"suffering from a drought", // Water in demand
|
|
"suffering from extreme boredom", // Games and Narcotics in demand
|
|
"suffering from a cold spell", // Furs in demand
|
|
"suffering from a crop failure", // Food in demand
|
|
"lacking enough workers" // Machinery and Robots in demand
|
|
};
|
|
|
|
|
|
const char* Activity[MAXACTIVITY] =
|
|
{
|
|
"Absent",
|
|
"Minimal",
|
|
"Few",
|
|
"Some",
|
|
"Moderate",
|
|
"Many",
|
|
"Abundant",
|
|
"Swarms"
|
|
};
|
|
|
|
|
|
const TRADEITEM Tradeitem[MAXTRADEITEM] =
|
|
{
|
|
{ "Water", 0, 0, 2, 30, +3, 4, DROUGHT, LOTSOFWATER, DESERT, 30, 50, 1 },
|
|
{ "Furs", 0, 0, 0, 250, +10, 10, COLD, RICHFAUNA, LIFELESS, 230, 280, 5 },
|
|
{ "Food", 1, 0, 1, 100, +5, 5, CROPFAILURE, RICHSOIL, POORSOIL, 90, 160, 5 },
|
|
{ "Ore", 2, 2, 3, 350, +20, 10, WAR, MINERALRICH, MINERALPOOR, 350, 420, 10 },
|
|
{ "Games", 3, 1, 6, 250, -10, 5, BOREDOM, ARTISTIC, -1, 160, 270, 5 },
|
|
{ "Firearms", 3, 1, 5, 1250, -75, 100, WAR, WARLIKE, -1, 600, 1100, 25 },
|
|
{ "Medicine", 4, 1, 6, 650, -20, 10, PLAGUE, LOTSOFHERBS, -1, 400, 700, 25 },
|
|
{ "Machines", 4, 3, 5, 900, -30, 5, LACKOFWORKERS, -1, -1, 600, 800, 25 },
|
|
{ "Narcotics", 5, 0, 5, 3500, -125, 150, BOREDOM, WEIRDMUSHROOMS, -1, 2000, 3000, 50 },
|
|
{ "Robots", 6, 4, 7, 5000, -150, 100, LACKOFWORKERS, -1, -1, 3500, 5000, 100 }
|
|
};
|
|
|
|
|
|
char NameCommander[NAMELEN+1] = "Jameson";
|
|
|
|
char* MercenaryName[MAXCREWMEMBER] =
|
|
{
|
|
NameCommander,
|
|
"Alyssa",
|
|
"Armatur",
|
|
"Bentos",
|
|
"C2U2",
|
|
"Chi'Ti",
|
|
"Crystal",
|
|
"Dane",
|
|
"Deirdre",
|
|
"Doc",
|
|
"Draco",
|
|
"Iranda",
|
|
"Jeremiah",
|
|
"Jujubal",
|
|
"Krydon",
|
|
"Luis",
|
|
"Mercedez",
|
|
"Milete",
|
|
"Muri-L",
|
|
"Mystyc",
|
|
"Nandi",
|
|
"Orestes",
|
|
"Pancho",
|
|
"PS37",
|
|
"Quarck",
|
|
"Sosumi",
|
|
"Uma",
|
|
"Wesley",
|
|
"Wonton",
|
|
"Yorvick",
|
|
"Zeethibal" // anagram for Elizabeth
|
|
};
|
|
|
|
CREWMEMBER Mercenary[MAXCREWMEMBER + 1];
|
|
|
|
|
|
const SHIPTYPE Shiptype[MAXSHIPTYPE+EXTRASHIPS] =
|
|
{
|
|
{ "Flea", 10, 0, 0, 0, 1, MAXRANGE, 4, 1, 2000, 5, 2, 25, -1, -1, 0, 1, 0 },
|
|
{ "Gnat", 15, 1, 0, 1, 1, 14, 5, 2, 10000, 50, 28, 100, 0, 0, 0, 1, 1 },
|
|
{ "Firefly", 20, 1, 1, 1, 1, 17, 5, 3, 25000, 75, 20, 100, 0, 0, 0, 1, 1 },
|
|
{ "Mosquito", 15, 2, 1, 1, 1, 13, 5, 5, 30000, 100, 20, 100, 0, 1, 0, 1, 1 },
|
|
{ "Bumblebee", 25, 1, 2, 2, 2, 15, 5, 7, 60000, 125, 15, 100, 1, 1, 0, 1, 2 },
|
|
{ "Beetle", 50, 0, 1, 1, 3, 14, 5, 10, 80000, 50, 3, 50, -1, -1, 0, 1, 2 },
|
|
{ "Hornet", 20, 3, 2, 1, 2, 16, 6, 15, 100000, 200, 6, 150, 2, 3, 1, 2, 3 },
|
|
{ "Grasshopper", 30, 2, 2, 3, 3, 15, 6, 15, 150000, 300, 2, 150, 3, 4, 2, 3, 3 },
|
|
{ "Termite", 60, 1, 3, 2, 3, 13, 7, 20, 225000, 300, 2, 200, 4, 5, 3, 4, 4 },
|
|
{ "Wasp", 35, 3, 2, 2, 3, 14, 7, 20, 300000, 500, 2, 200, 5, 6, 4, 5, 4 },
|
|
// The ships below can't be bought
|
|
{ "Space monster", 0, 3, 0, 0, 1, 1, 8, 1, 500000, 0, 0, 500, 8, 8, 8, 1, 4 },
|
|
{ "Dragonfly", 0, 2, 3, 2, 1, 1, 8, 1, 500000, 0, 0, 10, 8, 8, 8, 1, 1 },
|
|
{ "Mantis", 0, 3, 1, 3, 3, 1, 8, 1, 500000, 0, 0, 300, 8, 8, 8, 1, 2 },
|
|
{ "Scarab", 20, 2, 0, 0, 2, 1, 8, 1, 500000, 0, 0, 400, 8, 8, 8, 1, 3 },
|
|
{ "Bottle", 0, 0, 0, 0, 0, 1, 8, 1, 100, 0, 0, 10, 8, 8, 8, 1, 1 }
|
|
};
|
|
|
|
|
|
const WEAPON Weapontype[MAXWEAPONTYPE+EXTRAWEAPONS] =
|
|
{
|
|
{ "Pulse laser", PULSELASERPOWER, 2000, 5, 50 },
|
|
{ "Beam laser", BEAMLASERPOWER, 12500, 6, 35 },
|
|
{ "Military laser", MILITARYLASERPOWER, 35000, 7, 15 },
|
|
// The weapons below cannot be bought
|
|
{ "Morgan's laser", MORGANLASERPOWER, 50000, 8, 0 }
|
|
};
|
|
|
|
|
|
const SHIELD Shieldtype[MAXSHIELDTYPE+EXTRASHIELDS] =
|
|
{
|
|
{ "Energy shield", ESHIELDPOWER, 5000, 5, 70 },
|
|
{ "Reflective shield", RSHIELDPOWER, 20000, 6, 30 },
|
|
// The shields below can't be bought
|
|
{ "Lightning shield", LSHIELDPOWER, 45000, 8, 0 }
|
|
};
|
|
|
|
|
|
const GADGET Gadgettype[MAXGADGETTYPE+EXTRAGADGETS] =
|
|
{
|
|
{ "5 extra cargo bays", 2500, 4, 35 }, // 5 extra holds
|
|
{ "Auto-repair system", 7500, 5, 20 }, // Increases engineer's effectivity
|
|
{ "Navigating system", 15000, 6, 20 }, // Increases pilot's effectivity
|
|
{ "Targeting system", 25000, 6, 20 }, // Increases fighter's effectivity
|
|
{ "Cloaking device", 100000, 7, 5 }, // If you have a good engineer, nor pirates nor police will notice you
|
|
// The gadgets below can't be bought
|
|
{ "Fuel compactor", 30000, 8, 0 }
|
|
};
|
|
|
|
|
|
// Note that these initializations are overruled by the StartNewGame function
|
|
SHIP Ship =
|
|
{
|
|
1, // Gnat
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // No cargo
|
|
{ 0, -1, -1 }, // One pulse laser
|
|
{ -1, -1, -1 },{ 0,0,0 }, // No shields
|
|
{ -1, -1, -1 }, // No gadgets
|
|
{ 0, -1, -1 }, // Commander on board
|
|
14, // Full tank
|
|
100, // Full hull strength
|
|
0, // No tribbles on board
|
|
{ 0, 0, 0, 0 } // For future use
|
|
};
|
|
|
|
SHIP Opponent =
|
|
{
|
|
1, // Gnat
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // No cargo
|
|
{ 0, -1, -1 }, // One pulse laser
|
|
{ -1, -1, -1 }, { 0, 0, 0 }, // No shields
|
|
{ -1, -1, -1 }, // No gadgets
|
|
{ 1, -1, -1 }, // Alyssa on board
|
|
14, // Full tank
|
|
100, // Full hull strength
|
|
0, // No tribbles on board
|
|
{ 0, 0, 0, 0 } // For future use
|
|
};
|
|
|
|
|
|
SHIP SpaceMonster =
|
|
{
|
|
MAXSHIPTYPE, // Space monster
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // No cargo
|
|
{ 2, 2, 2 }, // Three military lasers
|
|
{ -1, -1, -1 }, { 0, 0, 0 }, // No shields
|
|
{ -1, -1, -1 }, // No gadgets
|
|
{ MAXCREWMEMBER, -1, -1 }, // super stats
|
|
1, // Full tank
|
|
500, // Full hull strength
|
|
0, // No tribbles on board
|
|
{ 0, 0, 0, 0 } // For future use
|
|
};
|
|
|
|
SHIP Scarab =
|
|
{
|
|
MAXSHIPTYPE+3, // Scarab
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // No cargo
|
|
{ 2, 2, -1 }, // Two military lasers
|
|
{ -1, -1, -1 }, { 0, 0, 0 }, // No shields
|
|
{ -1, -1, -1 }, // No gadgets
|
|
{ MAXCREWMEMBER, -1, -1 }, // super stats
|
|
1, // Full tank
|
|
400, // Full hull strength
|
|
0, // No tribbles on board
|
|
{ 0, 0, 0, 0 } // For future use
|
|
};
|
|
|
|
SHIP Dragonfly =
|
|
{
|
|
MAXSHIPTYPE+1, // Dragonfly
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // No cargo
|
|
{ 2, 0, -1 }, // One military laser and one pulse laser
|
|
{ LIGHTNINGSHIELD, LIGHTNINGSHIELD, LIGHTNINGSHIELD }, // Three lightning shields
|
|
{ LSHIELDPOWER, LSHIELDPOWER, LSHIELDPOWER },
|
|
{ AUTOREPAIRSYSTEM, TARGETINGSYSTEM, -1 }, // Gadgets
|
|
{ MAXCREWMEMBER, -1, -1 }, // super stats
|
|
1, // Full tank
|
|
10, // Full hull strength (though this isn't much)
|
|
0, // No tribbles on board
|
|
{ 0, 0, 0, 0 } // For future use
|
|
};
|
|
|
|
|
|
const char* SystemSize[MAXSIZE] =
|
|
{
|
|
"Tiny",
|
|
"Small",
|
|
"Medium",
|
|
"Large",
|
|
"Huge"
|
|
};
|
|
|
|
|
|
const char* TechLevel[MAXTECHLEVEL] =
|
|
{
|
|
"Pre-agricultural",
|
|
"Agricultural",
|
|
"Medieval",
|
|
"Renaissance",
|
|
"Early Industrial",
|
|
"Industrial",
|
|
"Post-industrial",
|
|
"Hi-tech"
|
|
};
|
|
|
|
|
|
const POLITICS Politics[MAXPOLITICS] =
|
|
{
|
|
{ "Anarchy", 0, 0, 7, 1, 0, 5, 7, true, true, FOOD },
|
|
{ "Capitalist State", 2, 3, 2, 7, 4, 7, 1, true, true, ORE },
|
|
{ "Communist State", 6, 6, 4, 4, 1, 5, 5, true, true, -1 },
|
|
{ "Confederacy", 5, 4, 3, 5, 1, 6, 3, true, true, GAMES },
|
|
{ "Corporate State", 2, 6, 2, 7, 4, 7, 2, true, true, ROBOTS },
|
|
{ "Cybernetic State", 0, 7, 7, 5, 6, 7, 0, false, false, ORE },
|
|
{ "Democracy", 4, 3, 2, 5, 3, 7, 2, true, true, GAMES },
|
|
{ "Dictatorship", 3, 4, 5, 3, 0, 7, 2, true, true, -1 },
|
|
{ "Fascist State", 7, 7, 7, 1, 4, 7, 0, false, true, MACHINERY },
|
|
{ "Feudal State", 1, 1, 6, 2, 0, 3, 6, true, true, FIREARMS },
|
|
{ "Military State", 7, 7, 0, 6, 2, 7, 0, false, true, ROBOTS },
|
|
{ "Monarchy", 3, 4, 3, 4, 0, 5, 4, true, true, MEDICINE },
|
|
{ "Pacifist State", 7, 2, 1, 5, 0, 3, 1, true, false, -1 },
|
|
{ "Socialist State", 4, 2, 5, 3, 0, 5, 6, true, true, -1 },
|
|
{ "State of Satori", 0, 1, 1, 1, 0, 1, 0, false, false, -1 },
|
|
{ "Technocracy", 1, 6, 3, 6, 4, 7, 2, true, true, WATER },
|
|
{ "Theocracy", 5, 6, 1, 4, 0, 4, 0, true, true, NARCOTICS }
|
|
};
|
|
|
|
// Many of these names are from Star Trek: The Next Generation, or are small changes
|
|
// to names of this series. A few have different origins.
|
|
const char* SolarSystemName[MAXSOLARSYSTEM] =
|
|
{
|
|
"Acamar",
|
|
"Adahn", // The alternate personality for The Nameless One in "Planescape: Torment"
|
|
"Aldea",
|
|
"Andevian",
|
|
"Antedi",
|
|
"Balosnee",
|
|
"Baratas",
|
|
"Brax", // One of the heroes in Master of Magic
|
|
"Bretel", // This is a Dutch device for keeping your pants up.
|
|
"Calondia",
|
|
"Campor",
|
|
"Capelle", // The city I lived in while programming this game
|
|
"Carzon",
|
|
"Castor", // A Greek demi-god
|
|
"Cestus",
|
|
"Cheron",
|
|
"Courteney", // After Courteney Cox...
|
|
"Daled",
|
|
"Damast",
|
|
"Davlos",
|
|
"Deneb",
|
|
"Deneva",
|
|
"Devidia",
|
|
"Draylon",
|
|
"Drema",
|
|
"Endor",
|
|
"Esmee", // One of the witches in Pratchett's Discworld
|
|
"Exo",
|
|
"Ferris", // Iron
|
|
"Festen", // A great Scandinavian movie
|
|
"Fourmi", // An ant, in French
|
|
"Frolix", // A solar system in one of Philip K. Dick's novels
|
|
"Gemulon",
|
|
"Guinifer", // One way of writing the name of king Arthur's wife
|
|
"Hades", // The underworld
|
|
"Hamlet", // From Shakespeare
|
|
"Helena", // Of Troy
|
|
"Hulst", // A Dutch plant
|
|
"Iodine", // An element
|
|
"Iralius",
|
|
"Janus", // A seldom encountered Dutch boy's name
|
|
"Japori",
|
|
"Jarada",
|
|
"Jason", // A Greek hero
|
|
"Kaylon",
|
|
"Khefka",
|
|
"Kira", // My dog's name
|
|
"Klaatu", // From a classic SF movie
|
|
"Klaestron",
|
|
"Korma", // An Indian sauce
|
|
"Kravat", // Interesting spelling of the French word for "tie"
|
|
"Krios",
|
|
"Laertes", // A king in a Greek tragedy
|
|
"Largo",
|
|
"Lave", // The starting system in Elite
|
|
"Ligon",
|
|
"Lowry", // The name of the "hero" in Terry Gilliam's "Brazil"
|
|
"Magrat", // The second of the witches in Pratchett's Discworld
|
|
"Malcoria",
|
|
"Melina",
|
|
"Mentar", // The Psilon home system in Master of Orion
|
|
"Merik",
|
|
"Mintaka",
|
|
"Montor", // A city in Ultima III and Ultima VII part 2
|
|
"Mordan",
|
|
"Myrthe", // The name of my daughter
|
|
"Nelvana",
|
|
"Nix", // An interesting spelling of a word meaning "nothing" in Dutch
|
|
"Nyle", // An interesting spelling of the great river
|
|
"Odet",
|
|
"Og", // The last of the witches in Pratchett's Discworld
|
|
"Omega", // The end of it all
|
|
"Omphalos", // Greek for navel
|
|
"Orias",
|
|
"Othello", // From Shakespeare
|
|
"Parade", // This word means the same in Dutch and in English
|
|
"Penthara",
|
|
"Picard", // The enigmatic captain from ST:TNG
|
|
"Pollux", // Brother of Castor
|
|
"Quator",
|
|
"Rakhar",
|
|
"Ran", // A film by Akira Kurosawa
|
|
"Regulas",
|
|
"Relva",
|
|
"Rhymus",
|
|
"Rochani",
|
|
"Rubicum", // The river Ceasar crossed to get into Rome
|
|
"Rutia",
|
|
"Sarpeidon",
|
|
"Sefalla",
|
|
"Seltrice",
|
|
"Sigma",
|
|
"Sol", // That's our own solar system
|
|
"Somari",
|
|
"Stakoron",
|
|
"Styris",
|
|
"Talani",
|
|
"Tamus",
|
|
"Tantalos", // A king from a Greek tragedy
|
|
"Tanuga",
|
|
"Tarchannen",
|
|
"Terosa",
|
|
"Thera", // A seldom encountered Dutch girl's name
|
|
"Titan", // The largest moon of Jupiter
|
|
"Torin", // A hero from Master of Magic
|
|
"Triacus",
|
|
"Turkana",
|
|
"Tyrus",
|
|
"Umberlee", // A god from AD&D, which has a prominent role in Baldur's Gate
|
|
"Utopia", // The ultimate goal
|
|
"Vadera",
|
|
"Vagra",
|
|
"Vandor",
|
|
"Ventax",
|
|
"Xenon",
|
|
"Xerxes", // A Greek hero
|
|
"Yew", // A city which is in almost all of the Ultima games
|
|
"Yojimbo", // A film by Akira Kurosawa
|
|
"Zalkon",
|
|
"Zuul" // From the first Ghostbusters movie
|
|
};
|
|
|
|
|
|
SOLARSYSTEM SolarSystem[MAXSOLARSYSTEM];
|
|
|
|
|
|
Byte Wormhole[MAXWORMHOLE]; // Systems which have a wormhole
|
|
|
|
// Quest descriptions have been moved into the Resources.
|
|
// This makes them marginally easier to edit, as well as moves them out
|
|
// of the heap during runtime. SjG
|
|
const SPECIALEVENT SpecialEvent[MAXSPECIALEVENT] =
|
|
{
|
|
{ "Dragonfly Destroyed", QuestDragonflyDestroyedString, 0, 0, true },
|
|
{ "Weird Ship", QuestWeirdShipString, 0, 0, true },
|
|
{ "Lightning Ship", QuestLightningShipString, 0, 0, true },
|
|
{ "Strange Ship", QuestStrangeShipString, 0, 0, true },
|
|
{ "Monster Killed", QuestMonsterKilledString, -15000, 0, true },
|
|
{ "Medicine Delivery", QuestMedicineDeliveredString, 0, 0, true },
|
|
{ "Retirement", QuestRetirementString, 0, 0, false },
|
|
{ "Moon For Sale", QuestMoonForSaleString, COSTMOON, 4, false },
|
|
{ "Skill Increase", QuestSkillIncreaseString, 3000, 3, false },
|
|
{ "Merchant Prince", QuestMerchantPrinceString, 1000, 1, false },
|
|
{ "Erase Record", QuestEraseRecordString, 5000, 3, false },
|
|
{ "Tribble Buyer", QuestTribbleBuyerString, 0, 3, false },
|
|
{ "Space Monster", QuestSpaceMonsterString, 0, 1, true },
|
|
{ "Dragonfly", QuestDragonflyString, 0, 1, true },
|
|
{ "Cargo For Sale", QuestCargoForSaleString, 1000, 3, false },
|
|
{ "Lightning Shield", QuestLightningShieldString, 0, 0, false },
|
|
{ "Japori Disease", QuestJaporiDiseaseString, 0, 1, false },
|
|
{ "Lottery Winner", QuestLotteryWinnerString, -1000, 0, true },
|
|
{ "Artifact Delivery", QuestArtifactDeliveryString, -20000, 0, true },
|
|
{ "Alien Artifact", QuestAlienArtifactString, 0, 1, false },
|
|
{ "Ambassador Jarek", QuestAmbassadorJarekString, 0, 1, false },
|
|
{ "Alien Invasion", QuestAlienInvasionString, 0, 0, true },
|
|
{ "Gemulon Invaded", QuestGemulonInvadedString, 0, 0, true },
|
|
{ "Fuel Compactor", QuestFuelCompactorString, 0, 0, false },
|
|
{ "Dangerous Experiment", QuestDangerousExperimentString, 0, 0, true },
|
|
{ "Jonathan Wild", QuestJonathanWildString, 0, 1, false },
|
|
{ "Morgan's Reactor", QuestMorgansReactorString, 0, 0, false },
|
|
{ "Install Morgan's Laser", QuestInstallMorgansLaserString, 0, 0, false },
|
|
{ "Scarab Stolen", QuestScarabStolenString, 0, 1, true},
|
|
{ "Upgrade Hull", QuestUpgradeHullString, 0, 0, false},
|
|
{ "Scarab Destroyed", QuestScarabDestroyedString, 0, 0, true},
|
|
{ "Reactor Delivered", QuestReactorDeliveredString, 0, 0, true },
|
|
{ "Jarek Gets Out", QuestJarekGetsOutString, 0, 0, true },
|
|
{ "Gemulon Rescued", QuestGemulonRescuedString, 0, 0, true },
|
|
{ "Disaster Averted", QuestDisasterAvertedString, 0, 0, true },
|
|
{ "Experiment Failed", QuestExperimentFailedString, 0, 0, true },
|
|
{ "Wild Gets Out", QuestWildGetsOutString, 0, 0, true }
|
|
|
|
};
|
|
|
|
const char *Shortcuts[11] = {
|
|
"B","S","Y","E","Q","P","K","I","C","G","W"
|
|
};
|
|
|
|
int ShortcutTarget[11] = {
|
|
MenuCommandBuyCargo,
|
|
MenuCommandSellCargo,
|
|
MenuCommandShipYard,
|
|
MenuCommandBuyEquipment,
|
|
MenuCommandSellEquipment,
|
|
MenuCommandPersonnelRoster,
|
|
MenuCommandBank,
|
|
MenuCommandSystemInformation,
|
|
MenuCommandCommanderStatus,
|
|
MenuCommandGalacticChart,
|
|
MenuCommandShortRangeChart
|
|
};
|
|
|
|
// increased from 51 to 128 to handle the needs of the Newspaper, and various
|
|
// quest messages stored in String Resources
|
|
char SBuf[128];
|
|
char SBuf2[51];
|
|
|
|
//int NewsEvents[MAXSPECIALNEWSEVENTS];
|
|
|
|
|
|
Handle SystemBmp;
|
|
Handle CurrentSystemBmp;
|
|
Handle ShortRangeSystemBmp;
|
|
Handle WormholeBmp;
|
|
Handle SmallWormholeBmp;
|
|
Handle VisitedSystemBmp;
|
|
Handle CurrentVisitedSystemBmp;
|
|
Handle VisitedShortRangeSystemBmp;
|
|
Handle ShipBmp[MAXSHIPTYPE+EXTRASHIPS];
|
|
Handle DamagedShipBmp[MAXSHIPTYPE+EXTRASHIPS];
|
|
Handle ShieldedShipBmp[MAXSHIPTYPE+EXTRASHIPS];
|
|
Handle DamagedShieldedShipBmp[MAXSHIPTYPE+EXTRASHIPS];
|
|
Handle IconBmp[5];
|
|
BitmapPtr SystemBmpPtr;
|
|
BitmapPtr CurrentSystemBmpPtr;
|
|
BitmapPtr ShortRangeSystemBmpPtr;
|
|
BitmapPtr WormholeBmpPtr;
|
|
BitmapPtr SmallWormholeBmpPtr;
|
|
BitmapPtr VisitedSystemBmpPtr;
|
|
BitmapPtr CurrentVisitedSystemBmpPtr;
|
|
BitmapPtr VisitedShortRangeSystemBmpPtr;
|
|
BitmapPtr ShipBmpPtr[MAXSHIPTYPE+EXTRASHIPS];
|
|
BitmapPtr DamagedShipBmpPtr[MAXSHIPTYPE+EXTRASHIPS];
|
|
BitmapPtr ShieldedShipBmpPtr[MAXSHIPTYPE+EXTRASHIPS];
|
|
BitmapPtr DamagedShieldedShipBmpPtr[MAXSHIPTYPE+EXTRASHIPS];
|
|
BitmapPtr IconBmpPtr[5];
|
|
|
|
unsigned long GalacticChartUpdateTicks = 0;
|
|
Handle NameH;
|
|
//DmOpenRef pmDB;
|
|
|
|
// The following globals are saved between sessions
|
|
// Note that these initializations are overruled by the StartNewGame function
|
|
long Credits = 1000; // Current credits owned
|
|
long Debt = 0; // Current Debt
|
|
long BuyPrice[MAXTRADEITEM]; // Price list current system
|
|
long BuyingPrice[MAXTRADEITEM]; // Total price paid for trade goods
|
|
long SellPrice[MAXTRADEITEM]; // Price list current system
|
|
long ShipPrice[MAXSHIPTYPE]; // Price list current system (recalculate when buy ship screen is entered)
|
|
long PoliceKills = 0; // Number of police ships killed
|
|
long TraderKills = 0; // Number of trader ships killed
|
|
long PirateKills = 0; // Number of pirate ships killed
|
|
long PoliceRecordScore = 0; // 0 = Clean record
|
|
long ReputationScore = 0; // 0 = Harmless
|
|
long MonsterHull = 500; // Hull strength of monster
|
|
|
|
int Days = 0; // Number of days playing
|
|
int WarpSystem = 0; // Target system for warp
|
|
int SelectedShipType = 0; // Selected Ship type for Shiptype Info screen
|
|
int CheatCounter = 0;
|
|
int GalacticChartSystem = 0; // Current system on Galactic chart
|
|
int EncounterType = 0; // Type of current encounter
|
|
int CurForm = 0; // Form to return to
|
|
int NoClaim = 0; // Days of No-Claim
|
|
int LeaveEmpty = 0; // Number of cargo bays to leave empty when buying goods
|
|
int NewsSpecialEventCount = 0; // Simplifies tracking what Quests have just been initiated or completed for the News System. This is not important enough to get saved.
|
|
int TrackedSystem = -1; // The short-range chart will display an arrow towards this system if the value is not -1
|
|
|
|
int Shortcut1 = 0; // default shortcut 1 = Buy Cargo
|
|
int Shortcut2 = 1; // default shortcut 2 = Sell Cargo
|
|
int Shortcut3 = 2; // default shortcut 3 = Shipyard
|
|
int Shortcut4 = 10; // default shortcut 4 = Short Range Warp
|
|
|
|
|
|
// the next two values are NOT saved between sessions -- they can only be changed via cheats.
|
|
int ChanceOfVeryRareEncounter = CHANCEOFVERYRAREENCOUNTER;
|
|
int ChanceOfTradeInOrbit = CHANCEOFTRADEINORBIT;
|
|
|
|
Byte MonsterStatus = 0; // 0 = Space monster isn't available, 1 = Space monster is in Acamar system, 2 = Space monster is destroyed
|
|
Byte DragonflyStatus = 0; // 0 = Dragonfly not available, 1 = Go to Baratas, 2 = Go to Melina, 3 = Go to Regulas, 4 = Go to Zalkon, 5 = Dragonfly destroyed
|
|
Byte JaporiDiseaseStatus = 0; // 0 = No disease, 1 = Go to Japori (always at least 10 medicine cannisters), 2 = Assignment finished or canceled
|
|
Byte Difficulty = NORMAL; // Difficulty level
|
|
Byte JarekStatus = 0; // Ambassador Jarek 0=not delivered; 1=on board; 2=delivered
|
|
Byte InvasionStatus = 0; // Status Alien invasion of Gemulon; 0=not given yet; 1-7=days from start; 8=too late
|
|
Byte ExperimentStatus = 0; // Experiment; 0=not given yet,1-11 days from start; 12=performed, 13=cancelled
|
|
Byte FabricRipProbability = 0; // if Experiment = 8, this is the probability of being warped to a random planet.
|
|
Byte VeryRareEncounter = 0; // bit map for which Very Rare Encounter(s) have taken place (see traveler.c, around line 1850)
|
|
Byte WildStatus = 0; // Jonathan Wild: 0=not delivered; 1=on board; 2=delivered
|
|
Byte ReactorStatus = 0; // Unstable Reactor Status: 0=not encountered; 1-20=days of mission (bays of fuel left = 10 - (ReactorStatus/2); 21=delivered
|
|
Byte ScarabStatus = 0; // Scarab: 0=not given yet, 1=not destroyed, 2=destroyed, upgrade not performed, 3=destroyed, hull upgrade performed
|
|
|
|
Boolean AutoFuel = false; // Automatically get a full tank when arriving in a new system
|
|
Boolean AutoRepair = false; // Automatically get a full hull repair when arriving in a new system
|
|
Boolean Clicks = 0; // Distance from target system, 0 = arrived
|
|
Boolean Raided = false; // True when the commander has been raided during the trip
|
|
Boolean Inspected = false; // True when the commander has been inspected during the trip
|
|
Boolean MoonBought = false; // Indicates whether a moon is available at Utopia
|
|
Boolean EscapePod = false; // Escape Pod in ship
|
|
Boolean Insurance = false; // Insurance bought
|
|
Boolean AlwaysIgnoreTraders = false; // Automatically ignores traders when it is safe to do so
|
|
Boolean AlwaysIgnorePolice = true; // Automatically ignores police when it is safe to do so
|
|
Boolean AlwaysIgnorePirates = false; // Automatically ignores pirates when it is safe to do so
|
|
Boolean AlwaysIgnoreTradeInOrbit = false; // Automatically ignores Trade in Orbit when it is safe to do so
|
|
Boolean ArtifactOnBoard = false; // Alien artifact on board
|
|
Boolean ReserveMoney = false; // Keep enough money for insurance and mercenaries
|
|
Boolean PriceDifferences = false; // Show price differences instead of absolute prices
|
|
Boolean APLscreen = false; // Is true is the APL screen was last shown after the SRC
|
|
Boolean TribbleMessage = false; // Is true if the Ship Yard on the current system informed you about the tribbles
|
|
Boolean AlwaysInfo = false; // Will always go from SRC to Info
|
|
Boolean TextualEncounters = false; // Show encounters as text.
|
|
Boolean AutoAttack = false; // Auto-attack mode
|
|
Boolean AutoFlee = false; // Auto-flee mode
|
|
Boolean Continuous = false; // Continuous attack/flee mode
|
|
Boolean AttackIconStatus = false; // Show Attack Star or not
|
|
Boolean AttackFleeing = false; // Continue attack on fleeing ship
|
|
Boolean PossibleToGoThroughRip = false; // if Dr Fehler's experiment happened, we can only go through one space-time rip per warp.
|
|
Boolean UseHWButtons = false; // by default, don't use Hardware W buttons
|
|
Boolean NewsAutoPay = false; // by default, ask each time someone buys a newspaper
|
|
Boolean ShowTrackedRange = true; // display range when tracking a system on Short Range Chart
|
|
Boolean JustLootedMarie = 0; // flag to indicate whether player looted Marie Celeste
|
|
Boolean ArrivedViaWormhole = false; // flag to indicate whether player arrived on current planet via wormhole
|
|
Boolean AlreadyPaidForNewspaper = false; // once you buy a paper on a system, you don't have to pay again.
|
|
Boolean TrackAutoOff = true; // Automatically stop tracking a system when you get to it?
|
|
Boolean RemindLoans = true; // remind you every five days about outstanding loan balances
|
|
Boolean CanSuperWarp = false; // Do you have the Portable Singularity on board?
|
|
Boolean GameLoaded = false; // Indicates whether a game is loaded
|
|
Boolean LitterWarning = false; // Warning against littering has been issued.
|
|
Boolean SharePreferences = true; // Share preferences between switched games.
|
|
Boolean IdentifyStartup = false; // Identify commander at game start
|
|
Boolean RectangularButtonsOn = false; // Indicates on OS 5.0 and higher whether rectangular buttons should be used.
|
|
|
|
HIGHSCORE Hscores[MAXHIGHSCORE];
|
|
|
|
DWord romVersion;
|
|
|